[kodi-pvr-argustv] First import
by Mohamed ElMorabity
commit 585f6d6e49a6e08a8279e73cece188fd288df809
Author: Mohamed El Morabity <melmorabity(a)fedoraproject.org>
Date: Mon Oct 2 21:42:47 2017 +0200
First import
.gitignore | 1 +
gpl-2.0.txt | 339 +++++++++++++++++++++++++++++++++++
kodi-pvr-argustv-2.5.6-jsoncpp.patch | 12 ++
kodi-pvr-argustv.spec | 70 ++++++++
sources | 1 +
5 files changed, 423 insertions(+)
---
diff --git a/.gitignore b/.gitignore
index e69de29..11ac2b0 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/kodi-pvr-argustv-9040b14.tar.gz
diff --git a/gpl-2.0.txt b/gpl-2.0.txt
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/gpl-2.0.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/kodi-pvr-argustv-2.5.6-jsoncpp.patch b/kodi-pvr-argustv-2.5.6-jsoncpp.patch
new file mode 100644
index 0000000..5b521bd
--- /dev/null
+++ b/kodi-pvr-argustv-2.5.6-jsoncpp.patch
@@ -0,0 +1,12 @@
+diff -up ./CMakeLists.txt.orig ./CMakeLists.txt
+--- ./CMakeLists.txt.orig 2017-03-24 21:31:17.000000000 +0100
++++ ./CMakeLists.txt 2017-04-29 02:36:13.904422888 +0200
+@@ -68,7 +68,7 @@ list(APPEND ARGUSTV_SOURCES ${ARGUSTV_HE
+
+ set(DEPLIBS ${p8-platform_LIBRARIES} tsreader)
+
+-find_package(JsonCpp REQUIRED)
++find_package(jsoncpp REQUIRED)
+ list(APPEND DEPLIBS ${JSONCPP_LIBRARIES})
+ list(APPEND INCLUDES ${JSONCPP_INCLUDE_DIRS})
+
diff --git a/kodi-pvr-argustv.spec b/kodi-pvr-argustv.spec
new file mode 100644
index 0000000..0173e58
--- /dev/null
+++ b/kodi-pvr-argustv.spec
@@ -0,0 +1,70 @@
+%global commit 9040b1447bd622bcbae3f8944e7b84d933037644
+%global short_commit %(c=%{commit}; echo ${c:0:7})
+%global commit_date 20170324
+
+%global kodi_addon pvr.argustv
+%global kodi_version 17.0
+
+Name: kodi-%(tr "." "-" <<<%{kodi_addon})
+# Use Epoch to manage upgrades from older upstream
+# (https://github.com/opdenkamp/xbmc-pvr-addons/)
+Epoch: 1
+Version: 2.5.6
+Release: 1%{?dist}
+Summary: Kodi's ARGUS TV client addon
+
+Group: Applications/Multimedia
+License: GPLv2+
+URL: https://github.com/kodi-pvr/%{kodi_addon}/
+Source0: https://github.com/kodi-pvr/%{kodi_addon}/archive/%{short_commit}/%{name}...
+# GPLv2 license file
+Source1: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+# Fix jsoncpp library detection
+Patch1: %{name}-2.5.6-jsoncpp.patch
+
+BuildRequires: cmake
+BuildRequires: gcc-c++
+BuildRequires: jsoncpp-devel
+BuildRequires: kodi-devel >= %{kodi_version}
+BuildRequires: kodi-platform-devel >= %{kodi_version}
+BuildRequires: platform-devel
+Requires: kodi >= %{kodi_version}
+ExclusiveArch: i686 x86_64
+
+%description
+Kodi frontend for the ARGUS TV PVR (http://www.argus-tv.com/). Supports
+streaming of live TV & recordings, listening to radio channels, EPG and
+schedules.
+
+
+%prep
+%autosetup -n %{kodi_addon}-%{commit}
+
+cp -p %{SOURCE1} .
+
+
+%build
+%cmake -DCMAKE_INSTALL_LIBDIR=%{_libdir}/kodi/ .
+%make_build
+
+
+%install
+%make_install
+
+
+%files
+%doc README.md %{kodi_addon}/changelog.txt
+%license gpl-2.0.txt
+%{_libdir}/kodi/addons/%{kodi_addon}/
+%{_datadir}/kodi/addons/%{kodi_addon}/
+
+
+%changelog
+* Sat Apr 29 2017 Mohamed El Morabity <melmorabity(a)fedorapeople.org> - 1:2.5.6-1
+- Update to latest stable release for Kodi 17
+
+* Sun Jul 24 2016 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.11.15-1
+- Update to latest stable release for Kodi 16
+
+* Mon Aug 24 2015 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.10.11-1
+- Initial RPM release
diff --git a/sources b/sources
index e69de29..ea52649 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+7c0aa2908032f92102831b3e24685485 kodi-pvr-argustv-9040b14.tar.gz
7 years, 1 month
[kodi-pvr-demo/f25] Update to 2.4.8
by Mohamed ElMorabity
commit f0b063819fe13d800bcff6c125e3ae82dc1d040c
Author: Mohamed El Morabity <melmorabity(a)fedoraproject.org>
Date: Mon Oct 2 21:32:21 2017 +0200
Update to 2.4.8
.gitignore | 2 ++
kodi-pvr-demo.spec | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
sources | 1 +
3 files changed, 71 insertions(+)
---
diff --git a/.gitignore b/.gitignore
index e69de29..ca1734f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/kodi-pvr-demo-57a1c56.tar.gz
+/kodi-pvr-demo-07cb805.tar.gz
diff --git a/kodi-pvr-demo.spec b/kodi-pvr-demo.spec
new file mode 100644
index 0000000..5c446d8
--- /dev/null
+++ b/kodi-pvr-demo.spec
@@ -0,0 +1,68 @@
+%global commit 07cb80570600e3e9d01af67ca89c871ae81dea3a
+%global short_commit %(c=%{commit}; echo ${c:0:7})
+%global commit_date 20170704
+
+%global kodi_addon pvr.demo
+%global kodi_version 17.0
+
+Name: kodi-%(tr "." "-" <<<%{kodi_addon})
+# Use Epoch to manage upgrades from older upstream
+# (https://github.com/opdenkamp/xbmc-pvr-addons/)
+Epoch: 1
+Version: 2.4.8
+Release: 1%{?dist}
+Summary: Demo PVR for Kodi
+
+Group: Applications/Multimedia
+License: GPLv2+
+URL: https://github.com/kodi-pvr/%{kodi_addon}/
+Source0: https://github.com/kodi-pvr/%{kodi_addon}/archive/%{short_commit}/%{name}...
+# GPLv2 license file
+Source1: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+
+BuildRequires: cmake
+BuildRequires: gcc-c++
+BuildRequires: kodi-devel >= %{kodi_version}
+BuildRequires: kodi-platform-devel >= %{kodi_version}
+BuildRequires: platform-devel
+Requires: kodi >= %{kodi_version}
+ExclusiveArch: i686 x86_64
+
+%description
+Demo PVR client.
+
+
+%prep
+%autosetup -n %{kodi_addon}-%{commit}
+
+cp -p %{SOURCE1} .
+
+
+%build
+%cmake -DCMAKE_INSTALL_LIBDIR=%{_libdir}/kodi/ .
+%make_build
+
+
+%install
+%make_install
+
+
+%files
+%doc README.md
+%license gpl-2.0.txt
+%{_libdir}/kodi/addons/%{kodi_addon}/
+%{_datadir}/kodi/addons/%{kodi_addon}/
+
+
+%changelog
+* Mon Oct 02 2017 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:2.4.8-1
+- Update to 2.4.8
+
+* Sat Apr 29 2017 Mohamed El Morabity <melmorabity(a)fedorapeople.org> - 1:2.4.6-1
+- Update to latest stable release for Kodi 17
+
+* Sun Jul 24 2016 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.11.11-1
+- Update to latest stable release for Kodi 16
+
+* Mon Aug 24 2015 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.10.7-1
+- Initial RPM release
diff --git a/sources b/sources
index e69de29..d7f7d24 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+19a3010f296f34fb00c65f18bb759a96 kodi-pvr-demo-07cb805.tar.gz
7 years, 1 month
[kodi-pvr-demo/f26] Update to 2.4.8
by Mohamed ElMorabity
commit 170ac6a746bc491c44fcc6f69a4efb891b6acc9a
Author: Mohamed El Morabity <melmorabity(a)fedoraproject.org>
Date: Mon Oct 2 21:32:21 2017 +0200
Update to 2.4.8
.gitignore | 2 ++
kodi-pvr-demo.spec | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
sources | 1 +
3 files changed, 71 insertions(+)
---
diff --git a/.gitignore b/.gitignore
index e69de29..ca1734f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/kodi-pvr-demo-57a1c56.tar.gz
+/kodi-pvr-demo-07cb805.tar.gz
diff --git a/kodi-pvr-demo.spec b/kodi-pvr-demo.spec
new file mode 100644
index 0000000..5c446d8
--- /dev/null
+++ b/kodi-pvr-demo.spec
@@ -0,0 +1,68 @@
+%global commit 07cb80570600e3e9d01af67ca89c871ae81dea3a
+%global short_commit %(c=%{commit}; echo ${c:0:7})
+%global commit_date 20170704
+
+%global kodi_addon pvr.demo
+%global kodi_version 17.0
+
+Name: kodi-%(tr "." "-" <<<%{kodi_addon})
+# Use Epoch to manage upgrades from older upstream
+# (https://github.com/opdenkamp/xbmc-pvr-addons/)
+Epoch: 1
+Version: 2.4.8
+Release: 1%{?dist}
+Summary: Demo PVR for Kodi
+
+Group: Applications/Multimedia
+License: GPLv2+
+URL: https://github.com/kodi-pvr/%{kodi_addon}/
+Source0: https://github.com/kodi-pvr/%{kodi_addon}/archive/%{short_commit}/%{name}...
+# GPLv2 license file
+Source1: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+
+BuildRequires: cmake
+BuildRequires: gcc-c++
+BuildRequires: kodi-devel >= %{kodi_version}
+BuildRequires: kodi-platform-devel >= %{kodi_version}
+BuildRequires: platform-devel
+Requires: kodi >= %{kodi_version}
+ExclusiveArch: i686 x86_64
+
+%description
+Demo PVR client.
+
+
+%prep
+%autosetup -n %{kodi_addon}-%{commit}
+
+cp -p %{SOURCE1} .
+
+
+%build
+%cmake -DCMAKE_INSTALL_LIBDIR=%{_libdir}/kodi/ .
+%make_build
+
+
+%install
+%make_install
+
+
+%files
+%doc README.md
+%license gpl-2.0.txt
+%{_libdir}/kodi/addons/%{kodi_addon}/
+%{_datadir}/kodi/addons/%{kodi_addon}/
+
+
+%changelog
+* Mon Oct 02 2017 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:2.4.8-1
+- Update to 2.4.8
+
+* Sat Apr 29 2017 Mohamed El Morabity <melmorabity(a)fedorapeople.org> - 1:2.4.6-1
+- Update to latest stable release for Kodi 17
+
+* Sun Jul 24 2016 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.11.11-1
+- Update to latest stable release for Kodi 16
+
+* Mon Aug 24 2015 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.10.7-1
+- Initial RPM release
diff --git a/sources b/sources
index e69de29..d7f7d24 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+19a3010f296f34fb00c65f18bb759a96 kodi-pvr-demo-07cb805.tar.gz
7 years, 1 month
[kodi-pvr-demo/f27] Update to 2.4.8
by Mohamed ElMorabity
commit 45316602dc0ce57466a4e6106f9249acb5ec2003
Author: Mohamed El Morabity <melmorabity(a)fedoraproject.org>
Date: Mon Oct 2 21:32:21 2017 +0200
Update to 2.4.8
.gitignore | 2 ++
kodi-pvr-demo.spec | 68 ++++++++++++++++++++++++++++++++++++++++++++++++++++++
sources | 1 +
3 files changed, 71 insertions(+)
---
diff --git a/.gitignore b/.gitignore
index e69de29..ca1734f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1,2 @@
+/kodi-pvr-demo-57a1c56.tar.gz
+/kodi-pvr-demo-07cb805.tar.gz
diff --git a/kodi-pvr-demo.spec b/kodi-pvr-demo.spec
new file mode 100644
index 0000000..5c446d8
--- /dev/null
+++ b/kodi-pvr-demo.spec
@@ -0,0 +1,68 @@
+%global commit 07cb80570600e3e9d01af67ca89c871ae81dea3a
+%global short_commit %(c=%{commit}; echo ${c:0:7})
+%global commit_date 20170704
+
+%global kodi_addon pvr.demo
+%global kodi_version 17.0
+
+Name: kodi-%(tr "." "-" <<<%{kodi_addon})
+# Use Epoch to manage upgrades from older upstream
+# (https://github.com/opdenkamp/xbmc-pvr-addons/)
+Epoch: 1
+Version: 2.4.8
+Release: 1%{?dist}
+Summary: Demo PVR for Kodi
+
+Group: Applications/Multimedia
+License: GPLv2+
+URL: https://github.com/kodi-pvr/%{kodi_addon}/
+Source0: https://github.com/kodi-pvr/%{kodi_addon}/archive/%{short_commit}/%{name}...
+# GPLv2 license file
+Source1: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+
+BuildRequires: cmake
+BuildRequires: gcc-c++
+BuildRequires: kodi-devel >= %{kodi_version}
+BuildRequires: kodi-platform-devel >= %{kodi_version}
+BuildRequires: platform-devel
+Requires: kodi >= %{kodi_version}
+ExclusiveArch: i686 x86_64
+
+%description
+Demo PVR client.
+
+
+%prep
+%autosetup -n %{kodi_addon}-%{commit}
+
+cp -p %{SOURCE1} .
+
+
+%build
+%cmake -DCMAKE_INSTALL_LIBDIR=%{_libdir}/kodi/ .
+%make_build
+
+
+%install
+%make_install
+
+
+%files
+%doc README.md
+%license gpl-2.0.txt
+%{_libdir}/kodi/addons/%{kodi_addon}/
+%{_datadir}/kodi/addons/%{kodi_addon}/
+
+
+%changelog
+* Mon Oct 02 2017 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:2.4.8-1
+- Update to 2.4.8
+
+* Sat Apr 29 2017 Mohamed El Morabity <melmorabity(a)fedorapeople.org> - 1:2.4.6-1
+- Update to latest stable release for Kodi 17
+
+* Sun Jul 24 2016 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.11.11-1
+- Update to latest stable release for Kodi 16
+
+* Mon Aug 24 2015 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.10.7-1
+- Initial RPM release
diff --git a/sources b/sources
index e69de29..d7f7d24 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+19a3010f296f34fb00c65f18bb759a96 kodi-pvr-demo-07cb805.tar.gz
7 years, 1 month
[kodi-pvr-demo] Update to 2.4.8
by Mohamed ElMorabity
commit 5479fd793e87ab094665b6ce83e6fa96dfc6117b
Author: Mohamed El Morabity <melmorabity(a)fedoraproject.org>
Date: Mon Oct 2 21:32:21 2017 +0200
Update to 2.4.8
.gitignore | 1 +
kodi-pvr-demo.spec | 9 ++++++---
sources | 2 +-
3 files changed, 8 insertions(+), 4 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 68f28cd..ca1734f 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1 +1,2 @@
/kodi-pvr-demo-57a1c56.tar.gz
+/kodi-pvr-demo-07cb805.tar.gz
diff --git a/kodi-pvr-demo.spec b/kodi-pvr-demo.spec
index f626d22..5c446d8 100644
--- a/kodi-pvr-demo.spec
+++ b/kodi-pvr-demo.spec
@@ -1,6 +1,6 @@
-%global commit 57a1c56515d0b01d4eadbf87c1ee464277ea4e00
+%global commit 07cb80570600e3e9d01af67ca89c871ae81dea3a
%global short_commit %(c=%{commit}; echo ${c:0:7})
-%global commit_date 20170407
+%global commit_date 20170704
%global kodi_addon pvr.demo
%global kodi_version 17.0
@@ -9,7 +9,7 @@ Name: kodi-%(tr "." "-" <<<%{kodi_addon})
# Use Epoch to manage upgrades from older upstream
# (https://github.com/opdenkamp/xbmc-pvr-addons/)
Epoch: 1
-Version: 2.4.6
+Version: 2.4.8
Release: 1%{?dist}
Summary: Demo PVR for Kodi
@@ -55,6 +55,9 @@ cp -p %{SOURCE1} .
%changelog
+* Mon Oct 02 2017 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:2.4.8-1
+- Update to 2.4.8
+
* Sat Apr 29 2017 Mohamed El Morabity <melmorabity(a)fedorapeople.org> - 1:2.4.6-1
- Update to latest stable release for Kodi 17
diff --git a/sources b/sources
index 8b9968a..d7f7d24 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-2d89a659e1b358fdbef0048b4a4146ed kodi-pvr-demo-57a1c56.tar.gz
+19a3010f296f34fb00c65f18bb759a96 kodi-pvr-demo-07cb805.tar.gz
7 years, 1 month
[kodi-pvr-demo] First import
by Mohamed ElMorabity
commit 4cb2996df3ab6d03da5b59db789aed9669dd5bb6
Author: Mohamed El Morabity <melmorabity(a)fedoraproject.org>
Date: Mon Oct 2 21:32:01 2017 +0200
First import
.gitignore | 1 +
gpl-2.0.txt | 339 +++++++++++++++++++++++++++++++++++++++++++++++++++++
kodi-pvr-demo.spec | 65 ++++++++++
sources | 1 +
4 files changed, 406 insertions(+)
---
diff --git a/.gitignore b/.gitignore
index e69de29..68f28cd 100644
--- a/.gitignore
+++ b/.gitignore
@@ -0,0 +1 @@
+/kodi-pvr-demo-57a1c56.tar.gz
diff --git a/gpl-2.0.txt b/gpl-2.0.txt
new file mode 100644
index 0000000..d159169
--- /dev/null
+++ b/gpl-2.0.txt
@@ -0,0 +1,339 @@
+ GNU GENERAL PUBLIC LICENSE
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+ Preamble
+
+ The licenses for most software are designed to take away your
+freedom to share and change it. By contrast, the GNU General Public
+License is intended to guarantee your freedom to share and change free
+software--to make sure the software is free for all its users. This
+General Public License applies to most of the Free Software
+Foundation's software and to any other program whose authors commit to
+using it. (Some other Free Software Foundation software is covered by
+the GNU Lesser General Public License instead.) You can apply it to
+your programs, too.
+
+ When we speak of free software, we are referring to freedom, not
+price. Our General Public Licenses are designed to make sure that you
+have the freedom to distribute copies of free software (and charge for
+this service if you wish), that you receive source code or can get it
+if you want it, that you can change the software or use pieces of it
+in new free programs; and that you know you can do these things.
+
+ To protect your rights, we need to make restrictions that forbid
+anyone to deny you these rights or to ask you to surrender the rights.
+These restrictions translate to certain responsibilities for you if you
+distribute copies of the software, or if you modify it.
+
+ For example, if you distribute copies of such a program, whether
+gratis or for a fee, you must give the recipients all the rights that
+you have. You must make sure that they, too, receive or can get the
+source code. And you must show them these terms so they know their
+rights.
+
+ We protect your rights with two steps: (1) copyright the software, and
+(2) offer you this license which gives you legal permission to copy,
+distribute and/or modify the software.
+
+ Also, for each author's protection and ours, we want to make certain
+that everyone understands that there is no warranty for this free
+software. If the software is modified by someone else and passed on, we
+want its recipients to know that what they have is not the original, so
+that any problems introduced by others will not reflect on the original
+authors' reputations.
+
+ Finally, any free program is threatened constantly by software
+patents. We wish to avoid the danger that redistributors of a free
+program will individually obtain patent licenses, in effect making the
+program proprietary. To prevent this, we have made it clear that any
+patent must be licensed for everyone's free use or not licensed at all.
+
+ The precise terms and conditions for copying, distribution and
+modification follow.
+
+ GNU GENERAL PUBLIC LICENSE
+ TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
+
+ 0. This License applies to any program or other work which contains
+a notice placed by the copyright holder saying it may be distributed
+under the terms of this General Public License. The "Program", below,
+refers to any such program or work, and a "work based on the Program"
+means either the Program or any derivative work under copyright law:
+that is to say, a work containing the Program or a portion of it,
+either verbatim or with modifications and/or translated into another
+language. (Hereinafter, translation is included without limitation in
+the term "modification".) Each licensee is addressed as "you".
+
+Activities other than copying, distribution and modification are not
+covered by this License; they are outside its scope. The act of
+running the Program is not restricted, and the output from the Program
+is covered only if its contents constitute a work based on the
+Program (independent of having been made by running the Program).
+Whether that is true depends on what the Program does.
+
+ 1. You may copy and distribute verbatim copies of the Program's
+source code as you receive it, in any medium, provided that you
+conspicuously and appropriately publish on each copy an appropriate
+copyright notice and disclaimer of warranty; keep intact all the
+notices that refer to this License and to the absence of any warranty;
+and give any other recipients of the Program a copy of this License
+along with the Program.
+
+You may charge a fee for the physical act of transferring a copy, and
+you may at your option offer warranty protection in exchange for a fee.
+
+ 2. You may modify your copy or copies of the Program or any portion
+of it, thus forming a work based on the Program, and copy and
+distribute such modifications or work under the terms of Section 1
+above, provided that you also meet all of these conditions:
+
+ a) You must cause the modified files to carry prominent notices
+ stating that you changed the files and the date of any change.
+
+ b) You must cause any work that you distribute or publish, that in
+ whole or in part contains or is derived from the Program or any
+ part thereof, to be licensed as a whole at no charge to all third
+ parties under the terms of this License.
+
+ c) If the modified program normally reads commands interactively
+ when run, you must cause it, when started running for such
+ interactive use in the most ordinary way, to print or display an
+ announcement including an appropriate copyright notice and a
+ notice that there is no warranty (or else, saying that you provide
+ a warranty) and that users may redistribute the program under
+ these conditions, and telling the user how to view a copy of this
+ License. (Exception: if the Program itself is interactive but
+ does not normally print such an announcement, your work based on
+ the Program is not required to print an announcement.)
+
+These requirements apply to the modified work as a whole. If
+identifiable sections of that work are not derived from the Program,
+and can be reasonably considered independent and separate works in
+themselves, then this License, and its terms, do not apply to those
+sections when you distribute them as separate works. But when you
+distribute the same sections as part of a whole which is a work based
+on the Program, the distribution of the whole must be on the terms of
+this License, whose permissions for other licensees extend to the
+entire whole, and thus to each and every part regardless of who wrote it.
+
+Thus, it is not the intent of this section to claim rights or contest
+your rights to work written entirely by you; rather, the intent is to
+exercise the right to control the distribution of derivative or
+collective works based on the Program.
+
+In addition, mere aggregation of another work not based on the Program
+with the Program (or with a work based on the Program) on a volume of
+a storage or distribution medium does not bring the other work under
+the scope of this License.
+
+ 3. You may copy and distribute the Program (or a work based on it,
+under Section 2) in object code or executable form under the terms of
+Sections 1 and 2 above provided that you also do one of the following:
+
+ a) Accompany it with the complete corresponding machine-readable
+ source code, which must be distributed under the terms of Sections
+ 1 and 2 above on a medium customarily used for software interchange; or,
+
+ b) Accompany it with a written offer, valid for at least three
+ years, to give any third party, for a charge no more than your
+ cost of physically performing source distribution, a complete
+ machine-readable copy of the corresponding source code, to be
+ distributed under the terms of Sections 1 and 2 above on a medium
+ customarily used for software interchange; or,
+
+ c) Accompany it with the information you received as to the offer
+ to distribute corresponding source code. (This alternative is
+ allowed only for noncommercial distribution and only if you
+ received the program in object code or executable form with such
+ an offer, in accord with Subsection b above.)
+
+The source code for a work means the preferred form of the work for
+making modifications to it. For an executable work, complete source
+code means all the source code for all modules it contains, plus any
+associated interface definition files, plus the scripts used to
+control compilation and installation of the executable. However, as a
+special exception, the source code distributed need not include
+anything that is normally distributed (in either source or binary
+form) with the major components (compiler, kernel, and so on) of the
+operating system on which the executable runs, unless that component
+itself accompanies the executable.
+
+If distribution of executable or object code is made by offering
+access to copy from a designated place, then offering equivalent
+access to copy the source code from the same place counts as
+distribution of the source code, even though third parties are not
+compelled to copy the source along with the object code.
+
+ 4. You may not copy, modify, sublicense, or distribute the Program
+except as expressly provided under this License. Any attempt
+otherwise to copy, modify, sublicense or distribute the Program is
+void, and will automatically terminate your rights under this License.
+However, parties who have received copies, or rights, from you under
+this License will not have their licenses terminated so long as such
+parties remain in full compliance.
+
+ 5. You are not required to accept this License, since you have not
+signed it. However, nothing else grants you permission to modify or
+distribute the Program or its derivative works. These actions are
+prohibited by law if you do not accept this License. Therefore, by
+modifying or distributing the Program (or any work based on the
+Program), you indicate your acceptance of this License to do so, and
+all its terms and conditions for copying, distributing or modifying
+the Program or works based on it.
+
+ 6. Each time you redistribute the Program (or any work based on the
+Program), the recipient automatically receives a license from the
+original licensor to copy, distribute or modify the Program subject to
+these terms and conditions. You may not impose any further
+restrictions on the recipients' exercise of the rights granted herein.
+You are not responsible for enforcing compliance by third parties to
+this License.
+
+ 7. If, as a consequence of a court judgment or allegation of patent
+infringement or for any other reason (not limited to patent issues),
+conditions are imposed on you (whether by court order, agreement or
+otherwise) that contradict the conditions of this License, they do not
+excuse you from the conditions of this License. If you cannot
+distribute so as to satisfy simultaneously your obligations under this
+License and any other pertinent obligations, then as a consequence you
+may not distribute the Program at all. For example, if a patent
+license would not permit royalty-free redistribution of the Program by
+all those who receive copies directly or indirectly through you, then
+the only way you could satisfy both it and this License would be to
+refrain entirely from distribution of the Program.
+
+If any portion of this section is held invalid or unenforceable under
+any particular circumstance, the balance of the section is intended to
+apply and the section as a whole is intended to apply in other
+circumstances.
+
+It is not the purpose of this section to induce you to infringe any
+patents or other property right claims or to contest validity of any
+such claims; this section has the sole purpose of protecting the
+integrity of the free software distribution system, which is
+implemented by public license practices. Many people have made
+generous contributions to the wide range of software distributed
+through that system in reliance on consistent application of that
+system; it is up to the author/donor to decide if he or she is willing
+to distribute software through any other system and a licensee cannot
+impose that choice.
+
+This section is intended to make thoroughly clear what is believed to
+be a consequence of the rest of this License.
+
+ 8. If the distribution and/or use of the Program is restricted in
+certain countries either by patents or by copyrighted interfaces, the
+original copyright holder who places the Program under this License
+may add an explicit geographical distribution limitation excluding
+those countries, so that distribution is permitted only in or among
+countries not thus excluded. In such case, this License incorporates
+the limitation as if written in the body of this License.
+
+ 9. The Free Software Foundation may publish revised and/or new versions
+of the General Public License from time to time. Such new versions will
+be similar in spirit to the present version, but may differ in detail to
+address new problems or concerns.
+
+Each version is given a distinguishing version number. If the Program
+specifies a version number of this License which applies to it and "any
+later version", you have the option of following the terms and conditions
+either of that version or of any later version published by the Free
+Software Foundation. If the Program does not specify a version number of
+this License, you may choose any version ever published by the Free Software
+Foundation.
+
+ 10. If you wish to incorporate parts of the Program into other free
+programs whose distribution conditions are different, write to the author
+to ask for permission. For software which is copyrighted by the Free
+Software Foundation, write to the Free Software Foundation; we sometimes
+make exceptions for this. Our decision will be guided by the two goals
+of preserving the free status of all derivatives of our free software and
+of promoting the sharing and reuse of software generally.
+
+ NO WARRANTY
+
+ 11. BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
+FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
+OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
+PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
+OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
+MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
+TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
+PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
+REPAIR OR CORRECTION.
+
+ 12. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
+WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
+REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
+INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
+OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
+TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
+YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
+PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
+POSSIBILITY OF SUCH DAMAGES.
+
+ END OF TERMS AND CONDITIONS
+
+ How to Apply These Terms to Your New Programs
+
+ If you develop a new program, and you want it to be of the greatest
+possible use to the public, the best way to achieve this is to make it
+free software which everyone can redistribute and change under these terms.
+
+ To do so, attach the following notices to the program. It is safest
+to attach them to the start of each source file to most effectively
+convey the exclusion of warranty; and each file should have at least
+the "copyright" line and a pointer to where the full notice is found.
+
+ <one line to give the program's name and a brief idea of what it does.>
+ Copyright (C) <year> <name of author>
+
+ This program is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License along
+ with this program; if not, write to the Free Software Foundation, Inc.,
+ 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA.
+
+Also add information on how to contact you by electronic and paper mail.
+
+If the program is interactive, make it output a short notice like this
+when it starts in an interactive mode:
+
+ Gnomovision version 69, Copyright (C) year name of author
+ Gnomovision comes with ABSOLUTELY NO WARRANTY; for details type `show w'.
+ This is free software, and you are welcome to redistribute it
+ under certain conditions; type `show c' for details.
+
+The hypothetical commands `show w' and `show c' should show the appropriate
+parts of the General Public License. Of course, the commands you use may
+be called something other than `show w' and `show c'; they could even be
+mouse-clicks or menu items--whatever suits your program.
+
+You should also get your employer (if you work as a programmer) or your
+school, if any, to sign a "copyright disclaimer" for the program, if
+necessary. Here is a sample; alter the names:
+
+ Yoyodyne, Inc., hereby disclaims all copyright interest in the program
+ `Gnomovision' (which makes passes at compilers) written by James Hacker.
+
+ <signature of Ty Coon>, 1 April 1989
+ Ty Coon, President of Vice
+
+This General Public License does not permit incorporating your program into
+proprietary programs. If your program is a subroutine library, you may
+consider it more useful to permit linking proprietary applications with the
+library. If this is what you want to do, use the GNU Lesser General
+Public License instead of this License.
diff --git a/kodi-pvr-demo.spec b/kodi-pvr-demo.spec
new file mode 100644
index 0000000..f626d22
--- /dev/null
+++ b/kodi-pvr-demo.spec
@@ -0,0 +1,65 @@
+%global commit 57a1c56515d0b01d4eadbf87c1ee464277ea4e00
+%global short_commit %(c=%{commit}; echo ${c:0:7})
+%global commit_date 20170407
+
+%global kodi_addon pvr.demo
+%global kodi_version 17.0
+
+Name: kodi-%(tr "." "-" <<<%{kodi_addon})
+# Use Epoch to manage upgrades from older upstream
+# (https://github.com/opdenkamp/xbmc-pvr-addons/)
+Epoch: 1
+Version: 2.4.6
+Release: 1%{?dist}
+Summary: Demo PVR for Kodi
+
+Group: Applications/Multimedia
+License: GPLv2+
+URL: https://github.com/kodi-pvr/%{kodi_addon}/
+Source0: https://github.com/kodi-pvr/%{kodi_addon}/archive/%{short_commit}/%{name}...
+# GPLv2 license file
+Source1: http://www.gnu.org/licenses/old-licenses/gpl-2.0.txt
+
+BuildRequires: cmake
+BuildRequires: gcc-c++
+BuildRequires: kodi-devel >= %{kodi_version}
+BuildRequires: kodi-platform-devel >= %{kodi_version}
+BuildRequires: platform-devel
+Requires: kodi >= %{kodi_version}
+ExclusiveArch: i686 x86_64
+
+%description
+Demo PVR client.
+
+
+%prep
+%autosetup -n %{kodi_addon}-%{commit}
+
+cp -p %{SOURCE1} .
+
+
+%build
+%cmake -DCMAKE_INSTALL_LIBDIR=%{_libdir}/kodi/ .
+%make_build
+
+
+%install
+%make_install
+
+
+%files
+%doc README.md
+%license gpl-2.0.txt
+%{_libdir}/kodi/addons/%{kodi_addon}/
+%{_datadir}/kodi/addons/%{kodi_addon}/
+
+
+%changelog
+* Sat Apr 29 2017 Mohamed El Morabity <melmorabity(a)fedorapeople.org> - 1:2.4.6-1
+- Update to latest stable release for Kodi 17
+
+* Sun Jul 24 2016 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.11.11-1
+- Update to latest stable release for Kodi 16
+
+* Mon Aug 24 2015 Mohamed El Morabity <melmorabity(a)fedoraproject.org> - 1:1.10.7-1
+- Initial RPM release
diff --git a/sources b/sources
index e69de29..8b9968a 100644
--- a/sources
+++ b/sources
@@ -0,0 +1 @@
+2d89a659e1b358fdbef0048b4a4146ed kodi-pvr-demo-57a1c56.tar.gz
7 years, 1 month
[mythtv] Update to new release, 29.0.
by Richard Shaw
commit 58b3fcec66383995b48b8b14cba8f60852e189bd
Author: Richard Shaw <hobbes1069(a)gmail.com>
Date: Mon Oct 2 14:11:11 2017 -0500
Update to new release, 29.0.
.gitignore | 1 +
ChangeLog | 661 +-
mythtv-0.28-fixes.patch | 7561 -----------------
mythtv-fixes.patch | 20171 ++++++++++++++++++++++++++++++++++++++++++++++
mythtv.spec | 35 +-
sources | 2 +-
6 files changed, 20406 insertions(+), 8025 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index ca2cc54..769c918 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,3 +1,4 @@
mythtv-0.27.5.tar.gz
/mythtv-0.28.tar.gz
/mythtv-0.28.1.tar.gz
+/mythtv-29.0.tar.gz
diff --git a/ChangeLog b/ChangeLog
index 91b8ac2..ad88a6d 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,43 @@
-commit 73cf7474ad38ee2edddfeb7540eb5b7f28b245f4
+commit 5dce69fbb52c03739f9ca379fbb8e7885b45bd95
+Author: Angela Schmidt <angela.schmid(a)wolke7.net>
+Date: Wed Sep 13 11:28:54 2017 -0400
+
+ Fix the missing teletext subtitle problem
+
+ Implements "Teletext Magazin Serial Mode".
+
+ Only Parallel Mode was implemented, therefor some subtitles where not
+ displayed when there where not enough teletext page changes in the
+ magazin where the subtitle pages where gathered. In Magazin Serial
+ Mode any new page finishes the previously gathered teletext pages
+ independently of the magazin of the new page.
+
+ Fixes #13016
+
+ Signed-off-by: Peter Bennett <pbennett(a)mythtv.org>
+ (cherry picked from commit 39c9292fdc9385dbee25faf5bca8ca6b1d67b31b)
+
+commit 45fe9f301cdf4ceac016ee72e34c31901aae8f48
+Author: Bill Meek <bmeek(a)mythtv.org>
+Date: Sun Sep 10 16:29:35 2017 -0500
+
+ Python bindings: update version
+
+commit c6cd86f5d6ad7bcb6df4c9c598768719a97e6ec2
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Fri Sep 8 16:50:52 2017 -0400
+
+ Fixes #13117 - Unable to enter external channel change command
+
+ Fixed both the channel change command entry and the Preset Tuner entry
+ which were set up as option lists with no options. Changed to Text
+ input settings.
+
+ (cherry picked from commit 5003c1018960155ea5765d68e4d0a1a93c11d564)
+
+commit 7a40b2fcac29743b2756ea28796f45b59aa06e40
Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Thu Aug 31 14:52:55 2017 -0400
+Date: Thu Aug 31 14:39:07 2017 -0400
Fix OpenGL bug introduced recently
@@ -8,14 +45,51 @@ Date: Thu Aug 31 14:52:55 2017 -0400
OpenGL being disabled for all instead of just for raspberry pi.
Refs #13110
+
+ (cherry picked from commit 7c4a57a42f4c71119b58640ee9f84d50a8afbd53)
-commit ebd69ec33b67df52628eedcb1dca647306cfc887
-Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Tue Aug 29 16:09:54 2017 -0400
+commit 4611f52af4cd1345adcccd7b928d1e37788513a6
+Author: Nick Morrott <knowledgejunkie(a)gmail.com>
+Date: Thu Aug 31 14:02:25 2017 +0100
+
+ Update British English translation for MythFrontend
+
+ (cherry picked from commit 851257b563ab138282d844634f34a2fcef329dcc)
+
+commit feee0aa22205604385e7f13c9f9e07392a3ccc03
+Author: Morris Cavestro <morriscavestro(a)yahoo.it>
+Date: Thu Aug 31 13:23:22 2017 +0100
+
+ Updated Italian translations
+
+ Updates for MythArchive, MythBrowser, MythGallery, MythGame, MythMusic,
+ MythNetVision, MythNews, MythWeather, MythZoneMinder and MythFrontend
+
+ Thank you Morris!
+
+ Signed-off-by: Nick Morrott <knowledgejunkie(a)gmail.com>
+
+ (cherry picked from commit 925f2289c1e6490169e4ac388c36464721b4f410)
+
+commit afb2a83edd5e6f94572e5550bd9ae47dbc6834db
+Author: David Hampton <mythtv(a)love2code.net>
+Date: Wed Aug 23 21:13:01 2017 -0400
- Raspberry Pi: Support for Raspbian Stretch (fixes/0.28)
+ Use correct ping timeout parameter for the operating system.
- This is slightly different from the commit for master and fixes/29.
+ The ping command on Linux based operating systems uses the -w
+ paremeter to specify the timeout in seconds. The ping command on
+ FreeBSD based operating systems uses the -t parameter. Use compile
+ time flags to generate the right ping command for the operating
+ system. This fixes #12034.
+
+ Signed-off-by: Stuart Auchterlonie <stuarta(a)mythtv.org>
+
+commit f153e7f53afc7c4e20b62be227da1c2ad7f4c392
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Mon Aug 28 11:59:54 2017 -0400
+
+ Raspberry Pi: Support for Raspbian Stretch
* some libraries in /opt/vc/lib were renamed
* QT version is now 5.7.1
@@ -24,8 +98,37 @@ Date: Tue Aug 29 16:09:54 2017 -0400
* QT XCB GL Integration caused a segfault because of incompatible GL libraries.
Fixes #13110
+
+ (cherry picked from commit ad3fc1b88c17ecf8bad8967422360e13a4a010ec)
-commit ff9002adc9ef4dd58d54c66e9f85fa6a9e4edb41
+commit 9c01fa4e91345d665a1a7aa2a652961b99ce8634
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Mon Aug 28 11:35:59 2017 -0400
+
+ Backend: Add log messages on reasons for failure to shut down
+
+ Every 15 minutes (i.e. at 00,15,30,45 past the hour) output a general
+ log message with reason for blocking shutdown, if the system has
+ a shutdown timeout.
+
+ Refs #9712
+
+ (cherry picked from commit 2fa7549706fc6d5807c93d6c2ddbd1bec5a85489)
+
+commit aec892861c7cb5dab087dc2628fe57a228093825
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Mon Aug 28 10:57:40 2017 -0400
+
+ Fix problem with frontend setup not repainting main window
+
+ Frontend setup was not redisplaying the main window as it
+ should when changing appearance or theme. This bug was caused
+ by the recent commit
+ deeed3c : Fix disappearing startup screen.
+
+ (cherry picked from commit b31624d2281664ccd63561afcc49867c9e45f778)
+
+commit ab61079894a5ad01ffb49f55cb395bee3591df11
Author: David Engel <dengel(a)mythtv.org>
Date: Sun Aug 27 15:31:43 2017 -0500
@@ -39,7 +142,7 @@ Date: Sun Aug 27 15:31:43 2017 -0500
(cherry picked from commit a60e8c63bb185abc0741827349957f4d60222cc8)
-commit 204bb2e5345290ae5b112e8fc9381744339813b2
+commit 4f8f6aed87adda8c7033d479bd3f471393804a32
Author: Mark Spieth <mark(a)digivation.com.au>
Date: Sat Aug 26 13:32:40 2017 -0400
@@ -80,511 +183,177 @@ Date: Sat Aug 26 13:32:40 2017 -0400
Signed-off-by: Peter Bennett <pbennett(a)mythtv.org>
(cherry picked from commit e60c0283eda6f2e094a0b002eaea72f0ba06455b)
-commit 2c4c711b1ff47e3a3c39fd830e181fd6582f4887
-Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Sat Aug 12 16:16:58 2017 -0400
-
- Fix raspberry pi compile eror when using old header files
-
- Note that deinterlace will not work unless recent headers and
- firmware are used
-
- (cherry picked from commit 19ed105c848b3955e4d3ecba81847848183c997e)
-
-commit 3b18a09ad152ff4323effaaad45e5845e7d2d042
-Author: David Engel <dengel(a)mythtv.org>
-Date: Wed Aug 9 12:03:09 2017 -0500
-
- Avoid busy looping in some cases in the scheduler when the time to
- check on slaves that can be put to sleep has already passed. Thanks
- to lucylangthorne55 for helping to debug this issue.
-
- Cherry picked from master commit 871f9e82b95c3848978a5e032a40c58906b24565.
-
- Refs #13072
-
-commit f1a485c62ad2c8da4f8d44056a2053ccf6e9eb84
-Author: Bill Meek <bmeek(a)mythtv.org>
-Date: Sun Aug 6 21:02:13 2017 -0500
+commit 485676ce0e96597a0fab6d2588c290069e5b0ad8
+Author: Jonatan Lindblad <jlindblad(a)mythtv.org>
+Date: Sun Aug 27 13:12:38 2017 +0200
- Restore SendAction operation, Fixes #12738
+ Settings: Fix editing of DVB-S transports
- SendAction appears to be affected by 9f34b4f, but that's needed to
- allow operation of some keypresses.
-
- Thanks to Roger Siddons for finding the root cause of the problem.
+ Fixes #13095
- (cherry picked from commit 7075a5fb0f4554beccca019849a9d2dd38b62fe8)
+ (cherry picked from commit ac22686d41fda46311a7ab1c926fc1eab0d359cb)
-commit eef6a480b0eca5201eec785b0ce57f9a6f4b7fdd
+commit 48a2cfadcf24539eb4b01f6dd424b2834e28a827
Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Wed Jul 12 15:33:31 2017 -0400
+Date: Mon Aug 21 11:43:57 2017 -0400
- Fix bugs that occur when using a different video mode for playback.
-
- Fixes these cases where the code does not cater for the video mode
- changing between GUI and playback.
- - Playback using xv-blit and maybe others is shown in the wrong size and position.
- - Playback using OpenGL is displaced downward.
- - LiveTV using OpenGL is the wrong size.
- - Program Guide and other screens selected from within LiveTV when using OpenGL
- are cut off on the right.
+ Fix disappearing startup screen.
- Fixes #7408
- Fixes #11363
- Fixes #13054
+ Startup screen will remain visible until main menu shows.
+ It will still disappear the first time you start and any
+ time the cache has been cleared.
- (cherry picked from commit 7388b5a60c54d5e812a535bf5212295e512c5c3f)
+ (cherry picked from commit deeed3c2bccb77277cd3568b4760fbf433dcde19)
-commit 457a417f407bd38fa0d989f9ca006a5fb3173695
-Author: Roger Siddons <rsiddons(a)mythtv.org>
-Date: Tue Apr 19 12:32:28 2016 +0100
+commit eea73b70530c5674167cbd1d6608b4e4d97e5259
+Author: Bill Meek <bmeek(a)mythtv.org>
+Date: Sun Aug 20 15:39:40 2017 -0500
- Services: Fix exception messages
+ Services API: Fixes #13106 (memory leak)
- Some exceptions are thrown as const char* so they are not being logged.
- Exceptions should be thrown as QStrings.
-
- (cherry picked from commit 29e2269424b6b84afeb3d68158ada829429a0610)
+ (cherry picked from commit 777965c9108c20b1956cf5cab2d060abcab02bf0)
-commit 1c2863c23f9c188b00b59255c5408c0ca06d44f5
-Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
-Date: Wed Nov 9 17:04:40 2016 +0000
+commit b9dec4387e64eac67b426bd02c9ddb74ad694e09
+Author: Jonatan Lindblad <jlindblad(a)mythtv.org>
+Date: Sun Aug 20 19:53:02 2017 +0200
- [PATCH] Support tuning via freqid translation for ExternalRecorder
+ Settings: Make sure to call Load() after adding a capture card
- Signed-off-by: John Poet <jpoet(a)mythtv.org>
+ Without this the device list would be empty for HDHR and potentially
+ other capture card types.
- Fixes #12919
+ Refs #13046
- (cherry picked from commit 87140917197b156a5c06ac6ce36eb47de358a313)
+ (cherry picked from commit 38de2d093157302c57119c183bc544e22b8a29cc)
-commit 392be659b69243ce70311480db82cd111689fc53
+commit 8680910218c241c07919108e0d044226d87b89be
Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Wed Jun 28 11:21:47 2017 -0400
-
- Fixes #13059 - Flickering pause on Raspberry Pi.
-
- (cherry picked from commit 42d4a3146a0658403579ba9446050b3974090b6d)
-
-commit 8f7475b88902052b1eb27f297370d5f4f22b2aff
-Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Tue Jun 20 19:25:13 2017 -0400
-
- Fix Raspberry Pi hardware deinterlace
-
- Fixes #13030
-
- (cherry picked from commit 4b8862829d98aff2e5baba92ee98e1dd3b505e6b)
-
-commit ec95cbd7f401ab43d4d7c5a7d5b17a0e5021a260
-Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
-Date: Thu Jun 15 11:36:31 2017 +0100
-
- Refs #13031 - No GL/gl.h on osx
-
- (cherry picked from commit ab0dfcba5e3b92b90f993148c9449450c40acbff)
-
-commit 6a683aff7834054238413e83b0cf3f832f91cacb
-Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
-Date: Thu Jun 15 11:03:40 2017 +0100
-
- Refs #13031 - Reorganise the OpenGL includes a bit to fix build issues on arch on rpi
-
- (cherry picked from commit 05ad15bab9c11b7f102efc42a435406d7d0157c9)
-
-commit 98550bedeeea666cc412fe3ee9ac3ffa12803ce5
-Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
-Date: Wed Jun 7 09:15:00 2017 +0100
-
- Refs #13047 - fix check for OSX platforms
-
- (cherry picked from commit 37c41f1b411070471060b2f2d695e3a1ee8bebe3)
-
-commit 219fbe688eab463cdf1f948270459f47bf9f0885
-Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
-Date: Tue Jun 6 22:55:50 2017 +0100
-
- Refs #13047 - Windows also has major() and minor() in <sys/types.h>
-
- (cherry picked from commit 0a8e8423e8cc4d7ced1db96ba58caeb85c5af6e0)
-
-commit b012ff0f6b284969183863d42a6a14eb77ed0a1d
-Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
-Date: Tue Jun 6 22:39:03 2017 +0100
+Date: Sat Aug 12 16:16:58 2017 -0400
- Refs #13047 - major() and minor() are defined in <sys/sysmacros.h>
+ Fix raspberry pi compile eror when using old header files
- On BSD platforms they remain defined in <sys/types.h>
+ Note that deinterlace will not work unless recent headers and
+ firmware are used
- (cherry picked from commit eca27c542b70deb58e50ad4581b2d6f6b2e1d3c2)
+ (cherry picked from commit 19ed105c848b3955e4d3ecba81847848183c997e)
-commit 63ada4ffb865f9cc2d723113dbc5263748e8410f
-Author: John Poet <jpoet(a)mythtv.org>
-Date: Tue Jun 6 12:25:15 2017 -0600
+commit d35436d9405eb31e9e2aeef3c2fad20c6e613da6
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Thu Aug 10 14:07:07 2017 -0400
- ProgramInfo::ToMap: Add a copy of 'description' called 'description0'.
+ Refs #10633 - Set default proxy for listening ports to NoProxy.
- This allows themes to set different characteristics for the description
- depend on other elements.
+ The code was using http proxy as the default for listening ports, and
+ in most cases overriding it to NoProxy. Http proxies do not make
+ sense for listening ports, so default to NoProxy unless the code
+ specifically requests otherwise when creating the server socket.
- (cherry picked from commit fe0928403e5b544894d22ab614ed69e4430f518d)
+ (cherry picked from commit c6efa1b869f5a89497db14a0c48ee5001ca7746b)
-commit b3480d043721848bda06d841eca09a6a2149c7e1
-Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
-Date: Mon Jun 5 09:45:34 2017 +0100
+commit 18c6f49975b28e36fe2a976edba5b77bfa701303
+Author: David Engel <dengel(a)mythtv.org>
+Date: Wed Aug 9 12:03:09 2017 -0500
- Remove a custom FFmpeg patch for bswap_dbl
-
- We have been carrying a custom patch for FFmpeg which
- adds bswap_dbl to the ffmpeg codebase, yet it's not
- used within ffmpeg, and we also have the same definition
- in libs/libmythbase/bswap.h:29
-
- This was causing duplicate function definition errors
- building on some platforms.
-
- Rather than carrying an unneeded ffmpeg customization
- around lets just remove that customization.
-
- Fixes #13049
- Refs #12634 <- no longer requires `avoid_bswap_conflict.patch`
+ Avoid busy looping in some cases in the scheduler when the time to
+ check on slaves that can be put to sleep has already passed. Thanks
+ to lucylangthorne55 for helping to debug this issue.
- (cherry picked from commit 517216c725bedcff47db908e161abae1dd18e7a3)
-
-commit 2d42863a62dc721e5ddea61a3aedfc414ca4c0ff
-Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
-Date: Fri Jun 2 10:49:33 2017 +0100
-
- Fixes #13050 - Properly enable symbol visibility for GCC7
+ Cherry picked form master commit 871f9e82b95c3848978a5e032a40c58906b24565.
- Signed-off-by: Stuart Auchterlonie <stuarta(a)mythtv.org>
- (cherry picked from commit 1866a820f69162d1ffda724e0173478eeac0f78b)
+ Refs #13072
-commit e3b8adeb88e42719ce2acae9eb3a2981a27eba68
-Author: Jonatan Lindblad <jlindblad(a)mythtv.org>
-Date: Thu Jun 1 17:59:39 2017 +0200
+commit d087884e403d7f9479f6efc07dd8a9d971f996be
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Mon Aug 7 11:28:43 2017 -0400
- TV: Fix ESCAPE being ignored
-
- The cause was that lcdVolumeTimerId was never set to 0 after killing it.
- Since timer IDs are reused by Qt the timer started when ESCAPE was
- pressed to exit playback could be treated as lcdVolumeTimerId and ending
- up never being processed. This only happened if the LCD support was
- enabled and the volume was changed.
-
- Fixes #12566
+ Refs #10633 - Remove some incorrect logic around IPV6 checking.
- (cherry picked from commit bdbc6363a311f08cdb61eab81d62243b56b7bd12)
+ (cherry picked from commit a1823f3c390c02fb6d5c2c4ff969d811e7d2729d)
-commit 4664d5ca42a21548f390cd26bd14500559f0da9e
+commit 3ab8bebf7f46ef7e87e612d0eb1c9c4fc88b037d
Author: Bill Meek <bmeek(a)mythtv.org>
-Date: Thu Jun 1 08:17:04 2017 -0500
-
- Services API: Dvr/GetTitleInfoList was returning Deleted recordings.
-
- (cherry picked from commit 08a03c582cbac3927805213fa3a1786ccd05f525)
-
-commit af9826265820668395c64f04179a90dcdf331adb
-Author: Roger Siddons <rsiddons(a)mythtv.org>
-Date: Wed May 10 01:18:44 2017 +0100
-
- Prevent cutlist editor crash when extending marks
-
- Code was modifying the container without adjusting the iterator.
- Fixes #13039
-
- (cherry picked from commit 9d2f7b67ef004c20c24048922a1f9367c6127399)
-
-commit 2d247dc4600cc11166f056f48058f74252a27419
-Author: Roger Siddons <rsiddons(a)mythtv.org>
-Date: Thu Apr 20 09:26:51 2017 +0100
+Date: Sun Aug 6 21:02:13 2017 -0500
- Python: Fix bookmarkupdate error
-
- Python scripts updating a recording with no bookmark elicit:
- Failed due to: "MySQL error 1292: Incorrect datetime value: '0' for column 'bookmarkupdate' at row 1"
-
- The bindings use a default of 0, which is rejected by newer MySQL versions
+ Restore SendAction operation, Fixes #12738
- (cherry picked from commit 37ef0fa91e7fdffb0edccec288b00471c60f2148)
-
-commit e26a33c69af48399b8c52b1d76872d64a944d137
-Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
-Date: Tue Apr 18 11:10:45 2017 -0400
-
- Fix parsing of season from xmltv
+ SendAction appears to be affected by 9f34b4f, but that's needed to
+ allow operation of some keypresses.
- Fixes #12786
+ Thanks to Roger Siddons for finding the root cause of the problem.
- Signed-off-by: Peter Bennett <pbennett(a)mythtv.org>
- (cherry picked from commit 585f509dea5a8e9c7d7e213d4440ebde958e8138)
+ (cherry picked from commit 7075a5fb0f4554beccca019849a9d2dd38b62fe8)
-commit 14f82aa54c2825b58b08499a2f448dd6a155fb05
+commit 9ea488fbe28abfe9fd05c2055620435cd8843078
Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Tue Apr 18 10:45:01 2017 -0400
-
- Fix for LCD device code hanging
-
- When playing recordings if the audio changes (e.g. number of
- channels change), it sends a message to the lcd server
- from the wrong thread.
- After this no LCD messages get through, but queue indefinitely.
- The fix uses a slot to ensure messages are send from the
- correct thread.
-
- Refs #12566
- Fixes #12567
-
- (cherry picked from commit 3cd374dd16d2257485468e0415892d417eb7520a)
+Date: Sun Aug 6 15:05:38 2017 -0400
-commit 0037461751becd40aedd2d3dd8bd2ad5e0836c9f
-Author: Karl Dietz <dekarl(a)mythtv.org>
-Date: Wed Mar 22 22:37:13 2017 +0100
-
- Set MySQL session mode in Perl bindings
-
- this allows optimize_mythdb.pl to work against newer (5.7+)
- versions of MySQL.
-
- Patch by Michael Dean
-
- Refs #12871
-
- (cherry picked from commit 83c67a0c7b5eec295e9cad757ff6edc1438078ff)
-
-commit 70266230d3d3afcf9c356cf503fce210fe67ab07
-Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
-Date: Mon Feb 13 16:19:57 2017 -0700
-
- Use XMLTV dd_progid data to create seriesid
-
- The current seriesid processing for XMLTV grabbers using a hash for the
- title is non-optimal in the (Schedules Direct) case where the seriesid can
- be more accurately represented (via a supplied dd_progid). The internal
- datadirect grabber creates such a seriesid from its feeds.
-
- From some research and discussions with Schedules Direct regarding the
- gracenote upstream (raw) data, there is a true seriesid available, but
- passing that through to MythTV, and then adjusting existing data has some
- challenges (some upstream). And while there are some potential approaches,
- rather than wait for the perfect, we can do something now which is
- equivalent to the internal dd grabber.
-
- This patch creates a better seriesid from a XMLTV source which provides a
- dd_progid with a seriesid which is compatible with the (internal)
- DataDirect? grabber (further moving forward to allowing the eventual removal
- of the internal DD grabber).
-
- The following patch (based on some initial work by Mr. Poet) creates an
- appropriate seriesid.
-
- Note:
+ Networking: Improve check for IPV4 and IPV6 support
- The uniqueid value was added to the code in commit
- 347ea0319330cb06cf3e418e12e79602c3235bc0 (over a decade ago) however it was
- never set, and always empty, resulting in some dead code. It appears that
- the uniqueid may have been intended to serve the same/equivalent purposes of
- programid (at some point). This patch removes the (dead) uniqueid along the
- way as part of the larger set of fixes.
+ Under certain conditions the system is incorrectly finding that
+ there is no support for IPV4 and IPV6. This adds some more logic
+ to the process.
- As this patch changes the seriesid for new grabbed programs, those that are
- using the "this series" matching based on the previous seriesid may run into
- some issues. Likely the easiest solution to recommend is to recreate those
- rules.
+ Refs #10633
- Signed-off-by: John Poet <jpoet(a)mythtv.org>
- (cherry picked from commit 4e5cf2b4ef875ee578b121be9867ba05da5fab17)
+ (cherry picked from commit 951e601107aa4974fd8e6284071c17611a96283a)
-commit 845f6d47b4d904589050a12b67245161339a41e6
-Author: John Poet <jpoet(a)mythtv.org>
-Date: Fri Feb 10 14:54:54 2017 -0700
-
- Another attempt at preventing mythfilldatabase from inserting duplicate
- channels.
-
- In ChannelData::channelList use ChannelUtil::LoadChannels instead of
- ChannelUtil::GetChannels, as the former seems to be more reliable.
-
- (cherry picked from commit b25f8c630bbd73602c4bf646c9aa760cb0fb60fc)
-
-commit 3dd03e36ed6df640665e1c8b93944442d9f91406
-Author: John Poet <jpoet(a)mythtv.org>
-Date: Sun Jun 12 01:17:40 2016 -0600
-
- mythfilldatabase: Also try matching ATSC major.minor when update xmltvid.
-
- (cherry picked from commit 5933e03efdb136a5bd35f60bdcf24f8a1a32749b)
-
-commit 044b22b95734ee607806ff8cea04e84c5112438d
-Author: Paul Harrison <pharrison(a)mythtv.org>
-Date: Wed Mar 15 10:32:01 2017 +0000
-
- MythArchive: guard against an empty deleteMap in the thumb image finder
-
- (cherry picked from commit abb225031b2ece763f773bdf060cfde1ec7abe81)
-
-commit 0bd473036fdb132c6f094eff360de3e444256aeb
-Author: Paul Harrison <pharrison(a)mythtv.org>
-Date: Wed Mar 15 10:29:54 2017 +0000
+commit ad5f88b1174ea49a133d920cb454f4810b1c1ff8
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Sun Aug 6 14:31:42 2017 -0400
- MythArchive: update the initial seek amount text on the thumb image finder
+ Video Playback: Fix compile error on debian jessie
- (cherry picked from commit 9572352cc6e267254ede2feea567c088e5d5b7ad)
-
-commit 2622ddd0c7f8e9cd037bbb8da0225975c305fda8
-Author: Paul Harrison <pharrison(a)mythtv.org>
-Date: Wed Mar 15 09:22:03 2017 +0000
-
- IPTV Tuner: fix recording/playing simultaneous RTSP streams
+ Prior commit for for VDPAU h265 needs to have an ifdef so that it
+ does not fail compile if the vdpau.h file is old and does not
+ have H265 support.
- Thanks to strenker on the forum for tracking this down.
+ Refs #12992
- (cherry picked from commit b5659411dd7e964c86077f49f6bde29736df680d)
+ (cherry picked from commit c0a2558689915b0fe9aa3b2bf7d41e21d395e10e)
-commit 8f13742e18f76ede87e46f1ce12bd00aa40d621b
-Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
-Date: Tue Mar 7 10:02:21 2017 -0500
+commit 345f69c8332102d8284a9bfb87126f6f8eb127f1
+Author: Peter Bennett <pbennett(a)mythtv.org>
+Date: Sun Aug 6 12:28:20 2017 -0400
- Validate the programme starttime/channel early
-
- If a programme does not have a starttime the (later) attempted
- insertion of the program into the database will result in a
- database constraint error. If the program does not have a
- channel there will be a match error later. Verify both early
- (perhaps with better log messages).
-
- Fixes #13011
+ Fixes #13077 IPV6 support for backup and restore scripts.
- Signed-off-by: Peter Bennett <pbennett(a)mythtv.org>
- (cherry picked from commit ab4513fbb6f50f1402835b5599f6ff79b4b0fd48)
+ (cherry picked from commit 68392fd5b4358447da11be5b097a02aa3742cc58)
-commit 12232f081c672165f67819de8cd9f437c991a082
-Author: Gary Buhrmaster <gary.buhrmaster(a)gmail.com>
-Date: Tue Mar 7 10:00:21 2017 -0500
+commit 022d0989f1d015b252c89ce797185652834e61e7
+Author: Dave Chiluk <chiluk(a)gmail.com>
+Date: Sun Aug 6 12:12:04 2017 -0400
- Improve fromXMLTVDate processing for mythfilldatabase
+ Video Playback: Workaround for VDPAU h265 interlaced playback
- In cases where the system is running in localtime, the
- current processing will apply timezone validation to
- the input datetime, which can result in rejection of valid
- datetimes.
+ Allow VDPAU h265 interlaced playback without deinterlacing.
- Fixes #13010
+ Refs #12992
Signed-off-by: Peter Bennett <pbennett(a)mythtv.org>
- (cherry picked from commit 841073ea8c1f49e858f5bb6c18e3c0ade04eb512)
-
-commit dc2b2782408f25992f34fad71628ece96f5d9f3a
-Author: John Poet <jpoet(a)mythtv.org>
-Date: Tue May 17 18:20:41 2016 -0600
-
- mythfilldatabase - xmltvparser.cpp: Fix whitespace.
-
- (cherry picked from commit 55eb77fda5f4578801d579e9823e7eeb8bb8399c)
-
-commit 3255b983b039f26c36cae016f4a522183283837c
-Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
-Date: Fri Mar 3 15:08:14 2017 +0000
-
- [EIT] Additional Freesat mplexes to fix
-
- (cherry picked from commit 23739db73e54f33efed764f763a9a4ccd9854fab)
-
-commit e9be5e0ece748ebcd4ad04b9072ead9bc98f84d4
-Author: Stuart Auchterlonie <stuarta(a)mythtv.org>
-Date: Mon Feb 27 00:38:47 2017 +0000
-
- [Qt5.8] Explicitly use a QChar in the comparison. Fixes a build failure
-
- (cherry picked from commit e4b05c489673df970c8d1d41a9109f4441625d4c)
-
-commit 9a805b9600dd4f0dafb640b6dd6b166ba310ee26
-Author: John Poet <jpoet(a)mythtv.org>
-Date: Sun Feb 26 13:19:20 2017 -0700
+ (cherry picked from commit b63e92cc00f466391157cb45830f98d2e1a58dcd)
- Apparently this results in poor performance on slow frontends.
-
- Revert "Allow multiple element names with different dependancies."
-
- This reverts commit 299dbaee22795d09503f028670f8bbc891c42c5b.
-
-commit 7de03a90c1b144fc0067261af1c9cfdd8d358972
+commit 433f5d17312e6ffce428de959d87ae4b60a2aebf
Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Fri Feb 17 15:10:00 2017 -0500
+Date: Sun Aug 6 11:58:52 2017 -0400
- Fix Bus Error in mythpreviewgen on Raspberry Pi
+ Fixes #13091 - Seg fault in video playback when using an alternate video output method
- Fixes #12888
+ Fix premature deletion of VideoDisplayProfile object.
- (cherry picked from commit 57d61f7412e5caf9b91772926bdb651354205581)
-
-commit 299dbaee22795d09503f028670f8bbc891c42c5b
-Author: John Poet <jpoet(a)mythtv.org>
-Date: Sat Jan 21 16:42:28 2017 -0700
+ (cherry picked from commit 48111f8d6707c5a53cbb66c796046bb87c38192a)
- Allow multiple element names with different dependancies.
-
- MythUI only allows one element with a given "name", so allow a themer to
- specify names with an extension to make them unique: Anthing after (and
- including) a '+' will be ignored when matching the name. For example:
-
- <textarea name="description+sub" depends="subtitle">
-
- and
-
- <textarea name="description+notsub" depends="!subtitle">
-
- results in the appropriate definition for "description" to be used depending
- on if the "subtitle" element is available.
-
- I thought about making the "+dependancies" naming automatic, but if the
- themer is using inheritance, they may find the result unexpected.
-
- This currently only works with textareas. It would be quite a bit more work
- to make it work with other types, and I have not been able to think of any
- benifit.
-
- (cherry picked from commit d82629a4dfe6d8b2baa86aa7e71b34e76638f536)
-
-commit ea8cc22f2067a5c4f780855e18af4a24062d0f69
-Author: Karl Dietz <dekarl(a)mythtv.org>
-Date: Sun Feb 12 13:13:07 2017 +0100
-
- Fix searching for movies based on star ratings
-
- Original patch by Andrew M. Bishop
- Fixes #12971
-
- (cherry picked from commit dd05b6d0a3d137c3e6a6735cb0a5e3fa7d3933c8)
-
-commit fc737ffc45fdefd5671568ae0c959e777fd5ffbe
-Author: Karl Dietz <dekarl(a)mythtv.org>
-Date: Fri Feb 10 21:00:29 2017 +0100
-
- Fix for misleading indentation in greek EIT fixups.
-
- Patch from David Hampton
- Already fixed in master with f3ce2b3a
-
- Fixes #12998
-
-commit 46bd4f402425e778ca88321f6cedc76681fe9cd9
+commit f6acaf5878712e28da2e3b817345de1c086e6e9f
Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Tue Feb 7 12:12:36 2017 -0500
+Date: Wed Aug 2 15:52:51 2017 -0400
- Fix UPNP for selecting backend when there is a PIN set
-
- Incorrect error code was being set when a pin was required.
-
- Fixes #12217
+ Fixes #13082 - Python bindings need to use new setting for backend server address.
- (cherry picked from commit 0a46103e458a9d8bb88b822d087e7a97acad10a4)
+ (cherry picked from commit eebe25c7c17e21071b49e3970dca698c852cdb61)
-commit 4d643549b1ee950343171ee06f710b7107a072c1
+commit 9cf09cc43cbced882569ec959fbf9e30a5372a04
Author: Peter Bennett <pbennett(a)mythtv.org>
-Date: Mon Feb 6 11:54:22 2017 -0500
+Date: Wed Aug 2 14:10:19 2017 -0400
- Fix UPNP detection of backends to ignore link-local IPV6 addresses
+ Fixes #13086 - add missing include for QTcpSocket, causing compile failure in certain cases.
- (cherry picked from commit ef7e5946f39f3c910e968fda9b3b58d274f9f8f6)
+ (cherry picked from commit 9646afee0061c4e9bbb784e80b71fa0c65af21fc)
diff --git a/mythtv-fixes.patch b/mythtv-fixes.patch
new file mode 100644
index 0000000..49274cc
--- /dev/null
+++ b/mythtv-fixes.patch
@@ -0,0 +1,20171 @@
+ mythplugins/mytharchive/i18n/mytharchive_it.qm | Bin 37194 -> 37323 bytes
+ mythplugins/mytharchive/i18n/mytharchive_it.ts | 163 +-
+ mythplugins/mythbrowser/i18n/mythbrowser_it.qm | Bin 8487 -> 8373 bytes
+ mythplugins/mythbrowser/i18n/mythbrowser_it.ts | 61 +-
+ mythplugins/mythgallery/i18n/mythgallery_it.qm | Bin 28056 -> 28622 bytes
+ mythplugins/mythgallery/i18n/mythgallery_it.ts | 211 +--
+ mythplugins/mythgame/i18n/mythgame_it.ts | 87 +-
+ mythplugins/mythmusic/i18n/mythmusic_it.qm | Bin 71983 -> 76127 bytes
+ mythplugins/mythmusic/i18n/mythmusic_it.ts | 895 +++++++----
+ mythplugins/mythnetvision/i18n/mythnetvision_it.qm | Bin 13799 -> 14629 bytes
+ mythplugins/mythnetvision/i18n/mythnetvision_it.ts | 96 +-
+ mythplugins/mythnews/i18n/mythnews_it.ts | 3 +-
+ mythplugins/mythweather/i18n/mythweather_it.ts | 73 +-
+ .../mythzoneminder/i18n/mythzoneminder_it.qm | Bin 8293 -> 9428 bytes
+ .../mythzoneminder/i18n/mythzoneminder_it.ts | 203 ++-
+ mythtv/bindings/python/MythTV/__init__.py | 22 +-
+ mythtv/bindings/python/MythTV/_conn_mysqldb.py | 6 +-
+ mythtv/bindings/python/MythTV/_conn_oursql.py | 4 +-
+ mythtv/bindings/python/MythTV/altdict.py | 9 +-
+ mythtv/bindings/python/MythTV/connections.py | 48 +-
+ mythtv/bindings/python/MythTV/database.py | 32 +-
+ mythtv/bindings/python/MythTV/dataheap.py | 40 +-
+ mythtv/bindings/python/MythTV/logging.py | 12 +-
+ mythtv/bindings/python/MythTV/methodheap.py | 14 +-
+ mythtv/bindings/python/MythTV/msearch.py | 2 +-
+ mythtv/bindings/python/MythTV/mythproto.py | 5 +-
+ mythtv/bindings/python/MythTV/static.py | 2 +-
+ .../python/MythTV/ttvdb/XSLT/tvdbCollection.xsl | 127 +-
+ .../python/MythTV/ttvdb/XSLT/tvdbQuery.xsl | 18 +-
+ .../python/MythTV/ttvdb/XSLT/tvdbVideo.xsl | 87 +-
+ mythtv/bindings/python/MythTV/ttvdb/cache.py | 230 ---
+ .../MythTV/ttvdb/requests_cache_compatability.py | 44 +
+ mythtv/bindings/python/MythTV/ttvdb/tvdbXslt.py | 108 +-
+ mythtv/bindings/python/MythTV/ttvdb/tvdb_api.py | 1186 +++++++++-----
+ .../python/MythTV/ttvdb/tvdb_create_key.py | 36 +
+ .../python/MythTV/ttvdb/tvdb_exceptions.py | 48 +-
+ mythtv/bindings/python/MythTV/ttvdb/tvdb_ui.py | 121 +-
+ mythtv/bindings/python/MythTV/utility/__init__.py | 18 +-
+ mythtv/bindings/python/MythTV/utility/altdict.py | 6 +-
+ .../bindings/python/MythTV/utility/dequebuffer.py | 13 +-
+ mythtv/bindings/python/MythTV/utility/dicttoxml.py | 400 +++++
+ mythtv/bindings/python/MythTV/utility/dt.py | 6 +-
+ mythtv/bindings/python/MythTV/utility/enum.py | 8 +-
+ mythtv/bindings/python/MythTV/utility/other.py | 40 +-
+ mythtv/i18n/mythfrontend_en_gb.qm | Bin 112556 -> 738161 bytes
+ mythtv/i18n/mythfrontend_en_gb.ts | 1668 ++++++++++----------
+ mythtv/i18n/mythfrontend_it.qm | Bin 766688 -> 765165 bytes
+ mythtv/i18n/mythfrontend_it.ts | 864 +++++-----
+ mythtv/libs/libmyth/mythcontext.cpp | 36 +-
+ mythtv/libs/libmythbase/mythdownloadmanager.cpp | 1 +
+ mythtv/libs/libmythbase/mythmiscutil.cpp | 45 +-
+ mythtv/libs/libmythbase/serverpool.cpp | 10 +-
+ .../libs/libmythtv/channelscan/modulationsetting.h | 2 +
+ mythtv/libs/libmythtv/libmythtv.pro | 11 +
+ mythtv/libs/libmythtv/privatedecoder_omx.cpp | 7 +-
+ mythtv/libs/libmythtv/recorders/dvbchannel.cpp | 2 +
+ mythtv/libs/libmythtv/teletextreader.cpp | 64 +-
+ mythtv/libs/libmythtv/transporteditor.cpp | 43 +-
+ mythtv/libs/libmythtv/videoout_omx.cpp | 7 +-
+ mythtv/libs/libmythtv/videoout_vdpau.cpp | 13 +
+ mythtv/libs/libmythtv/videooutbase.cpp | 5 +-
+ mythtv/libs/libmythtv/videosource.cpp | 9 +-
+ mythtv/libs/libmythui/libmythui.pro | 13 +
+ mythtv/libs/libmythui/mythmainwindow.cpp | 11 +-
+ mythtv/libs/libmythui/mythmainwindow.h | 2 +-
+ mythtv/libs/libmythui/mythrender_opengl.cpp | 6 +
+ mythtv/libs/libmythui/mythrender_opengl.h | 16 +-
+ mythtv/libs/libmythui/mythrender_opengl2.cpp | 13 +
+ mythtv/programs/mythavtest/main.cpp | 5 +
+ mythtv/programs/mythbackend/scheduler.cpp | 51 +-
+ mythtv/programs/mythbackend/scheduler.h | 3 +-
+ mythtv/programs/mythbackend/services/video.cpp | 8 +-
+ mythtv/programs/mythfrontend/main.cpp | 8 +-
+ mythtv/programs/mythfrontend/mythfrontend.pro | 25 +-
+ mythtv/programs/mythfrontend/schedulecommon.cpp | 11 +-
+ mythtv/programs/mythfrontend/schedulecommon.h | 1 +
+ mythtv/programs/mythfrontend/scheduleeditor.cpp | 3 +-
+ mythtv/programs/mythscreenwizard/main.cpp | 5 +
+ mythtv/programs/mythtv-setup/main.cpp | 4 +
+ mythtv/programs/mythwelcome/main.cpp | 4 +
+ .../scripts/database/mythconverg_backup.pl | 16 +-
+ .../scripts/database/mythconverg_restore.pl | 18 +-
+ .../programs/scripts/metadata/Television/ttvdb.py | 1228 +++++++++++---
+ .../scripts/metadata/Television/tvdb_test.conf | 7 +
+ 84 files changed, 5394 insertions(+), 3335 deletions(-)
+
+diff --git a/mythplugins/mytharchive/i18n/mytharchive_it.qm b/mythplugins/mytharchive/i18n/mytharchive_it.qm
+index e211d98a16..901f57d9f7 100644
+Binary files a/mythplugins/mytharchive/i18n/mytharchive_it.qm and b/mythplugins/mytharchive/i18n/mytharchive_it.qm differ
+diff --git a/mythplugins/mytharchive/i18n/mytharchive_it.ts b/mythplugins/mytharchive/i18n/mytharchive_it.ts
+index 8b7e3b854b..cb8a971d1e 100644
+--- a/mythplugins/mytharchive/i18n/mytharchive_it.ts
++++ b/mythplugins/mytharchive/i18n/mytharchive_it.ts
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
+ <context>
+ <name>(ArchiveUtils)</name>
+ <message>
+@@ -15,19 +14,19 @@ Have you set the correct path in the settings?</source>
+ <context>
+ <name>(MythArchiveMain)</name>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="93"/>
++ <location filename="../mytharchive/main.cpp" line="94"/>
+ <source>Found a lock file but the owning process isn't running!
+ Removing stale lock file.</source>
+ <translation>Trovato un file bloccato ma il processo proprietario non è in esecuzione!
+ Rimuove lo stato di blocco del file.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="212"/>
++ <location filename="../mytharchive/main.cpp" line="213"/>
+ <source>Last run did not create a playable DVD.</source>
+ <translation>L'ultima esecuzione non ha creato un DVD riproducibile.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="219"/>
++ <location filename="../mytharchive/main.cpp" line="220"/>
+ <source>Last run failed to create a DVD.</source>
+ <translation>L'ultima esecuzione ha fallito la creazione di un DVD.</translation>
+ </message>
+@@ -58,333 +57,335 @@ Rimuove lo stato di blocco del file.</translation>
+ <translation>Percorso dove MythArchive dovrebbe creare i suoi file di lavoro temporanei. Richiesto molto spazio libero su disco.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="33"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="35"/>
+ <source>MythArchive Share Directory</source>
+ <translation>Directory condivisa da MythArchive</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="36"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="38"/>
+ <source>Location where MythArchive stores its scripts, intro movies and theme files</source>
+ <translation>Percorso dove MythArchive archivia i suioi script, filmati introduttivi e file di tema</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="46"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="50"/>
+ <source>Video format</source>
+ <translation>Formato video</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="51"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="55"/>
+ <source>Video format for DVD recordings, PAL or NTSC.</source>
+ <translation>Formato video per registrazioni DVD, PAL o NTSC.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="60"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="64"/>
+ <source>File Selector Filter</source>
+ <translation>Filtro del selettore del file</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="63"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="67"/>
+ <source>The file name filter to use in the file selector.</source>
+ <translation>Il nome del file del filtro usato nel selettore dei file.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="72"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="76"/>
+ <source>Location of DVD</source>
+ <translation>Percorso del DVD</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="75"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="79"/>
+ <source>Which DVD drive to use when burning discs.</source>
+ <translation>Quale unità DVD da usare quando si masterizzano dischi.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="84"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="89"/>
+ <source>DVD Drive Write Speed</source>
+ <translation>Velocità di scrittura dell'unità DVD</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="87"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="92"/>
+ <source>This is the write speed to use when burning a DVD. Set to 0 to allow growisofs to choose the fastest available speed.</source>
+ <translation>Questa è la velocità di scrittura da usare quando si masterizza un DVD. Impostare a 0 permette a growisofs di scegliere la velocità disponibile più veloce.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="98"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="103"/>
+ <source>Command to play DVD</source>
+ <translation>Comando per riprodurre DVD</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="101"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="106"/>
+ <source>Command to run when test playing a created DVD. 'Internal' will use the internal MythTV player. %f will be replaced with the path to the created DVD structure eg. 'xine -pfhq --no-splash dvd:/%f'.</source>
+ <translation>Comando da eseguire quando si testa la riproduzione di un DVD creato "Internal"userà il riproduttore interno MythTV. %f sarà sostituito con il percorso della strutura del DVD creato es. 'xine -pfhq --no-splash dvd:/%f'.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="114"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="119"/>
+ <source>Copy remote files</source>
+ <translation>Copiare i file remoti</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="117"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="122"/>
+ <source>If set files on remote filesystems will be copied over to the local filesystem before processing. Speeds processing and reduces bandwidth on the network</source>
+ <translation>Se impostato i file sul filesystem remoto saranno copiati sul filesystem locali prima dell'elaborazione. La velocità dell' elaborazione riduce la larghezza di banda sulla rete</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="129"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="134"/>
+ <source>Always Use Mythtranscode</source>
+ <translation>Usare sempre Mythtranscode</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="132"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="137"/>
+ <source>If set mpeg2 files will always be passed though mythtranscode to clean up any errors. May help to fix some audio problems. Ignored if 'Use ProjectX' is set.</source>
+ <translation>Se impostato i file mpeg2 saranno sempre passato tramite mythtranscode per pulire ogni errore. Può aiutare a fissare molti problemi audio. Ignorato se è impostato "Usare ProjectX".</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="144"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="149"/>
+ <source>Use ProjectX</source>
+ <translation>Usare ProjectX</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="147"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="152"/>
+ <source>If set ProjectX will be used to cut commercials and split mpeg2 files instead of mythtranscode and mythreplex.</source>
+ <translation>Se impostato ProjectX verrà usato per tagliare pubblicità e dividere file mpeg2 invece di mythtranscode e mythreplex.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="158"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="163"/>
+ <source>Use FIFOs</source>
+ <translation>Usare FIFOs</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="161"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="166"/>
+ <source>The script will use FIFOs to pass the output of mplex into dvdauthor rather than creating intermediate files. Saves time and disk space during multiplex operations but not supported on Windows platform</source>
+ <translation>Lo script userà FIFOs per passare l'uscita di mplex dentro dvdauthor piuttosto che creare dei file intermedi.Risparmia tempo e spazio su disco durante le operazioni di multiplex ma non supportati dalla piattaforma Windows</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="174"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="179"/>
+ <source>Add Subtitles</source>
+ <translation>Aggiungere sottotitoli</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="177"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="182"/>
+ <source>If available this option will add subtitles to the final DVD. Requires 'Use ProjectX' to be on.</source>
+ <translation>Se disponibile questa opzione aggiungerà sottotitoli al DVD finale. Richiede di essere su "Usare ProjectX".</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="187"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="192"/>
+ <source>Main Menu Aspect Ratio</source>
+ <translation>Menù principale proporzione</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="189"/>
+- <location filename="../mytharchive/archivesettings.cpp" line="205"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="194"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="210"/>
+ <source>4:3</source>
+ <comment>Aspect ratio</comment>
+ <translation>4:3</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="190"/>
+- <location filename="../mytharchive/archivesettings.cpp" line="206"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="195"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="211"/>
+ <source>16:9</source>
+ <comment>Aspect ratio</comment>
+ <translation>16:9</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="194"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="199"/>
+ <source>Aspect ratio to use when creating the main menu.</source>
+ <translation>Formato da usare quando si crea il menù principale.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="203"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="208"/>
+ <source>Chapter Menu Aspect Ratio</source>
+ <translation>Formato menù capitoli</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="207"/>
+- <location filename="../mytharchive/archivesettings.cpp" line="216"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="212"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="221"/>
+ <source>Video</source>
+ <translation>Video</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="212"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="217"/>
+ <source>Aspect ratio to use when creating the chapter menu. '%1' means use the same aspect ratio as the associated video.</source>
+ <extracomment>%1 is the translation of the "Video" combo box choice</extracomment>
+ <translation>Formato da usare quando si crea il menù capitoli."%1" significa usare lo stesso formato come nel video associato.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="223"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="228"/>
+ <source>Date format</source>
+ <translation>Formato data</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="226"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="231"/>
+ <source>Samples are shown using today's date.</source>
+ <translation>I campioni sono mostrati usando la data di oggi.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="232"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="237"/>
+ <source>Samples are shown using tomorrow's date.</source>
+ <translation>I campioni sono mostrati usando la data di domani.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="250"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="255"/>
+ <source>Your preferred date format to use on DVD menus. %1</source>
+ <extracomment>%1 gives additional info on the date used</extracomment>
+ <translation>Formaro data preferita da usare su i menù DVD. %1</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="259"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="264"/>
+ <source>Time format</source>
+ <translation>Formato ora</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="266"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="271"/>
+ <source>Your preferred time format to display on DVD menus. You must choose a format with "AM" or "PM" in it, otherwise your time display will be 24-hour or "military" time.</source>
+ <translation>Formato ora preferito da visualizzare su i menù DVD. Scegliere un formato con "AM" o "PM", altrimenti l'ora visualizzata sarà di 24 ore o ora "militare".</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="277"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="282"/>
+ <source>Default Encoder Profile</source>
+ <translation>Profilo di codificazione preferito</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="279"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="284"/>
+ <source>HQ</source>
+ <comment>Encoder profile</comment>
+ <translation>HQ</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="280"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="285"/>
+ <source>SP</source>
+ <comment>Encoder profile</comment>
+ <translation>SP</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="281"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="286"/>
+ <source>LP</source>
+ <comment>Encoder profile</comment>
+ <translation>LP</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="282"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="287"/>
+ <source>EP</source>
+ <comment>Encoder profile</comment>
+ <translation>EP</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="286"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="291"/>
+ <source>Default encoding profile to use if a file needs re-encoding.</source>
+ <translation>Profilo di codificazione preferito da usare se un file necessita di ricodifica.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="295"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="300"/>
+ <source>mplex Command</source>
+ <translation>Comando mplex</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="299"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="304"/>
+ <source>Command to run mplex</source>
+ <translation>Comando per eseguire mplex</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="308"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="313"/>
+ <source>dvdauthor command</source>
+ <translation>Comando dvdauthor</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="312"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="317"/>
+ <source>Command to run dvdauthor.</source>
+ <translation>Comando per eseguire dvdauthor.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="321"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="326"/>
+ <source>mkisofs command</source>
+ <translation>Comando mkisofs</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="325"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="330"/>
+ <source>Command to run mkisofs. (Used to create ISO images)</source>
+ <translation>Comando per eseguire mkisofs. (Usato per creare immagini ISO)</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="334"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="339"/>
+ <source>growisofs command</source>
+ <translation>Comando growisofs</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="338"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="343"/>
+ <source>Command to run growisofs. (Used to burn DVDs)</source>
+ <translation>Comando per eseguire growisofs. (Usato per masterizzare DVD)</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="347"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="352"/>
+ <source>M2VRequantiser command</source>
+ <translation>Comando M2VRequantiser</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="351"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="356"/>
+ <source>Command to run M2VRequantiser. Optional - leave blank if you don't have M2VRequantiser installed.</source>
+ <translation>Comando per eseguire M2VRequantiser. Opzionale - lasciare vuoto se non si ha M2VRequantiser installato.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="361"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="366"/>
+ <source>jpeg2yuv command</source>
+ <translation>Comando jpeg2yuv</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="365"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="370"/>
+ <source>Command to run jpeg2yuv. Part of mjpegtools package</source>
+ <translation>Comando per eseguire jpeg2yuv. Parte del pacchetto mjpegtools</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="374"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="379"/>
+ <source>spumux command</source>
+ <translation>Comando spumux</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="378"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="383"/>
+ <source>Command to run spumux. Part of dvdauthor package</source>
+ <translation>Comando per eseguire spumux. Parte del pacchetto dvdauthor</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="387"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="392"/>
+ <source>mpeg2enc command</source>
+ <translation>Comando mpeg2enc</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="391"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="396"/>
+ <source>Command to run mpeg2enc. Part of mjpegtools package</source>
+ <translation>Comando per eseguire mpeg2enc. Parte del pacchetto mjpegtools</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="400"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="405"/>
+ <source>projectx command</source>
+ <translation>Comando projectx</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="404"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="409"/>
+ <source>Command to run ProjectX. Will be used to cut commercials and split mpegs files instead of mythtranscode and mythreplex.</source>
+ <translation>Comando usato per eseguire ProjectX. Sarà usato per tagliare pubblicità e dividere file mpeg2 invece di mythtranscode e mythreplex.</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="414"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="418"/>
+ <source>MythArchive Settings</source>
+ <translation>Impostazioni MythArchive</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="425"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="442"/>
++ <source>MythArchive External Commands</source>
++ <translation>Comandi esterni MythArchive </translation>
++ </message>
++ <message>
+ <source>MythArchive Settings (2)</source>
+ <translation>Impostazioni MythArchive (2)</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="435"/>
++ <location filename="../mytharchive/archivesettings.cpp" line="434"/>
+ <source>DVD Menu Settings</source>
+ <translation>Impostazioni menù DVD</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="443"/>
+ <source>MythArchive External Commands (1)</source>
+ <translation>Comandi esterni MythArchive (1)</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/archivesettings.cpp" line="451"/>
+ <source>MythArchive External Commands (2)</source>
+ <translation>Comandi esterni MythArchive (2)</translation>
+ </message>
+@@ -703,37 +704,37 @@ Questo può richiedere alcuni minuti.</translation>
+ <context>
+ <name>MythControls</name>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="336"/>
++ <location filename="../mytharchive/main.cpp" line="337"/>
+ <source>Toggle use cut list state for selected program</source>
+ <translation>Attivare/Disattivare stato dell'elenco lista tagli per il programma selezionato</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="339"/>
++ <location filename="../mytharchive/main.cpp" line="340"/>
+ <source>Create DVD</source>
+ <translation>Creare DVD</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="341"/>
++ <location filename="../mytharchive/main.cpp" line="342"/>
+ <source>Create Archive</source>
+ <translation>Creare archivio</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="343"/>
++ <location filename="../mytharchive/main.cpp" line="344"/>
+ <source>Import Archive</source>
+ <translation>Importare archivio</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="345"/>
++ <location filename="../mytharchive/main.cpp" line="346"/>
+ <source>View Archive Log</source>
+ <translation>Mostrare log archivio</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="347"/>
++ <location filename="../mytharchive/main.cpp" line="348"/>
+ <source>Play Created DVD</source>
+ <translation>Riproduzione DVD creato</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/main.cpp" line="349"/>
++ <location filename="../mytharchive/main.cpp" line="350"/>
+ <source>Burn DVD</source>
+ <translation>Masterizzare DVD</translation>
+ </message>
+@@ -1730,17 +1731,17 @@ Attendere...</translation>
+ <context>
+ <name>ThumbFinder</name>
+ <message>
+- <location filename="../mytharchive/thumbfinder.cpp" line="882"/>
++ <location filename="../mytharchive/thumbfinder.cpp" line="891"/>
+ <source>Menu</source>
+ <translation>Menù</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/thumbfinder.cpp" line="889"/>
++ <location filename="../mytharchive/thumbfinder.cpp" line="898"/>
+ <source>Exit, Save Thumbnails</source>
+ <translation>Uscire, salvare le anteprime</translation>
+ </message>
+ <message>
+- <location filename="../mytharchive/thumbfinder.cpp" line="890"/>
++ <location filename="../mytharchive/thumbfinder.cpp" line="899"/>
+ <source>Exit, Don't Save Thumbnails</source>
+ <translation>Uscire, non salvare le anteprime</translation>
+ </message>
+diff --git a/mythplugins/mythbrowser/i18n/mythbrowser_it.qm b/mythplugins/mythbrowser/i18n/mythbrowser_it.qm
+index cf7d170429..a0d45caf39 100644
+Binary files a/mythplugins/mythbrowser/i18n/mythbrowser_it.qm and b/mythplugins/mythbrowser/i18n/mythbrowser_it.qm differ
+diff --git a/mythplugins/mythbrowser/i18n/mythbrowser_it.ts b/mythplugins/mythbrowser/i18n/mythbrowser_it.ts
+index 994653e33f..d01eb9e2aa 100644
+--- a/mythplugins/mythbrowser/i18n/mythbrowser_it.ts
++++ b/mythplugins/mythbrowser/i18n/mythbrowser_it.ts
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+-<TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
++<TS version="2.1" language="it_IT">
+ <context>
+ <name>BookmarkEditor</name>
+ <message>
+@@ -210,52 +209,52 @@ Usare l'opzione di menù "Aggiungere segnalibro" per aggiungere n
+ <context>
+ <name>ThemeUI</name>
+ <message>
+- <location filename="themestrings.h" line="24"/>
++ <location filename="themestrings.h" line="25"/>
+ <source>Web Bookmarks</source>
+ <translation>Segnalibri web</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="25"/>
++ <location filename="themestrings.h" line="26"/>
+ <source>Browse your favorite web sites.</source>
+ <translation>Sfogliare i siti web favoriti.</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="26"/>
++ <location filename="themestrings.h" line="27"/>
+ <source>Browser:</source>
+ <translation>Browser:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="17"/>
++ <location filename="themestrings.h" line="18"/>
+ <source>Text Size:</source>
+ <translation>Dimensione testo:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="27"/>
++ <location filename="themestrings.h" line="28"/>
+ <source>Enable browser plugins (Flash, etc):</source>
+ <translation>Abilitare i plugin del browser (Flash, ecc):</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="14"/>
++ <location filename="themestrings.h" line="15"/>
+ <source>Cancel</source>
+ <translation>Annullare</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="22"/>
++ <location filename="themestrings.h" line="23"/>
+ <source>Rating Settings</source>
+ <translation>Impostazioni valutazione</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="15"/>
++ <location filename="themestrings.h" line="16"/>
+ <source>OK</source>
+ <translation>OK</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="28"/>
++ <location filename="themestrings.h" line="29"/>
+ <source>Configure Web Browser</source>
+ <translation>Configurare browser web</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="29"/>
++ <location filename="themestrings.h" line="30"/>
+ <source>You can edit the name, URL, and category for the selected Web Site on this screen.
+
+ When you have finished editing, select "OK" or "Cancel" to continue.</source>
+@@ -279,82 +278,80 @@ Quando si è finito di modificare, selezionare "OK" o "Annulla&qu
+ <translation>URL:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="30"/>
+ <source>Genre:</source>
+- <translation>Genere:</translation>
++ <translation type="vanished">Genere:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="31"/>
+ <source>Channel:</source>
+- <translation>Canale:</translation>
++ <translation type="vanished">Canale:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="32"/>
++ <location filename="themestrings.h" line="31"/>
+ <source>Click to choose from existing categories...</source>
+ <translation>Clic per scegliere dalle categorie esistenti...</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="16"/>
++ <location filename="themestrings.h" line="17"/>
+ <source>Browser Command:</source>
+ <translation>Comando browser:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="33"/>
++ <location filename="themestrings.h" line="32"/>
+ <source>Webbrowser</source>
+ <translation>Browserweb</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="34"/>
++ <location filename="themestrings.h" line="33"/>
+ <source>Bookmarks</source>
+ <translation>Segnalibri</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="35"/>
++ <location filename="themestrings.h" line="34"/>
+ <source>Url</source>
+ <translation>Url</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="36"/>
++ <location filename="themestrings.h" line="35"/>
+ <source>Homepage</source>
+ <translation>Pagina iniziale</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="37"/>
++ <location filename="themestrings.h" line="36"/>
+ <source>Edit Bookmark</source>
+ <translation>Modificare segnalibro</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="38"/>
++ <location filename="themestrings.h" line="14"/>
+ <source>Homepage:</source>
+ <translation>Pagina iniziale:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="39"/>
++ <location filename="themestrings.h" line="37"/>
+ <source>Save</source>
+ <translation>Salvare</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="40"/>
++ <location filename="themestrings.h" line="38"/>
+ <source>Browser Settings</source>
+ <translation>Impostazioni del browser</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="41"/>
++ <location filename="themestrings.h" line="39"/>
+ <source>Enable browser plugins (Flash, etc)</source>
+ <translation>Abilitare i plugin del browser (flash, ecc)</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="20"/>
++ <location filename="themestrings.h" line="21"/>
+ <source>Enable plugins</source>
+ <translation>Abilitare plugin</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="18"/>
++ <location filename="themestrings.h" line="19"/>
+ <source>Enable plugins:</source>
+ <translation>Abilitare plugin:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="19"/>
++ <location filename="themestrings.h" line="20"/>
+ <source>Find</source>
+ <translation>Trovare</translation>
+ </message>
+@@ -364,12 +361,12 @@ Quando si è finito di modificare, selezionare "OK" o "Annulla&qu
+ <translation>Gestore segnalibro</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="21"/>
++ <location filename="themestrings.h" line="22"/>
+ <source>Web Page</source>
+ <translation>Pagina web</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="23"/>
++ <location filename="themestrings.h" line="24"/>
+ <source>%DATE%, %TIME%</source>
+ <translation>%DATE%, %TIME%</translation>
+ </message>
+diff --git a/mythplugins/mythgallery/i18n/mythgallery_it.qm b/mythplugins/mythgallery/i18n/mythgallery_it.qm
+index ea31a46697..97412e5c7f 100644
+Binary files a/mythplugins/mythgallery/i18n/mythgallery_it.qm and b/mythplugins/mythgallery/i18n/mythgallery_it.qm differ
+diff --git a/mythplugins/mythgallery/i18n/mythgallery_it.ts b/mythplugins/mythgallery/i18n/mythgallery_it.ts
+index b70a19949a..9c1438df64 100644
+--- a/mythplugins/mythgallery/i18n/mythgallery_it.ts
++++ b/mythplugins/mythgallery/i18n/mythgallery_it.ts
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
+ <context>
+ <name>(MythGalleryMain)</name>
+ <message>
+@@ -293,251 +292,268 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <translation>quando un nuovo Cd-Rom o dispositivo di archiviazione rimovibile contenenti immagini è rilevato allora caricare MythGallery per visualizzare il contenuto.</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="147"/>
+ <source>Use OpenGL transitions</source>
+ <translation>Usa transizioni OpenGL</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="149"/>
+ <source>Check this to enable OpenGL based slideshow transitions</source>
+ <translation>Abilita le transizioni OpenGL in modalità slideshow</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="157"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="146"/>
++ <source>Transition mode</source>
++ <translation>Modalità transizione</translation>
++ </message>
++ <message>
++ <location filename="../mythgallery/gallerysettings.cpp" line="147"/>
++ <source>Select which kind of slideshow transition to use.</source>
++ <translation>Seleziona il tipo di transizione slideshow da usare.</translation>
++ </message>
++ <message>
++ <location filename="../mythgallery/gallerysettings.cpp" line="149"/>
++ <source>Standard</source>
++ <translation>Standard</translation>
++ </message>
++ <message>
++ <location filename="../mythgallery/gallerysettings.cpp" line="151"/>
++ <source>OpenGL</source>
++ <translation>OpenGL</translation>
++ </message>
++ <message>
++ <location filename="../mythgallery/gallerysettings.cpp" line="161"/>
+ <source>Type of OpenGL transition</source>
+ <translation>Tipo di transizione OpenGL</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="160"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="164"/>
+ <source>none</source>
+ <extracomment>No OpenGL transition</extracomment>
+ <translation>nessuno</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="162"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="166"/>
+ <source>blend (gl)</source>
+ <extracomment>Blend OpenGL transition</extracomment>
+ <translation>Mescola (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="164"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="168"/>
+ <source>zoom blend (gl)</source>
+ <extracomment>Room blend OpenGL transition</extracomment>
+ <translation>zoom mescola (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="166"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="170"/>
+ <source>fade (gl)</source>
+ <extracomment>Fade OpenGL transition</extracomment>
+ <translation>sfuma (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="168"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="172"/>
+ <source>rotate (gl)</source>
+ <extracomment>Rotate OpenGL transition</extracomment>
+ <translation>ruotare (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="170"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="174"/>
+ <source>bend (gl)</source>
+ <extracomment>Bend OpenGL transition</extracomment>
+ <translation>Piegare (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="172"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="176"/>
+ <source>inout (gl)</source>
+ <extracomment>Inout OpenGL transition</extracomment>
+ <translation>inout (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="174"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="178"/>
+ <source>slide (gl)</source>
+ <extracomment>Slide OpenGL transition</extracomment>
+ <translation>diapositiva (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="176"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="180"/>
+ <source>flutter (gl)</source>
+ <extracomment>Flutter OpenGL transition</extracomment>
+ <translation>sventolante (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="178"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="182"/>
+ <source>cube (gl)</source>
+ <extracomment>Cube OpenGL transition</extracomment>
+ <translation>cubo (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="180"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="184"/>
+ <source>Ken Burns (gl)</source>
+ <extracomment>Ken Burns OpenGL transition</extracomment>
+ <translation>Ken burns (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="182"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="186"/>
+ <source>random (gl)</source>
+ <extracomment>Random OpenGL transition</extracomment>
+ <translation>casuale (gl)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="184"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="188"/>
+ <source>This is the type of OpenGL transition used between pictures in slideshow mode.</source>
+ <translation>Tipo di transizione OpenGL usato tra le immagini in modalità slideshow.</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="194"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="198"/>
+ <source>Duration of OpenGL Transition (milliseconds)</source>
+ <translation>Durata delle transizioni OpenGL (millisecondi)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="205"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="209"/>
+ <source>Type of transition</source>
+ <translation>Tipo di transizione</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="207"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="211"/>
+ <source>none</source>
+ <comment>Slideshow transition</comment>
+ <translation>nessuno</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="210"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="214"/>
+ <source>chess board</source>
+ <comment>Slideshow transition</comment>
+ <translation>Scacchiera</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="213"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="217"/>
+ <source>melt down</source>
+ <comment>Slideshow transition</comment>
+ <translation>Sciogliere verso il basso</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="216"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="220"/>
+ <source>sweep</source>
+ <comment>Slideshow transition</comment>
+ <translation>Spazzata</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="219"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="223"/>
+ <source>noise</source>
+ <comment>Slideshow transition</comment>
+ <translation>disturbo</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="222"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="226"/>
+ <source>growing</source>
+ <comment>Slideshow transition</comment>
+ <translation>Crescente</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="225"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="229"/>
+ <source>incoming edges</source>
+ <comment>Slideshow transition</comment>
+ <translation>margine in arrivo</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="228"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="232"/>
+ <source>horizontal lines</source>
+ <comment>Slideshow transition</comment>
+ <translation>linee orinzontali</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="231"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="235"/>
+ <source>vertical lines</source>
+ <comment>Slideshow transition</comment>
+ <translation>linee verticali</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="234"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="238"/>
+ <source>circle out</source>
+ <comment>Slideshow transition</comment>
+ <translation>circolare fuori</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="236"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="240"/>
+ <source>multicircle out</source>
+ <comment>Slideshow transition</comment>
+ <translation>multicircolare fuori</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="239"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="243"/>
+ <source>spiral in</source>
+ <comment>Slideshow transition</comment>
+ <translation>spirale all'interno</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="242"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="246"/>
+ <source>blobs</source>
+ <comment>Slideshow transition</comment>
+ <translation>blobs</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="245"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="249"/>
+ <source>random</source>
+ <comment>Slideshow transition</comment>
+ <translation>casuale</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="249"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="253"/>
+ <source>This is the type of transition used between pictures in slideshow mode.</source>
+ <translation>Il tipo di transizione usata tra le immagini in modalità slideshow.</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="257"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="261"/>
+ <source>Type of background</source>
+ <translation>Tipo di sfondo</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="259"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="263"/>
+ <source>theme</source>
+ <comment>Slideshow background</comment>
+ <translation>tema</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="262"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="266"/>
+ <source>black</source>
+ <comment>Slideshow background</comment>
+ <translation>nero</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="265"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="269"/>
+ <source>white</source>
+ <comment>Slideshow background</comment>
+ <translation>bianco</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="268"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="272"/>
+ <source>This is the type of background for each picture in single view mode.</source>
+ <translation>Il tipo di sfondo usato per ogni immagine in modalità visualizzazione singola.</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="276"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="280"/>
+ <source>Slideshow Delay</source>
+ <translation>Ritardo Slideshow</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="278"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="282"/>
+ <source>This is the number of seconds to display each picture.</source>
+ <translation>Il numero di secondi per cui mostrare una immagine.</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="286"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="290"/>
+ <source>Recurse into directories</source>
+ <translation>Sfogliare le sottocartelle</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="287"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="291"/>
+ <source>Check this to let the slideshow recurse into sub-directories.</source>
+ <translation>Se abilitato, la modalità slideshow mostrerà la immagini contenute nelle sottocartelle.</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="298"/>
+ <source>MythGallery Settings (Slideshow)</source>
+ <translation>Impostazioni MythGallery (slideshow)</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/gallerysettings.cpp" line="328"/>
++ <location filename="../mythgallery/gallerysettings.cpp" line="299"/>
+ <source>MythGallery Settings (General)</source>
+ <translation>Impostazioni MythGallery (generale)</translation>
+ </message>
+@@ -594,6 +610,14 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <source>Create folder</source>
+ <translation>Creare cartella</translation>
+ </message>
++ <message numerus="yes">
++ <location filename="../mythgallery/iconview.cpp" line="1237"/>
++ <source>Found %n image(s)</source>
++ <translation>
++ <numerusform>Trovati %n immagine</numerusform>
++ <numerusform>Trovati %n immagini</numerusform>
++ </translation>
++ </message>
+ <message>
+ <location filename="../mythgallery/iconview.cpp" line="400"/>
+ <source>%1 of %2</source>
+@@ -719,7 +743,7 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <translation type="obsolete">Si</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1217"/>
++ <location filename="../mythgallery/iconview.cpp" line="1232"/>
+ <source>Nothing found to import</source>
+ <translation>Non è stato trovato nulla da importare</translation>
+ </message>
+@@ -728,63 +752,62 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <translation type="obsolete">OK</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1319"/>
++ <location filename="../mythgallery/iconview.cpp" line="1334"/>
+ <source>Deleting %1 images and folders, including any subfolders and files.</source>
+ <translation>Eliminazione di %1 immagini e cartelle, incluse le sottocartelle e i file.</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1382"/>
++ <location filename="../mythgallery/iconview.cpp" line="1397"/>
+ <source>New Folder</source>
+ <translation>Nuova cartella</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1384"/>
++ <location filename="../mythgallery/iconview.cpp" line="1399"/>
+ <source>Create New Folder</source>
+ <translation>Creare nuova cartella</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1449"/>
++ <location filename="../mythgallery/iconview.cpp" line="1464"/>
+ <source>Failed to rename folder</source>
+ <translation>Impossibile rinominare la cartella</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1511"/>
++ <location filename="../mythgallery/iconview.cpp" line="1526"/>
+ <source>Moving marked images...</source>
+ <translation>Spostare le immagini marcate...</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1511"/>
++ <location filename="../mythgallery/iconview.cpp" line="1526"/>
+ <source>Copying marked images...</source>
+ <translation>Copiare le immagini marcate...</translation>
+ </message>
+ <message>
+ <location filename="../mythgallery/iconview.cpp" line="1017"/>
+- <location filename="../mythgallery/iconview.cpp" line="1413"/>
++ <location filename="../mythgallery/iconview.cpp" line="1428"/>
+ <source>Rename</source>
+ <translation>Rinominare</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1168"/>
++ <location filename="../mythgallery/iconview.cpp" line="1183"/>
+ <source>Importing images from camera. Please wait...</source>
+ <translation>Importazione immagini dalla fotocamera. Attendere...</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1198"/>
++ <location filename="../mythgallery/iconview.cpp" line="1213"/>
+ <source>Found an import script (%1) but running them has been disabled in the settings!</source>
+ <translation>Trovato uno script di importazione (%1) ma l'esecuzione è stata disabilitata nelle impostazioni!</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1209"/>
++ <location filename="../mythgallery/iconview.cpp" line="1224"/>
+ <source>Could not read or execute %1</source>
+ <translation>Impossibile leggere o esecuire %1</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1222"/>
+ <source>Found %1 images</source>
+ <translation>Trovati %1 immagini</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/iconview.cpp" line="1451"/>
++ <location filename="../mythgallery/iconview.cpp" line="1466"/>
+ <source>Failed to rename file</source>
+ <translation>Impossibile rinominare il file</translation>
+ </message>
+@@ -924,32 +947,29 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <translation>Attivare/Disattivare scala da fullscreen / adatta</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/main.cpp" line="141"/>
++ <location filename="../mythgallery/main.cpp" line="140"/>
+ <source>MythGallery Media Handler 1/3</source>
+ <translation>MythGallery Gestione Dispositivi 1/3</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/main.cpp" line="142"/>
+ <source>MythGallery mixed data</source>
+ <translation>MythGallery dati misti</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/main.cpp" line="154"/>
++ <location filename="../mythgallery/main.cpp" line="152"/>
+ <source>MythGallery Media Handler 2/3</source>
+ <translation>MythGallery Gestione Dispositivi 2/3</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/main.cpp" line="155"/>
+ <source>MythGallery images</source>
+ <translation>MythGallery immagini</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/main.cpp" line="167"/>
++ <location filename="../mythgallery/main.cpp" line="164"/>
+ <source>MythGallery Media Handler 3/3</source>
+ <translation>MythGallery Gestione Dispositivi 3/3</translation>
+ </message>
+ <message>
+- <location filename="../mythgallery/main.cpp" line="168"/>
+ <source>MythGallery movies</source>
+ <translation>MythGallery film</translation>
+ </message>
+@@ -1156,7 +1176,6 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <context>
+ <name>ThemeUI</name>
+ <message>
+- <location filename="themestrings.h" line="21"/>
+ <source>No images are present in the pictures folder.</source>
+ <translation>Non ci sono immagini nella cartella.</translation>
+ </message>
+@@ -1171,87 +1190,86 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <translation>Nessun immagine trovata nella directory configurata. Essere veramente sicuri di avere impostato il plugin corretto?</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="7"/>
++ <location filename="themestrings.h" line="15"/>
+ <source>Syncing image %1</source>
+ <translation>Sincronizzazione immagine %1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="8"/>
++ <location filename="themestrings.h" line="16"/>
+ <source>Creating thumbnail %1</source>
+ <translation>Creazione anteprima %1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="9"/>
++ <location filename="themestrings.h" line="17"/>
+ <source>Gallery Settings</source>
+ <translation>Impostazioni Galleria</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="10"/>
+ <source>Name of the storage group for the images:</source>
+ <translation>Nome del gruppo di archiviazione per le immagini:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="11"/>
++ <location filename="themestrings.h" line="18"/>
+ <source>Sorting order of the shown images:</source>
+ <translation>Ordinamento delle immagini mostrate:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="12"/>
++ <location filename="themestrings.h" line="19"/>
+ <source>Time to display each image during a slideshow (ms):</source>
+ <translation>Tempo da visualizzare ogni immagine durante una presentazione (ms):</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="13"/>
++ <location filename="themestrings.h" line="20"/>
+ <source>Type of transition between two images:</source>
+ <translation>tipo di transizione tra due immagini:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="14"/>
++ <location filename="themestrings.h" line="21"/>
+ <source>Duration of an image transition (ms):</source>
+ <translation>Durata di una transizione dell'immagine (ms):</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="15"/>
++ <location filename="themestrings.h" line="22"/>
+ <source>Show files that are marked as hidden:</source>
+ <translation>Mostrare i file che sono marcata come nascosti:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="16"/>
++ <location filename="themestrings.h" line="23"/>
+ <source>Clear database contents (Resync required):</source>
+ <translation>Cancellare contenuti del database (richiesta sincronizzazione):</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="17"/>
++ <location filename="themestrings.h" line="24"/>
+ <source>Save</source>
+ <translation>Salva</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="18"/>
++ <location filename="themestrings.h" line="25"/>
+ <source>Cancel</source>
+ <translation>Annulla</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="19"/>
++ <location filename="themestrings.h" line="26"/>
+ <source>Image Loading...</source>
+ <translation>Apertura immagine...</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="20"/>
++ <location filename="themestrings.h" line="7"/>
+ <source>%DATE%, %TIME%</source>
+ <translation>%DATE%, %TIME%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="27"/>
++ <location filename="themestrings.h" line="30"/>
+ <source>Enter your current location, nearest large town or city. In some countries postal codes are also supported.</source>
+ <translation>Inserire la località corrente, più vicino ad una grande paese o città. In molti paesi i codici postali sono anche supportati.</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="28"/>
++ <location filename="themestrings.h" line="31"/>
+ <source>SELECT: View</source>
+ <translation>SELECT: guarda</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="29"/>
++ <location filename="themestrings.h" line="32"/>
+ <source>MENU: Activate Menu</source>
+ <translation>MENU: attiva menù</translation>
+ </message>
+@@ -1260,52 +1278,52 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <translation type="obsolete">Galleria video</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="22"/>
++ <location filename="themestrings.h" line="8"/>
+ <source>Filter/sort images</source>
+ <translation>Filtro/ordinamento immagini</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="23"/>
++ <location filename="themestrings.h" line="27"/>
+ <source>Directory filter:</source>
+ <translation>Filtro directory:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="24"/>
++ <location filename="themestrings.h" line="28"/>
+ <source>Type filter:</source>
+ <translation>Tipo di filtro:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="26"/>
++ <location filename="themestrings.h" line="12"/>
+ <source>Check Filter</source>
+ <translation>Controllare filtro</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="25"/>
++ <location filename="themestrings.h" line="29"/>
+ <source>Sort by:</source>
+ <translation>Ordinamento per:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="30"/>
++ <location filename="themestrings.h" line="13"/>
+ <source>Done</source>
+ <translation>Fatto</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="31"/>
++ <location filename="themestrings.h" line="14"/>
+ <source>Save as default</source>
+ <translation>Salvare come predefinito</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="32"/>
++ <location filename="themestrings.h" line="9"/>
+ <source>Folder filter :</source>
+ <translation>Filtro cartella :</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="33"/>
++ <location filename="themestrings.h" line="10"/>
+ <source>Type filter :</source>
+ <translation>Tipo di filtro :</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="34"/>
++ <location filename="themestrings.h" line="11"/>
+ <source>Sort by :</source>
+ <translation>Ordina per :</translation>
+ </message>
+@@ -1330,7 +1348,6 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ <translation>Modifica: %1</translation>
+ </message>
+ <message numerus="yes">
+- <location filename="../mythgallery/thumbview.cpp" line="138"/>
+ <source>Size: %n bytes</source>
+ <translation>
+ <numerusform>Dimensioni :%n byte</numerusform>
+@@ -1338,6 +1355,14 @@ Verificare che la directory esista, sia leggibile e le impostazioni nel setup di
+ </translation>
+ </message>
+ <message numerus="yes">
++ <location filename="../mythgallery/thumbview.cpp" line="138"/>
++ <source>Size: %n byte(s)</source>
++ <translation>
++ <numerusform>Dimensione: %n Byte</numerusform>
++ <numerusform>Dimensioni: %n Byte</numerusform>
++ </translation>
++ </message>
++ <message numerus="yes">
+ <location filename="../mythgallery/thumbview.cpp" line="139"/>
+ <source>Width: %n pixel(s)</source>
+ <translation>
+diff --git a/mythplugins/mythgame/i18n/mythgame_it.ts b/mythplugins/mythgame/i18n/mythgame_it.ts
+index 1a4acde742..91e781cc71 100644
+--- a/mythplugins/mythgame/i18n/mythgame_it.ts
++++ b/mythplugins/mythgame/i18n/mythgame_it.ts
+@@ -1,66 +1,65 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+-<TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
++<TS version="2.1" language="it_IT">
+ <context>
+ <name>(GameTypes)</name>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="24"/>
++ <location filename="../mythgame/gamesettings.h" line="25"/>
+ <source>OTHER</source>
+ <translation>ALTRO</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="25"/>
++ <location filename="../mythgame/gamesettings.h" line="26"/>
+ <source>AMIGA</source>
+ <translation>AMIGA</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="26"/>
++ <location filename="../mythgame/gamesettings.h" line="27"/>
+ <source>ATARI</source>
+ <translation>ATARI</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="27"/>
++ <location filename="../mythgame/gamesettings.h" line="28"/>
+ <source>GAMEGEAR</source>
+ <translation>GAMEGEAR</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="28"/>
++ <location filename="../mythgame/gamesettings.h" line="29"/>
+ <source>GENESIS/MEGADRIVE</source>
+ <translation>GENESIS/MEGADRIVE</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="29"/>
++ <location filename="../mythgame/gamesettings.h" line="30"/>
+ <source>MAME</source>
+ <translation>MAME</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="30"/>
++ <location filename="../mythgame/gamesettings.h" line="31"/>
+ <source>N64</source>
+ <translation>N64</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="31"/>
++ <location filename="../mythgame/gamesettings.h" line="32"/>
+ <source>NES</source>
+ <translation>NES</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="32"/>
++ <location filename="../mythgame/gamesettings.h" line="33"/>
+ <source>PC GAME</source>
+ <translation>PC GAME</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="33"/>
++ <location filename="../mythgame/gamesettings.h" line="34"/>
+ <source>PCE/TG16</source>
+ <translation>N64</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="34"/>
++ <location filename="../mythgame/gamesettings.h" line="35"/>
+ <source>SEGA/MASTER SYSTEM</source>
+ <translation>SEGA/MASTER SYSTEM</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="35"/>
++ <location filename="../mythgame/gamesettings.h" line="36"/>
+ <source>SNES</source>
+ <translation>SNES</translation>
+ </message>
+@@ -312,27 +311,27 @@ Rimuoverlo dal database?</translation>
+ <context>
+ <name>MythControls</name>
+ <message>
+- <location filename="../mythgame/main.cpp" line="113"/>
++ <location filename="../mythgame/main.cpp" line="120"/>
+ <source>Game frontend</source>
+ <translation>Game frontend</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/main.cpp" line="116"/>
++ <location filename="../mythgame/main.cpp" line="123"/>
+ <source>Toggle the current game as a favorite</source>
+ <translation>Imposta/Rimuovi il gioco corrente come un favorito</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/main.cpp" line="118"/>
++ <location filename="../mythgame/main.cpp" line="125"/>
+ <source>Show incremental search dialog</source>
+ <translation>Mostrare finestra di ricerca incrementale</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/main.cpp" line="120"/>
++ <location filename="../mythgame/main.cpp" line="127"/>
+ <source>Incremental search find next match</source>
+ <translation>Ricerca incrementale trovare prosssima associazione</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/main.cpp" line="122"/>
++ <location filename="../mythgame/main.cpp" line="129"/>
+ <source>Download metadata for current item</source>
+ <translation>Scaricamento metadati per l'oggetto corrente</translation>
+ </message>
+@@ -430,7 +429,7 @@ Rimuoverlo dal database?</translation>
+ <translation>Questa directory sarà il percorso di navigazione predefinito dove assegnare la copertina del gioco.</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="154"/>
++ <location filename="../mythgame/gamesettings.cpp" line="153"/>
+ <source>MythGame Settings -- General</source>
+ <translation>Impostazioni MythGame - generale</translation>
+ </message>
+@@ -438,7 +437,7 @@ Rimuoverlo dal database?</translation>
+ <context>
+ <name>MythGamePlayerEditor</name>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="372"/>
++ <location filename="../mythgame/gamesettings.cpp" line="370"/>
+ <source>Game Player Menu</source>
+ <translation>Menù giocatore</translation>
+ </message>
+@@ -451,37 +450,37 @@ Rimuoverlo dal database?</translation>
+ <translation type="obsolete">Eliminare..</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="347"/>
++ <location filename="../mythgame/gamesettings.cpp" line="345"/>
+ <source>(New Game Player)</source>
+ <translation>(nuovo giocatore)</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="373"/>
++ <location filename="../mythgame/gamesettings.cpp" line="371"/>
+ <source>Edit...</source>
+ <translation>Modificare...</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="373"/>
++ <location filename="../mythgame/gamesettings.cpp" line="371"/>
+ <source>Delete...</source>
+ <translation>Eliminare...</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="397"/>
++ <location filename="../mythgame/gamesettings.cpp" line="395"/>
+ <source>Are you sure you want to delete this item?</source>
+ <translation>Essere veramente sicuri di eliminare questo oggetto?</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="399"/>
++ <location filename="../mythgame/gamesettings.cpp" line="397"/>
+ <source>Yes, delete It</source>
+ <translation>Si, eliminare</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="400"/>
++ <location filename="../mythgame/gamesettings.cpp" line="398"/>
+ <source>No, don't</source>
+ <translation>No</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="332"/>
++ <location filename="../mythgame/gamesettings.cpp" line="330"/>
+ <source>Game Players</source>
+ <translation>Giocatori</translation>
+ </message>
+@@ -489,85 +488,85 @@ Rimuoverlo dal database?</translation>
+ <context>
+ <name>MythGamePlayerSettings</name>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="198"/>
++ <location filename="../mythgame/gamesettings.cpp" line="196"/>
+ <source>Allow games to span multiple ROMs/disks</source>
+ <translation>Permette ai giochi di estendersi su rom/dischi multipli</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="200"/>
++ <location filename="../mythgame/gamesettings.cpp" line="198"/>
+ <source>This setting means that we will look for items like game.1.rom, game.2.rom and consider them a single game.</source>
+ <translation>Questa impostazione significa che si vedranno per oggetti come gioco1.rom, gioco.2.rom e si considera come un gioco singolo.</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="213"/>
++ <location filename="../mythgame/gamesettings.cpp" line="211"/>
+ <source>Command</source>
+ <translation>Comando</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="215"/>
++ <location filename="../mythgame/gamesettings.cpp" line="213"/>
+ <source>Binary and optional parameters. Multiple commands separated with ';' . Use %s for the ROM name. %d1, %d2, %d3 and %d4 represent disks in a multidisk/game. %s auto appended if not specified</source>
+ <translation>Binario e parametri opzionali. Comandi multipli separati con ";" . Usare %s per in nome della rom. %d1, %d2, %d3 e %d4 rapresentando dischi in un multidisco/gioco. %s aggiunge automaticamente se non specificato</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="231"/>
++ <location filename="../mythgame/gamesettings.cpp" line="229"/>
+ <source>Type</source>
+ <extracomment>Game type</extracomment>
+ <translation>Tipo</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="239"/>
++ <location filename="../mythgame/gamesettings.cpp" line="237"/>
+ <source>Type of Game/Emulator. Mostly for informational purposes and has little effect on the function of your system.</source>
+ <translation>Tipo di gioco/emulatore. Sopratutto per lo scopo informativo e ha un piccolo effetto sulla funzione del sistema.</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="252"/>
++ <location filename="../mythgame/gamesettings.cpp" line="250"/>
+ <source>ROM Path</source>
+ <translation>Percorso rom</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="253"/>
++ <location filename="../mythgame/gamesettings.cpp" line="251"/>
+ <source>Location of the ROM files for this emulator</source>
+ <translation>Percorso dei file ROM per questo emulatore</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="264"/>
++ <location filename="../mythgame/gamesettings.cpp" line="262"/>
+ <source>Working Directory</source>
+ <translation>Directory di lavoro</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="265"/>
++ <location filename="../mythgame/gamesettings.cpp" line="263"/>
+ <source>Directory to change to before launching emulator. Blank is usually fine</source>
+ <translation>Directory da passare prima di lanciare l'emulatore. Vuoto di solito va bene</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="277"/>
++ <location filename="../mythgame/gamesettings.cpp" line="275"/>
+ <source>File Extensions</source>
+ <translation>Estensioni file</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="278"/>
++ <location filename="../mythgame/gamesettings.cpp" line="276"/>
+ <source>A comma separated list of all file extensions for this emulator. Blank means any file under ROM PATH is considered to be used with this emulator</source>
+ <translation>Una virgola separa l'elenco di tutti l'estensioni dei file per questo emulatore. Vuoto significa ogni file soto PERCORSO FILE è considerato per essere usato con questo emulatore</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="293"/>
++ <location filename="../mythgame/gamesettings.cpp" line="291"/>
+ <source>Game Player Setup</source>
+ <translation>Impostazione giocatore</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.cpp" line="312"/>
++ <location filename="../mythgame/gamesettings.cpp" line="310"/>
+ <source>%1 (%2)</source>
+ <comment>Game player/emulator display</comment>
+ <extracomment>%1 is the player/emulator name, %2 is the type of player/emulator</extracomment>
+ <translation>%1 (%2)</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="110"/>
++ <location filename="../mythgame/gamesettings.h" line="111"/>
+ <source>Player Name</source>
+ <translation>Nome giocatore</translation>
+ </message>
+ <message>
+- <location filename="../mythgame/gamesettings.h" line="111"/>
++ <location filename="../mythgame/gamesettings.h" line="112"/>
+ <source>Name of this Game and or Emulator</source>
+ <translation>Nome di questo gioco e o emulatore</translation>
+ </message>
+diff --git a/mythplugins/mythmusic/i18n/mythmusic_it.qm b/mythplugins/mythmusic/i18n/mythmusic_it.qm
+index 9b4a1dd4d1..3a20c011f8 100644
+Binary files a/mythplugins/mythmusic/i18n/mythmusic_it.qm and b/mythplugins/mythmusic/i18n/mythmusic_it.qm differ
+diff --git a/mythplugins/mythmusic/i18n/mythmusic_it.ts b/mythplugins/mythmusic/i18n/mythmusic_it.ts
+index 8d17d69d65..a3eefc77fe 100644
+--- a/mythplugins/mythmusic/i18n/mythmusic_it.ts
++++ b/mythplugins/mythmusic/i18n/mythmusic_it.ts
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
+ <context>
+ <name>(MythMusicMain)</name>
+ <message>
+@@ -692,7 +691,6 @@ Copiando in %1</translation>
+ <location filename="../mythmusic/importmusic.cpp" line="1163"/>
+ <source>%1 of %2</source>
+ <comment>Current file copied</comment>
+- <extracomment>%1 is the current position of the file being copied, %2 is the total number of files</extracomment>
+ <translation>%1 di %2</translation>
+ </message>
+ <message>
+@@ -1077,34 +1075,34 @@ GENERE, ARTISTA, ALBUM, TRACCIA, TITOLO, ANNO</translation>
+ <context>
+ <name>MusicCommon</name>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1213"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1215"/>
+ <source>Playing stream.</source>
+ <translation>Esecuzione flusso.</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1242"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1244"/>
+ <source>Buffering stream.</source>
+ <translation>Buffering del flusso.</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1246"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1248"/>
+ <source>Stream paused.</source>
+ <translation>Flusso in pausa.</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1314"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1316"/>
+ <source>kbps</source>
+ <translation>kbps</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1314"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="1320"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1316"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1322"/>
+ <source>kHz</source>
+ <translation>kHz</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1314"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="1320"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1316"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1322"/>
+ <source>ch</source>
+ <translation>ch</translation>
+ </message>
+@@ -1119,7 +1117,7 @@ GENERE, ARTISTA, ALBUM, TRACCIA, TITOLO, ANNO</translation>
+ %1</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1338"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1340"/>
+ <source>Stream stopped.</source>
+ <translation>Flusso fermato.</translation>
+ </message>
+@@ -1132,205 +1130,205 @@ GENERE, ARTISTA, ALBUM, TRACCIA, TITOLO, ANNO</translation>
+ <translation type="obsolete">Errore gestore di decodifica.</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1393"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2259"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1395"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2261"/>
+ <source>Search List...</source>
+ <translation>Ricerca elenco...</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1398"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2287"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1400"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2289"/>
+ <source>Sync List With Current Track</source>
+ <translation>Sincronizzazione dell'elenco con la traccia corrente</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1402"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2288"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1404"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2290"/>
+ <source>Remove Selected Track</source>
+ <translation>Rimuovere la traccia selezionata</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1412"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2291"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1414"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2293"/>
+ <source>Remove All Tracks</source>
+ <translation>Rimuovere tutte le traccie</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1420"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2295"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1422"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2297"/>
+ <source>Save To New Playlist</source>
+ <translation>Salvare nel nuovo Playlist</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1422"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1424"/>
+ <source>Enter new playlist name</source>
+ <translation>Inserire il nome dela nuova Playlist</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1436"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2296"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1438"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2298"/>
+ <source>Save To Existing Playlist</source>
+ <translation>Salvare in un Playlist esistente</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1438"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1440"/>
+ <source>Select the playlist to save to</source>
+ <translation>Selezionare la Playlist per salvarlo</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1451"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2301"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1453"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2303"/>
+ <source>Switch To Move Mode</source>
+ <translation>Cambiare nella Modalità Muovere</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1459"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2299"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1461"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2301"/>
+ <source>Switch To Select Mode</source>
+ <translation>Cambiare nella Modalità di Selezione</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1490"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2324"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1492"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2326"/>
+ <source>No - Exit, Stop Playing</source>
+ <translation>No, - Uscire, fermare la riproduzione</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1496"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2325"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1498"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2327"/>
+ <source>Yes - Exit, Continue Playing</source>
+ <translation>Si, - Uscire, continuare la riproduzione</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1503"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2337"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1505"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2339"/>
+ <source>Change Volume</source>
+ <translation>Cambia volume</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1505"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2338"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1507"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2340"/>
+ <source>Mute</source>
+ <translation>Muto</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1507"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2339"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1509"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2341"/>
+ <source>Previous Track</source>
+ <translation>Traccia precedente</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1509"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2340"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1511"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2342"/>
+ <source>Next Track</source>
+ <translation>Prossima traccia</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1511"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2344"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1513"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2346"/>
+ <source>Jump Back</source>
+ <translation>Salto indietro</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1513"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2345"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1515"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2347"/>
+ <source>Jump Forward</source>
+ <translation>Salto avanti</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1515"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2348"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1517"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2350"/>
+ <source>Play</source>
+ <translation>Riproduzione</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1517"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2349"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1519"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2351"/>
+ <source>Stop</source>
+ <translation>Stop</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1519"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2352"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1521"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2354"/>
+ <source>Pause</source>
+ <translation>Pausa</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1524"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2395"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1526"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2397"/>
+ <source>All Tracks</source>
+ <translation>Tutte le traccie</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1526"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2398"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1528"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2400"/>
+ <source>From CD</source>
+ <translation>Dal CD</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1528"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2402"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1530"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2404"/>
+ <source>Tracks By Current Artist</source>
+ <translation>Traccie dall'artista corrente</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1530"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2404"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1532"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2406"/>
+ <source>Tracks From Current Genre</source>
+ <translation>Traccie dal genere corrente</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1532"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2403"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1534"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2405"/>
+ <source>Tracks From Current Album</source>
+ <translation>Traccie dell'album corrente</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1534"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2405"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1536"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2407"/>
+ <source>Tracks From Current Year</source>
+ <translation>Traccie dall'anno corrente</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1536"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2406"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1538"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2408"/>
+ <source>Tracks With Same Title</source>
+ <translation>Traccie con stesso titolo</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1541"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2432"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1543"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2434"/>
+ <source>Replace Tracks</source>
+ <translation>Ripeti traccie</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1546"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2433"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1548"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2435"/>
+ <source>Add Tracks</source>
+ <translation>Aggiungere traccie</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2128"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2130"/>
+ <source>%1 of %2</source>
+ <translation>%1 di %2</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2137"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2139"/>
+ <source>Default Playlist</source>
+ <translation>Playlist predefinito</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2139"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2141"/>
+ <source>Stream Playlist</source>
+ <translation>Flusso playlist</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2218"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2220"/>
+ <source>View Actions</source>
+ <translation>Vedi Azioni</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2253"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2255"/>
+ <source>Actions</source>
+ <translation>Azioni</translation>
+ </message>
+@@ -1339,36 +1337,36 @@ GENERE, ARTISTA, ALBUM, TRACCIA, TITOLO, ANNO</translation>
+ <translation type="obsolete">Cambiare vista</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2263"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2281"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2265"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2283"/>
+ <source>Playlist Options</source>
+ <translation>Opzioni playlist</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2264"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2374"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2266"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2376"/>
+ <source>Set Shuffle Mode</source>
+ <translation>Impostare modalità riproduzione casuale</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2265"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2359"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2267"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2361"/>
+ <source>Set Repeat Mode</source>
+ <translation>Impostare modalità ripetizione</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2268"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2270"/>
+ <source>Player Options</source>
+ <translation>Opzioni lettore</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2271"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2391"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2273"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2393"/>
+ <source>Quick Playlists</source>
+ <translation>Playlist rapido</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2274"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2276"/>
+ <source>Change Visualizer</source>
+ <translation>Cambiare visualizzazione</translation>
+ </message>
+@@ -1385,8 +1383,8 @@ GENERE, ARTISTA, ALBUM, TRACCIA, TITOLO, ANNO</translation>
+ <translation type="obsolete">Editor playlist- galleria</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1382"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2238"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1384"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2240"/>
+ <source>Search for Music</source>
+ <translation>Ricerca per la musica</translation>
+ </message>
+@@ -1395,39 +1393,39 @@ GENERE, ARTISTA, ALBUM, TRACCIA, TITOLO, ANNO</translation>
+ <translation type="obsolete">Riproduzione flusso radio</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1373"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2241"/>
+- <location filename="../mythmusic/streamview.cpp" line="98"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1375"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2243"/>
++ <location filename="../mythmusic/streamview.cpp" line="100"/>
+ <source>Fullscreen Visualizer</source>
+ <translation>Visualizzazione schermo intero</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1375"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2227"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1377"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2229"/>
+ <source>Playlist Editor</source>
+ <translation>Editor Playlist</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1384"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2223"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1386"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2225"/>
+ <source>Switch To Gallery View</source>
+ <translation>Cambia nella vista Galleria</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1386"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2225"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1388"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2227"/>
+ <source>Switch To Tree View</source>
+ <translation>Cambia nella vista ad albero</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="1388"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2244"/>
+- <location filename="../mythmusic/streamview.cpp" line="99"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="1390"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2246"/>
++ <location filename="../mythmusic/streamview.cpp" line="101"/>
+ <source>Lyrics</source>
+ <translation>Testi canzoni</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2309"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2311"/>
+ <source>Exiting Music Player.
+
+ Do you want to continue playing in the background?</source>
+@@ -1436,64 +1434,64 @@ Do you want to continue playing in the background?</source>
+ Continuare la riproduzione in secondo piano?</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2326"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2328"/>
+ <source>Cancel</source>
+ <translation>Annulare</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2333"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2335"/>
+ <source>Player Actions</source>
+ <translation>Azioni lettore</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2363"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2378"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2365"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2380"/>
+ <source>None</source>
+ <translation>Nessuno</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2364"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2366"/>
+ <source>Track</source>
+ <translation>Traccia</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2365"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2367"/>
+ <source>All</source>
+ <translation>Tutti</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2379"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2381"/>
+ <source>Random</source>
+ <translation>Casuale</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2380"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2382"/>
+ <source>Smart</source>
+ <translation>Veloce</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2381"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2383"/>
+ <source>Album</source>
+ <translation>Album</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2382"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2384"/>
+ <source>Artist</source>
+ <translation>Artista </translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2414"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2416"/>
+ <source>Choose Visualizer</source>
+ <translation>Scegliere visualizzatore</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2428"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2430"/>
+ <source>Add to Playlist Options</source>
+ <translation>Aggiungere alle opzioni playlist</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musiccommon.cpp" line="2246"/>
+- <location filename="../mythmusic/musiccommon.cpp" line="2545"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2248"/>
++ <location filename="../mythmusic/musiccommon.cpp" line="2547"/>
+ <source>More Options</source>
+ <translation>Maggiori opzioni</translation>
+ </message>
+@@ -1526,11 +1524,15 @@ Continuare la riproduzione in secondo piano?</translation>
+ <translation>MythMusic</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musicplayer.cpp" line="349"/>
+ <source>Got to many track unavailable errors. Maybe the host with the music on is off-line?</source>
+ <translation>Arrivate molte traccie non disponibili con errori. Potrebbe essere l'host con la musica non in linea?</translation>
+ </message>
+ <message>
++ <location filename="../mythmusic/musicplayer.cpp" line="349"/>
++ <source>Got too many track unavailable errors. Maybe the host with the music on is off-line?</source>
++ <translation>Arrivate molte traccie non disponibili con errori. Potrebbe essere l'host con la musica non in linea?</translation>
++ </message>
++ <message>
+ <location filename="../mythmusic/musicplayer.cpp" line="357"/>
+ <source>Track Unavailable</source>
+ <translation>Traccia non disponibile</translation>
+@@ -1581,13 +1583,13 @@ Resettare e provare di nuovo</translation>
+ <translation>Errore gestore di decodifica</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musicplayer.cpp" line="1446"/>
++ <location filename="../mythmusic/musicplayer.cpp" line="1451"/>
+ <source>%1% (Muted)</source>
+ <comment>Zero Audio Volume</comment>
+ <translation>%1% (Muto)</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/musicplayer.cpp" line="1450"/>
++ <location filename="../mythmusic/musicplayer.cpp" line="1455"/>
+ <source>Muted</source>
+ <translation>Escluso</translation>
+ </message>
+@@ -1705,7 +1707,6 @@ Resettare e provare di nuovo</translation>
+ <translation>Aggiornare albero musicale</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="878"/>
+ <source>MythMusic audio files</source>
+ <translation>MythMusic file audio</translation>
+ </message>
+@@ -1747,42 +1748,46 @@ Resettare e provare di nuovo</translation>
+ <translation>Attivare/disattivare modalità ripetizione</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="856"/>
++ <location filename="../mythmusic/main.cpp" line="854"/>
++ <source>Switch to previous radio stream</source>
++ <translation>Ritorna al precedente flusso radio</translation>
++ </message>
++ <message>
++ <location filename="../mythmusic/main.cpp" line="858"/>
+ <source>Switch to the current playlist view</source>
+ <translation>Cambiare vista della Playlist corrente</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="858"/>
++ <location filename="../mythmusic/main.cpp" line="860"/>
+ <source>Switch to the playlist editor tree view</source>
+ <translation>Cambiare vista struttura dell'editor della Playlist</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="860"/>
++ <location filename="../mythmusic/main.cpp" line="862"/>
+ <source>Switch to the playlist editor gallery view</source>
+ <translation>Cambiare vista galleria dell'editor della Playlist</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="862"/>
++ <location filename="../mythmusic/main.cpp" line="864"/>
+ <source>Switch to the search view</source>
+ <translation>Cambiare alla vista ricerca</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="864"/>
++ <location filename="../mythmusic/main.cpp" line="866"/>
+ <source>Switch to the fullscreen visualiser view</source>
+ <translation>Cambiare vista a schermo intero dell'effetto grafico</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="866"/>
++ <location filename="../mythmusic/main.cpp" line="868"/>
+ <source>Switch to the radio stream view</source>
+ <translation>Cambiare vista al flusso radio</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="870"/>
++ <location filename="../mythmusic/main.cpp" line="871"/>
+ <source>MythMusic Media Handler 1/2</source>
+ <translation>Gestore multimediale MythMusic 1/2</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/main.cpp" line="871"/>
+ <source>MythMusic audio CD</source>
+ <translation>MythMusic CD audio</translation>
+ </message>
+@@ -3044,12 +3049,12 @@ Nome: %1</translation>
+ <translation>Annullare l'estrazione del CD?</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/cdrip.cpp" line="1671"/>
++ <location filename="../mythmusic/cdrip.cpp" line="1672"/>
+ <source>Copying Track ...</source>
+ <translation>Copiando la traccia ...</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/cdrip.cpp" line="1700"/>
++ <location filename="../mythmusic/cdrip.cpp" line="1701"/>
+ <source>The encoder failed to create the file.
+ Do you have write permissions for the music directory?</source>
+ <translation>Il decodificare ha fallito la creazione del file.
+@@ -3187,19 +3192,44 @@ Si vuole eliminare il file (i file) permanentemente?</translation>
+ <context>
+ <name>SearchStream</name>
+ <message>
+- <location filename="../mythmusic/streamview.cpp" line="823"/>
+- <location filename="../mythmusic/streamview.cpp" line="895"/>
+- <location filename="../mythmusic/streamview.cpp" line="916"/>
+ <source><All Stations></source>
+ <translation><Tutte le stazioni></translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/streamview.cpp" line="824"/>
+- <location filename="../mythmusic/streamview.cpp" line="905"/>
+- <location filename="../mythmusic/streamview.cpp" line="917"/>
++ <location filename="../mythmusic/streamview.cpp" line="915"/>
++ <location filename="../mythmusic/streamview.cpp" line="932"/>
++ <location filename="../mythmusic/streamview.cpp" line="1043"/>
++ <source><All Broadcasters></source>
++ <translation><Tutti Broadcasters></translation>
++ </message>
++ <message>
++ <location filename="../mythmusic/streamview.cpp" line="939"/>
++ <location filename="../mythmusic/streamview.cpp" line="956"/>
++ <location filename="../mythmusic/streamview.cpp" line="1044"/>
+ <source><All Genres></source>
+ <translation><Tutti i generi></translation>
+ </message>
++ <message>
++ <location filename="../mythmusic/streamview.cpp" line="965"/>
++ <location filename="../mythmusic/streamview.cpp" line="982"/>
++ <location filename="../mythmusic/streamview.cpp" line="1029"/>
++ <location filename="../mythmusic/streamview.cpp" line="1046"/>
++ <source><All Countries></source>
++ <translation><Tutte Nazioni></translation>
++ </message>
++ <message>
++ <location filename="../mythmusic/streamview.cpp" line="992"/>
++ <location filename="../mythmusic/streamview.cpp" line="1009"/>
++ <location filename="../mythmusic/streamview.cpp" line="1028"/>
++ <location filename="../mythmusic/streamview.cpp" line="1045"/>
++ <source><All Languages></source>
++ <translation><Tutte le Lingue></translation>
++ </message>
++ <message>
++ <location filename="../mythmusic/streamview.cpp" line="1133"/>
++ <source>Updating stream list. Please Wait ...</source>
++ <translation>Aggiornamento elenco flussi. Attendere...</translation>
++ </message>
+ </context>
+ <context>
+ <name>SearchView</name>
+@@ -3621,35 +3651,41 @@ Si vuole eliminare il file (i file) permanentemente?</translation>
+ <context>
+ <name>StreamView</name>
+ <message>
+- <location filename="../mythmusic/streamview.cpp" line="89"/>
++ <location filename="../mythmusic/streamview.cpp" line="91"/>
+ <source>Stream Actions</source>
+ <translation>Azioni flusso</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/streamview.cpp" line="90"/>
+- <location filename="../mythmusic/streamview.cpp" line="301"/>
++ <location filename="../mythmusic/streamview.cpp" line="92"/>
++ <location filename="../mythmusic/streamview.cpp" line="309"/>
+ <source>Add Stream</source>
+ <translation>Aggiungere flusso</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/streamview.cpp" line="94"/>
+- <location filename="../mythmusic/streamview.cpp" line="315"/>
++ <location filename="../mythmusic/streamview.cpp" line="96"/>
++ <location filename="../mythmusic/streamview.cpp" line="323"/>
+ <source>Edit Stream</source>
+ <translation>Modificare flusso</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/streamview.cpp" line="95"/>
+- <location filename="../mythmusic/streamview.cpp" line="311"/>
++ <location filename="../mythmusic/streamview.cpp" line="97"/>
++ <location filename="../mythmusic/streamview.cpp" line="319"/>
+ <source>Remove Stream</source>
+ <translation>Rimuovere flusso</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/streamview.cpp" line="101"/>
++ <location filename="../mythmusic/streamview.cpp" line="103"/>
+ <source>More Options</source>
+ <translation>Maggiori opzioni</translation>
+ </message>
+ <message>
+- <location filename="../mythmusic/streamview.cpp" line="396"/>
++ <location filename="../mythmusic/streamview.cpp" line="411"/>
++ <source>Are you sure you want to delete this Stream?
++Broadcaster: %1 - Channel: %2</source>
++ <translation>Essere veramente sicuri di cancellare questo flusso?
++Broadcaster:%1 - canale:%2</translation>
++ </message>
++ <message>
+ <source>Are you sure you want to delete this Stream?
+ Station: %1 - Channel: %2</source>
+ <translation>Essere veramente sicuri di cancellare questo flusso?
+@@ -3659,12 +3695,12 @@ Stazione:%1 - canale:%2</translation>
+ <context>
+ <name>ThemeUI</name>
+ <message>
+- <location filename="themestrings.h" line="169"/>
++ <location filename="themestrings.h" line="230"/>
+ <source>Please Wait...</source>
+ <translation>Attendere...</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="170"/>
++ <location filename="themestrings.h" line="231"/>
+ <source>Track Information</source>
+ <translation>Informazioni traccia</translation>
+ </message>
+@@ -3704,12 +3740,12 @@ Stazione:%1 - canale:%2</translation>
+ <translation>Valutazione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="171"/>
++ <location filename="themestrings.h" line="232"/>
+ <source>Play Count:</source>
+ <translation>Numero di riproduzioni:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="172"/>
++ <location filename="themestrings.h" line="233"/>
+ <source>Last Play:</source>
+ <translation>Ultima riproduzione:</translation>
+ </message>
+@@ -4143,42 +4179,127 @@ Stazione:%1 - canale:%2</translation>
+ <translation>Impostazioni generali</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="101"/>
++ <location filename="themestrings.h" line="155"/>
++ <source>Search Radio Station</source>
++ <translation>Ricerca stazioni radio</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="156"/>
++ <source>Found:</source>
++ <translation>Trovati:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="157"/>
++ <source>Album: %1</source>
++ <translation>Album: %1</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="158"/>
++ <source>Genre: %1</source>
++ <translation>Genere: %1</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="159"/>
++ <source>Track: %1</source>
++ <translation>Traccia: %1</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="162"/>
++ <source>Played: %1 times</source>
++ <translation>Riprodotto: %1 tempo</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="163"/>
++ <source>Repeat Mode:</source>
++ <translation>Modalità ripetizone:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="164"/>
++ <source>Off</source>
++ <translation>Disattivo</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="165"/>
++ <source>All</source>
++ <translation>Tutti</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="166"/>
++ <source>Shuffle Mode:</source>
++ <translation>Modalità riproduzione casuale:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="167"/>
++ <source>Random</source>
++ <translation>Casuale</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="168"/>
++ <source>Smart</source>
++ <translation>Veloce</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="170"/>
++ <source>Playlist:</source>
++ <translation>Playlist:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="171"/>
++ <source>Next song:</source>
++ <translation>Prossima canzone:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="172"/>
++ <source>%NEXTTITLE% by %NEXTARTIST%</source>
++ <translation>%NEXTTITLE% di %NEXTARTIST%</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="173"/>
++ <source>By %ARTIST%</source>
++ <translation>Di %ARTIST%</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="174"/>
++ <source>On %ALBUM%</source>
++ <translation>Su %ALBUM%</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="178"/>
+ <source>Directory to hold music:</source>
+ <translation>Cartella che contiene i file musicali:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="102"/>
++ <location filename="themestrings.h" line="101"/>
+ <source>CD device:</source>
+ <translation>Dispositivo CD:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="103"/>
++ <location filename="themestrings.h" line="102"/>
+ <source>Audio device:</source>
+ <translation>Dispositivo audio:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="104"/>
++ <location filename="themestrings.h" line="103"/>
+ <source>Convert stereo to 5.1 sound:</source>
+ <translation>Convertire stereo in suono 5.1:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="105"/>
++ <location filename="themestrings.h" line="104"/>
+ <source>Filename Format:</source>
+ <translation>Formatodel nome del file:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="106"/>
++ <location filename="themestrings.h" line="105"/>
+ <source>Ignore ID3 Tags:</source>
+ <translation>Ignorare etichette ID3:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="163"/>
++ <location filename="themestrings.h" line="229"/>
+ <source>Tag Encoding:</source>
+ <translation>Codifica etichetta:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="107"/>
++ <location filename="themestrings.h" line="106"/>
+ <source>Allow metadata to be written to tags:</source>
+ <translation>Permettere ai metadati di essere scritti dalle etichette:</translation>
+ </message>
+@@ -4203,792 +4324,942 @@ Stazione:%1 - canale:%2</translation>
+ <translation>%GENRE%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="108"/>
++ <location filename="themestrings.h" line="107"/>
+ <source>Player Settings</source>
+ <translation>Impostazione lettore</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="109"/>
++ <location filename="themestrings.h" line="108"/>
+ <source>Resume mode:</source>
+ <translation>Modalità ripresa:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="110"/>
++ <location filename="themestrings.h" line="109"/>
+ <source>Action on exit:</source>
+ <translation>Azione all'uscita:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="111"/>
++ <location filename="themestrings.h" line="110"/>
+ <source>Automatically lookup CDs:</source>
+ <translation>Ricerca automatica dei CD:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="112"/>
++ <location filename="themestrings.h" line="111"/>
+ <source>Automatically Play CDs:</source>
+ <translation>Riproduzione automatica dei CD:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="113"/>
++ <location filename="themestrings.h" line="112"/>
+ <source>Rating Settings</source>
+ <translation>Impostazioni valutazione</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="114"/>
++ <location filename="themestrings.h" line="113"/>
+ <source>Rating Weight:</source>
+ <translation>Peso della valutazione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="115"/>
++ <location filename="themestrings.h" line="114"/>
+ <source>Play Count Weight:</source>
+ <translation>Peso del contatore ascolti:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="116"/>
++ <location filename="themestrings.h" line="115"/>
+ <source>Last Play Weight:</source>
+ <translation>Peso dell'ultima riproduzione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="117"/>
++ <location filename="themestrings.h" line="116"/>
+ <source>Random Weight:</source>
+ <translation>Peso casuale:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="118"/>
++ <location filename="themestrings.h" line="117"/>
+ <source>Ripper Settings</source>
+ <translation>Impostazioni estrazione</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="119"/>
++ <location filename="themestrings.h" line="118"/>
+ <source>Paranoia Level:</source>
+ <translation>Livello paranoia:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="120"/>
++ <location filename="themestrings.h" line="119"/>
+ <source>File storage location:</source>
+ <translation>Posizione del file di archiviazione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="121"/>
++ <location filename="themestrings.h" line="120"/>
+ <source>Replace space with underscore:</source>
+ <translation>Sostituire spazio con trattino basso:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="122"/>
++ <location filename="themestrings.h" line="121"/>
+ <source>Encoding Type:</source>
+ <translation>Tipo di codifica:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="123"/>
++ <location filename="themestrings.h" line="122"/>
+ <source>Default Rip Quality:</source>
+ <translation>Qualità predefinita di estrazione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="124"/>
++ <location filename="themestrings.h" line="123"/>
+ <source>Use variable bitrates:</source>
+ <translation>Usare bitrate variabile:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="125"/>
++ <location filename="themestrings.h" line="124"/>
+ <source>Automatically eject CDs after ripping:</source>
+ <translation>Espulsione automatica dei CD dopo l'estrazione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="126"/>
++ <location filename="themestrings.h" line="125"/>
+ <source>Script Path:</source>
+ <translation>Percorso script:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="127"/>
++ <location filename="themestrings.h" line="126"/>
+ <source>Burn Settings</source>
+ <translation>Impostazioni masterizzazione</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="128"/>
++ <location filename="themestrings.h" line="127"/>
+ <source>Enable CD Writing:</source>
+ <translation>Abilitare la scrittura su CD:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="129"/>
++ <location filename="themestrings.h" line="128"/>
+ <source>CD-Writer Device:</source>
+ <translation>Dispositivo masterizzatore CD:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="130"/>
++ <location filename="themestrings.h" line="129"/>
+ <source>Disk Size:</source>
+ <translation>Dimensione disco:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="131"/>
++ <location filename="themestrings.h" line="130"/>
+ <source>CD Write Speed:</source>
+ <translation>Velocità di scrittura CD:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="132"/>
++ <location filename="themestrings.h" line="131"/>
+ <source>CD Blanking Type:</source>
+ <translation>Tipo di cancellazione CD:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="133"/>
++ <location filename="themestrings.h" line="132"/>
+ <source>Enable directories on MP3 Creation:</source>
+ <translation>Abilitare le directori di creazione MP3:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="134"/>
++ <location filename="themestrings.h" line="133"/>
+ <source>Visualiser Settings</source>
+ <translation>Impostazioni effetti grafici</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="135"/>
++ <location filename="themestrings.h" line="134"/>
+ <source>Change Visualizer on each song:</source>
+ <translation>Cambiare effetto grafico su ogni canzone:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="136"/>
++ <location filename="themestrings.h" line="135"/>
+ <source>Randomize Visualizer order:</source>
+ <translation>Ordine effetto grafico casuale:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="137"/>
++ <location filename="themestrings.h" line="136"/>
+ <source>Width for Visual Scaling:</source>
+ <translation>Larghezza per la proporzione visiva:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="138"/>
++ <location filename="themestrings.h" line="137"/>
+ <source>Height for Visual Scaling:</source>
+ <translation>Altezza per la proporzione visiva:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="139"/>
++ <location filename="themestrings.h" line="138"/>
+ <source>Repeat: Off</source>
+ <translation>Ripetizione: off</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="140"/>
++ <location filename="themestrings.h" line="139"/>
+ <source>Repeat: Track</source>
+ <translation>Ripetizione: traccia</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="141"/>
++ <location filename="themestrings.h" line="140"/>
+ <source>Repeat: All</source>
+ <translation>Ripetizione: tutto</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="142"/>
++ <location filename="themestrings.h" line="141"/>
+ <source>Shuffle: Off</source>
+ <translation>Ripr.casuale: off</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="143"/>
++ <location filename="themestrings.h" line="142"/>
+ <source>Shuffle: Random</source>
+ <translation>Ripr.casuale: casuale</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="144"/>
++ <location filename="themestrings.h" line="143"/>
+ <source>Shuffle: Intelligent</source>
+ <translation>Ripr.casuale: intelligente</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="145"/>
++ <location filename="themestrings.h" line="144"/>
+ <source>Shuffle: Album</source>
+ <translation>Ripr.casuale: album</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="146"/>
++ <location filename="themestrings.h" line="145"/>
+ <source>Shuffle: Artist</source>
+ <translation>Ripr.casuale: artista</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="147"/>
++ <location filename="themestrings.h" line="179"/>
++ <source>Resume mode (Playlist Editor):</source>
++ <translation>Modalità ripristino (Editor Playlist):</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="180"/>
++ <source>Resume mode (Radio):</source>
++ <translation>Modalità ripristino (Radio):</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="181"/>
++ <source>Action on jumppoint:</source>
++ <translation>Azione al punto di salto:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="182"/>
++ <source>Burning Settings</source>
++ <translation>Impostazioni masterizzazione</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="184"/>
+ <source>Internet Stream View</source>
+ <translation>Vedere flusso internet</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="150"/>
++ <location filename="themestrings.h" line="161"/>
+ <source>Last played: %1</source>
+ <translation>Ultima riproduzione: %1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="160"/>
++ <location filename="themestrings.h" line="175"/>
+ <source>Playing:</source>
+ <translation>Riproduzione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="161"/>
++ <location filename="themestrings.h" line="176"/>
+ <source>None</source>
+ <translation>Nessuno</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="162"/>
++ <location filename="themestrings.h" line="177"/>
+ <source>%TITLE% by %ARTIST%</source>
+ <translation>%TITLE% di %ARTIST%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="164"/>
++ <location filename="themestrings.h" line="209"/>
+ <source>Clears the entire database:</source>
+ <translation>Cancellare l'intero database:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="165"/>
++ <location filename="themestrings.h" line="210"/>
+ <source>Visualizer Settings</source>
+ <translation>Impostazioni effetti grafici</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="166"/>
++ <location filename="themestrings.h" line="237"/>
+ <source>Radio Stream</source>
+ <translation>Flusso radio</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="167"/>
++ <location filename="themestrings.h" line="238"/>
+ <source>%channel% (%station%)</source>
+ <translation>%channel% (%station%)</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="168"/>
++ <location filename="themestrings.h" line="239"/>
+ <source>%CHANNEL% (%STATION%)</source>
+ <translation>%CHANNEL% (%STATION%)</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="173"/>
++ <location filename="themestrings.h" line="146"/>
+ <source>%DATE%, %TIME%</source>
+ <translation>%DATE%, %TIME%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="174"/>
+ <source>Import Coverart</source>
+ <translation>Importare copertina</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="175"/>
+ <source>Browse cover images on your system.</source>
+ <translation>Sfogliare immagini della copertina sul tuo sistema.</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="176"/>
+ <source>Previous</source>
+ <translation>Precedente</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="177"/>
+ <source>Next</source>
+ <translation>Prossimo</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="178"/>
+ <source>Import local music files.</source>
+ <translation>Importare file locali di musica.</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="179"/>
+ <source>Track is part of a compilation</source>
+ <translation>La traccia è parte di una raccolta</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="180"/>
+ <source>Click to browse directories...</source>
+ <translation>Clic per navigare nelle directory...</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="181"/>
+ <source>Choose Coverart</source>
+ <translation>Scegliere copertina</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="182"/>
+ <source>Rip A CD</source>
+ <translation>Estrazione CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="183"/>
+ <source>Input metadata for the CD you have inserted.</source>
+ <translation>Inserire i metadati per il CD inserito.</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="184"/>
+ <source>Album Name:</source>
+ <translation>Nome album:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="185"/>
+ <source>Album Year:</source>
+ <translation>Anno album:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="186"/>
+ <source>Album is a compilation</source>
+ <translation>L'album è una raccolta</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="187"/>
+ <source>Click here to search existing artists...</source>
+ <translation>Clic qui per cercare artisti esistenti...</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="188"/>
+ <source>Click here to search existing albums...</source>
+ <translation>Clic qui per cercare album esistenti...</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="189"/>
+ <source>Click here to search existing genres...</source>
+ <translation>Clic qui per cercare generi esistenti...</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="190"/>
+ <source>Track Title:</source>
+ <translation>Controllare traccia:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="191"/>
+ <source>Track Artist:</source>
+ <translation>Controllare artista:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="192"/>
+ <source>Track:</source>
+ <translation>Traccia:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="193"/>
+ <source>Click Here to Select Artist</source>
+ <translation>Clic qui per selezionare l'artista</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="194"/>
+ <source>Click Here to Select Compilation</source>
+ <translation>Clic qui per selezionare la raccolta</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="195"/>
+ <source>Click Here to Select Album</source>
+ <translation>Clic qui per selezionare l'album</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="196"/>
+ <source>Click Here to Select Genre</source>
+ <translation>Clic qui per selezionare il genere</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="197"/>
+ <source>-</source>
+ <translation>-</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="198"/>
+ <source>+</source>
+ <translation>+</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="199"/>
++ <location filename="themestrings.h" line="212"/>
+ <source>Playlist View</source>
+ <translation>Vista playlist</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="200"/>
++ <location filename="themestrings.h" line="213"/>
+ <source>From the album %ALBUM% by the artist %ARTIST%</source>
+ <translation>Dall'album %ALBUM% dell'artista %ARTIST%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="201"/>
++ <location filename="themestrings.h" line="214"/>
+ <source>Playlist Tree View</source>
+ <translation>Vista struttura playlist</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="202"/>
++ <location filename="themestrings.h" line="215"/>
+ <source>Playlist Gallery View</source>
+ <translation>Vista galleria playlist</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="203"/>
++ <location filename="themestrings.h" line="216"/>
+ <source>Search View</source>
+ <translation>Ricerca vista</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="204"/>
++ <location filename="themestrings.h" line="217"/>
+ <source>Track Details</source>
+ <translation>Dettagli traccia</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="205"/>
++ <location filename="themestrings.h" line="218"/>
+ <source>Compilation Artist:</source>
+ <translation>Raccolta artista:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="206"/>
++ <location filename="themestrings.h" line="219"/>
+ <source>Length: %1</source>
+ <translation>Lunghezza: %1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="207"/>
++ <location filename="themestrings.h" line="160"/>
+ <source>Year: %1</source>
+ <translation>Anno: %1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="208"/>
++ <location filename="themestrings.h" line="193"/>
++ <source>Track Lyrics</source>
++ <translation>Testo della traccia</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="194"/>
++ <source>Add/Edit Lyrics</source>
++ <translation>Aggiungi/Modifica Testo</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="195"/>
++ <source>Grabber:</source>
++ <translation>Grabber:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="196"/>
++ <source>Syncronized</source>
++ <translation>Sincronizzato</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="197"/>
++ <source>Lyrics:</source>
++ <translation>Testi canzoni:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="220"/>
+ <source>Track Count:</source>
+ <translation>Contatore traccia:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="209"/>
++ <location filename="themestrings.h" line="221"/>
+ <source>Date added:</source>
+ <translation>Data aggiunta:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="212"/>
++ <location filename="themestrings.h" line="223"/>
+ <source>: %VOLUMEPERCENT%</source>
+ <translation>: %VOLUMEPERCENT%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="213"/>
++ <location filename="themestrings.h" line="224"/>
+ <source>Position:</source>
+ <translation>Posizione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="214"/>
++ <location filename="themestrings.h" line="225"/>
+ <source>CD Ripping</source>
+ <translation>Cd estrazione</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="216"/>
++ <location filename="themestrings.h" line="226"/>
+ <source>Status:</source>
+ <translation>Stato:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="217"/>
++ <location filename="themestrings.h" line="227"/>
+ <source>Search Term</source>
+ <translation>Ricerca termine</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="218"/>
++ <location filename="themestrings.h" line="228"/>
+ <source>Ok</source>
+ <translation>Ok</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="219"/>
++ <location filename="themestrings.h" line="240"/>
+ <source>Convert stereo to 5.1 sound</source>
+ <translation>Convertire stereo in suono 5.1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="220"/>
++ <location filename="themestrings.h" line="241"/>
+ <source>Ignore ID3 Tags</source>
+ <translation>Ignorare etichette ID3</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="221"/>
++ <location filename="themestrings.h" line="242"/>
+ <source>Allow metadata to be written to tags</source>
+ <translation>Permettere ai metadati di essere scritti dalle etichette</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="222"/>
++ <location filename="themestrings.h" line="243"/>
++ <source>Resume mode (Playlist):</source>
++ <translation>Modalità ripristino (Playlist):</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="244"/>
+ <source>Automatically lookup CDs</source>
+ <translation>Ricerca automatica dei CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="223"/>
++ <location filename="themestrings.h" line="245"/>
+ <source>Automatically Play CDs</source>
+ <translation>Riproduzione automatica dei CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="224"/>
++ <location filename="themestrings.h" line="246"/>
+ <source>Replace space with underscore</source>
+ <translation>Sostituire spazio con trattino basso</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="225"/>
++ <location filename="themestrings.h" line="247"/>
+ <source>Use variable bitrates</source>
+ <translation>Usare bitrate variabile</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="226"/>
++ <location filename="themestrings.h" line="248"/>
+ <source>Automatically eject CDs after ripping</source>
+ <translation>Espulsione automatica dei CD dopo l'estrazione</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="227"/>
++ <location filename="themestrings.h" line="249"/>
+ <source>Enable CD Writing</source>
+ <translation>Abilitare la scrittura su CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="228"/>
++ <location filename="themestrings.h" line="250"/>
+ <source>Enable directories on MP3 Creation</source>
+ <translation>Abilitare le directory di creazione MP3</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="229"/>
++ <location filename="themestrings.h" line="251"/>
+ <source>Change Visualizer on each song</source>
+ <translation>Cambiare effetto grafico su ogni canzone</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="230"/>
++ <location filename="themestrings.h" line="252"/>
+ <source>Randomize Visualizer order</source>
+ <translation>Ordine effetto grafico casuale</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="232"/>
++ <location filename="themestrings.h" line="235"/>
+ <source>Scan</source>
+ <translation>Scansione</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="210"/>
++ <location filename="themestrings.h" line="169"/>
+ <source>Album</source>
+ <translation>Album</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="211"/>
++ <location filename="themestrings.h" line="222"/>
+ <source>Genre</source>
+ <translation>Genere</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="234"/>
++ <location filename="themestrings.h" line="264"/>
+ <source>Listen to Music</source>
+ <translation>Ascoltare musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="235"/>
++ <location filename="themestrings.h" line="189"/>
+ <source>Play List</source>
+ <translation>Playlist</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="236"/>
++ <location filename="themestrings.h" line="190"/>
+ <source>Play List Editor (tree)</source>
+ <translation>Editor playlist(struttura)</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="237"/>
++ <location filename="themestrings.h" line="191"/>
+ <source>Play List Editor (gallery)</source>
+ <translation>Editor playlist (galleria)</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="238"/>
++ <location filename="themestrings.h" line="192"/>
+ <source>Play List Editor (search)</source>
+ <translation>Editor playlist (ricerca)</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="239"/>
++ <location filename="themestrings.h" line="198"/>
+ <source>Edit</source>
+ <translation>Modificare</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="240"/>
++ <location filename="themestrings.h" line="199"/>
+ <source>Match:</source>
+ <translation>Corrispondenza:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="241"/>
++ <location filename="themestrings.h" line="200"/>
+ <source>of the following conditions:</source>
+ <translation>alle seguenti condizioni:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="242"/>
++ <location filename="themestrings.h" line="201"/>
+ <source>Compilation</source>
+ <translation>Raccolta</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="243"/>
++ <location filename="themestrings.h" line="202"/>
+ <source>Album Artwork</source>
+ <translation>Copertina album</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="244"/>
++ <location filename="themestrings.h" line="203"/>
+ <source>Look Up</source>
+ <translation>Ricerca</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="245"/>
++ <location filename="themestrings.h" line="204"/>
+ <source>Rip a CD</source>
+ <translation>Estrazione CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="246"/>
++ <location filename="themestrings.h" line="205"/>
+ <source>Multi-Artist</source>
+ <translation>Artisti vari</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="247"/>
++ <location filename="themestrings.h" line="206"/>
+ <source>Ripping CD</source>
+ <translation>Estrazione CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="248"/>
++ <location filename="themestrings.h" line="207"/>
+ <source>Importing CD:</source>
+ <translation>Importazione CD:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="215"/>
++ <location filename="themestrings.h" line="208"/>
+ <source>Encoding Track:</source>
+ <translation>Decodifica traccia:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="249"/>
++ <location filename="themestrings.h" line="253"/>
++ <source>%BROADCASTER| - %%CHANNEL%</source>
++ <translation>%BROADCASTER| - %%CHANNEL%</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="254"/>
++ <source>Broadcaster:</source>
++ <translation>Broadcaster:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="255"/>
++ <source>Description:</source>
++ <translation>Descrizione:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="256"/>
++ <source>URL 1:</source>
++ <translation>URL 1:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="257"/>
++ <source>URL 2:</source>
++ <translation>URL 2:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="258"/>
++ <source>URL 3:</source>
++ <translation>URL 3:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="259"/>
++ <source>URL 4:</source>
++ <translation>URL 4:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="260"/>
++ <source>URL 5:</source>
++ <translation>URL 5:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="261"/>
++ <source>Country:</source>
++ <translation>Nazione:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="262"/>
++ <source>Language:</source>
++ <translation>Lingua:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="263"/>
++ <source>%BROADCASTER% - %Channel%</source>
++ <translation>%BROADCASTER% - %Channel%</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="265"/>
++ <source>CD Ripper</source>
++ <translation>CD estrattore</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="266"/>
+ <source>Matches</source>
+ <translation>Corrispondenze</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="148"/>
++ <location filename="themestrings.h" line="147"/>
+ <source>Press MENU to add some radio streams to play.</source>
+ <translation>Premere MENÙ per aggiungere molti flussi radio da riprodurre.</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="149"/>
++ <location filename="themestrings.h" line="148"/>
+ <source>%STATION% - %CHANNEL%</source>
+ <translation>%STATION% - %CHANNEL%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="151"/>
++ <location filename="themestrings.h" line="185"/>
+ <source>Add/Edit Music Stream</source>
+ <translation>Aggiungere/Modificare flussi</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="152"/>
++ <location filename="themestrings.h" line="150"/>
+ <source>Station:</source>
+ <translation>Stazione:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="251"/>
++ <location filename="themestrings.h" line="211"/>
+ <source>Search for Stream</source>
+ <translation>Ricerca flussi</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="153"/>
++ <location filename="themestrings.h" line="151"/>
+ <source>Channel:</source>
+ <translation>Canale:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="154"/>
++ <location filename="themestrings.h" line="152"/>
+ <source>URL:</source>
+ <translation>URL:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="155"/>
++ <location filename="themestrings.h" line="153"/>
+ <source>Logo URL:</source>
+ <translation>Logo URL:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="156"/>
++ <location filename="themestrings.h" line="186"/>
+ <source>Genres:</source>
+ <translation>Generi:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="157"/>
++ <location filename="themestrings.h" line="154"/>
+ <source>Metadata Format:</source>
+ <translation>Formato metadati:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="158"/>
++ <location filename="themestrings.h" line="187"/>
+ <source>Search for Music Stream</source>
+ <translation>Ricerca flussi musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="159"/>
++ <location filename="themestrings.h" line="188"/>
+ <source>%STATION% - %Channel%</source>
+ <translation>%STATION% - %Channel%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="250"/>
++ <location filename="themestrings.h" line="278"/>
+ <source>Search For Stream</source>
+ <translation>Ricerca per flussi</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="252"/>
++ <location filename="themestrings.h" line="281"/>
+ <source>Music folders and general options</source>
+ <translation>Cartelle musica e opzioni generali</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="253"/>
++ <location filename="themestrings.h" line="282"/>
+ <source>Music playback options</source>
+ <translation>Opzioni riproduzione musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="254"/>
++ <location filename="themestrings.h" line="283"/>
+ <source>CD copying options</source>
+ <translation>Opzioni di copia CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="255"/>
++ <location filename="themestrings.h" line="284"/>
+ <source>Music rating options</source>
+ <translation>Opzioni di valutazione musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="256"/>
++ <location filename="themestrings.h" line="183"/>
+ <source>Visualization Settings</source>
+ <translation>Impostazioni effetti grafici</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="257"/>
++ <location filename="themestrings.h" line="285"/>
+ <source>Music visualization options</source>
+ <translation>Opzioni effetti grafici musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="258"/>
++ <location filename="themestrings.h" line="286"/>
+ <source>Play Music</source>
+ <translation>Riproduci musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="259"/>
++ <location filename="themestrings.h" line="287"/>
+ <source>Play music files</source>
+ <translation>Riproduci file musicali</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="260"/>
++ <location filename="themestrings.h" line="288"/>
+ <source>Play Radio Streams</source>
+ <translation>Riproduci Stream radio</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="261"/>
++ <location filename="themestrings.h" line="289"/>
+ <source>Play an internet radio stream</source>
+ <translation>Riproduci uno stream internet radio</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="262"/>
++ <location filename="themestrings.h" line="290"/>
+ <source>Select Music</source>
+ <translation>Seleziona musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="233"/>
++ <location filename="themestrings.h" line="236"/>
+ <source>Import CD</source>
+ <translation>Importa CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="231"/>
++ <location filename="themestrings.h" line="234"/>
+ <source>Import Files</source>
+ <translation>Importa file</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="263"/>
++ <location filename="themestrings.h" line="267"/>
++ <source>Syncronized:</source>
++ <translation>Sincronizzato:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="268"/>
++ <source>Allow writing metadata to tags:</source>
++ <translation>PErmette la scrittura dei metadati nei tags:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="269"/>
++ <source>Reset Database</source>
++ <translation>Azzera database</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="270"/>
++ <source>Broadcaster/Channel:</source>
++ <translation>Broadcaster/Canale:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="271"/>
++ <source>URL1:</source>
++ <translation>URL1:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="272"/>
++ <source>URL2:</source>
++ <translation>URL2:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="273"/>
++ <source>URL3:</source>
++ <translation>URL3:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="274"/>
++ <source>URL4:</source>
++ <translation>URL4:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="275"/>
++ <source>URL5:</source>
++ <translation>URL5:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="276"/>
++ <source>Genres/Format:</source>
++ <translation>Genere/Formato:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="277"/>
++ <source>Country/Language:</source>
++ <translation>Nazione/Lingua:</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="279"/>
++ <source>%COUNTRY%/%LANGUAGE%</source>
++ <translation>%COUNTRY%/%LANGUAGE%</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="280"/>
++ <source>Reset music database</source>
++ <translation>Azzera database musica</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="291"/>
+ <source>Choose which tracks to play</source>
+ <translation>Scegliere quale traccia da riprodurre</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="264"/>
++ <location filename="themestrings.h" line="292"/>
+ <source>Import new tracks</source>
+ <translation>Importare nuove traccie</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="265"/>
++ <location filename="themestrings.h" line="293"/>
+ <source>Scan for New Music</source>
+ <translation>Ricerca nuova musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="266"/>
++ <location filename="themestrings.h" line="294"/>
+ <source>Look for new music files</source>
+ <translation>Guardare per nuovi file musicali</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="267"/>
++ <location filename="themestrings.h" line="295"/>
+ <source>Eject media</source>
+ <translation>Espellere supporto</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="268"/>
++ <location filename="themestrings.h" line="296"/>
+ <source>Eject a CD</source>
+ <translation>Espellere CD</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="269"/>
++ <location filename="themestrings.h" line="297"/>
+ <source>Music Settings</source>
+ <translation>Impostazioni musica</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="270"/>
++ <location filename="themestrings.h" line="298"/>
+ <source>Configure playback and CD ripping</source>
+ <translation>Configurare riproduzione e l'estrazione CD</translation>
+ </message>
+diff --git a/mythplugins/mythnetvision/i18n/mythnetvision_it.qm b/mythplugins/mythnetvision/i18n/mythnetvision_it.qm
+index 0722e2fcc3..2ecb4d9b44 100644
+Binary files a/mythplugins/mythnetvision/i18n/mythnetvision_it.qm and b/mythplugins/mythnetvision/i18n/mythnetvision_it.qm differ
+diff --git a/mythplugins/mythnetvision/i18n/mythnetvision_it.ts b/mythplugins/mythnetvision/i18n/mythnetvision_it.ts
+index f91bd44d7c..f92a24304d 100644
+--- a/mythplugins/mythnetvision/i18n/mythnetvision_it.ts
++++ b/mythplugins/mythnetvision/i18n/mythnetvision_it.ts
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
+ <context>
+ <name>MythControls</name>
+ <message>
+@@ -14,6 +13,16 @@
+ <source>Internet Television Client - Site/Tree View</source>
+ <translation>Client internet television - sito/visualizzazione struttura</translation>
+ </message>
++ <message>
++ <location filename="../mythnetvision/main.cpp" line="82"/>
++ <source>Previous Page</source>
++ <translation>Pagina precedente</translation>
++ </message>
++ <message>
++ <location filename="../mythnetvision/main.cpp" line="84"/>
++ <source>Next Page</source>
++ <translation>Pagina successiva</translation>
++ </message>
+ </context>
+ <context>
+ <name>NetBase</name>
+@@ -56,63 +65,73 @@
+ <context>
+ <name>NetSearch</name>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="157"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="177"/>
+ <source>Search Options</source>
+ <translation>Opzioni ricerca</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="174"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="194"/>
+ <source>Stream Video</source>
+ <translation>Flusso video</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="176"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="196"/>
+ <source>Open Web Link</source>
+ <translation>Apertura collegamento web</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="191"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="211"/>
+ <source>Play</source>
+ <translation>Riproduzione</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="194"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="214"/>
+ <source>Save This Video</source>
+ <translation>Salvare questo video</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="202"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="222"/>
+ <source>Delete</source>
+ <translation>Eliminare</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="207"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="228"/>
+ <source>Previous Page</source>
+ <translation>Pagina precedente</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="210"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="230"/>
+ <source>Next Page</source>
+ <translation>Pagina successiva</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="212"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="232"/>
++ <source>Skip 10 Pages Back</source>
++ <translation>Salta 10 pagine indietro</translation>
++ </message>
++ <message>
++ <location filename="../mythnetvision/netsearch.cpp" line="236"/>
++ <source>Skip 10 Pages Forward</source>
++ <translation>Salta 10 pagine avanti</translation>
++ </message>
++ <message>
++ <location filename="../mythnetvision/netsearch.cpp" line="239"/>
+ <source>Manage Search Scripts</source>
+ <translation>Gestire gli script di ricerca</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="262"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="289"/>
+ <source>Searching %1 for "%2"...</source>
+ <translation>Ricerca %1 per "%2"...</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="284"/>
+- <location filename="../mythnetvision/netsearch.cpp" line="303"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="313"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="332"/>
+ <source>Changing to page %1 of search "%2"...</source>
+ <translation>Cambiamento per la pagina %1 di ricerca "%2"...</translation>
+ </message>
+ <message>
+- <location filename="../mythnetvision/netsearch.cpp" line="363"/>
++ <location filename="../mythnetvision/netsearch.cpp" line="409"/>
+ <source>Timed out waiting for query to finish. API might be down.</source>
+ <translation>Tempo scaduto aspettando l'interrogazione per la fine. L'API sembra essere giù.</translation>
+ </message>
+@@ -142,6 +161,21 @@
+ <context>
+ <name>NetTree</name>
+ <message>
++ <location filename="../mythnetvision/nettree.cpp" line="31"/>
++ <source>RSS Feeds</source>
++ <translation>RSS Feeds</translation>
++ </message>
++ <message>
++ <location filename="../mythnetvision/nettree.cpp" line="32"/>
++ <source>Searches</source>
++ <translation>Ricerche</translation>
++ </message>
++ <message>
++ <location filename="../mythnetvision/nettree.cpp" line="33"/>
++ <source>Downloaded Files</source>
++ <translation>File scaricati</translation>
++ </message>
++ <message>
+ <location filename="../mythnetvision/nettree.cpp" line="405"/>
+ <source>Playback/Download Options</source>
+ <translation>Opzioni riproduzione/scaricamento</translation>
+@@ -592,46 +626,64 @@ Per aggiungere un sito, premere MENÙ, poi scegliere "Scansione/gestione so
+ </message>
+ <message>
+ <location filename="themestrings.h" line="64"/>
++ <source>%1</source>
++ <translation>%1</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="65"/>
+ <source>Search Internet Video</source>
+ <translation>Ricerca internet video</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="65"/>
++ <location filename="themestrings.h" line="66"/>
+ <source>Select to change image</source>
+ <translation>Selezionare per cambiare immagine</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="66"/>
++ <location filename="themestrings.h" line="67"/>
+ <source>Internet Video List</source>
+ <translation>Elenco internet video</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="67"/>
++ <location filename="themestrings.h" line="68"/>
+ <source>User Rating: %1</source>
+ <translation>Valutazione utente: %1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="68"/>
++ <location filename="themestrings.h" line="69"/>
+ <source>By: %1</source>
+ <translation>Da: %1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="69"/>
++ <location filename="themestrings.h" line="70"/>
+ <source>Internet Video Gallery</source>
+ <translation>Galleria internet video</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="70"/>
++ <location filename="themestrings.h" line="71"/>
++ <source>%|RATING| %%|(STARS|) %%DESCRIPTION%%
++
++Part |PARTNUMBER| of %%PARTTOTAL%%
++
++Author: |AUTHOR%</source>
++ <translation>%|RATING| %%|(STARS|) %%DESCRIPTION%%
++
++Parte |PARTNUMBER| di %%PARTTOTAL%%
++
++Autore: |AUTHOR%</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="72"/>
+ <source>Search popular video sites</source>
+ <translation>Ricerca di siti video popolari</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="71"/>
++ <location filename="themestrings.h" line="73"/>
+ <source>Browse Internet Video</source>
+ <translation>Navigare internet video</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="72"/>
++ <location filename="themestrings.h" line="74"/>
+ <source>Browse highlights and entire sites</source>
+ <translation>Navigare nelle caratteristiche e in interi siti</translation>
+ </message>
+diff --git a/mythplugins/mythnews/i18n/mythnews_it.ts b/mythplugins/mythnews/i18n/mythnews_it.ts
+index 07d1217132..d35a254f6f 100644
+--- a/mythplugins/mythnews/i18n/mythnews_it.ts
++++ b/mythplugins/mythnews/i18n/mythnews_it.ts
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+-<TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
++<TS version="2.1" language="it_IT">
+ <context>
+ <name>MythControls</name>
+ <message>
+diff --git a/mythplugins/mythweather/i18n/mythweather_it.ts b/mythplugins/mythweather/i18n/mythweather_it.ts
+index 0748f00398..50b2402c85 100644
+--- a/mythplugins/mythweather/i18n/mythweather_it.ts
++++ b/mythplugins/mythweather/i18n/mythweather_it.ts
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+-<TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
++<TS version="2.1" language="it_IT">
+ <context>
+ <name>(Weather Screens)</name>
+ <message>
+@@ -51,7 +50,7 @@
+ <context>
+ <name>LocationDialog</name>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="955"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="947"/>
+ <source>Search</source>
+ <translation>Ricerca</translation>
+ </message>
+@@ -64,22 +63,22 @@
+ <translation type="obsolete">Ricerca ... risultati: %1</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="966"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="958"/>
+ <source>Searching...</source>
+ <translation>Ricerca in corso...</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="988"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="980"/>
+ <source>Searching... Results: %1</source>
+ <translation>Ricerca in corso... risultati: %1</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="1046"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="1038"/>
+ <source>Search Complete. Results: %1</source>
+ <translation>Ricerca completa. Risultati: %1</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="1067"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="1059"/>
+ <source>Source: %1</source>
+ <translation>Sorgente: %1</translation>
+ </message>
+@@ -138,116 +137,116 @@
+ <context>
+ <name>ScreenSetup</name>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="152"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="144"/>
+ <source>Active Screens</source>
+ <translation>Schermi attivi</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="156"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="148"/>
+ <source>Inactive Screens</source>
+ <translation>Schermi inattivi</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="177"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="169"/>
+ <source>Finish</source>
+ <translation>Finito</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="234"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="226"/>
+ <source>Add desired screen to the Active Screens list by pressing SELECT.</source>
+ <translation>Aggiungere il pannello desiderato alla lista dei pannelli attivi premendo SELECT.</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="237"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="229"/>
+ <source>Sources</source>
+ <translation>Sorgenti</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="253"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="245"/>
+ <source>Units: </source>
+ <translation>Unità: </translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="255"/>
+- <location filename="../mythweather/weatherSetup.cpp" line="594"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="247"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="586"/>
+ <source>English Units</source>
+ <translation>Sistema Imperiale</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="255"/>
+- <location filename="../mythweather/weatherSetup.cpp" line="595"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="247"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="587"/>
+ <source>SI Units</source>
+ <translation>Sistema SI</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="261"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="253"/>
+ <source>Location: </source>
+ <translation>Località:</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="262"/>
+- <location filename="../mythweather/weatherSetup.cpp" line="265"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="254"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="257"/>
+ <source>Not Defined</source>
+ <translation>Non definito</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="264"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="256"/>
+ <source>Source: </source>
+ <translation>Sorgente: </translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="268"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="260"/>
+ <source>Press SELECT to </source>
+ <translation>Premere SELECT per </translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="270"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="262"/>
+ <source>change location; </source>
+ <translation>Cambiare località; </translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="272"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="264"/>
+ <source>change units; </source>
+ <translation>Cambiare unità; </translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="273"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="265"/>
+ <source>move screen up or down; or remove screen.</source>
+ <translation>Spostare schermo su o giù; o rimuovere schermo.</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="501"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="493"/>
+ <source>Manipulate Screen</source>
+ <translation>Modifica pannelli</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="515"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="507"/>
+ <source>Move Up</source>
+ <translation>Spostare su</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="516"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="508"/>
+ <source>Move Down</source>
+ <translation>Spostare giù</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="517"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="509"/>
+ <source>Remove</source>
+ <translation>Rimuovere</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="518"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="510"/>
+ <source>Change Location</source>
+ <translation>Cambiare località</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="520"/>
+- <location filename="../mythweather/weatherSetup.cpp" line="581"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="512"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="573"/>
+ <source>Change Units</source>
+ <translation>Cambiare unità</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="521"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="513"/>
+ <source>Cancel</source>
+ <translation>Annulla</translation>
+ </message>
+@@ -267,22 +266,22 @@
+ <context>
+ <name>SourceSetup</name>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="783"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="775"/>
+ <source>Finish</source>
+ <translation>Finito</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="895"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="887"/>
+ <source>Author: </source>
+ <translation>Autore:</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="897"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="889"/>
+ <source>Email: </source>
+ <translation>Email:</translation>
+ </message>
+ <message>
+- <location filename="../mythweather/weatherSetup.cpp" line="898"/>
++ <location filename="../mythweather/weatherSetup.cpp" line="890"/>
+ <source>Version: </source>
+ <translation>Versione:</translation>
+ </message>
+diff --git a/mythplugins/mythzoneminder/i18n/mythzoneminder_it.qm b/mythplugins/mythzoneminder/i18n/mythzoneminder_it.qm
+index 5e91b99023..db539adf55 100644
+Binary files a/mythplugins/mythzoneminder/i18n/mythzoneminder_it.qm and b/mythplugins/mythzoneminder/i18n/mythzoneminder_it.qm differ
+diff --git a/mythplugins/mythzoneminder/i18n/mythzoneminder_it.ts b/mythplugins/mythzoneminder/i18n/mythzoneminder_it.ts
+index fcef9677b9..e530376855 100644
+--- a/mythplugins/mythzoneminder/i18n/mythzoneminder_it.ts
++++ b/mythplugins/mythzoneminder/i18n/mythzoneminder_it.ts
+@@ -1,7 +1,6 @@
+ <?xml version="1.0" encoding="utf-8"?>
+ <!DOCTYPE TS>
+ <TS version="2.0" language="it_IT">
+-<defaultcodec>UTF-8</defaultcodec>
+ <context>
+ <name>FunctionDialog</name>
+ <message>
+@@ -92,249 +91,329 @@
+ <translation>Abilitato</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="8"/>
++ <location filename="themestrings.h" line="10"/>
+ <source>Status</source>
+ <translation>Stato</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="9"/>
++ <location filename="themestrings.h" line="11"/>
+ <source>Load: 0.12</source>
+ <translation>Carica: 0.12</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="10"/>
++ <location filename="themestrings.h" line="12"/>
+ <source>Disk: 100%</source>
+ <translation>Disco: 100%</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="11"/>
++ <location filename="themestrings.h" line="13"/>
+ <source>Camera</source>
+ <translation>Telecamera</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="12"/>
++ <location filename="themestrings.h" line="14"/>
+ <source>Function</source>
+ <translation>Funzioni</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="13"/>
++ <location filename="themestrings.h" line="15"/>
+ <source>Source</source>
+ <translation>Sorgente</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="14"/>
++ <location filename="themestrings.h" line="16"/>
+ <source>Events</source>
+ <translation>Eventi</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="26"/>
++ <location filename="themestrings.h" line="28"/>
+ <source>ZoneMinder Event Player</source>
+ <translation>Riproduttore evento ZoneMinder</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="36"/>
++ <location filename="themestrings.h" line="38"/>
+ <source>ZoneMinder Live Player</source>
+ <translation>Riproduttore in diretta ZoneMinder</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="52"/>
++ <location filename="themestrings.h" line="68"/>
+ <source>[x]</source>
+ <translation>[x]</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="15"/>
++ <location filename="themestrings.h" line="17"/>
+ <source>[R] = Running [S] = Stopped</source>
+ <translation>[E] = Esecuzione [F] = Fermato</translation>
+ </message>
+ <message>
+ <location filename="themestrings.h" line="7"/>
++ <source>Show Notifications</source>
++ <translation>Mostra notifiche</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="8"/>
++ <source>OK</source>
++ <translation>OK</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="9"/>
+ <source>ZoneMinder Console</source>
+ <translation>Console ZoneMinder</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="16"/>
++ <location filename="themestrings.h" line="18"/>
+ <source>ZoneMinder Events</source>
+ <translation>Eventi ZoneMinder</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="17"/>
++ <location filename="themestrings.h" line="19"/>
+ <source>Select Camera</source>
+ <translation>Selezionare telecamera</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="18"/>
++ <location filename="themestrings.h" line="20"/>
+ <source>Select Date</source>
+ <translation>Selezionare data</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="19"/>
++ <location filename="themestrings.h" line="21"/>
+ <source>0/0</source>
+ <translation>0/0</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="20"/>
++ <location filename="themestrings.h" line="22"/>
+ <source>Event Name</source>
+ <translation>Nome evento</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="21"/>
++ <location filename="themestrings.h" line="23"/>
+ <source>Date/Time</source>
+ <translation>Data/ora</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="22"/>
++ <location filename="themestrings.h" line="24"/>
+ <source>Length</source>
+ <translation>Lunghezza</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="23"/>
++ <location filename="themestrings.h" line="25"/>
+ <source>Name</source>
+ <translation>Nome</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="24"/>
++ <location filename="themestrings.h" line="26"/>
+ <source>Date</source>
+ <translation>Data</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="25"/>
++ <location filename="themestrings.h" line="27"/>
+ <source>Duration</source>
+ <translation>Durata</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="27"/>
++ <location filename="themestrings.h" line="29"/>
+ <source>Event:</source>
+ <translation>Evento:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="28"/>
++ <location filename="themestrings.h" line="30"/>
+ <source>Event Name (1/123)</source>
+ <translation>Nome evento (1/123)</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="29"/>
++ <location filename="themestrings.h" line="31"/>
+ <source>Camera:</source>
+ <translation>Telecamera:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="30"/>
++ <location filename="themestrings.h" line="32"/>
+ <source>Camera Name</source>
+ <translation>Nome telecamera</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="31"/>
++ <location filename="themestrings.h" line="33"/>
+ <source>Frame:</source>
+ <translation>Frame:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="32"/>
++ <location filename="themestrings.h" line="34"/>
+ <source>1/123</source>
+ <translation>1/123</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="33"/>
++ <location filename="themestrings.h" line="35"/>
+ <source>Date:</source>
+ <translation>Data:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="34"/>
++ <location filename="themestrings.h" line="36"/>
+ <source>Mon 01 Nov 2006 12:34</source>
+ <translation>Lun 01 nov 2006 12:34</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="35"/>
++ <location filename="themestrings.h" line="37"/>
+ <source>There are no events to show</source>
+ <translation>Non ci sono eventi da visualizzare</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="37"/>
++ <location filename="themestrings.h" line="39"/>
+ <source>Monitor 1</source>
+ <translation>Schermo 1</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="38"/>
++ <location filename="themestrings.h" line="40"/>
+ <source>Monitor 2</source>
+ <translation>Schermo 2</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="39"/>
++ <location filename="themestrings.h" line="41"/>
+ <source>Monitor 3</source>
+ <translation>Schermo 3</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="40"/>
++ <location filename="themestrings.h" line="42"/>
+ <source>Monitor 4</source>
+ <translation>Schermo 4</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="41"/>
++ <location filename="themestrings.h" line="43"/>
++ <source>Monitor 5</source>
++ <translation>Schermo 5</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="44"/>
++ <source>Monitor 6</source>
++ <translation>Schermo 6</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="45"/>
++ <source>Monitor 7</source>
++ <translation>Schermo 7</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="46"/>
++ <source>Monitor 8</source>
++ <translation>Schermo 8</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="47"/>
++ <source>Change Function</source>
++ <translation>Cambia funzione</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="48"/>
++ <source>%DATE%, %TIME%</source>
++ <translation>%DATE%, %TIME%</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="49"/>
++ <source>Zoneminder Console</source>
++ <translation>Zoneminder Console</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="50"/>
++ <source>Configure Your zoneminder.</source>
++ <translation>Configura zoneminder.</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="51"/>
+ <source>Status:</source>
+ <translation>Stato:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="42"/>
++ <location filename="themestrings.h" line="52"/>
++ <source>Recorded Events</source>
++ <translation>Eventi registrati</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="53"/>
++ <source>Learn what your cameras caughtup.</source>
++ <translation>Impara cosa le telecamere catturano.</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="54"/>
++ <source>Event Playback</source>
++ <translation>Eventi registrati</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="55"/>
++ <source>Watch recorded event</source>
++ <translation>Guarda eventi registrati</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="56"/>
++ <source>Live Camera</source>
++ <translation>Camera in diretta</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="57"/>
++ <source>Camera Live Playback</source>
++ <translation>Riproduci la camera in diretta</translation>
++ </message>
++ <message>
++ <location filename="themestrings.h" line="58"/>
+ <source>Name:</source>
+ <translation>Nome:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="43"/>
++ <location filename="themestrings.h" line="59"/>
+ <source>Duration:</source>
+ <translation>Durata:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="44"/>
++ <location filename="themestrings.h" line="60"/>
+ <source>ZoneMinder Live</source>
+ <translation>ZoneMinder Live</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="45"/>
++ <location filename="themestrings.h" line="61"/>
+ <source>[R] = Running
+ [S] = Stopped</source>
+ <translation>[E] = Esecuzione
+ [F] = Fermato</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="46"/>
++ <location filename="themestrings.h" line="62"/>
+ <source>Select Camera:</source>
+ <translation>Selezionare telecamera:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="47"/>
++ <location filename="themestrings.h" line="63"/>
+ <source>Select Date:</source>
+ <translation>Selezionare data:</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="48"/>
++ <location filename="themestrings.h" line="64"/>
+ <source>Test</source>
+ <translation>Verificare</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="49"/>
++ <location filename="themestrings.h" line="65"/>
+ <source>Record</source>
+ <translation>Registrare</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="50"/>
++ <location filename="themestrings.h" line="66"/>
+ <source>Cancel</source>
+ <translation>Annulare</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="51"/>
++ <location filename="themestrings.h" line="67"/>
+ <source>Store</source>
+ <translation>Archiviare</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="53"/>
++ <location filename="themestrings.h" line="69"/>
+ <source>Show Console</source>
+ <translation>Mostrare Console</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="54"/>
++ <location filename="themestrings.h" line="70"/>
+ <source>Show Live View</source>
+ <translation>Mostrare la visualizzazione in diretta</translation>
+ </message>
+ <message>
+- <location filename="themestrings.h" line="55"/>
++ <location filename="themestrings.h" line="71"/>
+ <source>Show Events</source>
+ <translation>Mostrare gli eventi</translation>
+ </message>
+@@ -387,25 +466,25 @@
+ <translation>Cancella</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="185"/>
+- <location filename="../mythzoneminder/zmevents.cpp" line="354"/>
+- <location filename="../mythzoneminder/zmevents.cpp" line="369"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="189"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="358"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="373"/>
+ <source>All Cameras</source>
+ <translation>Tutte le telecamere</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="188"/>
+- <location filename="../mythzoneminder/zmevents.cpp" line="378"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="192"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="382"/>
+ <source>All Dates</source>
+ <translation>Rutte le date</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="456"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="460"/>
+ <source>Refresh</source>
+ <translation>Aggiorna</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="459"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="463"/>
+ <source>Hide Continuous Events</source>
+ <translation>Nascondi eventi continui</translation>
+ </message>
+@@ -414,27 +493,27 @@
+ <translation type="obsolete">Non mostrare eventi continui</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="461"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="465"/>
+ <source>Show Continuous Events</source>
+ <translation>Mostra eventi continui</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="463"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="467"/>
+ <source>Change View</source>
+ <translation>Cambiare visualizzazione</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="464"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="468"/>
+ <source>Delete All</source>
+ <translation>Cancellare tutto</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="482"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="486"/>
+ <source>Delete All Events?</source>
+ <translation>Cancellare tutti gli eventi?</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmevents.cpp" line="483"/>
++ <location filename="../mythzoneminder/zmevents.cpp" line="487"/>
+ <source>Deleting %1 events in this view.</source>
+ <translation>Cancellazione %1 eventi in questa visualizzazione.</translation>
+ </message>
+@@ -536,7 +615,7 @@
+ <translation>Formata di ora preferito da visualizzare sulle schermate degli eventi.</translation>
+ </message>
+ <message>
+- <location filename="../mythzoneminder/zmsettings.cpp" line="91"/>
++ <location filename="../mythzoneminder/zmsettings.cpp" line="90"/>
+ <source>MythZoneMinder Settings</source>
+ <translation>Impostazioni MythZoneMinder</translation>
+ </message>
+diff --git a/mythtv/bindings/python/MythTV/__init__.py b/mythtv/bindings/python/MythTV/__init__.py
+index 5f3b857698..81fda6a881 100644
+--- a/mythtv/bindings/python/MythTV/__init__.py
++++ b/mythtv/bindings/python/MythTV/__init__.py
+@@ -29,17 +29,17 @@ __all__ = ['static', 'MSearch', 'MythLog', 'StorageGroup']\
+ +__all_data__\
+ +__all_method__
+
+-import static
+-from exceptions import *
+-from logging import *
+-from msearch import *
+-from utility import *
+-from connections import dbmodule
+-from database import *
+-from system import *
+-from mythproto import *
+-from dataheap import *
+-from methodheap import *
++from . import static
++from .exceptions import *
++from .logging import *
++from .msearch import *
++from .utility import *
++from .connections import dbmodule
++from .database import *
++from .system import *
++from .mythproto import *
++from .dataheap import *
++from .methodheap import *
+
+
+ __version__ = OWN_VERSION
+diff --git a/mythtv/bindings/python/MythTV/_conn_mysqldb.py b/mythtv/bindings/python/MythTV/_conn_mysqldb.py
+index 42f368acff..63cc3c7425 100644
+--- a/mythtv/bindings/python/MythTV/_conn_mysqldb.py
++++ b/mythtv/bindings/python/MythTV/_conn_mysqldb.py
+@@ -44,7 +44,7 @@ class LoggedCursor( MySQLdb.cursors.Cursor ):
+ def _sanitize(self, query): return query.replace('?', '%s')
+
+ def log_query(self, query, args):
+- self.log(self.log.DATABASE, MythLog.DEBUG,
++ self.log(self.log.DATABASE, MythLog.DEBUG,
+ ' '.join(query.split()), str(args))
+
+ def execute(self, query, args=None):
+@@ -67,7 +67,7 @@ class LoggedCursor( MySQLdb.cursors.Cursor ):
+ if args is None:
+ return super(LoggedCursor, self).execute(query)
+ return super(LoggedCursor, self).execute(query, args)
+- except Exception, e:
++ except Exception as e:
+ raise MythDBError(MythDBError.DB_RAW, e.args)
+
+ def executemany(self, query, args):
+@@ -92,7 +92,7 @@ class LoggedCursor( MySQLdb.cursors.Cursor ):
+ self.log_query(query, args)
+ try:
+ return super(LoggedCursor, self).executemany(query, args)
+- except Exception, e:
++ except Exception as e:
+ raise MythDBError(MythDBError.DB_RAW, e.args)
+
+ def commit(self): self._get_db().commit()
+diff --git a/mythtv/bindings/python/MythTV/_conn_oursql.py b/mythtv/bindings/python/MythTV/_conn_oursql.py
+index e92f3f0f77..7f78c89867 100644
+--- a/mythtv/bindings/python/MythTV/_conn_oursql.py
++++ b/mythtv/bindings/python/MythTV/_conn_oursql.py
+@@ -54,7 +54,7 @@ class LoggedCursor( oursql.Cursor ):
+ if args:
+ return super(LoggedCursor, self).execute(query, args)
+ return super(LoggedCursor, self).execute(query)
+- except Exception, e:
++ except Exception as e:
+ raise MythDBError(MythDBError.DB_RAW, e.args)
+
+ def executemany(self, query, args):
+@@ -74,7 +74,7 @@ class LoggedCursor( oursql.Cursor ):
+ self.log_query(query, args)
+ try:
+ return super(LoggedCursor, self).executemany(query, args)
+- except Exception, e:
++ except Exception as e:
+ raise MythDBError(MythDBError.DB_RAW, e.args)
+
+ def commit(self): self.connection.commit()
+diff --git a/mythtv/bindings/python/MythTV/altdict.py b/mythtv/bindings/python/MythTV/altdict.py
+index 0b326d7bcf..337748a4e8 100644
+--- a/mythtv/bindings/python/MythTV/altdict.py
++++ b/mythtv/bindings/python/MythTV/altdict.py
+@@ -4,7 +4,8 @@
+ from MythTV.exceptions import MythError
+ from MythTV.utility import datetime
+
+-from itertools import imap, izip
++from builtins import map as imap
++from builtins import zip as izip
+ from datetime import date
+ import locale
+
+@@ -182,7 +183,7 @@ class DictData( OrdDict ):
+ field_order = self._field_order
+ dict.update(self, zip(field_order, [None]*len(field_order)))
+
+- def copy(self):
++ def copy(self):
+ """Returns a deep copy of itself."""
+ return self.__class__(zip(self.iteritems()), _process=False)
+
+@@ -192,7 +193,7 @@ class DictData( OrdDict ):
+ def __setstate__(self, state):
+ for k,v in state.iteritems():
+ self[k] = v
+-
++
+
+ class DictInvert(dict):
+ """
+@@ -204,7 +205,7 @@ class DictInvert(dict):
+ def __init__(self, other, mine=None):
+ self.other = other
+ if mine is None:
+- mine = dict(zip(*reversed(zip(*other.items()))))
++ mine = dict(zip(*reversed(list(zip(*other.items())))))
+ dict.__init__(self, mine)
+
+ @classmethod
+diff --git a/mythtv/bindings/python/MythTV/connections.py b/mythtv/bindings/python/MythTV/connections.py
+index 9cc48a4802..e541d2cca1 100644
+--- a/mythtv/bindings/python/MythTV/connections.py
++++ b/mythtv/bindings/python/MythTV/connections.py
+@@ -10,22 +10,32 @@ from MythTV.utility import deadlinesocket
+
+ from time import sleep, time
+ from select import select
+-from thread import start_new_thread, allocate_lock, get_ident
++try:
++ from thread import start_new_thread, allocate_lock, get_ident
++except ImportError:
++ from _thread import start_new_thread, allocate_lock, get_ident
+ import lxml.etree as etree
+ import weakref
+-import urllib2
++try:
++ import urllib2
++except ImportError:
++ import urllib.request as urllib2
+ import socket
+-import Queue
++try:
++ import Queue
++except ImportError:
++ import queue as Queue
+ import json
+ import re
++from builtins import str
+
+ try:
+- import _conn_oursql as dbmodule
+- from _conn_oursql import LoggedCursor
++ from . import _conn_oursql as dbmodule
++ from ._conn_oursql import LoggedCursor
+ except:
+ try:
+- import _conn_mysqldb as dbmodule
+- from _conn_mysqldb import LoggedCursor
++ from . import _conn_mysqldb as dbmodule
++ from ._conn_mysqldb import LoggedCursor
+ except:
+ raise MythError("No viable database module found.")
+
+@@ -198,7 +208,7 @@ class BEConnection( object ):
+
+ try:
+ self.connect()
+- except socket.error, e:
++ except socket.error as e:
+ self.log.logTB(MythLog.SOCKET)
+ self.connected = False
+ self.log(MythLog.GENERAL, MythLog.CRIT,
+@@ -273,7 +283,7 @@ class BEConnection( object ):
+ obj.backendCommand(data=None, timeout=None) -> response string
+
+ Sends a formatted command via a socket to the mythbackend. 'timeout'
+- will override the default timeout given when the object was
++ will override the default timeout given when the object was
+ created. If 'data' is None, the method will return any events
+ in the receive buffer.
+ """
+@@ -303,12 +313,12 @@ class BEConnection( object ):
+
+ # convert to unicode
+ try:
+- res = unicode(''.join([res]), 'utf8')
++ res = str(''.join([res]), 'utf8')
+ except:
+ res = u''.join([res])
+
+ return res
+- except MythError, e:
++ except MythError as e:
+ if e.sockcode == 54:
+ # remote has closed connection, attempt reconnect
+ self.reconnect(True)
+@@ -342,7 +352,7 @@ class BEEventConnection( BEConnection ):
+ self.threadrunning = False
+ self.eventqueue = Queue.Queue()
+
+- super(BEEventConnection, self).__init__(backend, port, localname,
++ super(BEEventConnection, self).__init__(backend, port, localname,
+ False, deadline)
+
+ def connect(self):
+@@ -386,7 +396,7 @@ class BEEventConnection( BEConnection ):
+ event = self.socket.recvheader(deadline=0.0)
+
+ try:
+- event = unicode(''.join([event]), 'utf8')
++ event = str(''.join([event]), 'utf8')
+ except:
+ event = u''.join([event])
+
+@@ -394,14 +404,14 @@ class BEEventConnection( BEConnection ):
+ self.eventqueue.put(event)
+ # else discard
+
+- except MythError, e:
++ except MythError as e:
+ if e.sockcode == 54:
+ # remote has closed connection, attempt reconnect
+ self.reconnect(True, True)
+- return self.backendCommand(data, deadline)
++ return self.backendCommand(event, self.socket.getdeadline())
+ else:
+ raise
+-
++
+ def registeruser(self, uuid, opts):
+ self._regusers[uuid] = opts
+
+@@ -482,7 +492,7 @@ class FEConnection( object ):
+ try:
+ t = time()
+ fe._test(t + 2.0)
+- except MythError, e:
++ except MythError as e:
+ continue
+ yield fe
+
+@@ -582,7 +592,7 @@ class XMLConnection( object ):
+
+ def __repr__(self):
+ return "<%s 'http://%s:%d/' at %s>" % \
+- (str(self.__class__).split("'")[1].split(".")[-1],
++ (str(self.__class__).split("'")[1].split(".")[-1],
+ self.host, self.port, hex(id(self)))
+
+ def __init__(self, host, port):
+@@ -605,7 +615,7 @@ class XMLConnection( object ):
+ 'keyvars' are a series of optional variables to specify on the URL.
+
+ The request object supports open() and read(), as well as supports
+- editing of HTTP headers and POST data.
++ editing of HTTP headers and POST data.
+ """
+ url = 'http://{0.host}:{0.port}/{1}'.format(self, path)
+ if keyvars:
+diff --git a/mythtv/bindings/python/MythTV/database.py b/mythtv/bindings/python/MythTV/database.py
+index 8fd299a5f8..f7f23b9a80 100644
+--- a/mythtv/bindings/python/MythTV/database.py
++++ b/mythtv/bindings/python/MythTV/database.py
+@@ -8,7 +8,7 @@ from MythTV.static import MythSchema
+ from MythTV.altdict import OrdDict, DictData
+ from MythTV.logging import MythLog
+ from MythTV.msearch import MSearch
+-from MythTV.utility import datetime, _donothing, QuickProperty
++from MythTV.utility import datetime, dt, _donothing, QuickProperty
+ from MythTV.exceptions import MythError, MythDBError, MythTZError
+ from MythTV.connections import DBConnection, LoggedCursor, XMLConnection
+
+@@ -19,6 +19,7 @@ import datetime as _pydt
+ import time as _pyt
+ import weakref
+ import os
++from builtins import int, str
+
+
+ class DBData( DictData, MythSchema ):
+@@ -118,7 +119,7 @@ class DBData( DictData, MythSchema ):
+ for row in cursor:
+ try:
+ yield cls.fromRaw(row, db)
+- except MythDBError, e:
++ except MythDBError as e:
+ if e.ecode == MythError.DB_RESTRICT:
+ pass
+
+@@ -507,7 +508,7 @@ class DBDataRef( list ):
+ if dat not in self:
+ data.append(dat)
+ return self.fromCopy(data, self._db)
+-
++
+ def __and__(self, other):
+ data = []
+ for dat in self:
+@@ -566,7 +567,7 @@ class DBDataRef( list ):
+ c = cls('', db=db, bypass=True)
+ c._populated = True
+ for dat in data:
+- list.append(c, c.SubData(zip(self._datfields, row)))
++ list.append(c, c.SubData(zip(cls._datfields, dat)))
+ return c
+
+ @classmethod
+@@ -1147,7 +1148,7 @@ class DBCache( MythSchema ):
+ # pull field list from database
+ try:
+ cursor.execute("DESC %s" % (key,))
+- except Exception, e:
++ except Exception as e:
+ raise MythDBError(MythDBError.DB_RAW, e.args)
+ self[key] = self._FieldData(cursor.fetchall())
+
+@@ -1280,7 +1281,7 @@ class DBCache( MythSchema ):
+
+ # apply the rest of object init if not already done
+ self._testconfig(self.dbconfig)
+-
++
+ def _testconfig(self, dbconfig):
+ self.dbconfig = dbconfig
+ if dbconfig in self.shared:
+@@ -1337,14 +1338,14 @@ class DBCache( MythSchema ):
+
+ def _gethostfromaddr(self, addr, value=None):
+ if value is None:
+- for value in ['BackendServerIP','BackendServerIP6']:
++ for value in ['BackendServerAddr']:
+ try:
+ return self._gethostfromaddr(addr, value)
+ except MythDBError:
+ pass
+ else:
+ raise MythDBError(MythError.DB_SETTING,
+- 'BackendServerIP[6]', addr)
++ 'BackendServerAddr', addr)
+
+ with self as cursor:
+ if cursor.execute("""SELECT hostname FROM settings
+@@ -1353,16 +1354,7 @@ class DBCache( MythSchema ):
+ return cursor.fetchone()[0]
+
+ def _getpreferredaddr(self, host):
+- ip6 = self.settings[host].BackendServerIP6
+- ip4 = self.settings[host].BackendServerIP
+- if ip6 is None:
+- if ip4 is None:
+- raise MythDBError(MythError.DB_SETTING,
+- 'BackendServerIP[6]', host)
+- return ip4
+- elif (ip6 in ['::1', '0:0:0;0:0:0:0:1']) and (ip4 != '127.0.0.1'):
+- return ip4
+- return ip6
++ return self.settings[host].BackendServerAddr
+
+ def gethostname(self):
+ return self.dbconfig.profile
+@@ -1402,9 +1394,7 @@ class DBCache( MythSchema ):
+ """
+ conv = {int: str,
+ str: lambda x: '"%s"'%x,
+- long: str,
+ float: str,
+- unicode: lambda x: '"%s"'%x,
+ bool: str,
+ type(None): lambda x: 'NULL',
+ _pydt.datetime: lambda x: x.strftime('"%Y-%m-%d %H:%M:%S"'),
+@@ -1416,7 +1406,7 @@ class DBCache( MythSchema ):
+ x.seconds%60),
+ _pyt.struct_time: lambda x: _pyt.\
+ strftime('"%Y-%m-%d %H:%M:%S"',x)}
+-
++
+ if args is None:
+ return query
+
+diff --git a/mythtv/bindings/python/MythTV/dataheap.py b/mythtv/bindings/python/MythTV/dataheap.py
+index 4de3085423..946015c412 100644
+--- a/mythtv/bindings/python/MythTV/dataheap.py
++++ b/mythtv/bindings/python/MythTV/dataheap.py
+@@ -19,7 +19,14 @@ from datetime import date, time
+
+ _default_datetime = datetime(1900,1,1, tzinfo=datetime.UTCTZ())
+
+-from UserString import MutableString
++# from builtins import str
++try:
++ from UserString import MutableString
++except ImportError:
++ from collections import UserString as MutableString
++ unicode = str
++ MutableString = str
++
+ class Artwork( MutableString ):
+ _types = {'coverart': 'Coverart',
+ 'coverfile': 'Coverart',
+@@ -58,15 +65,18 @@ class Artwork( MutableString ):
+ if (imagetype is None) and (attr not in cls._types):
+ # usage appears to be export from immutable UserString methods
+ # return a dumb string
+- return unicode.__new__(unicode, attr)
++ return str.__new__(str, attr)
+ else:
+- return super(Artwork, cls).__new__(cls, attr, parent, imagetype)
++ try:
++ return super(Artwork, cls).__new__(cls, attr, parent, imagetype)
++ except TypeError:
++ return super(Artwork, cls).__new__(cls, attr)
+
+ def __init__(self, attr, parent=None, imagetype=None):
+ # replace standard MutableString init to not overwrite self.data
+- from warnings import warnpy3k
+- warnpy3k('the class UserString.MutableString has been removed in '
+- 'Python 3.0', stacklevel=2)
++ # from warnings import warnpy3k
++ # warnpy3k('the class UserString.MutableString has been removed in '
++ # 'Python 3.0', stacklevel=2)
+
+ self.attr = attr
+ if imagetype is None:
+@@ -94,7 +104,7 @@ class Artwork( MutableString ):
+ @property
+ def exists(self):
+ be = FileOps(self.hostname, db = self.parent._db)
+- return be.fileExists(unicode(self), self.imagetype)
++ return be.fileExists(str(self), self.imagetype)
+
+ def downloadFrom(self, url):
+ if self.parent is None:
+@@ -246,8 +256,8 @@ class Record( CMPRecord, DBDataWrite, RECTYPE ):
+ return rec.create(wait=wait)
+
+ @classmethod
+- def fromPowerRule(cls, title='unnamed (Power Search)', where='', args=None,
+- join='', db=None, type=RECTYPE.kAllRecord,
++ def fromPowerRule(cls, title='unnamed (Power Search)', where='', args=None,
++ join='', db=None, type=RECTYPE.kAllRecord,
+ searchtype=RECSEARCHTYPE.kPowerSearch, wait=False):
+
+ if type not in (RECTYPE.kAllRecord, RECTYPE.kDailyRecord,
+@@ -315,7 +325,7 @@ class Recorded( CMPRecord, DBDataWrite ):
+ class _Rating( DBDataRef ):
+ _table = 'recordedrating'
+ _ref = ['chanid','starttime']
+-
++
+ def __str__(self):
+ if self._wheredat is None:
+ return u"<Uninitialized Recorded at %s>" % hex(id(self))
+@@ -554,7 +564,7 @@ class RecordedProgram( CMPRecord, DBDataWrite ):
+ 'colorcode':'', 'syndicatedepisodenumber':'',
+ 'programid':'', 'manualid':0, 'generic':0,
+ 'first':0, 'listingsource':0, 'last':0,
+- 'audioprop':u'','videoprop':u'',
++ 'audioprop':u'','videoprop':u'',
+ 'subtitletypes':u'', 'inputname':u''}
+
+ def __str__(self):
+@@ -588,7 +598,7 @@ class OldRecorded( CMPRecord, DBDataWrite, RECSTATUS ):
+ """
+
+ _key = ['chanid','starttime']
+- _defaults = {'title':'', 'subtitle':'',
++ _defaults = {'title':'', 'subtitle':'',
+ 'category':'', 'seriesid':'', 'programid':'',
+ 'findid':0, 'recordid':0, 'station':'',
+ 'rectype':0, 'duplicate':0, 'recstatus':-3,
+@@ -747,7 +757,7 @@ class Guide( CMPRecord, DBData ):
+ """
+ _table = 'program'
+ _key = ['chanid','starttime']
+-
++
+ def __str__(self):
+ if self._wheredat is None:
+ return u"<Uninitialized Guide at %s>" % hex(id(self))
+@@ -1145,7 +1155,7 @@ class Video( CMPVideo, VideoSchema, DBDataWrite ):
+ return vid
+
+ def _playOnFe(self, fe):
+- return fe.send('play','file myth://Videos@%s/%s' %
++ return fe.send('play','file myth://Videos@%s/%s' %
+ (self.host, self.filename))
+
+ #### LEGACY ####
+@@ -1303,7 +1313,7 @@ class Artist( MusicSchema, DBDataWrite ):
+ artist = cls(db=db)
+ artist.artist_name = name
+ return artist.create()
+-
++
+ @classmethod
+ def fromSong(cls, song, db=None):
+ """Returns the artist for the given song."""
+diff --git a/mythtv/bindings/python/MythTV/logging.py b/mythtv/bindings/python/MythTV/logging.py
+index 45ace3216d..7304be4d71 100644
+--- a/mythtv/bindings/python/MythTV/logging.py
++++ b/mythtv/bindings/python/MythTV/logging.py
+@@ -10,8 +10,14 @@ import codecs
+
+ from sys import version_info, stdout, argv
+ from datetime import datetime
+-from thread import allocate_lock
+-from StringIO import StringIO
++try:
++ from thread import allocate_lock
++except:
++ from _thread import allocate_lock
++try:
++ from StringIO import StringIO
++except:
++ from io import StringIO
+ from traceback import format_exc
+
+ def _donothing(*args, **kwargs):
+@@ -213,7 +219,7 @@ class MythLog( LOGLEVEL, LOGMASK, LOGFACILITY ):
+
+ def __repr__(self):
+ return "<%s '%s','%s' at %s>" % \
+- (str(self.__class__).split("'")[1].split(".")[-1],
++ (str(self.__class__).split("'")[1].split(".")[-1],
+ self.module, bin(self._MASK), hex(id(self)))
+
+ def __new__(cls, *args, **kwargs):
+diff --git a/mythtv/bindings/python/MythTV/methodheap.py b/mythtv/bindings/python/MythTV/methodheap.py
+index 871605565c..f68903a4e8 100644
+--- a/mythtv/bindings/python/MythTV/methodheap.py
++++ b/mythtv/bindings/python/MythTV/methodheap.py
+@@ -16,7 +16,11 @@ from MythTV.dataheap import *
+
+ from datetime import timedelta
+ from weakref import proxy
+-from urllib import urlopen
++try:
++ from urllib import urlopen
++except ImportError:
++ from urllib.request import urlopen
++
+ import re
+
+ class CaptureCard( DBData ):
+@@ -526,7 +530,7 @@ class Frontend( FEConnection ):
+ 273:'f9', 274:'f10', 275:'f11',
+ 276:'f12', 330:'delete', 331:'insert',
+ 338:'pagedown', 339:'pageup'}
+- _alnum = [chr(i) for i in range(48,58)+range(65,91)+range(97,123)]
++ _alnum = [chr(i) for i in list(range(48,58))+list(range(65,91))+list(range(97,123))]
+
+ def __str__(self): return str(self.list())
+ def __repr__(self): return str(self)
+@@ -890,7 +894,7 @@ class MythDB( DBCache ):
+ return ('program.endtime>?', datetime.duck(value), 0)
+ return None
+
+- def makePowerRule(self, ruletitle='unnamed (Power Search',
++ def makePowerRule(self, ruletitle='unnamed (Power Search',
+ type=RECTYPE.kAllRecord, **kwargs):
+ where, args, join = self.searchGuide.parseInp(kwargs)
+ where = ' AND '.join(where)
+@@ -1111,7 +1115,7 @@ class MythXML( XMLConnection ):
+ self.host = backend.split('.')[0]
+ self.port = int(self.db.setting[self.host].BackendStatusPort)
+ if not self.port:
+- raise MythDBError(MythError.DB_SETTING,
++ raise MythDBError(MythError.DB_SETTING,
+ backend+': BackendStatusPort')
+
+ def getHosts(self):
+@@ -1141,7 +1145,7 @@ class MythXML( XMLConnection ):
+ starttime = datetime.duck(starttime)
+ endtime = datetime.duck(endtime)
+ args = {'StartTime':starttime.utcisoformat().rsplit('.',1)[0],
+- 'EndTime':endtime.utcisoformat().rsplit('.',1)[0],
++ 'EndTime':endtime.utcisoformat().rsplit('.',1)[0],
+ 'StartChanId':startchan, 'Details':1}
+ if numchan:
+ args['NumOfChannels'] = numchan
+diff --git a/mythtv/bindings/python/MythTV/msearch.py b/mythtv/bindings/python/MythTV/msearch.py
+index 8142f5bf5c..a5d1f3d123 100644
+--- a/mythtv/bindings/python/MythTV/msearch.py
++++ b/mythtv/bindings/python/MythTV/msearch.py
+@@ -25,7 +25,7 @@ class MSearch( object ):
+ self.sock.bind(('', port))
+ self.addr = (addr, port)
+ listening = True
+- except socket.error, e:
++ except socket.error as e:
+ if port < 1910:
+ port += 1
+ else:
+diff --git a/mythtv/bindings/python/MythTV/mythproto.py b/mythtv/bindings/python/MythTV/mythproto.py
+index a3df5def54..aa45d326b7 100644
+--- a/mythtv/bindings/python/MythTV/mythproto.py
++++ b/mythtv/bindings/python/MythTV/mythproto.py
+@@ -16,7 +16,10 @@ from MythTV.utility import CMPRecord, datetime, \
+
+ from datetime import date
+ from time import sleep
+-from thread import allocate_lock
++try:
++ from thread import allocate_lock
++except ImportError:
++ from _thread import allocate_lock
+ from random import randint
+ import socket
+ import weakref
+diff --git a/mythtv/bindings/python/MythTV/static.py b/mythtv/bindings/python/MythTV/static.py
+index 6d82b8ef87..2e5fcd64a4 100644
+--- a/mythtv/bindings/python/MythTV/static.py
++++ b/mythtv/bindings/python/MythTV/static.py
+@@ -4,7 +4,7 @@
+ Contains any static and global variables for MythTV Python Bindings
+ """
+
+-OWN_VERSION = (0,28,-1,0)
++OWN_VERSION = (29,0,-1,0)
+ SCHEMA_VERSION = 1348
+ NVSCHEMA_VERSION = 1007
+ MUSICSCHEMA_VERSION = 1018
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbCollection.xsl b/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbCollection.xsl
+index 4dfa7c1757..f9464db373 100644
+--- a/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbCollection.xsl
++++ b/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbCollection.xsl
+@@ -16,7 +16,7 @@
+ within a single Xslt file
+ -->
+ <xsl:template match="/">
+- <xsl:if test="//Series">
++ <xsl:if test="/data/series">
+ <metadata>
+ <xsl:call-template name='tvdbCollection'/>
+ </metadata>
+@@ -24,28 +24,28 @@
+ </xsl:template>
+
+ <xsl:template name="tvdbCollection">
+- <xsl:for-each select="//Series">
++ <xsl:for-each select="/data/series">
+ <item>
+- <language><xsl:value-of select="normalize-space(Language)"/></language>
+- <title><xsl:value-of select="normalize-space(SeriesName)"/></title>
+- <xsl:if test="./Network/text() != ''">
+- <network><xsl:value-of select="normalize-space(Network)"/></network>
++ <language><xsl:value-of select="normalize-space(language)"/></language>
++ <title><xsl:value-of select="normalize-space(seriesName)"/></title>
++ <xsl:if test="./network/text() != ''">
++ <network><xsl:value-of select="normalize-space(network)"/></network>
+ </xsl:if>
+- <xsl:if test="./Airs_DayOfWeek/text() != ''">
+- <airday><xsl:value-of select="normalize-space(Airs_DayOfWeek)"/></airday>
++ <xsl:if test="./airsDayOfWeek/text() != ''">
++ <airday><xsl:value-of select="normalize-space(airsDayOfWeek)"/></airday>
+ </xsl:if>
+- <xsl:if test="./Airs_Time/text() != ''">
+- <airtime><xsl:value-of select="normalize-space(Airs_Time)"/></airtime>
++ <xsl:if test="./airsTime/text() != ''">
++ <airtime><xsl:value-of select="normalize-space(airsTime)"/></airtime>
+ </xsl:if>
+- <xsl:if test="./Overview/text() != ''">
+- <description><xsl:value-of select="normalize-space(Overview)"/></description>
++ <xsl:if test="./overview/text() != ''">
++ <description><xsl:value-of select="normalize-space(overview)"/></description>
+ </xsl:if>
+ <!-- <xsl:if test="tvdbXpath:getValue(//requestDetails, ./, 'Overview') != ''">-->
+ <!-- <description><xsl:value-of select="normalize-space(tvdbXpath:htmlToString(tvdbXpath:getResult()))"/></description>-->
+ <!-- </xsl:if>-->
+- <xsl:if test="./ContentRating/text() != ''">
++ <xsl:if test="./rating/text() != ''">
+ <certifications>
+- <xsl:for-each select=".//ContentRating">
++ <xsl:for-each select=".//rating">
+ <xsl:element name="certification">
+ <xsl:attribute name="locale">us</xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+@@ -53,9 +53,9 @@
+ </xsl:for-each>
+ </certifications>
+ </xsl:if>
+- <xsl:if test="./Genre/text() != ''">
++ <xsl:if test="./genre/text() != ''">
+ <categories>
+- <xsl:for-each select="tvdbXpath:stringToList(string(./Genre))">
++ <xsl:for-each select="tvdbXpath:stringToList(string(./genre))">
+ <xsl:element name="category">
+ <xsl:attribute name="type">genre</xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+@@ -63,62 +63,87 @@
+ </xsl:for-each>
+ </categories>
+ </xsl:if>
+- <xsl:if test="./Network/text() != ''">
++ <xsl:if test="./network/text() != ''">
+ <studios>
+- <xsl:for-each select="./Network">
++ <xsl:for-each select="./network">
+ <xsl:element name="studio">
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+ </studios>
+ </xsl:if>
+- <xsl:if test="./Runtime/text() != ''">
+- <runtime><xsl:value-of select="normalize-space(Runtime)"/></runtime>
++ <xsl:if test="./runtime/text() != ''">
++ <runtime><xsl:value-of select="normalize-space(runtime)"/></runtime>
+ </xsl:if>
+ <inetref><xsl:value-of select="normalize-space(id)"/></inetref>
+- <xsl:if test="./IMDB_ID/text() != ''">
+- <imdb><xsl:value-of select="normalize-space(substring-after(string(IMDB_ID), 'tt'))"/></imdb>
++ <xsl:if test="./imdbId/text() != ''">
++ <imdb><xsl:value-of select="normalize-space(substring-after(string(imdbId), 'tt'))"/></imdb>
+ </xsl:if>
+ <xsl:if test="./zap2it_id/text() != ''">
+ <tmsref><xsl:value-of select="normalize-space(zap2it_id)"/></tmsref>
+ </xsl:if>
+- <xsl:if test="./Rating/text() != ''">
+- <userrating><xsl:value-of select="normalize-space(Rating)"/></userrating>
++ <xsl:if test="./siteRating/text() != ''">
++ <userrating><xsl:value-of select="normalize-space(siteRating)"/></userrating>
+ </xsl:if>
+- <xsl:if test="./RatingCount/text() != ''">
+- <ratingcount><xsl:value-of select="normalize-space(RatingCount)"/></ratingcount>
++ <xsl:if test="./siteRatingCount/text() != ''">
++ <ratingcount><xsl:value-of select="normalize-space(siteRatingCount)"/></ratingcount>
+ </xsl:if>
+- <xsl:if test="./FirstAired/text() != ''">
+- <year><xsl:value-of select="normalize-space(substring-before(string(FirstAired), '-'))"/></year>
+- <releasedate><xsl:value-of select="normalize-space(FirstAired)"/></releasedate>
++ <xsl:if test="./firstAired/text() != ''">
++ <year><xsl:value-of select="normalize-space(substring-before(string(firstAired), '-'))"/></year>
++ <releasedate><xsl:value-of select="normalize-space(firstAired)"/></releasedate>
+ </xsl:if>
+- <xsl:if test="./lastupdated/text() != ''">
+- <lastupdated><xsl:value-of select="tvdbXpath:lastUpdated(string(./lastupdated))"/></lastupdated>
++ <xsl:if test="./lastUpdated/text() != ''">
++ <lastupdated><xsl:value-of select="tvdbXpath:lastUpdated(string(./lastUpdated))"/></lastupdated>
+ </xsl:if>
+- <xsl:if test="./Status/text() != ''">
+- <status><xsl:value-of select="normalize-space(Status)"/></status>
++ <xsl:if test="./status/text() != ''">
++ <status><xsl:value-of select="normalize-space(status)"/></status>
+ </xsl:if>
+- <xsl:if test=".//poster/text() != '' or .//fanart/text() != '' or .//banner/text() != ''">
++ <xsl:if test="./poster/text() != '' or ./fanart/text() != '' or ./banner/text() != '' or .//_banners/poster/raw or .//_banners/fanart/raw">
+ <images>
+- <xsl:if test=".//poster/text() != ''">
+- <xsl:element name="image">
+- <xsl:attribute name="type">coverart</xsl:attribute>
+- <xsl:attribute name="url"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(poster))"/></xsl:attribute>
+- <xsl:attribute name="thumb"><xsl:value-of select="concat('http://www.thetvdb.com/banners/_cache/', normalize-space(poster))"/></xsl:attribute>
+- </xsl:element>
+- </xsl:if>
+- <xsl:if test=".//fanart/text() != ''">
+- <xsl:element name="image">
+- <xsl:attribute name="type">fanart</xsl:attribute>
+- <xsl:attribute name="url"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(fanart))"/></xsl:attribute>
+- <xsl:attribute name="thumb"><xsl:value-of select="concat('http://www.thetvdb.com/banners/_cache/', normalize-space(fanart))"/></xsl:attribute>
+- </xsl:element>
+- </xsl:if>
+- <xsl:if test=".//banner/text() != ''">
++ <xsl:choose>
++ <xsl:when test="./poster/text() != ''">
++ <xsl:element name="image">
++ <xsl:attribute name="type">coverart</xsl:attribute>
++ <xsl:attribute name="url"><xsl:value-of select="normalize-space(poster)"/></xsl:attribute>
++ <xsl:attribute name="thumb"><xsl:value-of select="normalize-space(tvdbXpath:replace(string(poster), 'banners', 'banners/_cache'))"/></xsl:attribute>
++ </xsl:element>
++ </xsl:when>
++ <xsl:when test="./_banners/seasonswide/raw">
++ <xsl:element name="image">
++ <xsl:attribute name="type">coverart</xsl:attribute>
++ <xsl:attribute name="url"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(_banners/seasonswide/raw/item[1]/fileName))"/></xsl:attribute>
++ <xsl:attribute name="thumb"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(_banners/seasonswide/raw/item[1]/thumbnail))"/></xsl:attribute>
++ </xsl:element>
++ </xsl:when>
++ <xsl:when test="./_banners/poster/raw">
++ <xsl:element name="image">
++ <xsl:attribute name="type">coverart</xsl:attribute>
++ <xsl:attribute name="url"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(_banners/poster/raw/item[1]/fileName))"/></xsl:attribute>
++ <xsl:attribute name="thumb"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(_banners/poster/raw/item[1]/thumbnail))"/></xsl:attribute>
++ </xsl:element>
++ </xsl:when>
++ </xsl:choose>
++ <xsl:choose>
++ <xsl:when test="./fanart/text() != ''">
++ <xsl:element name="image">
++ <xsl:attribute name="type">fanart</xsl:attribute>
++ <xsl:attribute name="url"><xsl:value-of select="normalize-space(fanart)"/></xsl:attribute>
++ <xsl:attribute name="thumb"><xsl:value-of select="normalize-space(tvdbXpath:replace(string(fanart), 'banners', 'banners/_cache'))"/></xsl:attribute>
++ </xsl:element>
++ </xsl:when>
++ <xsl:when test="./_banners/fanart/raw">
++ <xsl:element name="image">
++ <xsl:attribute name="type">fanart</xsl:attribute>
++ <xsl:attribute name="url"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(_banners/fanart/raw/item[1]/fileName))"/></xsl:attribute>
++ <xsl:attribute name="thumb"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(_banners/fanart/raw/item[1]/thumbnail))"/></xsl:attribute>
++ </xsl:element>
++ </xsl:when>
++ </xsl:choose>
++ <xsl:if test="./banner/text() != ''">
+ <xsl:element name="image">
+ <xsl:attribute name="type">banner</xsl:attribute>
+- <xsl:attribute name="url"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(banner))"/></xsl:attribute>
+- <xsl:attribute name="thumb"><xsl:value-of select="concat('http://www.thetvdb.com/banners/_cache/', normalize-space(banner))"/></xsl:attribute>
++ <xsl:attribute name="url"><xsl:value-of select="normalize-space(banner)"/></xsl:attribute>
++ <xsl:attribute name="thumb"><xsl:value-of select="normalize-space(tvdbXpath:replace(string(banner), 'banners', 'banners/_cache'))"/></xsl:attribute>
+ </xsl:element>
+ </xsl:if>
+ </images>
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbQuery.xsl b/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbQuery.xsl
+index 28daee047e..bf7ad06a82 100644
+--- a/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbQuery.xsl
++++ b/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbQuery.xsl
+@@ -14,7 +14,7 @@
+ within a single Xslt file
+ -->
+ <xsl:template match="/">
+- <xsl:if test="//Series">
++ <xsl:if test="//series">
+ <metadata>
+ <xsl:call-template name='tvdbQuery'/>
+ </metadata>
+@@ -22,10 +22,10 @@
+ </xsl:template>
+
+ <xsl:template name="tvdbQuery">
+- <xsl:for-each select="//Series">
++ <xsl:for-each select="//series">
+ <item>
+ <language><xsl:value-of select="normalize-space(language)"/></language>
+- <title><xsl:value-of select="normalize-space(SeriesName)"/></title>
++ <title><xsl:value-of select="normalize-space(seriesName)"/></title>
+ <inetref><xsl:value-of select="normalize-space(id)"/></inetref>
+ <collectionref><xsl:value-of select="normalize-space(id)"/></collectionref>
+ <xsl:if test="./IMDB_ID/text() != ''">
+@@ -34,14 +34,14 @@
+ <xsl:if test="./zap2it_id/text() != ''">
+ <tmsref><xsl:value-of select="normalize-space(zap2it_id)"/></tmsref>
+ </xsl:if>
+- <xsl:if test="./Rating/text() != ''">
+- <userrating><xsl:value-of select="normalize-space(Rating)"/></userrating>
++ <xsl:if test="./rating/text() != ''">
++ <userrating><xsl:value-of select="normalize-space(rating)"/></userrating>
+ </xsl:if>
+- <xsl:if test="./Overview/text() != ''">
+- <description><xsl:value-of select="normalize-space(Overview)"/></description>
++ <xsl:if test="./overview/text() != ''">
++ <description><xsl:value-of select="normalize-space(overview)"/></description>
+ </xsl:if>
+- <xsl:if test="./FirstAired/text() != ''">
+- <releasedate><xsl:value-of select="normalize-space(FirstAired)"/></releasedate>
++ <xsl:if test="./firstAired/text() != ''">
++ <releasedate><xsl:value-of select="normalize-space(firstAired)"/></releasedate>
+ </xsl:if>
+ <xsl:if test=".//poster/text() != '' or .//fanart/text() != '' or .//banner/text() != ''">
+ <images>
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbVideo.xsl b/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbVideo.xsl
+index 3eb3c8eb66..c36e13e41c 100644
+--- a/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbVideo.xsl
++++ b/mythtv/bindings/python/MythTV/ttvdb/XSLT/tvdbVideo.xsl
+@@ -16,7 +16,7 @@
+ within a single Xslt file
+ -->
+ <xsl:template match="/">
+- <xsl:if test="//Data/Series">
++ <xsl:if test="//data/series">
+ <metadata>
+ <xsl:call-template name='tvdbVideoData'/>
+ </metadata>
+@@ -24,21 +24,20 @@
+ </xsl:template>
+
+ <xsl:template name="tvdbVideoData">
+- <xsl:for-each select="//Data/Series">
++ <xsl:for-each select="//data/series">
+ <item>
+- <title><xsl:value-of select="normalize-space(SeriesName)"/></title>
+- <xsl:if test="tvdbXpath:getValue(//requestDetails, //Data, 'subtitle') != ''">
++ <title><xsl:value-of select="normalize-space(seriesName)"/></title>
++ <xsl:if test="tvdbXpath:getValue(//requestDetails, //data, 'subtitle') != ''">
+ <subtitle><xsl:value-of select="normalize-space(tvdbXpath:getResult())"/></subtitle>
+ </xsl:if>
+- <language><xsl:value-of select="normalize-space(Language)"/></language>
+- <xsl:if test="tvdbXpath:getValue(//requestDetails, //Data, 'description') != ''">
++ <xsl:if test="tvdbXpath:getValue(//requestDetails, //data/series, 'description') != ''">
+ <description><xsl:value-of select="normalize-space(tvdbXpath:htmlToString(tvdbXpath:getResult()))"/></description>
+ </xsl:if>
+ <season><xsl:value-of select="normalize-space(//requestDetails/@season)"/></season>
+ <episode><xsl:value-of select="normalize-space(//requestDetails/@episode)"/></episode>
+- <xsl:if test="./ContentRating/text() != ''">
++ <xsl:if test="./rating/text() != ''">
+ <certifications>
+- <xsl:for-each select=".//ContentRating">
++ <xsl:for-each select=".//rating">
+ <xsl:element name="certification">
+ <xsl:attribute name="locale">us</xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+@@ -46,9 +45,9 @@
+ </xsl:for-each>
+ </certifications>
+ </xsl:if>
+- <xsl:if test="./Genre/text() != ''">
++ <xsl:if test="./genre/text() != ''">
+ <categories>
+- <xsl:for-each select="tvdbXpath:stringToList(string(./Genre))">
++ <xsl:for-each select="tvdbXpath:stringToList(string(./genre))">
+ <xsl:element name="category">
+ <xsl:attribute name="type">genre</xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+@@ -56,36 +55,39 @@
+ </xsl:for-each>
+ </categories>
+ </xsl:if>
+- <xsl:if test="./Network/text() != ''">
++ <xsl:if test="./network/text() != ''">
+ <studios>
+- <xsl:for-each select="./Network">
++ <xsl:for-each select="./network">
+ <xsl:element name="studio">
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+ </studios>
+ </xsl:if>
+- <xsl:if test="./Runtime/text() != ''">
++ <xsl:if test="./runtime/text() != ''">
+ <runtime><xsl:value-of select="normalize-space(Runtime)"/></runtime>
+ </xsl:if>
+ <inetref><xsl:value-of select="normalize-space(id)"/></inetref>
+ <collectionref><xsl:value-of select="normalize-space(id)"/></collectionref>
+- <xsl:if test="./IMDB_ID/text() != '' and tvdbXpath:getValue(//requestDetails, //Data, 'IMDB') = ''">
+- <imdb><xsl:value-of select="normalize-space(substring-after(string(IMDB_ID), 'tt'))"/></imdb>
++ <xsl:if test="./imdbId/text() != '' and tvdbXpath:getValue(//requestDetails, //data, 'IMDB') = ''">
++ <imdb><xsl:value-of select="normalize-space(substring-after(string(imdbId), 'tt'))"/></imdb>
+ </xsl:if>
+- <xsl:if test="./zap2it_id/text() != ''">
+- <tmsref><xsl:value-of select="normalize-space(zap2it_id)"/></tmsref>
++ <xsl:if test="./zap2itId/text() != ''">
++ <tmsref><xsl:value-of select="normalize-space(zap2itId)"/></tmsref>
+ </xsl:if>
+- <xsl:for-each select="tvdbXpath:getValue(//requestDetails, //Data, 'allEpisodes', 'allresults')">
+- <xsl:if test="./IMDB_ID/text() != ''">
+- <imdb><xsl:value-of select="normalize-space(substring-after(string(IMDB_ID), 'tt'))"/></imdb>
++ <xsl:for-each select="tvdbXpath:getValue(//requestDetails, //data, 'allEpisodes', 'allresults')">
++ <xsl:if test="./imdbId/text() != ''">
++ <imdb><xsl:value-of select="normalize-space(substring-after(string(zap2itId), 'tt'))"/></imdb>
+ </xsl:if>
+- <xsl:if test="./Rating/text() != ''">
+- <userrating><xsl:value-of select="normalize-space(./Rating)"/></userrating>
++ <xsl:if test="./rating/text() != ''">
++ <userrating><xsl:value-of select="normalize-space(./rating)"/></userrating>
+ </xsl:if>
+- <xsl:if test="./FirstAired/text() != ''">
+- <year><xsl:value-of select="normalize-space(substring(string(./FirstAired), 1, 4))"/></year>
+- <releasedate><xsl:value-of select="normalize-space(./FirstAired)"/></releasedate>
++ <xsl:if test="./language/overview/text() != ''">
++ <language><xsl:value-of select="normalize-space(./language/overview)"/></language>
++ </xsl:if>
++ <xsl:if test="./firstAired/text() != ''">
++ <year><xsl:value-of select="normalize-space(substring(string(./firstAired), 1, 4))"/></year>
++ <releasedate><xsl:value-of select="normalize-space(./firstAired)"/></releasedate>
+ </xsl:if>
+ <xsl:if test="./lastupdated/text() != ''">
+ <lastupdated><xsl:value-of select="tvdbXpath:lastUpdated(string(./lastupdated))"/></lastupdated>
+@@ -99,32 +101,32 @@
+ <xsl:if test="./seriesid/text() != '' and ./seasonid/text() != ''">
+ <homepage><xsl:value-of select="normalize-space(concat('http://thetvdb.com/?tab=episode&seriesid=', string(./seriesid), '&seasonid=', string(./seasonid), '&id=', string(./id)))"/></homepage>
+ </xsl:if>
+- <xsl:if test="//Actors/Actor or .//GuestStars/text() != '' or .//Director/text() != '' or .//Writer/text() != ''">
++ <xsl:if test="//data/series/_actors/actor or .//guestStars/text() != '' or .//director/text() != '' or .//writer/text() != ''">
+ <people>
+- <xsl:for-each select="//Actors/Actor">
++ <xsl:for-each select="//data/series/_actors/actor">
+ <xsl:element name="person">
+ <xsl:attribute name="job">Actor</xsl:attribute>
+- <xsl:attribute name="name"><xsl:value-of select="normalize-space(Name)"/></xsl:attribute>
+- <xsl:attribute name="character"><xsl:value-of select="normalize-space(Role)"/></xsl:attribute>
+- <xsl:if test="./Image/text() != ''">
+- <xsl:attribute name="url"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(Image))"/></xsl:attribute>
+- <xsl:attribute name="thumb"><xsl:value-of select="concat('http://www.thetvdb.com/banners/_cache/', normalize-space(Image))"/></xsl:attribute>
++ <xsl:attribute name="name"><xsl:value-of select="normalize-space(name)"/></xsl:attribute>
++ <xsl:attribute name="character"><xsl:value-of select="normalize-space(role)"/></xsl:attribute>
++ <xsl:if test="./image/text() != ''">
++ <xsl:attribute name="url"><xsl:value-of select="normalize-space(image)"/></xsl:attribute>
++ <xsl:attribute name="thumb"><xsl:value-of select="normalize-space(image)"/></xsl:attribute>
+ </xsl:if>
+ </xsl:element>
+ </xsl:for-each>
+- <xsl:for-each select="tvdbXpath:stringToList(string(./GuestStars))">
++ <xsl:for-each select="./guestStars/item">
+ <xsl:element name="person">
+ <xsl:attribute name="job">Guest Star</xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+- <xsl:for-each select="tvdbXpath:stringToList(string(./Director))">
++ <xsl:for-each select="./directors/item">
+ <xsl:element name="person">
+ <xsl:attribute name="job">Director</xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+ </xsl:element>
+ </xsl:for-each>
+- <xsl:for-each select="tvdbXpath:stringToList(string(./Writer))">
++ <xsl:for-each select="./writers/item">
+ <xsl:element name="person">
+ <xsl:attribute name="job">Author</xsl:attribute>
+ <xsl:attribute name="name"><xsl:value-of select="normalize-space(.)"/></xsl:attribute>
+@@ -132,16 +134,17 @@
+ </xsl:for-each>
+ </people>
+ </xsl:if>
+- <xsl:if test="./filename/text() != '' or //Banners/Banner">
++ <xsl:if test="./filename/text() != '' or //data/series/_banners/*/raw/item">
+ <images>
+ <xsl:if test="./filename/text() != ''">
+ <xsl:element name="image">
+ <xsl:attribute name="type">screenshot</xsl:attribute>
+- <xsl:attribute name="url"><xsl:value-of select="concat('http://www.thetvdb.com/banners/', normalize-space(filename))"/></xsl:attribute>
+- <xsl:attribute name="thumb"><xsl:value-of select="concat('http://www.thetvdb.com/banners/_cache/', normalize-space(filename))"/></xsl:attribute>
++ <xsl:attribute name="url"><xsl:value-of select="normalize-space(filename)"/></xsl:attribute>
++ <xsl:attribute name="thumb"><xsl:value-of select="normalize-space(tvdbXpath:replace(string(filename), 'banners', 'banners/_cache'))"/></xsl:attribute>
+ </xsl:element>
+ </xsl:if>
+- <xsl:for-each select="tvdbXpath:imageElements(//Banners, 'poster', //requestDetails)">
++ <xsl:for-each select="tvdbXpath:imageElements(//data/series/_banners/poster/raw, 'poster', //requestDetails)">
++ <xsl:sort select="@rating" data-type="number" order="descending"/>
+ <xsl:element name="image">
+ <xsl:attribute name="type"><xsl:value-of select="normalize-space(@type)"/></xsl:attribute>
+ <xsl:attribute name="url"><xsl:value-of select="normalize-space(@url)"/></xsl:attribute>
+@@ -154,7 +157,8 @@
+ </xsl:if>
+ </xsl:element>
+ </xsl:for-each>
+- <xsl:for-each select="tvdbXpath:imageElements(//Banners, 'fanart', //requestDetails)">
++ <xsl:for-each select="tvdbXpath:imageElements(//data/series/_banners/fanart/raw, 'fanart', //requestDetails)">
++ <xsl:sort select="@rating" data-type="number" order="descending"/>
+ <xsl:element name="image">
+ <xsl:attribute name="type"><xsl:value-of select="normalize-space(@type)"/></xsl:attribute>
+ <xsl:attribute name="url"><xsl:value-of select="normalize-space(@url)"/></xsl:attribute>
+@@ -167,7 +171,8 @@
+ </xsl:if>
+ </xsl:element>
+ </xsl:for-each>
+- <xsl:for-each select="tvdbXpath:imageElements(//Banners, 'banner', //requestDetails)">
++ <xsl:for-each select="tvdbXpath:imageElements(//data/series/_banners/banner/raw, 'banner', //requestDetails)">
++ <xsl:sort select="@rating" data-type="number" order="descending"/>
+ <xsl:element name="image">
+ <xsl:attribute name="type"><xsl:value-of select="normalize-space(@type)"/></xsl:attribute>
+ <xsl:attribute name="url"><xsl:value-of select="normalize-space(@url)"/></xsl:attribute>
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/cache.py b/mythtv/bindings/python/MythTV/ttvdb/cache.py
+deleted file mode 100644
+index 1c37d795da..0000000000
+--- a/mythtv/bindings/python/MythTV/ttvdb/cache.py
++++ /dev/null
+@@ -1,230 +0,0 @@
+-#!/usr/bin/env python
+-#encoding:utf-8
+-#author:dbr/Ben
+-#project:tvdb_api
+-#repository:http://github.com/dbr/tvdb_api
+-#license:Creative Commons GNU GPL v2
+-# (http://creativecommons.org/licenses/GPL/2.0/)
+-
+-"""
+-urllib2 caching handler
+-Modified from http://code.activestate.com/recipes/491261/
+-"""
+-__author__ = "dbr/Ben"
+-__version__ = "1.2.1"
+-
+-import os
+-import time
+-import errno
+-import httplib
+-import urllib2
+-import StringIO
+-from hashlib import md5
+-from threading import RLock
+-
+-cache_lock = RLock()
+-
+-def locked_function(origfunc):
+- """Decorator to execute function under lock"""
+- def wrapped(*args, **kwargs):
+- cache_lock.acquire()
+- try:
+- return origfunc(*args, **kwargs)
+- finally:
+- cache_lock.release()
+- return wrapped
+-
+-def calculate_cache_path(cache_location, url):
+- """Checks if [cache_location]/[hash_of_url].headers and .body exist
+- """
+- thumb = md5(url).hexdigest()
+- header = os.path.join(cache_location, thumb + ".headers")
+- body = os.path.join(cache_location, thumb + ".body")
+- return header, body
+-
+-def check_cache_time(path, max_age):
+- """Checks if a file has been created/modified in the [last max_age] seconds.
+- False means the file is too old (or doesn't exist), True means it is
+- up-to-date and valid"""
+- if not os.path.isfile(path):
+- return False
+- cache_modified_time = os.stat(path).st_mtime
+- time_now = time.time()
+- if cache_modified_time < time_now - max_age:
+- # Cache is old
+- return False
+- else:
+- return True
+-
+-@locked_function
+-def exists_in_cache(cache_location, url, max_age):
+- """Returns if header AND body cache file exist (and are up-to-date)"""
+- hpath, bpath = calculate_cache_path(cache_location, url)
+- if os.path.exists(hpath) and os.path.exists(bpath):
+- return(
+- check_cache_time(hpath, max_age)
+- and check_cache_time(bpath, max_age)
+- )
+- else:
+- # File does not exist
+- return False
+-
+-@locked_function
+-def store_in_cache(cache_location, url, response):
+- """Tries to store response in cache."""
+- hpath, bpath = calculate_cache_path(cache_location, url)
+- try:
+- outf = open(hpath, "w")
+- headers = str(response.info())
+- outf.write(headers)
+- outf.close()
+-
+- outf = open(bpath, "w")
+- outf.write(response.read())
+- outf.close()
+- except IOError:
+- return True
+- else:
+- return False
+-
+-class CacheHandler(urllib2.BaseHandler):
+- """Stores responses in a persistant on-disk cache.
+-
+- If a subsequent GET request is made for the same URL, the stored
+- response is returned, saving time, resources and bandwidth
+- """
+- @locked_function
+- def __init__(self, cache_location, max_age = 21600):
+- """The location of the cache directory"""
+- self.max_age = max_age
+- self.cache_location = cache_location
+- if not os.path.exists(self.cache_location):
+- try:
+- os.mkdir(self.cache_location)
+- except OSError, e:
+- if e.errno == errno.EEXIST and os.path.isdir(self.cache_location):
+- # File exists, and it's a directory,
+- # another process beat us to creating this dir, that's OK.
+- pass
+- else:
+- # Our target dir is already a file, or different error,
+- # relay the error!
+- raise OSError(e)
+-
+- def default_open(self, request):
+- """Handles GET requests, if the response is cached it returns it
+- """
+- if request.get_method() is not "GET":
+- return None # let the next handler try to handle the request
+-
+- if exists_in_cache(
+- self.cache_location, request.get_full_url(), self.max_age
+- ):
+- return CachedResponse(
+- self.cache_location,
+- request.get_full_url(),
+- set_cache_header = True
+- )
+- else:
+- return None
+-
+- def http_response(self, request, response):
+- """Gets a HTTP response, if it was a GET request and the status code
+- starts with 2 (200 OK etc) it caches it and returns a CachedResponse
+- """
+- if (request.get_method() == "GET"
+- and str(response.code).startswith("2")
+- ):
+- if 'x-local-cache' not in response.info():
+- # Response is not cached
+- set_cache_header = store_in_cache(
+- self.cache_location,
+- request.get_full_url(),
+- response
+- )
+- else:
+- set_cache_header = True
+- #end if x-cache in response
+-
+- return CachedResponse(
+- self.cache_location,
+- request.get_full_url(),
+- set_cache_header = set_cache_header
+- )
+- else:
+- return response
+-
+-class CachedResponse(StringIO.StringIO):
+- """An urllib2.response-like object for cached responses.
+-
+- To determine if a response is cached or coming directly from
+- the network, check the x-local-cache header rather than the object type.
+- """
+-
+- @locked_function
+- def __init__(self, cache_location, url, set_cache_header=True):
+- self.cache_location = cache_location
+- hpath, bpath = calculate_cache_path(cache_location, url)
+-
+- StringIO.StringIO.__init__(self, file(bpath).read())
+-
+- self.url = url
+- self.code = 200
+- self.msg = "OK"
+- headerbuf = file(hpath).read()
+- if set_cache_header:
+- headerbuf += "x-local-cache: %s\r\n" % (bpath)
+- self.headers = httplib.HTTPMessage(StringIO.StringIO(headerbuf))
+-
+- def info(self):
+- """Returns headers
+- """
+- return self.headers
+-
+- def geturl(self):
+- """Returns original URL
+- """
+- return self.url
+-
+- @locked_function
+- def recache(self):
+- new_request = urllib2.urlopen(self.url)
+- set_cache_header = store_in_cache(
+- self.cache_location,
+- new_request.url,
+- new_request
+- )
+- CachedResponse.__init__(self, self.cache_location, self.url, True)
+-
+-
+-if __name__ == "__main__":
+- def main():
+- """Quick test/example of CacheHandler"""
+- opener = urllib2.build_opener(CacheHandler("/tmp/"))
+- response = opener.open("http://google.com")
+- print response.headers
+- print "Response:", response.read()
+-
+- response.recache()
+- print response.headers
+- print "After recache:", response.read()
+-
+- # Test usage in threads
+- from threading import Thread
+- class CacheThreadTest(Thread):
+- lastdata = None
+- def run(self):
+- req = opener.open("http://google.com")
+- newdata = req.read()
+- if self.lastdata is None:
+- self.lastdata = newdata
+- assert self.lastdata == newdata, "Data was not consistent, uhoh"
+- req.recache()
+- threads = [CacheThreadTest() for x in range(50)]
+- print "Starting threads"
+- [t.start() for t in threads]
+- print "..done"
+- print "Joining threads"
+- [t.join() for t in threads]
+- print "..done"
+- main()
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/requests_cache_compatability.py b/mythtv/bindings/python/MythTV/ttvdb/requests_cache_compatability.py
+new file mode 100644
+index 0000000000..3d6a056f42
+--- /dev/null
++++ b/mythtv/bindings/python/MythTV/ttvdb/requests_cache_compatability.py
+@@ -0,0 +1,44 @@
++# -*- coding: utf-8 -*-
++
++'''
++Patches older versions of requests_cache with missing expire
++functionality and an updated create_key which excludes most
++HEADERS
++
++This module must be imported before any modules use requests_cache
++explicitly or implicitly
++'''
++
++import requests_cache
++from datetime import datetime
++
++# patch if required if older versions of
++try:
++ requests_cache.backends.base.BaseCache.remove_old_entries
++except Exception as e:
++ def remove_old_entries(self, created_before):
++ """ Deletes entries from cache with creation time older than ``created_before``
++ """
++ keys_to_delete = set()
++ for key in self.responses:
++ try:
++ response, created_at = self.responses[key]
++ except KeyError:
++ continue
++ if created_at < created_before:
++ keys_to_delete.add(key)
++
++ for key in keys_to_delete:
++ self.delete(key)
++
++
++ def remove_expired_responses(self):
++ """ Removes expired responses from storage
++ """
++ if not self._cache_expire_after:
++ return
++ self.cache.remove_old_entries(datetime.utcnow() - self._cache_expire_after)
++
++
++ requests_cache.backends.base.BaseCache.remove_old_entries = remove_old_entries
++ requests_cache.core.CachedSession.remove_expired_responses = remove_expired_responses
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/tvdbXslt.py b/mythtv/bindings/python/MythTV/ttvdb/tvdbXslt.py
+index ff5dc6827d..cd34f93a9b 100755
+--- a/mythtv/bindings/python/MythTV/ttvdb/tvdbXslt.py
++++ b/mythtv/bindings/python/MythTV/ttvdb/tvdbXslt.py
+@@ -37,6 +37,12 @@ __xsltExtentionList__ = []
+ import os, sys, re, time, datetime, shutil, urllib, string
+ from copy import deepcopy
+
++IS_PY2 = sys.version_info[0] == 2
++if not IS_PY2:
++ unicode = str
++ long = int
++
++baseXsltDir = u'%s/XSLT/' % os.path.dirname(os.path.realpath(__file__))
+
+ class OutStreamEncoder(object):
+ """Wraps a stream with an encoder"""
+@@ -50,26 +56,35 @@ class OutStreamEncoder(object):
+ def write(self, obj):
+ """Wraps the output stream, encoding Unicode strings with the specified encoding"""
+ if isinstance(obj, unicode):
+- try:
+- self.out.write(obj.encode(self.encoding))
+- except IOError:
+- pass
+- else:
+- try:
++ obj.encode(self.encoding)
++ try:
++ if IS_PY2:
+ self.out.write(obj)
+- except IOError:
+- pass
++ else:
++ self.out.buffer.write(obj)
++ except IOError:
++ pass
+
+ def __getattr__(self, attr):
+ """Delegate everything but write to the stream"""
+ return getattr(self.out, attr)
+-sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
+-sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
++if IS_PY2:
++ stdio_type = file
++else:
++ import io
++ stdio_type = io.TextIOWrapper
++ unicode = str
++if isinstance(sys.stdout, stdio_type):
++ sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
++ sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
+
+ try:
+- from StringIO import StringIO
++ try:
++ from StringIO import StringIO
++ except ImportError:
++ from io import StringIO
+ from lxml import etree
+-except Exception, e:
++except Exception as e:
+ sys.stderr.write(u'\n! Error - Importing the "lxml" and "StringIO" python libraries failed on error(%s)\n' % e)
+ sys.exit(1)
+
+@@ -94,15 +109,21 @@ class xpathFunctions(object):
+ """
+ def __init__(self):
+ self.filters = {
+- 'fanart': [u'//Banner[BannerType/text()="%(type)s" and Language/text()="%(language)s"]', u'//Banner[BannerType/text()="%(type)s" and Language/text()="en"]', u'//Banner[BannerType/text()="%(type)s"]'],
+- 'poster': [u'//Banner[BannerType/text()="season" and Language/text()="%(language)s" and Season/text()="%(season)s" and BannerType2/text()="season"]', u'//Banner[BannerType/text()="%(type)s" and Language/text()="%(language)s"]', u'//Banner[BannerType/text()="season" and Language/text()="en" and Season/text()="%(season)s" and BannerType2/text()="season"]', u'//Banner[BannerType/text()="season" and Season/text()="%(season)s" and BannerType2/text()="season"]', u'//Banner[BannerType/text()="%(type)s" and Language/text()="en"]', u'//Banner[BannerType/text()="%(type)s"]'],
+- 'banner': ['//Banner[BannerType/text()="season" and Language/text()="%(language)s" and Season/text()="%(season)s" and BannerType2/text()="seasonwide"]', u'//Banner[BannerType/text()="series" and Language/text()="%(language)s" and BannerType2/text()="graphical"]', '//Banner[BannerType/text()="season" and Language/text()="en" and Season/text()="%(season)s" and BannerType2/text()="seasonwide"]', '//Banner[BannerType/text()="season" and Season/text()="%(season)s" and BannerType2/text()="seasonwide"]', u'//Banner[BannerType/text()="series" and Language/text()="en" and BannerType2/text()="graphical"]', '//Banner[BannerType/text()="series" and BannerType2/text()="graphical"]'],
++ 'fanart': [u'//_banners/%(type)s/raw/item'],
++ 'poster': [u'//_banners/season/raw/item[subKey/text()="%(season)s"]',
++ u'//_banners/%(type)s/raw/item'],
++ 'banner': [u'//_banners/seasonwide/raw/item[subKey/text()="%(season)s"]',
++ u'//_banners/series/raw/item[subKey/text()="graphical"]'],
+ }
+ self.dataFilters = {
+- 'subtitle': u'//Data/Episode[SeasonNumber/text()="%(season)s" and EpisodeNumber/text()="%(episode)s"]/EpisodeName/text()',
+- 'description': u'//Data/Episode[SeasonNumber/text()="%(season)s" and EpisodeNumber/text()="%(episode)s"]/Overview/text()',
+- 'IMDB': u'//Data/Episode[SeasonNumber/text()="%(season)s" and EpisodeNumber/text()="%(episode)s"]/IMDB_ID/text()',
+- 'allEpisodes': u'//Data/Episode[SeasonNumber/text()="%(season)s" and EpisodeNumber/text()="%(episode)s"]',
++ 'subtitle': [u'//Data/Episode[SeasonNumber/text()="%(season)s" and EpisodeNumber/text()="%(episode)s"]/EpisodeName/text()',
++ u'//data/n%(season)s/n%(episode)s/episodeName/text()'],
++ 'description': [u'//Data/Episode[SeasonNumber/text()="%(season)s" and EpisodeNumber/text()="%(episode)s"]/Overview/text()',
++ u'//data/n%(season)s/n%(episode)s/overview/text()'],
++ 'IMDB': [u'//Data/Episode[SeasonNumber/text()="%(season)s" and EpisodeNumber/text()="%(episode)s"]/IMDB_ID/text()',
++ u'//data/n%(season)s/n%(episode)s/imdbId/text()'],
++ 'allEpisodes': [u'//Data/Episode[SeasonNumber/text()="%(season)s" and EpisodeNumber/text()="%(episode)s"]',
++ u'//data/n%(season)s/n%(episode)s'],
+ }
+ self.persistentResult = ''
+ # end __init__()
+@@ -119,6 +140,7 @@ class xpathFunctions(object):
+ """
+ self.FuncDict = {
+ 'lastUpdated': self.lastUpdated,
++ 'replace': self.replace,
+ 'htmlToString': self.htmlToString,
+ 'stringToList': self.stringToList,
+ 'imageElements': self.imageElements,
+@@ -187,26 +209,33 @@ class xpathFunctions(object):
+ 'episode': args[2][0].attrib['episode'],
+ }
+ filters = []
+- for index in range(len(self.filters[args[1]])):
+- filters.append(etree.XPath(self.filters[args[1]][index] % parmDict))
++ # print("image filter on %s" % args[1])
++ for filter in self.filters[args[1]]:
++ filters.append(etree.XPath(filter % parmDict))
+
+ # Get the preferred images
+ for xpathFilter in filters:
++ # print("xpf %r %r" % (args[0][0], xpathFilter))
+ for image in xpathFilter(args[0][0]):
+- if image.find('BannerPath') == None:
++ # print("im %r" % image)
++ # print(etree.tostring(image, method="xml", xml_declaration=False, pretty_print=True, ))
++ if image.find('fileName') == None:
+ continue
++ # print("im2 %r" % image)
+ tmpElement = etree.XML(u'<image></image>')
+ if args[1] == 'poster':
+ tmpElement.attrib['type'] = 'coverart'
+ else:
+ tmpElement.attrib['type'] = args[1]
+- tmpElement.attrib['url'] = u'http://www.thetvdb.com/banners/%s' % image.find('BannerPath').text
+- tmpElement.attrib['thumb'] = u'http://www.thetvdb.com/banners/_cache/%s' % image.find('BannerPath').text
+- tmpImageSize = image.find('BannerType2').text
+- index = tmpImageSize.find('x')
+- if index != -1:
+- tmpElement.attrib['width'] = tmpImageSize[:index]
+- tmpElement.attrib['height'] = tmpImageSize[index+1:]
++ tmpElement.attrib['url'] = u'http://www.thetvdb.com/banners/%s' % image.find('fileName').text
++ tmpElement.attrib['thumb'] = u'http://www.thetvdb.com/banners/%s' % image.find('thumbnail').text
++ tmpElement.attrib['rating'] = image.find('ratingsInfo').find('average').text
++ tmpImageSize = image.find('resolution').text
++ if tmpImageSize:
++ index = tmpImageSize.find('x')
++ if index != -1:
++ tmpElement.attrib['width'] = tmpImageSize[:index]
++ tmpElement.attrib['height'] = tmpImageSize[index+1:]
+ elementList.append(tmpElement)
+ if len(elementList):
+ break
+@@ -224,6 +253,13 @@ class xpathFunctions(object):
+ return text
+ # end textUtf8()
+
++ def replace(self, context, text, search_text, replace_text):
++ '''Replace search with replace
++ '''
++ text = self.textUtf8(text)
++ return text.replace(self.textUtf8(search_text), self.textUtf8(replace_text))
++ # end ampReplace()
++
+ def ampReplace(self, text):
+ '''Replace all "&" characters with "&"
+ '''
+@@ -279,8 +315,18 @@ class xpathFunctions(object):
+ 'season': args[0][0].attrib['season'],
+ 'episode': args[0][0].attrib['episode'],
+ }
+- xpathFilter = etree.XPath(self.dataFilters[args[2]] % parmDict)
+- results = xpathFilter(args[1][0])
++
++ # print("filter on list %r" % args[2])
++ filters = self.dataFilters[args[2]]
++ if isinstance(filters, list):
++ for filter in filters:
++ xpathFilter = etree.XPath(filter % parmDict)
++ results = xpathFilter(args[1][0])
++ if len(results):
++ break
++ else:
++ xpathFilter = etree.XPath(filters % parmDict)
++ results = xpathFilter(args[1][0])
+
+ # Sometimes all the results are required
+ if allValues == True:
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/tvdb_api.py b/mythtv/bindings/python/MythTV/ttvdb/tvdb_api.py
+index 6aa08945e1..aaef0dd691 100644
+--- a/mythtv/bindings/python/MythTV/ttvdb/tvdb_api.py
++++ b/mythtv/bindings/python/MythTV/ttvdb/tvdb_api.py
+@@ -1,68 +1,283 @@
+ #!/usr/bin/env python
+-#encoding:utf-8
+-#author:dbr/Ben
+-#project:tvdb_api
+-#repository:http://github.com/dbr/tvdb_api
+-#license:Creative Commons GNU GPL v2
+-# (http://creativecommons.org/licenses/GPL/2.0/)
++# encoding:utf-8
++# author:dbr/Ben
++# project:tvdb_api
++# repository:http://github.com/dbr/tvdb_api
++# license:unlicense (http://unlicense.org/)
++import sys
++import os
++import time
++from . import requests_cache_compatability
++from . import tvdb_create_key
++import requests
++import requests_cache
++import getpass
++import tempfile
++import warnings
++import logging
++import datetime
+
+-"""Simple-to-use Python interface to The TVDB's API (www.thetvdb.com)
++"""Simple-to-use Python interface to The TVDB's API (thetvdb.com)
+
+ Example usage:
+
+ >>> from tvdb_api import Tvdb
+ >>> t = Tvdb()
+->>> t['Lost'][4][11]['episodename']
++>>> t['Lost'][4][11]['episodeName']
+ u'Cabin Fever'
+ """
+ __author__ = "dbr/Ben"
+-__version__ = "1.2.1"
++__version__ = "2.0-dev"
+
+-import os
+-import sys
+-import urllib
+-import urllib2
+-import tempfile
+-import logging
+
+-try:
+- import xml.etree.cElementTree as ElementTree
+-except ImportError:
+- import xml.etree.ElementTree as ElementTree
+-
+-from cache import CacheHandler
+-
+-from tvdb_ui import BaseUI, ConsoleUI
+-from tvdb_exceptions import (tvdb_error, tvdb_userabort, tvdb_shownotfound,
+- tvdb_seasonnotfound, tvdb_episodenotfound, tvdb_attributenotfound)
+-
+-try:
+- from StringIO import StringIO
+- from lxml import etree as eTree
+-except Exception, e:
+- sys.stderr.write(u'\n! Error - Importing the "lxml" and "StringIO" python libraries failed on error(%s)\n' % e)
+- sys.exit(1)
+-
+-# Check that the lxml library is current enough
+-# From the lxml documents it states: (http://codespeak.net/lxml/installation.html)
+-# "If you want to use XPath, do not use libxml2 2.6.27. We recommend libxml2 2.7.2 or later"
+-# Testing was performed with the Ubuntu 9.10 "python-lxml" version "2.1.5-1ubuntu2" repository package
+-version = ''
+-for digit in eTree.LIBXML_VERSION:
+- version+=str(digit)+'.'
+-version = version[:-1]
+-if version < '2.7.2':
+- sys.stderr.write(u'''
+-! Error - The installed version of the "lxml" python library "libxml" version is too old.
+- At least "libxml" version 2.7.2 must be installed. Your version is (%s).
+-''' % version)
+- sys.exit(1)
++IS_PY2 = sys.version_info[0] == 2
++
++if IS_PY2:
++ user_input = raw_input
++ from urllib import quote as url_quote
++else:
++ from urllib.parse import quote as url_quote
++ user_input = input
++
++
++if IS_PY2:
++ int_types = (int, long)
++ text_type = unicode
++else:
++ int_types = int
++ text_type = str
++
++lastTimeout = None
++
++
++def log():
++ return logging.getLogger("tvdb_api")
++
++
++## Exceptions
++
++class tvdb_exception(Exception):
++ """Any exception generated by tvdb_api
++ """
++ pass
++
++class tvdb_error(tvdb_exception):
++ """An error with thetvdb.com (Cannot connect, for example)
++ """
++ pass
++
++class tvdb_userabort(tvdb_exception):
++ """User aborted the interactive selection (via
++ the q command, ^c etc)
++ """
++ pass
++
++class tvdb_notauthorized(tvdb_exception):
++ """An authorization error with thetvdb.com
++ """
++ pass
++
++class tvdb_shownotfound(tvdb_exception):
++ """Show cannot be found on thetvdb.com (non-existant show)
++ """
++ pass
++
++class tvdb_seasonnotfound(tvdb_exception):
++ """Season cannot be found on thetvdb.com
++ """
++ pass
++
++class tvdb_episodenotfound(tvdb_exception):
++ """Episode cannot be found on thetvdb.com
++ """
++ pass
++
++class tvdb_resourcenotfound(tvdb_exception):
++ """Resource cannot be found on thetvdb.com
++ """
++ pass
++
++class tvdb_invalidlanguage(tvdb_exception):
++ """invalid language given on thetvdb.com
++ """
++ def __init__(self, value):
++ self.value = value
++
++ def __str__(self):
++ return repr(self.value)
++
++class tvdb_attributenotfound(tvdb_exception):
++ """Raised if an episode does not have the requested
++ attribute (such as a episode name)
++ """
++ pass
++
++
++## UI
++
++class BaseUI(object):
++ """Base user interface for Tvdb show selection.
++
++ Selects first show.
++
++ A UI is a callback. A class, it's __init__ function takes two arguments:
++
++ - config, which is the Tvdb config dict, setup in tvdb_api.py
++ - log, which is Tvdb's logger instance (which uses the logging module). You can
++ call log.info() log.warning() etc
+
++ It must have a method "selectSeries", this is passed a list of dicts, each dict
++ contains the the keys "name" (human readable show name), and "sid" (the shows
++ ID as on thetvdb.com). For example:
++
++ [{'name': u'Lost', 'sid': u'73739'},
++ {'name': u'Lost Universe', 'sid': u'73181'}]
++
++ The "selectSeries" method must return the appropriate dict, or it can raise
++ tvdb_userabort (if the selection is aborted), tvdb_shownotfound (if the show
++ cannot be found).
++
++ A simple example callback, which returns a random series:
++
++ >>> import random
++ >>> from tvdb_ui import BaseUI
++ >>> class RandomUI(BaseUI):
++ ... def selectSeries(self, allSeries):
++ ... import random
++ ... return random.choice(allSeries)
++
++ Then to use it..
++
++ >>> from tvdb_api import Tvdb
++ >>> t = Tvdb(custom_ui = RandomUI)
++ >>> random_matching_series = t['Lost']
++ >>> type(random_matching_series)
++ <class 'tvdb_api.Show'>
++ """
++ def __init__(self, config, log = None):
++ self.config = config
++ if log is not None:
++ warnings.warn("the UI's log parameter is deprecated, instead use\n"
++ "use import logging; logging.getLogger('ui').info('blah')\n"
++ "The self.log attribute will be removed in the next version")
++ self.log = logging.getLogger(__name__)
++
++ def selectSeries(self, allSeries):
++ return allSeries[0]
++
++
++class ConsoleUI(BaseUI):
++ """Interactively allows the user to select a show from a console based UI
++ """
++
++ def _displaySeries(self, allSeries, limit = 6):
++ """Helper function, lists series with corresponding ID
++ """
++ if limit is not None:
++ toshow = allSeries[:limit]
++ else:
++ toshow = allSeries
++
++ print("TVDB Search Results:")
++ for i, cshow in enumerate(toshow):
++ i_show = i + 1 # Start at more human readable number 1 (not 0)
++ log().debug('Showing allSeries[%s], series %s)' % (i_show, allSeries[i]['seriesName']))
++ if i == 0:
++ extra = " (default)"
++ else:
++ extra = ""
++
++ lid_map = dict((v, k) for (k, v) in self.config['langabbv_to_id'].items())
++
++ output = "%s -> %s [%s] # http://thetvdb.com/?tab=series&id=%s&lid=%s%s" % (
++ i_show,
++ cshow['seriesName'],
++ lid_map[cshow['lid']],
++ str(cshow['id']),
++ cshow['lid'],
++ extra
++ )
++ if IS_PY2:
++ print(output.encode("UTF-8", "ignore"))
++ else:
++ print(output)
++
++ def selectSeries(self, allSeries):
++ self._displaySeries(allSeries)
++
++ if len(allSeries) == 1:
++ # Single result, return it!
++ print("Automatically selecting only result")
++ return allSeries[0]
++
++ if self.config['select_first'] is True:
++ print("Automatically returning first search result")
++ return allSeries[0]
++
++ while True: # return breaks this loop
++ try:
++ print("Enter choice (first number, return for default, 'all', ? for help):")
++ ans = user_input()
++ except KeyboardInterrupt:
++ raise tvdb_userabort("User aborted (^c keyboard interupt)")
++ except EOFError:
++ raise tvdb_userabort("User aborted (EOF received)")
++
++ log().debug('Got choice of: %s' % (ans))
++ try:
++ selected_id = int(ans) - 1 # The human entered 1 as first result, not zero
++ except ValueError: # Input was not number
++ if len(ans.strip()) == 0:
++ # Default option
++ log().debug('Default option, returning first series')
++ return allSeries[0]
++ if ans == "q":
++ log().debug('Got quit command (q)')
++ raise tvdb_userabort("User aborted ('q' quit command)")
++ elif ans == "?":
++ print("## Help")
++ print("# Enter the number that corresponds to the correct show.")
++ print("# a - display all results")
++ print("# all - display all results")
++ print("# ? - this help")
++ print("# q - abort tvnamer")
++ print("# Press return with no input to select first result")
++ elif ans.lower() in ["a", "all"]:
++ self._displaySeries(allSeries, limit = None)
++ else:
++ log().debug('Unknown keypress %s' % (ans))
++ else:
++ log().debug('Trying to return ID: %d' % (selected_id))
++ try:
++ return allSeries[selected_id]
++ except IndexError:
++ log().debug('Invalid show number entered!')
++ print("Invalid number (%s) selected!")
++ self._displaySeries(allSeries)
++
++
++## Main API
+
+ class ShowContainer(dict):
+ """Simple dict that holds a series of Show instances
+ """
+- pass
++
++ def __init__(self):
++ self._stack = []
++ self._lastgc = time.time()
++
++ def __setitem__(self, key, value):
++ self._stack.append(key)
++
++ # keep only the 100th latest results
++ if time.time() - self._lastgc > 20:
++ for o in self._stack[:-100]:
++ del self[o]
++ self._stack = self._stack[-100:]
++
++ self._lastgc = time.time()
++
++ super(ShowContainer, self).__setitem__(key, value)
+
+
+ class Show(dict):
+@@ -73,12 +288,22 @@ class Show(dict):
+ self.data = {}
+
+ def __repr__(self):
+- return "<Show %s (containing %s seasons)>" % (
+- self.data.get(u'seriesname', 'instance'),
++ return "<Show %r (containing %s seasons)>" % (
++ self.data.get(u'seriesName', 'instance'),
+ len(self)
+ )
+
+ def __getitem__(self, key):
++ v1_compatibility = {
++ 'seriesname': 'seriesName',
++ }
++
++ if key in v1_compatibility:
++ import warnings
++ msg = "v1 usage is deprecated, please use new names: old: '%s', new: '%s'" % (
++ key, v1_compatibility[key])
++ key = v1_compatibility[key]
++
+ if key in self:
+ # Key is an episode, return it
+ return dict.__getitem__(self, key)
+@@ -90,16 +315,28 @@ class Show(dict):
+ # Data wasn't found, raise appropriate error
+ if isinstance(key, int) or key.isdigit():
+ # Episode number x was not found
+- raise tvdb_seasonnotfound("Could not find season %s" % (repr(key)))
++ raise tvdb_seasonnotfound(
++ "Could not find season %s" % (repr(key))
++ )
+ else:
+ # If it's not numeric, it must be an attribute name, which
+ # doesn't exist, so attribute error.
+- raise tvdb_attributenotfound("Cannot find attribute %s" % (repr(key)))
++ raise tvdb_attributenotfound(
++ "Cannot find attribute %s" % (repr(key))
++ )
++
++ def airedOn(self, date):
++ ret = self.search(str(date), 'firstAired')
++ if len(ret) == 0:
++ raise tvdb_episodenotfound(
++ "Could not find any episodes that aired on %s" % date
++ )
++ return ret
+
+- def search(self, term = None, key = None):
++ def search(self, term=None, key=None):
+ """
+- Search all episodes in show. Can search all data, or a specific key (for
+- example, episodename)
++ Search all episodes in show. Can search all data, or a specific key
++ (for example, episodename)
+
+ Always returns an array (can be empty). First index contains the first
+ match, and so on.
+@@ -121,27 +358,27 @@ class Show(dict):
+ containing "my first day":
+
+ >>> t['Scrubs'].search("my first day")
+- [<Episode 01x01 - My First Day>]
++ [<Episode 01x01 - u'My First Day'>]
+ >>>
+
+ Search for "My Name Is Earl" episode named "Faked His Own Death":
+
+- >>> t['My Name Is Earl'].search('Faked His Own Death', key = 'episodename')
+- [<Episode 01x04 - Faked His Own Death>]
++ >>> t['My Name Is Earl'].search('Faked My Own Death', key='episodeName')
++ [<Episode 01x04 - u'Faked My Own Death'>]
+ >>>
+
+ To search Scrubs for all episodes with "mentor" in the episode name:
+
+- >>> t['scrubs'].search('mentor', key = 'episodename')
+- [<Episode 01x02 - My Mentor>, <Episode 03x15 - My Tormented Mentor>]
++ >>> t['scrubs'].search('mentor', key='episodeName')
++ [<Episode 01x02 - u'My Mentor'>, <Episode 03x15 - u'My Tormented Mentor'>]
+ >>>
+
+ # Using search results
+
+ >>> results = t['Scrubs'].search("my first")
+- >>> print results[0]['episodename']
++ >>> print results[0]['episodeName']
+ My First Day
+- >>> for x in results: print x['episodename']
++ >>> for x in results: print x['episodeName']
+ My First Day
+ My First Step
+ My First Kill
+@@ -149,14 +386,19 @@ class Show(dict):
+ """
+ results = []
+ for cur_season in self.values():
+- searchresult = cur_season.search(term = term, key = key)
++ searchresult = cur_season.search(term=term, key=key)
+ if len(searchresult) != 0:
+ results.extend(searchresult)
+- #end for cur_season
++
+ return results
+
+
+ class Season(dict):
++ def __init__(self, show=None):
++ """The show attribute points to the parent show
++ """
++ self.show = show
++
+ def __repr__(self):
+ return "<Season instance (containing %s episodes)>" % (
+ len(self.keys())
+@@ -168,20 +410,20 @@ class Season(dict):
+ else:
+ return dict.__getitem__(self, episode_number)
+
+- def search(self, term = None, key = None):
++ def search(self, term=None, key=None):
+ """Search all episodes in season, returns a list of matching Episode
+ instances.
+
+ >>> t = Tvdb()
+ >>> t['scrubs'][1].search('first day')
+- [<Episode 01x01 - My First Day>]
++ [<Episode 01x01 - u'My First Day'>]
+ >>>
+
+ See Show.search documentation for further information on search
+ """
+ results = []
+ for ep in self.values():
+- searchresult = ep.search(term = term, key = key)
++ searchresult = ep.search(term=term, key=key)
+ if searchresult is not None:
+ results.append(
+ searchresult
+@@ -190,12 +432,17 @@ class Season(dict):
+
+
+ class Episode(dict):
++ def __init__(self, season=None):
++ """The season attribute points to the parent season
++ """
++ self.season = season
++
+ def __repr__(self):
+- seasno = int(self.get(u'seasonnumber', 0))
+- epno = int(self.get(u'episodenumber', 0))
+- epname = self.get(u'episodename')
++ seasno = self.get(u'airedSeason', 0)
++ epno = self.get(u'airedEpisodeNumber', 0)
++ epname = self.get(u'episodeName')
+ if epname is not None:
+- return "<Episode %02dx%02d - %s>" % (seasno, epno, epname)
++ return "<Episode %02dx%02d - %r>" % (seasno, epno, epname)
+ else:
+ return "<Episode %02dx%02d>" % (seasno, epno)
+
+@@ -203,9 +450,31 @@ class Episode(dict):
+ try:
+ return dict.__getitem__(self, key)
+ except KeyError:
+- raise tvdb_attributenotfound("Cannot find attribute %s" % (repr(key)))
++ v1_compatibility = {
++ 'episodenumber': 'airedEpisodeNumber',
++ 'firstaired': 'firstAired',
++ 'seasonnumber': 'airedSeason',
++ 'episodename': 'episodeName',
++ }
++ if key in v1_compatibility:
++ import warnings
++ msg = "v1 usage is deprecated, please use new names: old: '%s', new: '%s'" % (
++ key, v1_compatibility[key])
++ warnings.warn(msg, category=DeprecationWarning)
++ try:
++ value = dict.__getitem__(self, v1_compatibility[key])
++ if key in ['episodenumber', 'seasonnumber']:
++ # This was a string in v1
++ return str(value)
++ else:
++ return value
++ except KeyError:
++ # We either return something or we get the exception below
++ pass
++
++ raise tvdb_attributenotfound("Cannot find attribute %s" % (repr(key)))
+
+- def search(self, term = None, key = None):
++ def search(self, term=None, key=None):
+ """Search episode data for term, if it matches, return the Episode (self).
+ The key parameter can be used to limit the search to a specific element,
+ for example, episodename.
+@@ -216,30 +485,29 @@ class Episode(dict):
+ Simple example:
+
+ >>> e = Episode()
+- >>> e['episodename'] = "An Example"
++ >>> e['episodeName'] = "An Example"
+ >>> e.search("examp")
+- <Episode 00x00 - An Example>
++ <Episode 00x00 - 'An Example'>
+ >>>
+
+ Limiting by key:
+
+- >>> e.search("examp", key = "episodename")
+- <Episode 00x00 - An Example>
++ >>> e.search("examp", key = "episodeName")
++ <Episode 00x00 - 'An Example'>
+ >>>
+ """
+- if term == None:
++ if term is None:
+ raise TypeError("must supply string to search for (contents)")
+
+- term = unicode(term).lower()
++ term = text_type(term).lower()
+ for cur_key, cur_value in self.items():
+- cur_key, cur_value = unicode(cur_key).lower(), unicode(cur_value).lower()
++ cur_key = text_type(cur_key)
++ cur_value = text_type(cur_value).lower()
+ if key is not None and cur_key != key:
+ # Do not search this key
+ continue
+- if cur_value.find( unicode(term).lower() ) > -1:
++ if cur_value.find(text_type(term)) > -1:
+ return self
+- #end if cur_value.find()
+- #end for cur_key, cur_value
+
+
+ class Actors(list):
+@@ -258,26 +526,31 @@ class Actor(dict):
+ sortorder
+ """
+ def __repr__(self):
+- return "<Actor \"%s\">" % (self.get("name"))
++ return "<Actor %r>" % self.get("name")
+
+
+ class Tvdb:
+ """Create easy-to-use interface to name of season/episode name
+ >>> t = Tvdb()
+- >>> t['Scrubs'][1][24]['episodename']
++ >>> t['Scrubs'][1][24]['episodeName']
+ u'My Last Day'
+ """
+ def __init__(self,
+- interactive = False,
+- select_first = False,
+- debug = False,
+- cache = True,
+- banners = False,
+- actors = False,
+- custom_ui = None,
+- language = None,
+- search_all_languages = False,
+- apikey = None):
++ interactive=False,
++ select_first=False,
++ debug=False,
++ cache=True,
++ banners=False,
++ actors=False,
++ custom_ui=None,
++ language=None,
++ search_all_languages=False,
++ apikey=None,
++ username=None,
++ userkey=None,
++ forceConnect=False,
++ dvdorder=False):
++
+ """interactive (True/False):
+ When True, uses built-in console UI is used to select the correct show.
+ When False, the first search result is used.
+@@ -287,20 +560,28 @@ class Tvdb:
+ than showing the user a list of more than one series).
+ Is overridden by interactive = False, or specifying a custom_ui
+
+- debug (True/False):
+- shows verbose debugging information
++ debug (True/False) DEPRECATED:
++ Replaced with proper use of logging module. To show debug messages:
++
++ >>> import logging
++ >>> logging.basicConfig(level = logging.DEBUG)
++
++ cache (True/False/str/requests_cache.CachedSession):
+
+- cache (True/False/str/unicode):
+- Retrieved XML are persisted to to disc. If true, stores in tvdb_api
+- folder under your systems TEMP_DIR, if set to str/unicode instance it
+- will use this as the cache location. If False, disables caching.
++ Retrieved URLs can be persisted to to disc.
++
++ True/False enable or disable default caching. Passing
++ string specifies the directory where to store the
++ "tvdb.sqlite3" cache file. Alternatively a custom
++ requests.Session instance can be passed (e.g maybe a
++ customised instance of `requests_cache.CachedSession`)
+
+ banners (True/False):
+ Retrieves the banners for a show. These are accessed
+ via the _banners key of a Show(), for example:
+
+ >>> Tvdb(banners=True)['scrubs']['_banners'].keys()
+- ['fanart', 'poster', 'series', 'season']
++ [u'fanart', u'poster', u'seasonwide', u'season', u'series']
+
+ actors (True/False):
+ Retrieves a list of the actors for a show. These are accessed
+@@ -308,7 +589,7 @@ class Tvdb:
+
+ >>> t = Tvdb(actors=True)
+ >>> t['scrubs']['_actors'][0]['name']
+- u'Zach Braff'
++ u'John C. McGinley'
+
+ custom_ui (tvdb_ui.BaseUI subclass):
+ A callable subclass of tvdb_ui.BaseUI (overrides interactive option)
+@@ -331,165 +612,259 @@ class Tvdb:
+ own key if desired - this is recommended if you are embedding
+ tvdb_api in a larger application)
+ See http://thetvdb.com/?tab=apiregister to get your own key
++
++ username (str/unicode):
++ Override the default thetvdb.com username. By default it will use
++ tvdb_api's own username (fine for small scripts), but you can use your
++ own key if desired - this is recommended if you are embedding
++ tvdb_api in a larger application)
++ See http://thetvdb.com/ to register an account
++
++ userkey (str/unicode):
++ Override the default thetvdb.com userkey. By default it will use
++ tvdb_api's own userkey (fine for small scripts), but you can use your
++ own key if desired - this is recommended if you are embedding
++ tvdb_api in a larger application)
++ See http://thetvdb.com/ to register an account
++
++ forceConnect (bool):
++ If true it will always try to connect to theTVDB.com even if we
++ recently timed out. By default it will wait one minute before
++ trying again, and any requests within that one minute window will
++ return an exception immediately.
+ """
+- self.shows = ShowContainer() # Holds all Show classes
+- self.corrections = {} # Holds show-name to show_id mapping
++
++ global lastTimeout
++
++ # if we're given a lastTimeout that is less than 1 min just give up
++ if not forceConnect and lastTimeout is not None and datetime.datetime.now() - lastTimeout < datetime.timedelta(minutes=1):
++ raise tvdb_error("We recently timed out, so giving up early this time")
++
++ self.shows = ShowContainer() # Holds all Show classes
++ self.corrections = {} # Holds show-name to show_id mapping
+
+ self.config = {}
+
+- if apikey is not None:
+- self.config['apikey'] = apikey
++ if apikey and username and userkey:
++ self.config['auth_payload'] = {
++ "apikey": apikey,
++ "username": username,
++ "userkey": userkey
++ }
+ else:
+- self.config['apikey'] = "0629B785CE550C8D" # tvdb_api's API key
++ self.config['auth_payload'] = {
++ "apikey": "0629B785CE550C8D",
++ "userkey": "",
++ "username": ""
++ }
+
+- self.config['debug_enabled'] = debug # show debugging messages
++ self.config['debug_enabled'] = debug # show debugging messages
+
+ self.config['custom_ui'] = custom_ui
+
+- self.config['interactive'] = interactive # prompt for correct series?
++ self.config['interactive'] = interactive # prompt for correct series?
+
+ self.config['select_first'] = select_first
+
+ self.config['search_all_languages'] = search_all_languages
+
++ self.config['dvdorder'] = dvdorder
++
+ if cache is True:
++ self.session = requests_cache.CachedSession(
++ expire_after=21600, # 6 hours
++ backend='sqlite',
++ cache_name=self._getTempDir(),
++ include_get_headers=True
++ )
++ self.session.remove_expired_responses()
+ self.config['cache_enabled'] = True
+- self.config['cache_location'] = self._getTempDir()
+- elif isinstance(cache, basestring):
+- self.config['cache_enabled'] = True
+- self.config['cache_location'] = cache
+- else:
++ elif cache is False:
++ self.session = requests.Session()
+ self.config['cache_enabled'] = False
+-
+- if self.config['cache_enabled']:
+- self.urlopener = urllib2.build_opener(
+- CacheHandler(self.config['cache_location'])
+- )
++ elif isinstance(cache, str):
++ # Specified cache path
++ self.session = requests_cache.CachedSession(
++ expire_after=21600, # 6 hours
++ backend='sqlite',
++ cache_name=os.path.join(cache, "tvdb_api"),
++ include_get_headers=True
++ )
++ self.session.remove_expired_responses()
+ else:
+- self.urlopener = urllib2.build_opener()
++ self.session = cache
++ try:
++ self.session.get
++ except AttributeError:
++ raise ValueError("cache argument must be True/False, string as cache path or requests.Session-type object (e.g from requests_cache.CachedSession)")
+
+ self.config['banners_enabled'] = banners
+ self.config['actors_enabled'] = actors
+
+- self.log = self._initLogger() # Setups the logger (self.log.debug() etc)
++ if self.config['debug_enabled']:
++ warnings.warn(
++ "The debug argument to tvdb_api.__init__ will be removed in the next version. "
++ "To enable debug messages, use the following code before importing: "
++ "import logging; logging.basicConfig(level=logging.DEBUG)"
++ )
++ logging.basicConfig(level=logging.DEBUG)
+
+- # List of language from http://www.thetvdb.com/api/0629B785CE550C8D/languages.xml
++ # List of language from http://thetvdb.com/api/0629B785CE550C8D/languages.xml
+ # Hard-coded here as it is realtively static, and saves another HTTP request, as
+ # recommended on http://thetvdb.com/wiki/index.php/API:languages.xml
+ self.config['valid_languages'] = [
+- "da", "fi", "nl", "de", "it", "es", "fr","pl", "hu","el","tr",
+- "ru","he","ja","pt","zh","cs","sl", "hr","ko","en","sv","no"
++ "da", "fi", "nl", "de", "it", "es", "fr", "pl", "hu", "el", "tr",
++ "ru", "he", "ja", "pt", "zh", "cs", "sl", "hr", "ko", "en", "sv",
++ "no"
+ ]
+
++ # thetvdb.com should be based around numeric language codes,
++ # but to link to a series like http://thetvdb.com/?tab=series&id=79349&lid=16
++ # requires the language ID, thus this mapping is required (mainly
++ # for usage in tvdb_ui - internally tvdb_api will use the language abbreviations)
++ self.config['langabbv_to_id'] = {
++ 'el': 20, 'en': 7, 'zh': 27, 'it': 15, 'cs': 28, 'es': 16,
++ 'ru': 22, 'nl': 13, 'pt': 26, 'no': 9, 'tr': 21, 'pl': 18,
++ 'fr': 17, 'hr': 31, 'de': 14, 'da': 10, 'fi': 11, 'hu': 19,
++ 'ja': 25, 'he': 24, 'ko': 32, 'sv': 8, 'sl': 30
++ }
++
+ if language is None:
+- self.config['language'] = "en"
+- elif language not in self.config['valid_languages']:
+- raise ValueError("Invalid language %s, options are: %s" % (
+- language, self.config['valid_languages']
+- ))
++ self.config['language'] = 'en'
+ else:
+- self.config['language'] = language
++ if language not in self.config['valid_languages']:
++ raise ValueError("Invalid language %s, options are: %s" % (
++ language, self.config['valid_languages']
++ ))
++ else:
++ self.config['language'] = language
+
+ # The following url_ configs are based of the
+ # http://thetvdb.com/wiki/index.php/Programmers_API
+- self.config['base_url'] = "http://www.thetvdb.com"
++ self.config['base_url'] = "http://thetvdb.com"
++ self.config['api_url'] = "https://api.thetvdb.com"
+
+- if self.config['search_all_languages']:
+- self.config['url_getSeries'] = "%(base_url)s/api/GetSeries.php?seriesname=%%s&language=all" % self.config
+- else:
+- self.config['url_getSeries'] = "%(base_url)s/api/GetSeries.php?seriesname=%%s&language=%(language)s" % self.config
++ self.config['url_getSeries'] = u"%(api_url)s/search/series?name=%%s" % self.config
+
+- self.config['url_epInfo'] = "%(base_url)s/api/%(apikey)s/series/%%s/all/%(language)s.xml" % self.config
++ self.config['url_epInfo'] = u"%(api_url)s/series/%%s/episodes" % self.config
++ self.config['url_epDetail'] = u"%(api_url)s/episodes/%%s" % self.config
+
+- self.config['url_seriesInfo'] = "%(base_url)s/api/%(apikey)s/series/%%s/%(language)s.xml" % self.config
+- self.config['url_actorsInfo'] = "%(base_url)s/api/%(apikey)s/series/%%s/actors.xml" % self.config
++ self.config['url_seriesInfo'] = u"%(api_url)s/series/%%s" % self.config
++ self.config['url_actorsInfo'] = u"%(api_url)s/series/%%s/actors" % self.config
+
+- self.config['url_seriesBanner'] = "%(base_url)s/api/%(apikey)s/series/%%s/banners.xml" % self.config
+- self.config['url_artworkPrefix'] = "%(base_url)s/banners/%%s" % self.config
++ self.config['url_seriesBanner'] = u"%(api_url)s/series/%%s/images" % self.config
++ self.config['url_seriesBannerInfo'] = u"%(api_url)s/series/%%s/images/query?keyType=%%s" % self.config
++ self.config['url_artworkPrefix'] = u"%(base_url)s/banners/%%s" % self.config
+
+- # Initialize XML display value to off
+- self.xml = False
+- self.searchTree = None
+- self.seriesInfoTree = None
+- self.epInfoTree = None
+- self.actorsInfoTree = None
+- self.imagesInfoTree = None
+- self.baseXsltDir = u'%s/XSLT/' % os.path.dirname( os.path.realpath( __file__ ))
+- #end __init__
++ self.__authorized = False
++ self.headers = {'Content-Type': 'application/json',
++ 'Accept': 'application/json',
++ 'Accept-Language': self.config['language'],
++ 'User-Agent': 'tvdb/2.0'
++ }
+
+- def _initLogger(self):
+- """Setups a logger using the logging module, returns a log object
++ def _getTempDir(self):
++ """Returns the [system temp dir]/tvdb_api-u501 (or
++ tvdb_api-myuser)
+ """
+- logger = logging.getLogger("tvdb")
+- formatter = logging.Formatter('%(asctime)s) %(levelname)s %(message)s')
++ if hasattr(os, 'getuid'):
++ uid = "u%d" % (os.getuid())
++ else:
++ # For Windows
++ try:
++ uid = getpass.getuser()
++ except ImportError:
++ return os.path.join(tempfile.gettempdir(), "tvdb_api")
+
+- hdlr = logging.StreamHandler(sys.stdout)
++ return os.path.join(tempfile.gettempdir(), "tvdb_api-%s" % (uid))
+
+- hdlr.setFormatter(formatter)
+- logger.addHandler(hdlr)
++ def _loadUrl(self, url, data=None, recache=False, language=None):
++ """Return response from The TVDB API"""
+
+- if self.config['debug_enabled']:
+- logger.setLevel(logging.DEBUG)
++ if not language:
++ language = self.config['language']
++ if language not in self.config['valid_languages']:
++ raise ValueError("Invalid language %s, options are: %s" % (
++ language, self.config['valid_languages']
++ ))
++ self.headers['Accept-Language'] = language
++
++ # TODO: обрабатывать исключения (Handle Exceptions)
++ # TODO: обновлять токен (Update Token)
++ # encoded url is used for hashing in the cache so
++ # python 2 and 3 generate the same hash
++ if not self.__authorized:
++ # only authorize of we haven't before and we
++ # don't have the url in the cache
++ fake_session_for_key = requests.Session()
++ fake_session_for_key.headers['Accept-Language'] = language
++ cache_key = None
++ try:
++ # in case the session class has no cache object, fail gracefully
++ cache_key = self.session.cache.create_key(fake_session_for_key.prepare_request(requests.Request('GET', url)))
++ except:
++ pass
++ if not cache_key or not self.session.cache.has_key(cache_key):
++ self.authorize()
++
++ response = self.session.get(url, headers=self.headers)
++ r = response.json()
++ log().debug("loadurl: %s lid=%s" % (url, language))
++ log().debug("response:")
++ log().debug(r)
++ error = r.get('Error')
++ errors = r.get('errors')
++ r_data = r.get('data')
++ links = r.get('links')
++
++ if error:
++ if error == u'Resource not found':
++ # raise(tvdb_resourcenotfound)
++ # handle no data at a different level so it is more specific
++ pass
++ if error == u'Not Authorized':
++ raise(tvdb_notauthorized)
++ if errors:
++ if u'invalidLanguage' in errors:
++ # raise(tvdb_invalidlanguage(errors[u'invalidLanguage']))
++ # invalidLanguage does not mean there is no data
++ # there is just less data
++ pass
++
++ if data and isinstance(data, list):
++ data.extend(r_data)
+ else:
+- logger.setLevel(logging.WARNING)
+- return logger
+- #end initLogger
+-
+- def _getTempDir(self):
+- """Returns the [system temp dir]/tvdb_api
+- """
+- return os.path.join(tempfile.gettempdir(), "tvdb_api")
++ data = r_data
+
+- def _loadUrl(self, url, recache = False):
+- try:
+- self.log.debug("Retrieving URL %s" % url)
+- resp = self.urlopener.open(url)
+- if 'x-local-cache' in resp.headers:
+- self.log.debug("URL %s was cached in %s" % (
+- url,
+- resp.headers['x-local-cache'])
+- )
+- if recache:
+- self.log.debug("Attempting to recache %s" % url)
+- resp.recache()
+- except urllib2.URLError, errormsg:
+- raise tvdb_error("Could not connect to server: %s" % (errormsg))
+- #end try
++ if links and links['next']:
++ url = url.split('?')[0]
++ _url = url + "?page=%s" % links['next']
++ self._loadUrl(_url, data)
+
+- return resp.read()
++ return data
+
+- def _getetsrc(self, url):
++ def authorize(self):
++ log().debug("auth")
++ r = self.session.post('https://api.thetvdb.com/login', json=self.config['auth_payload'], headers=self.headers)
++ r_json = r.json()
++ error = r_json.get('Error')
++ if error:
++ if error == u'Not Authorized':
++ raise(tvdb_notauthorized)
++ token = r_json.get('token')
++ self.headers['Authorization'] = "Bearer %s" % text_type(token)
++ self.__authorized = True
++
++ def _getetsrc(self, url, language=None):
+ """Loads a URL using caching, returns an ElementTree of the source
+ """
+- src = self._loadUrl(url)
+- try:
+- if self.xml:
+- self.tmpTree = eTree.XML(src)
+- return ElementTree.fromstring(src)
+- except SyntaxError:
+- src = self._loadUrl(url, recache=True)
+- try:
+- if self.xml:
+- self.tmpTree = eTree.XML(src)
+- return ElementTree.fromstring(src)
+- except SyntaxError, exceptionmsg:
+- errormsg = "There was an error with the XML retrieved from thetvdb.com:\n%s" % (
+- exceptionmsg
+- )
+-
+- if self.config['cache_enabled']:
+- errormsg += "\nFirst try emptying the cache folder at..\n%s" % (
+- self.config['cache_location']
+- )
++ src = self._loadUrl(url, language=language)
+
+- errormsg += "\nIf this does not resolve the issue, please try again later. If the error persists, report a bug on"
+- errormsg += "\nhttp://dbr.lighthouseapp.com/projects/13342-tvdb_api/overview\n"
+- raise tvdb_error(errormsg)
+- #end _getetsrc
++ return src
+
+ def _setItem(self, sid, seas, ep, attrib, value):
+ """Creates a new episode, creating Show(), Season() and
+- Episode()s as required. Called by _getShowData to populute
++ Episode()s as required. Called by _getShowData to populate show
+
+ Since the nice-to-use tvdb[1][24]['name] interface
+ makes it impossible to do tvdb[1][24]['name] = "name"
+@@ -505,11 +880,10 @@ class Tvdb:
+ if sid not in self.shows:
+ self.shows[sid] = Show()
+ if seas not in self.shows[sid]:
+- self.shows[sid][seas] = Season()
++ self.shows[sid][seas] = Season(show=self.shows[sid])
+ if ep not in self.shows[sid][seas]:
+- self.shows[sid][seas][ep] = Episode()
++ self.shows[sid][seas][ep] = Episode(season=self.shows[sid][seas])
+ self.shows[sid][seas][ep][attrib] = value
+- #end _set_item
+
+ def _setShowData(self, sid, key, value):
+ """Sets self.shows[sid] to a new Show instance, or sets the data
+@@ -518,17 +892,25 @@ class Tvdb:
+ self.shows[sid] = Show()
+ self.shows[sid].data[key] = value
+
+- def _cleanData(self, data):
+- """Cleans up strings returned by TheTVDB.com
+-
+- Issues corrected:
+- - Replaces & with &
+- - Trailing whitespace
++ def search(self, series):
++ """This searches TheTVDB.com for the series name
++ and returns the result list
+ """
+- data = data.replace(u"&", u"&")
+- data = data.strip()
+- return data
+- #end _cleanData
++ series = url_quote(series.encode("utf-8"))
++ log().debug("Searching for show %s" % series)
++ seriesEt = self._getetsrc(self.config['url_getSeries'] % (series))
++ if not seriesEt:
++ log().debug('Series result returned zero')
++ raise tvdb_shownotfound("Show-name search returned zero results (cannot find show on TVDB)")
++
++ allSeries = []
++ for series in seriesEt:
++ series['lid'] = self.config['langabbv_to_id'][self.config['language']]
++ series['language'] = self.config['language']
++ log().debug('Found series %(seriesName)s' % series)
++ allSeries.append(series)
++
++ return allSeries
+
+ def _getSeries(self, series):
+ """This searches TheTVDB.com for the series name,
+@@ -536,52 +918,32 @@ class Tvdb:
+ series. If not, and interactive == True, ConsoleUI is used, if not
+ BaseUI is used to select the first result.
+ """
+- series = urllib.quote(series.encode("utf-8"))
+- self.log.debug("Searching for show %s" % series)
+- seriesEt = self._getetsrc(self.config['url_getSeries'] % (series))
+- if self.xml:
+- self.searchTree = self.tmpTree
+- allSeries = []
+- for series in seriesEt:
+- sn = series.find('SeriesName')
+- value = self._cleanData(sn.text)
+- cur_sid = series.find('id').text
+- self.log.debug('Found series %s (id: %s)' % (value, cur_sid))
+- allSeries.append( {'sid':cur_sid, 'name':value} )
+- #end for series
+-
+- if len(allSeries) == 0:
+- self.log.debug('Series result returned zero')
+- raise tvdb_shownotfound("Show-name search returned zero results (cannot find show on TVDB)")
++ allSeries = self.search(series)
+
+ if self.config['custom_ui'] is not None:
+- self.log.debug("Using custom UI %s" % (repr(self.config['custom_ui'])))
+- ui = self.config['custom_ui'](config = self.config, log = self.log)
++ log().debug("Using custom UI %s" % (repr(self.config['custom_ui'])))
++ ui = self.config['custom_ui'](config=self.config)
+ else:
+ if not self.config['interactive']:
+- self.log.debug('Auto-selecting first search result using BaseUI')
+- ui = BaseUI(config = self.config, log = self.log)
++ log().debug('Auto-selecting first search result using BaseUI')
++ ui = BaseUI(config=self.config)
+ else:
+- self.log.debug('Interactivily selecting show using ConsoleUI')
+- ui = ConsoleUI(config = self.config, log = self.log)
+- #end if config['interactive]
+- #end if custom_ui != None
++ log().debug('Interactively selecting show using ConsoleUI')
++ ui = ConsoleUI(config=self.config)
+
+ return ui.selectSeries(allSeries)
+
+- #end _getSeries
+-
+ def _parseBanners(self, sid):
+ """Parses banners XML, from
+- http://www.thetvdb.com/api/[APIKEY]/series/[SERIES ID]/banners.xml
++ http://thetvdb.com/api/[APIKEY]/series/[SERIES ID]/banners.xml
+
+ Banners are retrieved using t['show name]['_banners'], for example:
+
+ >>> t = Tvdb(banners = True)
+ >>> t['scrubs']['_banners'].keys()
+- ['fanart', 'poster', 'series', 'season']
+- >>> t['scrubs']['_banners']['poster']['680x1000']['35308']['_bannerpath']
+- 'http://www.thetvdb.com/banners/posters/76156-2.jpg'
++ [u'fanart', u'poster', u'seasonwide', u'season', u'series']
++ >>> t['scrubs']['_banners']['poster']['680x1000'][35308]['_bannerpath']
++ u'http://thetvdb.com/banners/posters/76156-2.jpg'
+ >>>
+
+ Any key starting with an underscore has been processed (not the raw
+@@ -589,121 +951,42 @@ class Tvdb:
+
+ This interface will be improved in future versions.
+ """
+- self.log.debug('Getting season banners for %s' % (sid))
+- bannersEt = self._getetsrc( self.config['url_seriesBanner'] % (sid) )
+- if self.xml:
+- self.imagesInfoTree = self.tmpTree
++ log().debug('Getting season banners for %s' % (sid))
++ bannersEt = self._getetsrc(self.config['url_seriesBanner'] % sid)
+ banners = {}
+- for cur_banner in bannersEt.findall('Banner'):
+- bid = cur_banner.find('id').text
+- btype = cur_banner.find('BannerType')
+- btype2 = cur_banner.find('BannerType2')
+- if btype is None or btype2 is None:
+- continue
+- btype, btype2 = btype.text, btype2.text
+- if not btype in banners:
+- banners[btype] = {}
+- if not btype2 in banners[btype]:
+- banners[btype][btype2] = {}
+- if not bid in banners[btype][btype2]:
+- banners[btype][btype2][bid] = {}
+-
+- self.log.debug("Banner: %s", bid)
+- for cur_element in cur_banner.getchildren():
+- tag = cur_element.tag.lower()
+- value = cur_element.text
+- if tag is None or value is None:
++ for cur_banner in bannersEt.keys():
++ banners_info = self._getetsrc(self.config['url_seriesBannerInfo'] % (sid, cur_banner))
++ for banner_info in banners_info:
++ bid = banner_info.get('id')
++ btype = banner_info.get('keyType')
++ btype2 = banner_info.get('resolution')
++ if btype is None or btype2 is None:
+ continue
+- tag, value = tag.lower(), value.lower()
+- self.log.debug("Banner info: %s = %s" % (tag, value))
+- banners[btype][btype2][bid][tag] = value
+-
+- for k, v in banners[btype][btype2][bid].items():
+- if k.endswith("path"):
+- new_key = "_%s" % (k)
+- self.log.debug("Transforming %s to %s" % (k, new_key))
+- new_url = self.config['url_artworkPrefix'] % (v)
+- self.log.debug("New banner URL: %s" % (new_url))
+- banners[btype][btype2][bid][new_key] = new_url
+-
+- self._setShowData(sid, "_banners", banners)
+-
+-
+- # Alternate tvdb_api's method for retrieving graphics URLs but returned as a list that preserves
+- # the user rating order highest rated to lowest rated
+- def ttvdb_parseBanners(self, sid):
+- """Parses banners XML, from
+- http://www.thetvdb.com/api/[APIKEY]/series/[SERIES ID]/banners.xml
+-
+- Banners are retrieved using t['show name]['_banners'], for example:
+
+- >>> t = Tvdb(banners = True)
+- >>> t['scrubs']['_banners'].keys()
+- ['fanart', 'poster', 'series', 'season']
+- >>> t['scrubs']['_banners']['poster']['680x1000']['35308']['_bannerpath']
+- 'http://www.thetvdb.com/banners/posters/76156-2.jpg'
+- >>>
++ if btype not in banners:
++ banners[btype] = {}
++ if btype2 not in banners[btype]:
++ banners[btype][btype2] = {}
++ if bid not in banners[btype][btype2]:
++ banners[btype][btype2][bid] = {}
+
+- Any key starting with an underscore has been processed (not the raw
+- data from the XML)
++ banners[btype][btype2][bid]['bannerpath'] = banner_info['fileName']
++ banners[btype][btype2][bid]['resolution'] = banner_info['resolution']
++ banners[btype][btype2][bid]['subKey'] = banner_info['subKey']
+
+- This interface will be improved in future versions.
+- Changed in this interface is that a list or URLs is created to preserve the user rating order from
+- top rated to lowest rated.
+- """
+-
+- self.log.debug('Getting season banners for %s' % (sid))
+- bannersEt = self._getetsrc( self.config['url_seriesBanner'] % (sid) )
+- if self.xml:
+- self.imagesInfoTree = self.tmpTree
+- banners = {}
+- bid_order = {'fanart': [], 'poster': [], 'series': [], 'season': []}
+- for cur_banner in bannersEt.findall('Banner'):
+- bid = cur_banner.find('id').text
+- btype = cur_banner.find('BannerType')
+- btype2 = cur_banner.find('BannerType2')
+- if btype is None or btype2 is None:
+- continue
+- btype, btype2 = btype.text, btype2.text
+- if not btype in banners:
+- banners[btype] = {}
+- if not btype2 in banners[btype]:
+- banners[btype][btype2] = {}
+- if not bid in banners[btype][btype2]:
+- banners[btype][btype2][bid] = {}
+- if btype in bid_order.keys():
+- if btype2 != u'blank':
+- bid_order[btype].append([bid, btype2])
+-
+- self.log.debug("Banner: %s", bid)
+- for cur_element in cur_banner.getchildren():
+- tag = cur_element.tag.lower()
+- value = cur_element.text
+- if tag is None or value is None:
+- continue
+- tag, value = tag.lower(), value.lower()
+- self.log.debug("Banner info: %s = %s" % (tag, value))
+- banners[btype][btype2][bid][tag] = value
+-
+- for k, v in banners[btype][btype2][bid].items():
+- if k.endswith("path"):
+- new_key = "_%s" % (k)
+- self.log.debug("Transforming %s to %s" % (k, new_key))
+- new_url = self.config['url_artworkPrefix'] % (v)
+- self.log.debug("New banner URL: %s" % (new_url))
+- banners[btype][btype2][bid][new_key] = new_url
+-
+- graphics_in_order = {'fanart': [], 'poster': [], 'series': [], 'season': []}
+- for key in bid_order.keys():
+- for bid in bid_order[key]:
+- graphics_in_order[key].append(banners[key][bid[1]][bid[0]])
+- return graphics_in_order
+- # end ttvdb_parseBanners()
++ for k, v in list(banners[btype][btype2][bid].items()):
++ if k.endswith("path"):
++ new_key = "_%s" % k
++ log().debug("Transforming %s to %s" % (k, new_key))
++ new_url = self.config['url_artworkPrefix'] % v
++ banners[btype][btype2][bid][new_key] = new_url
+
++ banners[btype]['raw'] = banners_info
++ self._setShowData(sid, "_banners", banners)
+
+ def _parseActors(self, sid):
+ """Parsers actors XML, from
+- http://www.thetvdb.com/api/[APIKEY]/series/[SERIES ID]/actors.xml
++ http://thetvdb.com/api/[APIKEY]/series/[SERIES ID]/actors.xml
+
+ Actors are retrieved using t['show name]['_actors'], for example:
+
+@@ -714,59 +997,71 @@ class Tvdb:
+ >>> type(actors[0])
+ <class 'tvdb_api.Actor'>
+ >>> actors[0]
+- <Actor "Zach Braff">
++ <Actor u'John C. McGinley'>
+ >>> sorted(actors[0].keys())
+- ['id', 'image', 'name', 'role', 'sortorder']
++ [u'id', u'image', u'imageAdded', u'imageAuthor', u'lastUpdated', u'name', u'role', u'seriesId', u'sortOrder']
+ >>> actors[0]['name']
+- u'Zach Braff'
++ u'John C. McGinley'
+ >>> actors[0]['image']
+- 'http://www.thetvdb.com/banners/actors/43640.jpg'
++ u'http://thetvdb.com/banners/actors/43638.jpg'
+
+ Any key starting with an underscore has been processed (not the raw
+ data from the XML)
+ """
+- self.log.debug("Getting actors for %s" % (sid))
++ log().debug("Getting actors for %s" % (sid))
+ actorsEt = self._getetsrc(self.config['url_actorsInfo'] % (sid))
+- if self.xml:
+- self.actorsInfoTree = self.tmpTree
++
+ cur_actors = Actors()
+- for curActorItem in actorsEt.findall("Actor"):
+- curActor = Actor()
+- for curInfo in curActorItem:
+- tag = curInfo.tag.lower()
+- value = curInfo.text
+- if value is not None:
+- if tag == "image":
+- value = self.config['url_artworkPrefix'] % (value)
+- else:
+- value = self._cleanData(value)
+- curActor[tag] = value
+- cur_actors.append(curActor)
++
++ if actorsEt is not None:
++ for curActorItem in actorsEt:
++ curActor = Actor()
++ for curInfo in curActorItem.keys():
++ tag = curInfo
++ value = curActorItem[curInfo]
++ if value is not None:
++ if tag == "image":
++ value = self.config['url_artworkPrefix'] % (value)
++ curActor[tag] = value
++ cur_actors.append(curActor)
+ self._setShowData(sid, '_actors', cur_actors)
+
+- def _getShowData(self, sid):
++ def _getShowData(self, sid, language):
+ """Takes a series ID, gets the epInfo URL and parses the TVDB
+ XML file into the shows dict in layout:
+ shows[series_id][season_number][episode_number]
+ """
++
++ if self.config['language'] is None:
++ log().debug('Config language is none, using show language')
++ if language is None:
++ raise tvdb_error("config['language'] was None, this should not happen")
++ else:
++ log().debug(
++ 'Configured language %s override show language of %s' % (
++ self.config['language'],
++ language
++ )
++ )
++
+ # Parse show information
+- self.log.debug('Getting all series data for %s' % (sid))
+- seriesInfoEt = self._getetsrc(self.config['url_seriesInfo'] % (sid))
+- if self.xml:
+- self.seriesInfoTree = self.tmpTree
+- for curInfo in seriesInfoEt.findall("Series")[0]:
+- tag = curInfo.tag.lower()
+- value = curInfo.text
++ log().debug('Getting all series data for %s' % (sid))
++ seriesInfoEt = self._getetsrc(
++ self.config['url_seriesInfo'] % sid
++ )
++ for curInfo in seriesInfoEt.keys():
++ tag = curInfo
++ value = seriesInfoEt[curInfo]
+
+ if value is not None:
+ if tag in ['banner', 'fanart', 'poster']:
+ value = self.config['url_artworkPrefix'] % (value)
+- else:
+- value = self._cleanData(value)
+
+ self._setShowData(sid, tag, value)
+- self.log.debug("Got info: %s = %s" % (tag, value))
+- #end for series
++ # set language
++ if language == None:
++ language = self.config['language']
++ self._setShowData(sid, u'language', language)
+
+ # Parse banners
+ if self.config['banners_enabled']:
+@@ -777,24 +1072,61 @@ class Tvdb:
+ self._parseActors(sid)
+
+ # Parse episode data
+- self.log.debug('Getting all episodes of %s' % (sid))
+- epsEt = self._getetsrc( self.config['url_epInfo'] % (sid) )
+- if self.xml:
+- self.epInfoTree = self.tmpTree
+- for cur_ep in epsEt.findall("Episode"):
+- seas_no = int(cur_ep.find('SeasonNumber').text)
+- ep_no = int(cur_ep.find('EpisodeNumber').text)
+- for cur_item in cur_ep.getchildren():
+- tag = cur_item.tag.lower()
+- value = cur_item.text
+- if value is not None:
+- if tag == 'filename':
+- value = self.config['url_artworkPrefix'] % (value)
+- else:
+- value = self._cleanData(value)
+- self._setItem(sid, seas_no, ep_no, tag, value)
+- #end for cur_ep
+- #end _geEps
++ log().debug('Getting all episodes of %s' % (sid))
++
++ url = self.config['url_epInfo'] % sid
++ epsEt = self._getetsrc(url, language=self.shows[sid].data[u'language'])
++ for cur_ep in epsEt:
++ self._parseEpisodeInfo(sid, cur_ep)
++
++ def _parseEpisodeInfo(self, sid, cur_ep):
++ if self.config['dvdorder']:
++ log().debug('Using DVD ordering.')
++ use_dvd = cur_ep.get('dvdSeason') is not None and cur_ep.get('dvdEpisodeNumber') is not None
++ else:
++ use_dvd = False
++
++ if use_dvd:
++ elem_seasnum, elem_epno = cur_ep.get('dvdSeason'), cur_ep.get('dvdEpisodeNumber')
++ else:
++ elem_seasnum, elem_epno = cur_ep['airedSeason'], cur_ep['airedEpisodeNumber']
++
++ if elem_seasnum is None or elem_epno is None:
++ log().warning("An episode has incomplete season/episode number (season: %r, episode: %r)" % (
++ elem_seasnum, elem_epno))
++ #log().debug(
++ # " ".join(
++ # "%r is %r" % (child.tag, child.text) for child in cur_ep.getchildren()))
++ # TODO: Should this happen?
++ return # Skip to next episode
++
++ # float() is because https://github.com/dbr/tvnamer/issues/95 - should probably be fixed in TVDB data
++ seas_no = elem_seasnum
++ ep_no = elem_epno
++
++ for cur_item in cur_ep.keys():
++ tag = cur_item
++ value = cur_ep[cur_item]
++ if value is not None:
++ if tag == 'filename' and value:
++ value = self.config['url_artworkPrefix'] % (value)
++ self._setItem(sid, seas_no, ep_no, tag, value)
++
++ def getDetailedEpisodeInfo(self, sid, season, episode):
++ """Get detailed episode info"""
++ try:
++ if isinstance(episode, Episode):
++ url = self.config['url_epDetail'] % episode[u'id']
++ else:
++ season = int(season)
++ episode = int(episode)
++ url = self.config['url_epDetail'] % self.shows[sid][season][episode][u'id']
++ epInfo = self._getetsrc(url, language=self.shows[sid].data[u'language'])
++ self._parseEpisodeInfo(sid, epInfo)
++ except KeyError:
++ import traceback
++ traceback.print_exc()
++ raise tvdb_episodenotfound()
+
+ def _nameToSid(self, name):
+ """Takes show name, returns the correct series ID (if the show has
+@@ -802,48 +1134,48 @@ class Tvdb:
+ the correct SID.
+ """
+ if name in self.corrections:
+- self.log.debug('Correcting %s to %s' % (name, self.corrections[name]) )
++ log().debug('Correcting %s to %s' % (name, self.corrections[name]))
+ sid = self.corrections[name]
+ else:
+- self.log.debug('Getting show %s' % (name))
+- selected_series = self._getSeries( name )
+- sname, sid = selected_series['name'], selected_series['sid']
+- self.log.debug('Got %s, sid %s' % (sname, sid))
++ log().debug('Getting show %s' % name)
++ selected_series = self._getSeries(name)
++ sid = selected_series['id']
++ log().debug('Got %(seriesName)s, id %(id)s' % selected_series)
+
+ self.corrections[name] = sid
+- self._getShowData(sid)
+- #end if name in self.corrections
++ self._getShowData(selected_series['id'], self.config['language'])
++
+ return sid
+- #end _nameToSid
+
+ def __getitem__(self, key):
+ """Handles tvdb_instance['seriesname'] calls.
+ The dict index should be the show id
+ """
+- if isinstance(key, (int, long)):
++ if isinstance(key, int_types):
+ # Item is integer, treat as show id
+ if key not in self.shows:
+- self._getShowData(key)
++ self._getShowData(key, self.config['language'])
+ return self.shows[key]
+
+- key = key.lower() # make key lower case
+ sid = self._nameToSid(key)
+- self.log.debug('Got series id %s' % (sid))
++ log().debug('Got series id %s' % sid)
+ return self.shows[sid]
+- #end __getitem__
+
+ def __repr__(self):
+- return str(self.shows)
+- #end __repr__
+-#end Tvdb
++ return repr(self.shows)
++
+
+ def main():
+ """Simple example of using tvdb_api - it just
+ grabs an episode name interactively.
+ """
+- tvdb_instance = Tvdb(interactive=True, debug=True, cache=False)
+- print tvdb_instance['Lost']['seriesname']
+- print tvdb_instance['Lost'][1][4]['episodename']
++ import logging
++ logging.basicConfig(level=logging.DEBUG)
++
++ tvdb_instance = Tvdb(interactive=False, cache=False)
++ print(tvdb_instance['Lost']['seriesname'])
++ print(tvdb_instance['Lost'][1][4]['episodename'])
++
+
+ if __name__ == '__main__':
+ main()
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/tvdb_create_key.py b/mythtv/bindings/python/MythTV/ttvdb/tvdb_create_key.py
+new file mode 100644
+index 0000000000..7a4deeca37
+--- /dev/null
++++ b/mythtv/bindings/python/MythTV/ttvdb/tvdb_create_key.py
+@@ -0,0 +1,36 @@
++# -*- coding: utf-8 -*-
++
++'''
++Patches tvdb specific create_key in requests_cache which only includes
++Accept-Language in the key
++
++This module must be imported before any modules use requests_cache
++explicitly or implicitly
++'''
++
++import requests_cache
++
++import hashlib
++def create_key(self, request):
++ try:
++ if self._ignored_parameters:
++ url, body = self._remove_ignored_parameters(request)
++ else:
++ url, body = request.url, request.body
++ except AttributeError:
++ url, body = request.url, request.body
++ key = hashlib.sha256()
++ key.update(requests_cache.backends.base._to_bytes(request.method.upper()))
++ key.update(requests_cache.backends.base._to_bytes(url))
++ if request.body:
++ key.update(requests_cache.backends.base._to_bytes(body))
++ else:
++ if self._include_get_headers and request.headers != requests_cache.backends.base._DEFAULT_HEADERS:
++ for name, value in sorted(request.headers.items()):
++ # include only Accept-Language as it is important for context
++ if name in ['Accept-Language']:
++ key.update(requests_cache.backends.base._to_bytes(name))
++ key.update(requests_cache.backends.base._to_bytes(value))
++ return key.hexdigest()
++
++requests_cache.backends.base.BaseCache.create_key = create_key
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/tvdb_exceptions.py b/mythtv/bindings/python/MythTV/ttvdb/tvdb_exceptions.py
+index 722e2cfd87..bf59b28982 100644
+--- a/mythtv/bindings/python/MythTV/ttvdb/tvdb_exceptions.py
++++ b/mythtv/bindings/python/MythTV/ttvdb/tvdb_exceptions.py
+@@ -3,46 +3,26 @@
+ #author:dbr/Ben
+ #project:tvdb_api
+ #repository:http://github.com/dbr/tvdb_api
+-#license:Creative Commons GNU GPL v2
+-# (http://creativecommons.org/licenses/GPL/2.0/)
++#license:unlicense (http://unlicense.org/)
+
+ """Custom exceptions used or raised by tvdb_api
+ """
+
+ __author__ = "dbr/Ben"
+-__version__ = "1.2.1"
++__version__ = "2.0-dev"
+
+-__all__ = ["tvdb_error", "tvdb_userabort", "tvdb_shownotfound",
+-"tvdb_seasonnotfound", "tvdb_episodenotfound", "tvdb_attributenotfound"]
++import logging
+
+-class tvdb_error(Exception):
+- """An error with www.thetvdb.com (Cannot connect, for example)
+- """
+- pass
++__all__ = ["tvdb_error", "tvdb_userabort", "tvdb_notauthorized", "tvdb_shownotfound",
++"tvdb_seasonnotfound", "tvdb_episodenotfound", "tvdb_attributenotfound",
++"tvdb_resourcenotfound", "tvdb_invalidlanguage"]
+
+-class tvdb_userabort(Exception):
+- """User aborted the interactive selection (via
+- the q command, ^c etc)
+- """
+- pass
++logging.getLogger(__name__).warning(
++ "tvdb_exceptions module is deprecated - use classes directly from tvdb_api instead")
+
+-class tvdb_shownotfound(Exception):
+- """Show cannot be found on www.thetvdb.com (non-existant show)
+- """
+- pass
+-
+-class tvdb_seasonnotfound(Exception):
+- """Season cannot be found on www.thetvdb.com
+- """
+- pass
+-
+-class tvdb_episodenotfound(Exception):
+- """Episode cannot be found on www.thetvdb.com
+- """
+- pass
+-
+-class tvdb_attributenotfound(Exception):
+- """Raised if an episode does not have the requested
+- attribute (such as a episode name)
+- """
+- pass
++from tvdb_api import (
++ tvdb_error, tvdb_userabort, tvdb_notauthorized, tvdb_shownotfound,
++ tvdb_seasonnotfound, tvdb_episodenotfound,
++ tvdb_resourcenotfound, tvdb_invalidlanguage,
++ tvdb_attributenotfound
++)
+diff --git a/mythtv/bindings/python/MythTV/ttvdb/tvdb_ui.py b/mythtv/bindings/python/MythTV/ttvdb/tvdb_ui.py
+index a66a16eff1..9f9e417d06 100644
+--- a/mythtv/bindings/python/MythTV/ttvdb/tvdb_ui.py
++++ b/mythtv/bindings/python/MythTV/ttvdb/tvdb_ui.py
+@@ -3,122 +3,19 @@
+ #author:dbr/Ben
+ #project:tvdb_api
+ #repository:http://github.com/dbr/tvdb_api
+-#license:Creative Commons GNU GPL v2
+-# (http://creativecommons.org/licenses/GPL/2.0/)
++#license:unlicense (http://unlicense.org/)
+
+-"""Contains included user interfaces for Tvdb show selection.
+-
+-A UI is a callback. A class, it's __init__ function takes two arguments:
+-
+-- config, which is the Tvdb config dict, setup in tvdb_api.py
+-- log, which is Tvdb's logger instance (which uses the logging module). You can
+-call log.info() log.warning() etc
+-
+-It must have a method "selectSeries", this is passed a list of dicts, each dict
+-contains the the keys "name" (human readable show name), and "sid" (the shows
+-ID as on thetvdb.com). For example:
+-
+-[{'name': u'Lost', 'sid': u'73739'},
+- {'name': u'Lost Universe', 'sid': u'73181'}]
+-
+-The "selectSeries" method must return the appropriate dict, or it can raise
+-tvdb_userabort (if the selection is aborted), tvdb_shownotfound (if the show
+-cannot be found).
+-
+-A simple example callback, which returns a random series:
+-
+->>> import random
+->>> from tvdb_ui import BaseUI
+->>> class RandomUI(BaseUI):
+-... def selectSeries(self, allSeries):
+-... import random
+-... return random.choice(allSeries)
+-
+-Then to use it..
+-
+->>> from tvdb_api import Tvdb
+->>> t = Tvdb(custom_ui = RandomUI)
+->>> random_matching_series = t['Lost']
+->>> type(random_matching_series)
+-<class 'tvdb_api.Show'>
+-"""
+
+ __author__ = "dbr/Ben"
+-__version__ = "1.2.1"
++__version__ = "2.0-dev"
+
+-from tvdb_exceptions import tvdb_userabort
++import sys
++import logging
++import warnings
+
+-class BaseUI:
+- """Default non-interactive UI, which auto-selects first results
+- """
+- def __init__(self, config, log):
+- self.config = config
+- self.log = log
+-
+- def selectSeries(self, allSeries):
+- return allSeries[0]
+-
+-
+-class ConsoleUI(BaseUI):
+- """Interactively allows the user to select a show from a console based UI
+- """
+-
+- def _displaySeries(self, allSeries):
+- """Helper function, lists series with corresponding ID
+- """
+- print "TVDB Search Results:"
+- for i in range(len(allSeries[:6])): # list first 6 search results
+- i_show = i + 1 # Start at more human readable number 1 (not 0)
+- self.log.debug('Showing allSeries[%s] = %s)' % (i_show, allSeries[i]))
+- print "%s -> %s # http://thetvdb.com/?tab=series&id=%s" % (
+- i_show,
+- allSeries[i]['name'].encode("UTF-8","ignore"),
+- allSeries[i]['sid'].encode("UTF-8","ignore")
+- )
+-
+- def selectSeries(self, allSeries):
+- self._displaySeries(allSeries)
+-
+- if len(allSeries) == 1:
+- # Single result, return it!
+- print "Automatically selecting only result"
+- return allSeries[0]
+-
+- if self.config['select_first'] is True:
+- print "Automatically returning first search result"
+- return allSeries[0]
+-
+- while True: # return breaks this loop
+- try:
+- print "Enter choice (first number, ? for help):"
+- ans = raw_input()
+- except KeyboardInterrupt:
+- raise tvdb_userabort("User aborted (^c keyboard interupt)")
+- except EOFError:
+- raise tvdb_userabort("User aborted (EOF received)")
++from tvdb_exceptions import tvdb_userabort
+
+- self.log.debug('Got choice of: %s' % (ans))
+- try:
+- selected_id = int(ans) - 1 # The human entered 1 as first result, not zero
+- except ValueError: # Input was not number
+- if ans == "q":
+- self.log.debug('Got quit command (q)')
+- raise tvdb_userabort("User aborted ('q' quit command)")
+- elif ans == "?":
+- print "## Help"
+- print "# Enter the number that corresponds to the correct show."
+- print "# ? - this help"
+- print "# q - abort tvnamer"
+- else:
+- self.log.debug('Unknown keypress %s' % (ans))
+- else:
+- self.log.debug('Trying to return ID: %d' % (selected_id))
+- try:
+- return allSeries[ selected_id ]
+- except IndexError:
+- self.log.debug('Invalid show number entered!')
+- print "Invalid number (%s) selected!"
+- self._displaySeries(allSeries)
+- #end try
+- #end while not valid_input
++logging.getLogger(__name__).warning(
++ "tvdb_ui module is deprecated - use classes directly from tvdb_api instead")
+
++from tvdb_api import BaseUI, ConsoleUI
+diff --git a/mythtv/bindings/python/MythTV/utility/__init__.py b/mythtv/bindings/python/MythTV/utility/__init__.py
+index 091343dbba..31d2afae28 100644
+--- a/mythtv/bindings/python/MythTV/utility/__init__.py
++++ b/mythtv/bindings/python/MythTV/utility/__init__.py
+@@ -1,10 +1,10 @@
+-from dt import datetime
+-from enum import EnumValue, Enum, BitwiseEnum
+-from singleton import Singleton, InputSingleton, CmpSingleton
+-from dequebuffer import DequeBuffer
+-from mixin import CMPVideo, CMPRecord
+-from altdict import OrdDict, DictInvert, DictInvertCI
++from .dt import datetime
++from .enum import EnumValue, Enum, BitwiseEnum
++from .singleton import Singleton, InputSingleton, CmpSingleton
++from .dequebuffer import DequeBuffer
++from .mixin import CMPVideo, CMPRecord
++from .altdict import OrdDict, DictInvert, DictInvertCI
+
+-from other import _donothing, SchemaUpdate, databaseSearch, deadlinesocket, \
+- MARKUPLIST, levenshtein, ParseEnum, ParseSet, CopyData, \
+- CopyData2, check_ipv6, QuickProperty
++from .other import _donothing, SchemaUpdate, databaseSearch, deadlinesocket, \
++ MARKUPLIST, levenshtein, ParseEnum, ParseSet, CopyData, \
++ CopyData2, check_ipv6, QuickProperty
+diff --git a/mythtv/bindings/python/MythTV/utility/altdict.py b/mythtv/bindings/python/MythTV/utility/altdict.py
+index 103738b28c..346bd47049 100644
+--- a/mythtv/bindings/python/MythTV/utility/altdict.py
++++ b/mythtv/bindings/python/MythTV/utility/altdict.py
+@@ -4,7 +4,7 @@
+ # Description: Provides various custom dict-like classes
+ #------------------------------
+
+-from itertools import imap, izip
++from builtins import map, zip
+
+ class OrdDict( dict ):
+ """
+@@ -64,13 +64,13 @@ class OrdDict( dict ):
+ return list(self.itervalues())
+
+ def itervalues(self):
+- return imap(self.get, self.iterkeys())
++ return map(self.get, self.iterkeys())
+
+ def items(self):
+ return list(self.iteritems())
+
+ def iteritems(self):
+- return izip(self.iterkeys(), self.itervalues())
++ return zip(self.iterkeys(), self.itervalues())
+
+ def copy(self):
+ c = self.__class__(self.iteritems())
+diff --git a/mythtv/bindings/python/MythTV/utility/dequebuffer.py b/mythtv/bindings/python/MythTV/utility/dequebuffer.py
+index f6b62e8ccc..650ac609d6 100644
+--- a/mythtv/bindings/python/MythTV/utility/dequebuffer.py
++++ b/mythtv/bindings/python/MythTV/utility/dequebuffer.py
+@@ -4,11 +4,18 @@
+ # Description: A rolling buffer class that discards handled information.
+ #------------------------------
+
+-from cStringIO import StringIO
++try:
++ from cStringIO import StringIO
++except:
++ from io import BytesIO as StringIO
++
+ from time import time, sleep
+ from threading import Thread, Lock
+ from collections import deque
+-from Queue import Queue
++try:
++ from Queue import Queue
++except:
++ from queue import Queue
+ import weakref
+
+ try:
+@@ -239,7 +246,7 @@ class DequeBuffer( object ):
+
+ def read(self, nbytes=None):
+ """
+- Read up to specified amount from buffer, or whatever is available.
++ Read up to specified amount from buffer, or whatever is available.
+ """
+ # flush existing buffer
+ self._rollback_pool = []
+diff --git a/mythtv/bindings/python/MythTV/utility/dicttoxml.py b/mythtv/bindings/python/MythTV/utility/dicttoxml.py
+new file mode 100644
+index 0000000000..4ad258449f
+--- /dev/null
++++ b/mythtv/bindings/python/MythTV/utility/dicttoxml.py
+@@ -0,0 +1,400 @@
++#!/usr/bin/env python
++# coding: utf-8
++
++"""
++Converts a Python dictionary or other native data type into a valid XML string.
++
++Supports item (`int`, `float`, `long`, `decimal.Decimal`, `bool`, `str`, `unicode`, `datetime`, `none` and other number-like objects) and collection (`list`, `set`, `tuple` and `dict`, as well as iterable and dict-like objects) data types, with arbitrary nesting for the collections. Items with a `datetime` type are converted to ISO format strings. Items with a `None` type become empty XML elements.
++
++This module works with both Python 2 and 3.
++"""
++
++from __future__ import unicode_literals
++
++__version__ = '1.7.4'
++version = __version__
++
++from random import randint
++import collections
++import numbers
++import logging
++from xml.dom.minidom import parseString
++
++
++LOG = logging.getLogger("dicttoxml")
++
++# python 3 doesn't have a unicode type
++try:
++ unicode
++except:
++ unicode = str
++
++# python 3 doesn't have a long type
++try:
++ long
++except:
++ long = int
++
++
++def set_debug(debug=True, filename='dicttoxml.log'):
++ if debug:
++ import datetime
++ print('Debug mode is on. Events are logged at: %s' % (filename))
++ logging.basicConfig(filename=filename, level=logging.INFO)
++ LOG.info('\nLogging session starts: %s' % (
++ str(datetime.datetime.today()))
++ )
++ else:
++ logging.basicConfig(level=logging.WARNING)
++ print('Debug mode is off.')
++
++
++def unicode_me(something):
++ """Converts strings with non-ASCII characters to unicode for LOG.
++ Python 3 doesn't have a `unicode()` function, so `unicode()` is an alias
++ for `str()`, but `str()` doesn't take a second argument, hence this kludge.
++ """
++ try:
++ return unicode(something, 'utf-8')
++ except:
++ return unicode(something)
++
++
++ids = [] # initialize list of unique ids
++
++def make_id(element, start=100000, end=999999):
++ """Returns a random integer"""
++ return '%s_%s' % (element, randint(start, end))
++
++
++def get_unique_id(element):
++ """Returns a unique id for a given element"""
++ this_id = make_id(element)
++ dup = True
++ while dup:
++ if this_id not in ids:
++ dup = False
++ ids.append(this_id)
++ else:
++ this_id = make_id(element)
++ return ids[-1]
++
++
++def get_xml_type(val):
++ """Returns the data type for the xml type attribute"""
++ if type(val).__name__ in ('str', 'unicode'):
++ return 'str'
++ if type(val).__name__ in ('int', 'long'):
++ return 'int'
++ if type(val).__name__ == 'float':
++ return 'float'
++ if type(val).__name__ == 'bool':
++ return 'bool'
++ if isinstance(val, numbers.Number):
++ return 'number'
++ if type(val).__name__ == 'NoneType':
++ return 'null'
++ if isinstance(val, dict):
++ return 'dict'
++ if isinstance(val, collections.Iterable):
++ return 'list'
++ return type(val).__name__
++
++
++def escape_xml(s):
++ if type(s) in (str, unicode):
++ s = unicode_me(s) # avoid UnicodeDecodeError
++ s = s.replace('&', '&')
++ s = s.replace('"', '"')
++ s = s.replace('\'', ''')
++ s = s.replace('<', '<')
++ s = s.replace('>', '>')
++ return s
++
++
++def make_attrstring(attr):
++ """Returns an attribute string in the form key="val" """
++ attrstring = ' '.join(['%s="%s"' % (k, v) for k, v in attr.items()])
++ return '%s%s' % (' ' if attrstring != '' else '', attrstring)
++
++
++def key_is_valid_xml(key):
++ """Checks that a key is a valid XML name"""
++ LOG.info('Inside key_is_valid_xml(). Testing "%s"' % (unicode_me(key)))
++ test_xml = '<?xml version="1.0" encoding="UTF-8" ?><%s>foo</%s>' % (key, key)
++ try:
++ parseString(test_xml)
++ return True
++ except Exception: # minidom does not implement exceptions well
++ return False
++
++
++def make_valid_xml_name(key, attr):
++ """Tests an XML name and fixes it if invalid"""
++ LOG.info('Inside make_valid_xml_name(). Testing key "%s" with attr "%s"' % (
++ unicode_me(key), unicode_me(attr))
++ )
++ key = escape_xml(key)
++ attr = escape_xml(attr)
++
++ # pass through if key is already valid
++ if key_is_valid_xml(key):
++ return key, attr
++
++ # prepend a lowercase n if the key is numeric
++ if str(key).isdigit():
++ return 'n%s' % (key), attr
++
++ # replace spaces with underscores if that fixes the problem
++ if key_is_valid_xml(key.replace(' ', '_')):
++ return key.replace(' ', '_'), attr
++
++ # key is still invalid - move it into a name attribute
++ attr['name'] = key
++ key = 'key'
++ return key, attr
++
++
++def wrap_cdata(s):
++ """Wraps a string into CDATA sections"""
++ s = unicode_me(s).replace(']]>', ']]]]><![CDATA[>')
++ return '<![CDATA[' + s + ']]>'
++
++
++def default_item_func(parent):
++ return 'item'
++
++
++def convert(obj, ids, attr_type, item_func, cdata, parent='root'):
++ """Routes the elements of an object to the right function to convert them
++ based on their data type"""
++
++ LOG.info('Inside convert(). obj type is: "%s", obj="%s"' % (type(obj).__name__, unicode_me(obj)))
++
++ item_name = item_func(parent)
++
++ if isinstance(obj, numbers.Number) or type(obj) in (str, unicode):
++ return convert_kv(item_name, obj, attr_type, cdata)
++
++ if hasattr(obj, 'isoformat'):
++ return convert_kv(item_name, obj.isoformat(), attr_type, cdata)
++
++ if type(obj) == bool:
++ return convert_bool(item_name, obj, attr_type, cdata)
++
++ if obj is None:
++ return convert_none(item_name, '', attr_type, cdata)
++
++ if isinstance(obj, dict):
++ return convert_dict(obj, ids, parent, attr_type, item_func, cdata)
++
++ if isinstance(obj, collections.Iterable):
++ return convert_list(obj, ids, parent, attr_type, item_func, cdata)
++
++ raise TypeError('Unsupported data type: %s (%s)' % (obj, type(obj).__name__))
++
++
++def convert_dict(obj, ids, parent, attr_type, item_func, cdata):
++ """Converts a dict into an XML string."""
++ LOG.info('Inside convert_dict(): obj type is: "%s", obj="%s"' % (
++ type(obj).__name__, unicode_me(obj))
++ )
++ output = []
++ addline = output.append
++
++ item_name = item_func(parent)
++
++ for key, val in obj.items():
++ LOG.info('Looping inside convert_dict(): key="%s", val="%s", type(val)="%s"' % (
++ unicode_me(key), unicode_me(val), type(val).__name__)
++ )
++
++ attr = {} if not ids else {'id': '%s' % (get_unique_id(parent)) }
++
++ key, attr = make_valid_xml_name(key, attr)
++
++ if isinstance(val, numbers.Number) or type(val) in (str, unicode):
++ addline(convert_kv(key, val, attr_type, attr, cdata))
++
++ elif hasattr(val, 'isoformat'): # datetime
++ addline(convert_kv(key, val.isoformat(), attr_type, attr, cdata))
++
++ elif type(val) == bool:
++ addline(convert_bool(key, val, attr_type, attr, cdata))
++
++ elif isinstance(val, dict):
++ if attr_type:
++ attr['type'] = get_xml_type(val)
++ addline('<%s%s>%s</%s>' % (
++ key, make_attrstring(attr),
++ convert_dict(val, ids, key, attr_type, item_func, cdata),
++ key
++ )
++ )
++
++ elif isinstance(val, collections.Iterable):
++ if attr_type:
++ attr['type'] = get_xml_type(val)
++ addline('<%s%s>%s</%s>' % (
++ key,
++ make_attrstring(attr),
++ convert_list(val, ids, key, attr_type, item_func, cdata),
++ key
++ )
++ )
++
++ elif val is None:
++ addline(convert_none(key, val, attr_type, attr, cdata))
++
++ else:
++ raise TypeError('Unsupported data type: %s (%s)' % (
++ val, type(val).__name__)
++ )
++
++ return ''.join(output)
++
++
++def convert_list(items, ids, parent, attr_type, item_func, cdata):
++ """Converts a list into an XML string."""
++ LOG.info('Inside convert_list()')
++ output = []
++ addline = output.append
++
++ item_name = item_func(parent)
++
++ if ids:
++ this_id = get_unique_id(parent)
++
++ for i, item in enumerate(items):
++ LOG.info('Looping inside convert_list(): item="%s", item_name="%s", type="%s"' % (
++ unicode_me(item), item_name, type(item).__name__)
++ )
++ attr = {} if not ids else { 'id': '%s_%s' % (this_id, i+1) }
++ if isinstance(item, numbers.Number) or type(item) in (str, unicode):
++ addline(convert_kv(item_name, item, attr_type, attr, cdata))
++
++ elif hasattr(item, 'isoformat'): # datetime
++ addline(convert_kv(item_name, item.isoformat(), attr_type, attr, cdata))
++
++ elif type(item) == bool:
++ addline(convert_bool(item_name, item, attr_type, attr, cdata))
++
++ elif isinstance(item, dict):
++ if not attr_type:
++ addline('<%s>%s</%s>' % (
++ item_name,
++ convert_dict(item, ids, parent, attr_type, item_func, cdata),
++ item_name,
++ )
++ )
++ else:
++ addline('<%s type="dict">%s</%s>' % (
++ item_name,
++ convert_dict(item, ids, parent, attr_type, item_func, cdata),
++ item_name,
++ )
++ )
++
++ elif isinstance(item, collections.Iterable):
++ if not attr_type:
++ addline('<%s %s>%s</%s>' % (
++ item_name, make_attrstring(attr),
++ convert_list(item, ids, item_name, attr_type, item_func, cdata),
++ item_name,
++ )
++ )
++ else:
++ addline('<%s type="list"%s>%s</%s>' % (
++ item_name, make_attrstring(attr),
++ convert_list(item, ids, item_name, attr_type, item_func, cdata),
++ item_name,
++ )
++ )
++
++ elif item is None:
++ addline(convert_none(item_name, None, attr_type, attr, cdata))
++
++ else:
++ raise TypeError('Unsupported data type: %s (%s)' % (
++ item, type(item).__name__)
++ )
++ return ''.join(output)
++
++
++def convert_kv(key, val, attr_type, attr={}, cdata=False):
++ """Converts a number or string into an XML element"""
++ LOG.info('Inside convert_kv(): key="%s", val="%s", type(val) is: "%s"' % (
++ unicode_me(key), unicode_me(val), type(val).__name__)
++ )
++
++ key, attr = make_valid_xml_name(key, attr)
++
++ if attr_type:
++ attr['type'] = get_xml_type(val)
++ attrstring = make_attrstring(attr)
++ return '<%s%s>%s</%s>' % (
++ key, attrstring,
++ wrap_cdata(val) if cdata == True else escape_xml(val),
++ key
++ )
++
++
++def convert_bool(key, val, attr_type, attr={}, cdata=False):
++ """Converts a boolean into an XML element"""
++ LOG.info('Inside convert_bool(): key="%s", val="%s", type(val) is: "%s"' % (
++ unicode_me(key), unicode_me(val), type(val).__name__)
++ )
++
++ key, attr = make_valid_xml_name(key, attr)
++
++ if attr_type:
++ attr['type'] = get_xml_type(val)
++ attrstring = make_attrstring(attr)
++ return '<%s%s>%s</%s>' % (key, attrstring, unicode(val).lower(), key)
++
++
++def convert_none(key, val, attr_type, attr={}, cdata=False):
++ """Converts a null value into an XML element"""
++ LOG.info('Inside convert_none(): key="%s"' % (unicode_me(key)))
++
++ key, attr = make_valid_xml_name(key, attr)
++
++ if attr_type:
++ attr['type'] = get_xml_type(val)
++ attrstring = make_attrstring(attr)
++ return '<%s%s></%s>' % (key, attrstring, key)
++
++
++def dicttoxml(obj, root=True, custom_root='root', ids=False, attr_type=True,
++ item_func=default_item_func, cdata=False):
++ """Converts a python object into XML.
++ Arguments:
++ - root specifies whether the output is wrapped in an XML root element
++ Default is True
++ - custom_root allows you to specify a custom root element.
++ Default is 'root'
++ - ids specifies whether elements get unique ids.
++ Default is False
++ - attr_type specifies whether elements get a data type attribute.
++ Default is True
++ - item_func specifies what function should generate the element name for
++ items in a list.
++ Default is 'item'
++ - cdata specifies whether string values should be wrapped in CDATA sections.
++ Default is False
++ """
++ LOG.info('Inside dicttoxml(): type(obj) is: "%s", obj="%s"' % (type(obj).__name__, unicode_me(obj)))
++ output = []
++ addline = output.append
++ if root == True:
++ addline('<?xml version="1.0" encoding="UTF-8" ?>')
++ addline('<%s>%s</%s>' % (
++ custom_root,
++ convert(obj, ids, attr_type, item_func, cdata, parent=custom_root),
++ custom_root,
++ )
++ )
++ else:
++ addline(convert(obj, ids, attr_type, item_func, cdata, parent=''))
++ return ''.join(output).encode('utf-8')
++
+diff --git a/mythtv/bindings/python/MythTV/utility/dt.py b/mythtv/bindings/python/MythTV/utility/dt.py
+index f00386d9e4..f688ea24c6 100644
+--- a/mythtv/bindings/python/MythTV/utility/dt.py
++++ b/mythtv/bindings/python/MythTV/utility/dt.py
+@@ -14,7 +14,7 @@ from collections import namedtuple
+ import os
+ import re
+ import time
+-import singleton
++from . import singleton
+ time.tzset()
+
+ class basetzinfo( _pytzinfo ):
+@@ -69,7 +69,7 @@ class basetzinfo( _pytzinfo ):
+ break
+ elif index < 0:
+ # out of bounds past, undefined time frame
+- raise MythTZError(MythTZError.TZ_CONVERSION_ERROR,
++ raise MythTZError(MythTZError.TZ_CONVERSION_ERROR,
+ self.tzname(), dt)
+
+ self.__last = index
+@@ -436,7 +436,7 @@ class datetime( _pydatetime ):
+
+ def __new__(cls, year, month, day, hour=None, minute=None, second=None,
+ microsecond=None, tzinfo=None):
+-
++
+ if tzinfo is None:
+ kwargs = {'tzinfo':cls.localTZ()}
+ else:
+diff --git a/mythtv/bindings/python/MythTV/utility/enum.py b/mythtv/bindings/python/MythTV/utility/enum.py
+index a4bfac65bd..3875054c7b 100644
+--- a/mythtv/bindings/python/MythTV/utility/enum.py
++++ b/mythtv/bindings/python/MythTV/utility/enum.py
+@@ -6,11 +6,7 @@
+ # operation.
+ #------------------------------
+
+-from abc import ABCMeta
+-class number( object ):
+- __metaclass__ = ABCMeta
+-number.register(int)
+-number.register(long)
++from builtins import int
+
+ class EnumValue( object ):
+ _next = 0
+@@ -37,7 +33,7 @@ class EnumValue( object ):
+ class EnumType( type ):
+ def __new__(mcs, name, bases, attrs):
+ for k,v in attrs.items():
+- if isinstance(v, number):
++ if isinstance(v, int):
+ EnumValue(k, v)
+ del attrs[k]
+ values = {}
+diff --git a/mythtv/bindings/python/MythTV/utility/other.py b/mythtv/bindings/python/MythTV/utility/other.py
+index a91ff47b5d..543bef38a0 100644
+--- a/mythtv/bindings/python/MythTV/utility/other.py
++++ b/mythtv/bindings/python/MythTV/utility/other.py
+@@ -3,15 +3,19 @@
+
+ from MythTV.logging import MythLog
+ from MythTV.exceptions import MythDBError, MythError
+-from dt import datetime
++from .dt import datetime
+
+-from cStringIO import StringIO
++try:
++ from cStringIO import StringIO
++except ImportError:
++ from io import BytesIO as StringIO
+ from select import select
+ from time import time
+-from itertools import imap
++from builtins import map
+ import weakref
+ import socket
+ import re
++from builtins import range
+
+ def _donothing(*args, **kwargs):
+ pass
+@@ -40,7 +44,7 @@ class SchemaUpdate( object ):
+ schema = origschema
+ try:
+ while True:
+-
++
+ newschema = getattr(self, 'up%d' % schema)()
+ self.log(MythLog.GENERAL, MythLog.INFO,
+ 'successfully updated from %d to %d' %\
+@@ -48,7 +52,7 @@ class SchemaUpdate( object ):
+ schema = newschema
+ self.db.settings.NULL[self._schema_name] = schema
+
+- except AttributeError, e:
++ except AttributeError as e:
+ self.log(MythLog.GENERAL, MythLog.CRIT,
+ 'failed at %d' % schema, 'no handler method')
+ raise MythDBError('Schema update failed, '
+@@ -60,7 +64,7 @@ class SchemaUpdate( object ):
+ '%s update complete' % self._schema_name)
+ pass
+
+- except Exception, e:
++ except Exception as e:
+ raise MythDBError(MythError.DB_SCHEMAUPDATE, e.args)
+
+ def create(self):
+@@ -77,7 +81,7 @@ class databaseSearch( object ):
+ of the following format
+ (<table name>, -- Primary table to pull data from.
+ <data class>, -- Data handling class to use to process
+- data. Ideally a subclass of DBData,
++ data. Ideally a subclass of DBData,
+ this class must provide a 'fromRaw'
+ classmethod.
+ <required keywords>, -- Tuple of keywords that must be
+@@ -231,7 +235,7 @@ class databaseSearch( object ):
+ res[2]),
+ len(lval)))
+ fields += lval
+-
++
+ for key in self.require:
+ if key not in kwargs:
+ res = self.func(self.inst, key=key)
+@@ -330,7 +334,7 @@ class deadlinesocket( socket.socket ):
+ p = buff.tell()
+ try:
+ buff.write(self.recv(bufsize-buff.tell(), flags))
+- except socket.error, e:
++ except socket.error as e:
+ raise MythError(MythError.SOCKET, e.args)
+ if buff.tell() == p:
+ # no data read from a 'ready' socket, connection terminated
+@@ -362,7 +366,7 @@ class deadlinesocket( socket.socket ):
+ p = buff.tell()
+ try:
+ buff.write(self.recv(100, flags))
+- except socket.error, e:
++ except socket.error as e:
+ raise MythError(MythError.SOCKET, e.args)
+ if buff.tell() == p:
+ # no data read from a 'ready' socket, connection terminated
+@@ -390,7 +394,7 @@ class deadlinesocket( socket.socket ):
+ 'write --> %d' % len(data), data)
+ data = '%-8d%s' % (len(data), data)
+ self.send(data, flags)
+- except socket.error, e:
++ except socket.error as e:
+ raise MythError(MythError.SOCKET, e.args)
+
+ class MARKUPLIST( object ):
+@@ -428,8 +432,8 @@ def levenshtein(s1, s2):
+ return levenshtein(s2, s1)
+ if not s1:
+ return len(s2)
+-
+- previous_row = xrange(len(s2) + 1)
++
++ previous_row = range(len(s2) + 1)
+ for i, c1 in enumerate(s1):
+ current_row = [i + 1]
+ for j, c2 in enumerate(s2):
+@@ -438,12 +442,12 @@ def levenshtein(s1, s2):
+ substitutions = previous_row[j] + (c1 != c2)
+ current_row.append(min(insertions, deletions, substitutions))
+ previous_row = current_row
+-
++
+ return previous_row[-1]
+
+ class ParseEnum( object ):
+ _static = None
+- def __str__(self):
++ def __str__(self):
+ return str([k for k,v in self.iteritems() if v==True])
+ def __repr__(self): return str(self)
+ def __init__(self, parent, field_name, enum, editable=True):
+@@ -470,7 +474,7 @@ class ParseEnum( object ):
+
+ def __setitem__(self, key, value):
+ if self._static:
+- raise KeyError("'%s' cannot be edited." % name)
++ raise KeyError("'%s' cannot be edited." % key)
+ val = getattr(self._enum, key)
+ if value:
+ self._parent[self._field] |= val
+@@ -493,7 +497,7 @@ class ParseEnum( object ):
+ return iter(self.keys())
+
+ def itervalues(self):
+- return imap(self.__getitem__, self.keys())
++ return map(self.__getitem__, self.keys())
+
+ def iteritems(self):
+ for key in self.keys():
+@@ -529,7 +533,7 @@ class ParseSet( ParseEnum ):
+
+ def __setitem__(self, key, value):
+ if self._static:
+- raise KeyError("'%s' cannot be edited." % name)
++ raise KeyError("'%s' cannot be edited." % key)
+ if self[key] == value:
+ return
+ tmp = self._parent[self._field].split(',')
+diff --git a/mythtv/i18n/mythfrontend_en_gb.qm b/mythtv/i18n/mythfrontend_en_gb.qm
+index c392ae3273..ba1398d67a 100644
+Binary files a/mythtv/i18n/mythfrontend_en_gb.qm and b/mythtv/i18n/mythfrontend_en_gb.qm differ
+diff --git a/mythtv/i18n/mythfrontend_en_gb.ts b/mythtv/i18n/mythfrontend_en_gb.ts
+index cd6431dcf6..dc7fab1d3d 100644
+--- a/mythtv/i18n/mythfrontend_en_gb.ts
++++ b/mythtv/i18n/mythfrontend_en_gb.ts
+@@ -1706,8 +1706,8 @@
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/modulationsetting.h" line="71"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2557"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2575"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2617"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2635"/>
+ <source>Auto</source>
+ <comment>Automatic</comment>
+ <translation>Auto</translation>
+@@ -1839,12 +1839,12 @@
+ <translation>Off</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2560"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2620"/>
+ <source>OpenGL 2</source>
+ <translation>OpenGL 2</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2562"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2622"/>
+ <source>OpenGL 1</source>
+ <translation>OpenGL 1</translation>
+ </message>
+@@ -1855,12 +1855,12 @@
+ <translation>Error</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2556"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2616"/>
+ <source>Qt</source>
+ <translation>Qt</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2566"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2626"/>
+ <source>Direct3D</source>
+ <translation>Direct3D</translation>
+ </message>
+@@ -2030,7 +2030,7 @@
+ <message>
+ <location filename="../libs/libmythtv/channelscan/modulationsetting.h" line="56"/>
+ <location filename="../libs/libmythtv/channelscan/modulationsetting.h" line="89"/>
+- <location filename="../libs/libmythtv/channelscan/modulationsetting.h" line="120"/>
++ <location filename="../libs/libmythtv/channelscan/modulationsetting.h" line="122"/>
+ <source>Modulation</source>
+ <translation>Modulation</translation>
+ </message>
+@@ -2055,9 +2055,13 @@
+ <translation>Constellation (Default: Auto)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/channelscan/modulationsetting.h" line="123"/>
++ <location filename="../libs/libmythtv/channelscan/modulationsetting.h" line="125"/>
++ <source>Modulation, QPSK, 8PSK, QAM-16, 16APSK, 32APSK. Most DVB-S transponders use QPSK, while DVB-S2 use 8PSK, 16APSK, or 32APSK. QAM-16 is not available for DVB-S2 transports.</source>
++ <translation>Modulation, QPSK, 8PSK, QAM-16, 16APSK, 32APSK. Most DVB-S transponders use QPSK, while DVB-S2 use 8PSK, 16APSK, or 32APSK. QAM-16 is not available for DVB-S2 transports.</translation>
++ </message>
++ <message>
+ <source>Modulation, QPSK, 8PSK, QAM-16. Most DVB-S transponders use QPSK, while DVB-S2 use 8PSK. QAM-16 is not available for DVB-S2 transports.</source>
+- <translation>Modulation, QPSK, 8PSK, QAM-16. Most DVB-S transponders use QPSK, while DVB-S2 use 8PSK. QAM-16 is not available for DVB-S2 transports.</translation>
++ <translation type="obsolete">Modulation, QPSK, 8PSK, QAM-16. Most DVB-S transponders use QPSK, while DVB-S2 use 8PSK. QAM-16 is not available for DVB-S2 transports.</translation>
+ </message>
+ </context>
+ <context>
+@@ -2088,7 +2092,7 @@ Check if the video exists</translation>
+ <translation>DVD Failure</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/main.cpp" line="1980"/>
++ <location filename="../programs/mythfrontend/main.cpp" line="1984"/>
+ <source>MythTV Frontend</source>
+ <comment>Main window title</comment>
+ <translation>MythTV Frontend</translation>
+@@ -2357,251 +2361,251 @@ Check if the video exists</translation>
+ <context>
+ <name>AppearanceSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1378"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1438"/>
+ <source>Menu theme</source>
+ <translation>Menu theme</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1908"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1968"/>
+ <source>All</source>
+ <translation>All</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1910"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1970"/>
+ <source>Display on screen</source>
+ <translation>Display on screen</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1914"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1974"/>
+ <source>Run on the specified screen or spanning all screens.</source>
+ <translation>Run on the specified screen or spanning all screens.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1924"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1984"/>
+ <source>Monitor aspect ratio</source>
+ <translation>Monitor aspect ratio</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1926"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1986"/>
+ <source>16:9</source>
+ <translation>16:9</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1927"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1987"/>
+ <source>16:10</source>
+ <translation>16:10</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1928"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1988"/>
+ <source>4:3</source>
+ <translation>4:3</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1930"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1990"/>
+ <source>The aspect ratio of a Xinerama display cannot be queried from the display, so it must be specified.</source>
+ <translation>The aspect ratio of a Xinerama display cannot be queried from the display, so it must be specified.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1995"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2055"/>
+ <source>GUI width (pixels)</source>
+ <translation>GUI width (pixels)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1999"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2059"/>
+ <source>The width of the GUI. Do not make the GUI wider than your actual screen resolution. Set to 0 to automatically scale to fullscreen.</source>
+ <translation>The width of the GUI. Do not make the GUI wider than your actual screen resolution. Set to 0 to automatically scale to fullscreen.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2011"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2071"/>
+ <source>GUI height (pixels)</source>
+ <translation>GUI height (pixels)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2015"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2075"/>
+ <source>The height of the GUI. Do not make the GUI taller than your actual screen resolution. Set to 0 to automatically scale to fullscreen.</source>
+ <translation>The height of the GUI. Do not make the GUI taller than your actual screen resolution. Set to 0 to automatically scale to fullscreen.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2027"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2087"/>
+ <source>GUI X offset</source>
+ <translation>GUI X offset</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2031"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2091"/>
+ <source>The horizontal offset where the GUI will be displayed. May only work if run in a window.</source>
+ <translation>The horizontal offset where the GUI will be displayed. May only work if run in a window.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2041"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2101"/>
+ <source>GUI Y offset</source>
+ <translation>GUI Y offset</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2045"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2105"/>
+ <source>The vertical offset where the GUI will be displayed.</source>
+ <translation>The vertical offset where the GUI will be displayed.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2055"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2115"/>
+ <source>Display size - width</source>
+ <translation>Display size - width</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2059"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2119"/>
+ <source>Horizontal size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source>
+ <translation>Horizontal size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2070"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2130"/>
+ <source>Display size - height</source>
+ <translation>Display size - height</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2074"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2134"/>
+ <source>Vertical size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</source>
+ <translation>Vertical size of the monitor or TV. Used to calculate the actual aspect ratio of the display. This will override the DisplaySize from the system.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2086"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2146"/>
+ <source>Use GUI size for TV playback</source>
+ <translation>Use GUI size for TV playback</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2090"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2150"/>
+ <source>If enabled, use the above size for TV, otherwise use full screen.</source>
+ <translation>If enabled, use the above size for TV, otherwise use full screen.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2362"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2422"/>
+ <source>Hide mouse cursor in MythTV</source>
+ <translation>Hide mouse cursor in MythTV</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2366"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2426"/>
+ <source>Toggles mouse cursor visibility for touchscreens. By default MythTV will auto-hide the cursor if the mouse doesn't move for a period, this setting disables the cursor entirely.</source>
+ <translation>Toggles mouse cursor visibility for touchscreens. By default, MythTV will auto-hide the cursor if the mouse doesn't move for a period. This setting disables the cursor entirely.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2380"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2440"/>
+ <source>Use window border</source>
+ <translation>Use window border</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2384"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2444"/>
+ <source>Toggles between windowed and borderless operation.</source>
+ <translation>Toggles between windowed and borderless operation.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2393"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2453"/>
+ <source>Use fixed window size</source>
+ <translation>Use fixed window size</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2397"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2457"/>
+ <source>If disabled, the video playback window can be resized</source>
+ <translation>If disabled, the video playback window can be resized</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2406"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2466"/>
+ <source>Always On Top</source>
+ <translation>Always On Top</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2410"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2470"/>
+ <source>If enabled, MythTV will always be on top</source>
+ <translation>If enabled, MythTV will always be on top</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2418"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2478"/>
+ <source>Date format</source>
+ <translation>Date format</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2421"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2476"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2481"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2536"/>
+ <source>Samples are shown using today's date.</source>
+ <translation>Samples are shown using today's date.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2427"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2482"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2487"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2542"/>
+ <source>Samples are shown using tomorrow's date.</source>
+ <translation>Samples are shown using tomorrow's date.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2463"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2523"/>
+ <source>Your preferred date format. %1</source>
+ <extracomment>%1 gives additional information regarding the date format</extracomment>
+ <translation>Your preferred date format. %1</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2472"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2532"/>
+ <source>Short date format</source>
+ <translation>Short date format</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2517"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2577"/>
+ <source>Your preferred short date format. %1</source>
+ <extracomment>%1 gives additional information regarding the date format</extracomment>
+ <translation>Your preferred short date format. %1</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2526"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2586"/>
+ <source>Time format</source>
+ <translation>Time format</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2541"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2601"/>
+ <source>Your preferred time format. You must choose a format with "AM" or "PM" in it, otherwise your time display will be 24-hour or "military" time.</source>
+ <translation>Your preferred time format. You must choose a format with "AM" or "PM" in it, otherwise your time display will be 24-hour or "military" time.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2554"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2614"/>
+ <source>Paint engine</source>
+ <translation>Paint engine</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2570"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2630"/>
+ <source>This selects what MythTV uses to draw. Choosing '%1' is recommended, unless running on systems with broken OpenGL implementations (broken hardware or drivers or windowing systems) where only Qt works.</source>
+ <translation>This selects what MythTV uses to draw. Choosing '%1' is recommended, unless running on systems with broken OpenGL implementations (broken hardware or drivers or windowing systems) where only Qt works.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2880"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2940"/>
+ <source>Language</source>
+ <translation>Language</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2899"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2959"/>
+ <source>Your preferred language for the user interface.</source>
+ <translation>Your preferred language for the user interface.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2935"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2995"/>
+ <source>Guide language #%1</source>
+ <translation>Guide language #%1</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2941"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3001"/>
+ <source>Your #%1 preferred language for Program Guide data and captions.</source>
+ <translation>Your #%1 preferred language for Programme Guide data and captions.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4174"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4234"/>
+ <source>GUI dimension</source>
+ <translation>GUI dimension</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4196"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4256"/>
+ <source>Fullscreen</source>
+ <translation>Fullscreen</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4219"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4279"/>
+ <source>Theme / Screen Settings</source>
+ <translation>Theme / Screen Settings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4254"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4314"/>
+ <source>Localization</source>
+ <translation>Localisation</translation>
+ </message>
+@@ -3373,12 +3377,12 @@ Device supports up to %1</translation>
+ <translation>New capture card</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3762"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3763"/>
+ <source>Error getting list of cards for this host. Unable to delete capturecards for %1</source>
+ <translation>Error getting list of cards for this host. Unable to delete capturecards for %1</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3779"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3780"/>
+ <source>Capture cards</source>
+ <translation>Capture cards</translation>
+ </message>
+@@ -3434,7 +3438,7 @@ Device supports up to %1</translation>
+ <context>
+ <name>CardInputEditor</name>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3847"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3848"/>
+ <source>Input connections</source>
+ <translation>Input connections</translation>
+ </message>
+@@ -3463,7 +3467,7 @@ Device supports up to %1</translation>
+ <context>
+ <name>ChannelCheckBoxSetting</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4289"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4349"/>
+ <source>Select/Unselect channels for this channel group</source>
+ <translation>Select/unselect channels for this channel group</translation>
+ </message>
+@@ -3591,7 +3595,7 @@ Device supports up to %1</translation>
+ <context>
+ <name>ChannelGroupSetting</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4393"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4453"/>
+ <source>Group name</source>
+ <translation>Group name</translation>
+ </message>
+@@ -3599,27 +3603,27 @@ Device supports up to %1</translation>
+ <context>
+ <name>ChannelGroupSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2623"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2683"/>
+ <source>Remember last channel group</source>
+ <translation>Remember last channel group</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2625"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2685"/>
+ <source>If enabled, the EPG will initially display only the channels from the last channel group selected. Pressing "4" will toggle channel group.</source>
+ <translation>If enabled, the EPG will initially display only the channels from the last channel group selected. Pressing "4" will toggle channel group.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2640"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2700"/>
+ <source>Default channel group</source>
+ <translation>Default channel group</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2646"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2706"/>
+ <source>All Channels</source>
+ <translation>All Channels</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2653"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2713"/>
+ <source>Default channel group to be shown in the EPG. Pressing GUIDE key will toggle channel group.</source>
+ <translation>Default channel group to be shown in the EPG. Pressing GUIDE key will toggle channel group.</translation>
+ </message>
+@@ -3627,22 +3631,22 @@ Device supports up to %1</translation>
+ <context>
+ <name>ChannelGroupsSetting</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4457"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4517"/>
+ <source>Channel Groups</source>
+ <translation>Channel Groups</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4464"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4524"/>
+ <source>(Create New Channel Group)</source>
+ <translation>(Create New Channel Group)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4468"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4528"/>
+ <source>Favorites</source>
+ <translation>Favourites</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4501"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4561"/>
+ <source>Enter the name of the new channel group</source>
+ <translation>Enter the name of the new channel group</translation>
+ </message>
+@@ -4017,7 +4021,9 @@ Device supports up to %1</translation>
+ <location filename="../libs/libmythtv/commbreakmap.cpp" line="236"/>
+ <location filename="../libs/libmythtv/commbreakmap.cpp" line="368"/>
+ <source>Skip %1</source>
+- <extracomment>%1 is the skip time</extracomment>
++ <extracomment>%1 is the skip time
++----------
++%1 is the skip time</extracomment>
+ <translation>Skip %1</translation>
+ </message>
+ <message>
+@@ -4492,22 +4498,22 @@ Device supports up to %1</translation>
+ <context>
+ <name>DVBConfigurationGroup</name>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="4138"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="4139"/>
+ <source>DiSEqC (Switch, LNB, and Rotor Configuration)</source>
+ <translation>DiSEqC (Switch, LNB, and Rotor Configuration)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="4139"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="4140"/>
+ <source>Input and satellite settings.</source>
+ <translation>Input and satellite settings.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3965"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3966"/>
+ <source>Could not open card %1</source>
+ <translation>Could not open card %1</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3966"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3967"/>
+ <source>Could not get card info for card %1</source>
+ <translation>Could not get card info for card %1</translation>
+ </message>
+@@ -4745,7 +4751,9 @@ Device supports up to %1</translation>
+ <location filename="../libs/libmythtv/deletemap.cpp" line="124"/>
+ <location filename="../libs/libmythtv/deletemap.cpp" line="525"/>
+ <source>Delete</source>
+- <extracomment>Delete the current cut or preserved region</extracomment>
++ <extracomment>Delete the current cut or preserved region
++----------
++Delete the current cut or preserved region</extracomment>
+ <translation>Delete</translation>
+ </message>
+ <message>
+@@ -5305,27 +5313,27 @@ Device supports up to %1</translation>
+ <context>
+ <name>EPGSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2850"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2910"/>
+ <source>Guide starts at channel</source>
+ <translation>Guide starts at channel</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2854"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2914"/>
+ <source>The program guide starts on this channel if it is run from outside of Live TV mode. Leave blank to enable Live TV automatic start channel.</source>
+ <translation>The program guide starts on this channel if it is run from outside of Live TV mode. Leave blank to enable Live TV automatic start channel.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2866"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2926"/>
+ <source>Record threshold</source>
+ <translation>Record threshold</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2870"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2930"/>
+ <source>Pressing SELECT on a show that is at least this many minutes into the future will schedule a recording.</source>
+ <translation>Pressing SELECT on a show that is at least this many minutes into the future will schedule a recording.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4123"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4183"/>
+ <source>Program Guide</source>
+ <translation>Programme Guide</translation>
+ </message>
+@@ -5617,7 +5625,7 @@ Device supports up to %1</translation>
+ <context>
+ <name>GUIStartup</name>
+ <message>
+- <location filename="../libs/libmyth/guistartup.cpp" line="192"/>
++ <location filename="../libs/libmyth/guistartup.cpp" line="193"/>
+ <source>Do you really want to exit MythTV?</source>
+ <translation>Do you really want to exit MythTV?</translation>
+ </message>
+@@ -5836,6 +5844,7 @@ Disabled by an empty password. Privileges persist until Gallery exits to main me
+ <message>
+ <location filename="../programs/mythfrontend/galleryslideview.cpp" line="670"/>
+ <source>Start</source>
++ <extracomment>Cannot go back beyond first slide of slideshow</extracomment>
+ <translation>Start</translation>
+ </message>
+ <message>
+@@ -6344,117 +6353,117 @@ Please wait...</translation>
+ <context>
+ <name>GeneralRecPrioritiesSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2685"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2745"/>
+ <source>Avoid back to back recordings</source>
+ <translation>Avoid back to back recordings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2689"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2749"/>
+ <source>Selects the situations where the scheduler will avoid assigning shows to the same card if their end time and start time match. This will be allowed when necessary in order to resolve conflicts.</source>
+ <translation>Selects the situations where the scheduler will avoid assigning shows to the same card if their end time and start time match. This will be allowed when necessary in order to resolve conflicts.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2696"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2756"/>
+ <source>Never</source>
+ <translation>Never</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2697"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2757"/>
+ <source>Different Channels</source>
+ <translation>Different Channels</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2699"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2759"/>
+ <source>Always</source>
+ <translation>Always</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2710"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2770"/>
+ <source>Preferred input priority</source>
+ <translation>Preferred input priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2712"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2772"/>
+ <source>Additional priority when a showing matches the preferred input selected in the 'Scheduling Options' section of the recording rule.</source>
+ <translation>Additional priority when a showing matches the preferred input selected in the 'Scheduling Options' section of the recording rule.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2727"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2787"/>
+ <source>HDTV recording priority</source>
+ <translation>HDTV recording priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2729"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2789"/>
+ <source>Additional priority when a showing is marked as an HDTV broadcast in the TV listings.</source>
+ <translation>Additional priority when a showing is marked as an HDTV broadcast in the TV listings.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2743"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2803"/>
+ <source>Widescreen recording priority</source>
+ <translation>Widescreen recording priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2746"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2806"/>
+ <source>Additional priority when a showing is marked as widescreen in the TV listings.</source>
+ <translation>Additional priority when a showing is marked as widescreen in the TV listings.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2761"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2821"/>
+ <source>Sign language recording priority</source>
+ <translation>Sign language recording priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2764"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2824"/>
+ <source>Additional priority when a showing is marked as having in-vision sign language.</source>
+ <translation>Additional priority when a showing is marked as having in-vision sign language.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2780"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2840"/>
+ <source>In-vision Subtitles Recording Priority</source>
+ <translation>In-vision Subtitles Recording Priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2783"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2843"/>
+ <source>Additional priority when a showing is marked as having in-vision subtitles.</source>
+ <translation>Additional priority when a showing is marked as having in-vision subtitles.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2798"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2858"/>
+ <source>Subtitles/CC recording priority</source>
+ <translation>Subtitles recording priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2801"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2861"/>
+ <source>Additional priority when a showing is marked as having subtitles or closed captioning (CC) available.</source>
+ <translation>Additional priority when a showing is marked as having subtitles available.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2817"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2877"/>
+ <source>Hard of hearing priority</source>
+ <translation>Hard of hearing priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2819"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2879"/>
+ <source>Additional priority when a showing is marked as having support for viewers with impaired hearing.</source>
+ <translation>Additional priority when a showing is marked as having support for viewers with impaired hearing.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2835"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2895"/>
+ <source>Audio described priority</source>
+ <translation>Audio described priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2837"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2897"/>
+ <source>Additional priority when a showing is marked as being Audio Described.</source>
+ <translation>Additional priority when a showing is marked as being Audio Described.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4133"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4193"/>
+ <source>Scheduler Options</source>
+ <translation>Scheduler Options</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4144"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4204"/>
+ <source>Accessibility Options</source>
+ <translation>Accessibility Options</translation>
+ </message>
+@@ -6632,99 +6641,99 @@ Please wait...</translation>
+ <translation>Category record over-time</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1437"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1497"/>
+ <source>Channel ordering</source>
+ <translation>Channel ordering</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1439"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1499"/>
+ <source>channel number</source>
+ <translation>channel number</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1440"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2590"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2609"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1500"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2650"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2669"/>
+ <source>callsign</source>
+ <translation>callsign</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2585"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2645"/>
+ <source>Channel format</source>
+ <translation>Channel format</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2587"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2606"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2647"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2666"/>
+ <source>number</source>
+ <translation>number</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2588"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2607"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2648"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2667"/>
+ <source>number callsign</source>
+ <translation>number callsign</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2589"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2608"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2649"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2668"/>
+ <source>number name</source>
+ <translation>number name</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2591"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2610"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2651"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2670"/>
+ <source>name</source>
+ <translation>name</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2593"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2653"/>
+ <source>Your preferred channel format.</source>
+ <translation>Your preferred channel format.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2604"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2664"/>
+ <source>Long channel format</source>
+ <translation>Long channel format</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2612"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2672"/>
+ <source>Your preferred long channel format.</source>
+ <translation>Your preferred long channel format.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2666"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2726"/>
+ <source>Browse/change channels from Channel Group</source>
+ <translation>Browse/change channels from Channel Group</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2669"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2729"/>
+ <source>If enabled, Live TV will browse or change channels from the selected channel group. The "All Channels" channel group may be selected to browse all channels.</source>
+ <translation>If enabled, Live TV will browse or change channels from the selected channel group. The "All Channels" channel group may be selected to browse all channels.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4063"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4065"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4123"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4125"/>
+ <source>General (Basic)</source>
+ <translation>General (Basic)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4074"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4134"/>
+ <source>General (Auto-Expire)</source>
+ <translation>General (Auto-Expire)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4092"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4152"/>
+ <source>General (Jobs)</source>
+ <translation>General (Jobs)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4103"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4163"/>
+ <source>General (Advanced)</source>
+ <translation>General (Advanced)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4112"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4172"/>
+ <source>General (Channel Groups)</source>
+ <translation>General (Channel Groups)</translation>
+ </message>
+@@ -9134,152 +9143,152 @@ Please wait...</translation>
+ <context>
+ <name>LcdSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3265"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3325"/>
+ <source>Display time</source>
+ <translation>Display time</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3267"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3327"/>
+ <source>Display current time on idle LCD display.</source>
+ <translation>Display current time on idle LCD display.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3279"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3339"/>
+ <source>Display recording status</source>
+ <translation>Display recording status</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3281"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3341"/>
+ <source>Display current recordings information on LCD display.</source>
+ <translation>Display current recordings information on LCD display.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3293"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3353"/>
+ <source>Display menus</source>
+ <translation>Display menus</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3295"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3355"/>
+ <source>Display selected menu on LCD display. </source>
+ <translation>Display selected menu on LCD display. </translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3306"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3366"/>
+ <source>Menu pop-up time</source>
+ <translation>Menu pop-up time</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3308"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3368"/>
+ <source>How many seconds the menu will remain visible after navigation.</source>
+ <translation>How many seconds the menu will remain visible after navigation.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3320"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3380"/>
+ <source>Display music artist and title</source>
+ <translation>Display music artist and title</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3322"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3382"/>
+ <source>Display playing artist and song title in MythMusic on LCD display.</source>
+ <translation>Display playing artist and song title in MythMusic on LCD display.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3334"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3394"/>
+ <source>Items</source>
+ <translation>Items</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3336"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3396"/>
+ <source>Artist - Title</source>
+ <translation>Artist - Title</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3337"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3397"/>
+ <source>Artist [Album] Title</source>
+ <translation>Artist [Album] Title</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3340"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3400"/>
+ <source>Which items to show when playing music.</source>
+ <translation>Which items to show when playing music.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3349"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3409"/>
+ <source>Display channel information</source>
+ <translation>Display channel information</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3351"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3411"/>
+ <source>Display tuned channel information on LCD display.</source>
+ <translation>Display tuned channel information on LCD display.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3363"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3423"/>
+ <source>Display volume information</source>
+ <translation>Display volume information</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3365"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3425"/>
+ <source>Display volume level information on LCD display.</source>
+ <translation>Display volume level information on LCD display.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3377"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3437"/>
+ <source>Display generic information</source>
+ <translation>Display generic information</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3379"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3439"/>
+ <source>Display generic information on LCD display.</source>
+ <translation>Display generic information on LCD display.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3390"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3450"/>
+ <source>Backlight always on</source>
+ <translation>Backlight always on</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3392"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3452"/>
+ <source>Turn on the backlight permanently on the LCD display.</source>
+ <translation>Turn on the backlight permanently on the LCD display.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3403"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3463"/>
+ <source>Heartbeat always on</source>
+ <translation>Heartbeat always on</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3405"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3465"/>
+ <source>Turn on the LCD heartbeat.</source>
+ <translation>Turn on the LCD heartbeat.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3416"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3476"/>
+ <source>Display large clock</source>
+ <translation>Display large clock</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3418"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3478"/>
+ <source>On multiline displays try and display the time as large as possible.</source>
+ <translation>On multiline displays try and display the time as large as possible.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3430"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3490"/>
+ <source>LCD key order</source>
+ <translation>LCD key order</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3435"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3495"/>
+ <source>Enter the 6 Keypad Return Codes for your LCD keypad in the order in which you want the functions up/down/left/right/yes/no to operate. (See lcdproc/server/drivers/hd44780.c/keyMapMatrix[] or the matrix for your display)</source>
+ <translation>Enter the 6 Keypad Return Codes for your LCD keypad in the order in which you want the functions up/down/left/right/yes/no to operate. (See lcdproc/server/drivers/hd44780.c/keyMapMatrix[] or the matrix for your display)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3447"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3507"/>
+ <source>Enable LCD device</source>
+ <translation>Enable LCD device</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3449"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3509"/>
+ <source>Use an LCD display to view MythTV status information.</source>
+ <translation>Use an LCD display to view MythTV status information.</translation>
+ </message>
+@@ -9320,22 +9329,22 @@ Please wait...</translation>
+ <context>
+ <name>MacDesktopSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3646"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3706"/>
+ <source>Video on the desktop</source>
+ <translation>Video on the desktop</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3650"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3710"/>
+ <source>If enabled, video will be displayed on the desktop, behind the Finder icons. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source>
+ <translation>If enabled, video will be displayed on the desktop, behind the Finder icons. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3664"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3724"/>
+ <source>Frames to skip</source>
+ <translation>Frames to skip</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3668"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3728"/>
+ <source>Video on the desktop will skip this many frames for each frame drawn. Set to 0 to show every frame.</source>
+ <translation>Video on the desktop will skip this many frames for each frame drawn. Set to 0 to show every frame.</translation>
+ </message>
+@@ -9343,22 +9352,22 @@ Please wait...</translation>
+ <context>
+ <name>MacDockSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3616"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3676"/>
+ <source>Video in the dock</source>
+ <translation>Video in the dock</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3620"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3680"/>
+ <source>If enabled, video will be displayed in the application's dock icon. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source>
+ <translation>If enabled, video will be displayed in the application's dock icon. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3632"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3692"/>
+ <source>Frames to skip</source>
+ <translation>Frames to skip</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3636"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3696"/>
+ <source>Video in the dock icon will skip this many frames for each frame drawn. Set to 0 to show every frame.</source>
+ <translation>Video in the dock icon will skip this many frames for each frame drawn. Set to 0 to show every frame.</translation>
+ </message>
+@@ -9366,32 +9375,32 @@ Please wait...</translation>
+ <context>
+ <name>MacFloatSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3570"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3630"/>
+ <source>Video in floating window</source>
+ <translation>Video in floating window</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3574"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3634"/>
+ <source>If enabled, video will be displayed in a floating window. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source>
+ <translation>If enabled, video will be displayed in a floating window. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3586"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3646"/>
+ <source>Frames to skip</source>
+ <translation>Frames to skip</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3590"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3650"/>
+ <source>Video in the floating window will skip this many frames for each frame drawn. Set to 0 to show every frame.</source>
+ <translation>Video in the floating window will skip this many frames for each frame drawn. Set to 0 to show every frame.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3601"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3661"/>
+ <source>Opacity</source>
+ <translation>Opacity</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3605"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3665"/>
+ <source>The opacity of the floating window. Set to 100 for completely opaque, set to 0 for completely transparent.</source>
+ <translation>The opacity of the floating window. Set to 100 for completely opaque, set to 0 for completely transparent.</translation>
+ </message>
+@@ -9399,32 +9408,32 @@ Please wait...</translation>
+ <context>
+ <name>MacMainSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3523"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3583"/>
+ <source>Video in main window</source>
+ <translation>Video in main window</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3527"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3587"/>
+ <source>If enabled, video will be displayed in the main GUI window. Disable this when you only want video on the desktop or in a floating window. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</source>
+ <translation>If enabled, video will be displayed in the main GUI window. Disable this when you only want video on the desktop or in a floating window. Only valid when "Use GUI size for TV playback" and "Run the frontend in a window" are checked.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3541"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3601"/>
+ <source>Frames to skip</source>
+ <translation>Frames to skip</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3545"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3605"/>
+ <source>Video in the main window will skip this many frames for each frame drawn. Set to 0 to show every frame.</source>
+ <translation>Video in the main window will skip this many frames for each frame drawn. Set to 0 to show every frame.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3556"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3616"/>
+ <source>Opacity</source>
+ <translation>Opacity</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3560"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3620"/>
+ <source>The opacity of the main window. Set to 100 for completely opaque, set to 0 for completely transparent.</source>
+ <translation>The opacity of the main window. Set to 100 for completely opaque, set to 0 for completely transparent.</translation>
+ </message>
+@@ -9432,257 +9441,257 @@ Please wait...</translation>
+ <context>
+ <name>MainGeneralSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1750"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1810"/>
+ <source>Use line edit virtual keyboards</source>
+ <translation>Use line edit virtual keyboards</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1754"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1814"/>
+ <source>If enabled, you can use a virtual keyboard in MythTV's line edit boxes. To use, hit SELECT (Enter or Space) while a line edit is in focus.</source>
+ <translation>If enabled, you can use a virtual keyboard in MythTV's line edit boxes. To use, hit SELECT (Enter or Space) while a line edit is in focus.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1766"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1826"/>
+ <source>Idle time before entering standby mode (minutes)</source>
+ <translation>Idle time before entering standby mode (minutes)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1771"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1831"/>
+ <source>Number of minutes to wait when the frontend is idle before entering standby mode. Standby mode allows the backend to power down if configured to do so. Any remote or mouse input will cause the countdown to start again and/or exit idle mode. Video playback suspends the countdown. A value of zero prevents the frontend automatically entering standby.</source>
+ <translation>Number of minutes to wait when the frontend is idle before entering standby mode. Standby mode allows the backend to power down if configured to do so. Any remote or mouse input will cause the countdown to start again and/or exit idle mode. Video playback suspends the countdown. A value of zero prevents the frontend automatically entering standby.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1790"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1850"/>
+ <source>Customize exit menu options</source>
+ <translation>Customise exit menu options</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1792"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1852"/>
+ <source>Default</source>
+ <translation>Default</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1793"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1853"/>
+ <source>Show quit</source>
+ <translation>Show quit</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1794"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1854"/>
+ <source>Show quit and shutdown</source>
+ <translation>Show quit and shutdown</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1795"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1855"/>
+ <source>Show quit, reboot and shutdown</source>
+ <translation>Show quit, reboot and shutdown</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1797"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1857"/>
+ <source>Show shutdown</source>
+ <translation>Show shutdown</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1798"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1858"/>
+ <source>Show reboot</source>
+ <translation>Show reboot</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1799"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1859"/>
+ <source>Show reboot and shutdown</source>
+ <translation>Show reboot and shutdown</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1800"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1860"/>
+ <source>Show standby</source>
+ <translation>Show standby</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1803"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1863"/>
+ <source>By default, only remote frontends are shown the shutdown option on the exit menu. Here you can force specific shutdown and reboot options to be displayed.</source>
+ <translation>By default, only remote frontends are shown the shutdown option on the exit menu. Here you can force specific shutdown and reboot options to be displayed.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1814"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1874"/>
+ <source>Reboot command</source>
+ <translation>Reboot command</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1818"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1878"/>
+ <source>Optional. Script to run if you select the reboot option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source>
+ <translation>Optional. Script to run if you select the reboot option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1831"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1891"/>
+ <source>Halt command</source>
+ <translation>Halt command</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1835"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1895"/>
+ <source>Optional. Script to run if you select the shutdown option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</source>
+ <translation>Optional. Script to run if you select the shutdown option from the exit menu, if the option is displayed. You must configure an exit key to display the exit menu.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1848"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1908"/>
+ <source>LIRC daemon socket</source>
+ <translation>LIRC daemon socket</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1858"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1918"/>
+ <source>UNIX socket or IP address[:port] to connect in order to communicate with the LIRC Daemon.</source>
+ <translation>UNIX socket or IP address[:port] to connect to in order to communicate with the LIRC daemon.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1870"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1930"/>
+ <source>Screen shot path</source>
+ <translation>Screen shot path</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1874"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1934"/>
+ <source>Path to screenshot storage location. Should be writable by the frontend</source>
+ <translation>Path to screenshot storage location. Should be writable by the frontend</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1885"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1945"/>
+ <source>Setup PIN code</source>
+ <translation>Setup PIN code</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1887"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1947"/>
+ <source>This PIN is used to control access to the setup menus. If you want to use this feature, then setting the value to all numbers will make your life much easier. Set it to blank to disable. If enabled, you will not be able to return to this screen and reset the Setup PIN without first entering the current PIN.</source>
+ <translation>This PIN is used to control access to the setup menus. If you want to use this feature, then setting the value to all numbers will make your life much easier. Set it to blank to disable. If enabled, you will not be able to return to this screen and reset the Setup PIN without first entering the current PIN.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2951"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3011"/>
+ <source>Enable Network Remote Control interface</source>
+ <translation>Enable Network Remote Control interface</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2954"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3014"/>
+ <source>This enables support for controlling MythFrontend over the network.</source>
+ <translation>This enables support for controlling MythFrontend over the network.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2967"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3027"/>
+ <source>Network Remote Control port</source>
+ <translation>Network Remote Control port</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2971"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3031"/>
+ <source>This specifies what port the Network Remote Control interface will listen on for new connections.</source>
+ <translation>This specifies what port the Network Remote Control interface will listen on for new connections.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2982"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3042"/>
+ <source>UDP notify port</source>
+ <translation>UDP notify port</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2986"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3046"/>
+ <source>MythTV will listen for connections from the "mythutil" program on this port.</source>
+ <translation>MythTV will listen for connections from the 'mythutil' program on this port.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2999"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3059"/>
+ <source>Enable AirPlay</source>
+ <translation>Enable AirPlay</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3001"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3061"/>
+ <source>AirPlay lets you wirelessly view content on your TV from your iPhone, iPad, iPod Touch, or iTunes on your computer.</source>
+ <translation>AirPlay lets you wirelessly view content on your TV from your iPhone, iPad, iPod Touch, or iTunes on your computer.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3015"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3075"/>
+ <source>Only support AirTunes (no video)</source>
+ <translation>Only support AirTunes (no video)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3017"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3077"/>
+ <source>Only stream audio from your iPhone, iPad, iPod Touch, or iTunes on your computer</source>
+ <translation>Only stream audio from your iPhone, iPad, iPod Touch, or iTunes on your computer</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3030"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3090"/>
+ <source>Require password</source>
+ <translation>Require password</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3034"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3094"/>
+ <source>Require a password to use AirPlay. Your iPhone, iPad, iPod Touch, or iTunes on your computer will prompt you when required</source>
+ <translation>Require a password to use AirPlay. Your iPhone, iPad, iPod Touch, or iTunes on your computer will prompt you when required</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3045"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3105"/>
+ <source>Password</source>
+ <translation>Password</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3049"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3109"/>
+ <source>Your iPhone, iPad, iPod Touch, or iTunes on your computer will prompt you for this password when required</source>
+ <translation>Your iPhone, iPad, iPod Touch, or iTunes on your computer will prompt you for this password when required</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3060"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3120"/>
+ <source>AirPlay - Password</source>
+ <translation>AirPlay - Password</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3071"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3131"/>
+ <source>AirPlay full screen playback</source>
+ <translation>AirPlay full screen playback</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3075"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3135"/>
+ <source>During music playback, displays album cover and various media information in full screen mode</source>
+ <translation>During music playback, displays album cover and various media information in full screen mode</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3131"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3191"/>
+ <source>Ignore devices</source>
+ <translation>Ignore devices</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3135"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3195"/>
+ <source>If there are any devices that you do not want to be monitored, list them here with commas in-between. The plugins will ignore them. Requires restart.</source>
+ <translation>If there are any devices that you do not want to be monitored, list them here with commas in-between. The plugins will ignore them. Requires restart.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3248"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3308"/>
+ <source>This enables support for monitoring your CD/DVD drives for new disks and launching the proper plugin to handle them. Requires restart.</source>
+ <translation>This enables support for monitoring your CD/DVD drives for new disks and launching the proper plugin to handle them. Requires restart.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3731"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3791"/>
+ <source>Main Settings</source>
+ <translation>Main Settings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3736"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3796"/>
+ <source>Settings Access</source>
+ <translation>Settings Access</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3741"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3801"/>
+ <source>General</source>
+ <translation>General</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3246"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3306"/>
+ <source>Media Monitor</source>
+ <translation>Media Monitor</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3751"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3811"/>
+ <source>Remote Control</source>
+ <translation>Remote Control</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3760"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3820"/>
+ <source>AirPlay Settings</source>
+ <translation>AirPlay Settings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3692"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3752"/>
+ <source>Shutdown/Reboot Settings</source>
+ <translation>Shutdown/Reboot Settings</translation>
+ </message>
+@@ -9761,53 +9770,53 @@ Please wait...</translation>
+ <context>
+ <name>MetadataOptions</name>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1420"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1421"/>
+ <source>Trying to manually find this recording online...</source>
+ <translation>Trying to manually find this recording online...</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1437"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1438"/>
+ <source>Downloading selected artwork...</source>
+ <translation>Downloading selected artwork...</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1585"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1586"/>
+ <source>You must set a reference number on this rule to set artwork. For items without a metadata source, you can set any unique value.</source>
+ <translation>You must set a reference number on this rule to set artwork. For items without a metadata source, you can set any unique value.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1638"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1639"/>
+ <source>Searching for available artwork...</source>
+ <translation>Searching for available artwork...</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1664"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1665"/>
+ <source>No image found</source>
+ <translation>No image found</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1664"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1914"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1665"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1915"/>
+ <source>Schedule Editor</source>
+ <translation>Schedule Editor</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1833"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1834"/>
+ <source>No match found for this recording. You can try entering a TVDB/TMDB number, season, and episode manually.</source>
+ <translation>No match found for this recording. You can try entering a TVDB/TMDB number, series, and episode manually.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1877"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1878"/>
+ <source>This number, season, and episode combination does not appear to be valid (or the site may be down). Check your information and try again.</source>
+ <translation>This number, series, and episode combination does not appear to be valid (or the site may be down). Check your information and try again.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1913"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1914"/>
+ <source>Failed to retrieve image(s)</source>
+ <translation>Failed to retrieve image(s)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1915"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="1916"/>
+ <source>Check logs</source>
+ <translation>Check logs</translation>
+ </message>
+@@ -10230,12 +10239,12 @@ Please wait...</translation>
+ <translation>MythImage Media Handler 2/2</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1269"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1274"/>
+ <source>Page Up</source>
+ <translation>Page Up</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1271"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1276"/>
+ <source>Page Down</source>
+ <translation>Page Down</translation>
+ </message>
+@@ -11168,357 +11177,357 @@ Please wait...</translation>
+ <translation>Reveal hidden text</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1238"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1243"/>
+ <source>Up Arrow</source>
+ <translation>Up Arrow</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1240"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1245"/>
+ <source>Down Arrow</source>
+ <translation>Down Arrow</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1242"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1247"/>
+ <source>Left Arrow</source>
+ <translation>Left Arrow</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1244"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1249"/>
+ <source>Right Arrow</source>
+ <translation>Right Arrow</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1246"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1251"/>
+ <source>Move to next widget</source>
+ <translation>Move to next widget</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1248"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1253"/>
+ <source>Move to preview widget</source>
+ <translation>Move to preview widget</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1250"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1255"/>
+ <source>Select</source>
+ <translation>Select</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1252"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1257"/>
+ <source>Backspace</source>
+ <translation>Backspace</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1254"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1259"/>
+ <source>Escape</source>
+ <translation>Escape</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1256"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1261"/>
+ <source>Pop-up menu</source>
+ <translation>Pop-up menu</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1258"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1263"/>
+ <source>More information</source>
+ <translation>More information</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1260"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1265"/>
+ <source>Delete</source>
+ <translation>Delete</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1262"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1267"/>
+ <source>Edit</source>
+ <translation>Edit</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1264"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1269"/>
+ <source>Save screenshot</source>
+ <translation>Save screenshot</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1266"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1271"/>
+ <source>Play a media resource</source>
+ <translation>Play a media resource</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1273"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1278"/>
+ <source>Page to top of list</source>
+ <translation>Page to top of list</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1275"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1280"/>
+ <source>Page to middle of list</source>
+ <translation>Page to middle of list</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1277"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1282"/>
+ <source>Page to bottom of list</source>
+ <translation>Page to bottom of list</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1280"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1285"/>
+ <source>Previous View</source>
+ <translation>Previous View</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1282"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1287"/>
+ <source>Next View</source>
+ <translation>Next View</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1285"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1290"/>
+ <source>Help</source>
+ <translation>Help</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1287"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1292"/>
+ <source>Eject Removable Media</source>
+ <translation>Eject Removable Media</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1290"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1295"/>
+ <source>Cut text from textedit</source>
+ <translation>Cut text from textedit</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1292"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1297"/>
+ <source>Copy text from textedit</source>
+ <translation>Copy text from textedit</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1294"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1299"/>
+ <source>Paste text into textedit</source>
+ <translation>Paste text into textedit</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1296"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1301"/>
+ <source>Insert newline into textedit</source>
+ <translation>Insert newline into textedit</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1298"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1303"/>
+ <source>Undo</source>
+ <translation>Undo</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1300"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1305"/>
+ <source>Redo</source>
+ <translation>Redo</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1302"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1307"/>
+ <source>Show incremental search dialog</source>
+ <translation>Show incremental search dialog</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1305"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1310"/>
+ <source>0</source>
+ <translation>0</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1306"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1311"/>
+ <source>1</source>
+ <translation>1</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1307"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1312"/>
+ <source>2</source>
+ <translation>2</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1308"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1313"/>
+ <source>3</source>
+ <translation>3</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1309"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1314"/>
+ <source>4</source>
+ <translation>4</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1310"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1315"/>
+ <source>5</source>
+ <translation>5</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1311"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1316"/>
+ <source>6</source>
+ <translation>6</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1312"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1317"/>
+ <source>7</source>
+ <translation>7</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1313"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1318"/>
+ <source>8</source>
+ <translation>8</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1314"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1319"/>
+ <source>9</source>
+ <translation>9</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1316"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1321"/>
+ <source>Turn the display on</source>
+ <translation>Turn the display on</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1318"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1323"/>
+ <source>Turn the display off</source>
+ <translation>Turn the display off</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1321"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1326"/>
+ <source>Trigger System Key Event #1</source>
+ <translation>Trigger System Key Event #1</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1323"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1328"/>
+ <source>Trigger System Key Event #2</source>
+ <translation>Trigger System Key Event #2</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1325"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1330"/>
+ <source>Trigger System Key Event #3</source>
+ <translation>Trigger System Key Event #3</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1327"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1332"/>
+ <source>Trigger System Key Event #4</source>
+ <translation>Trigger System Key Event #4</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1329"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1334"/>
+ <source>Trigger System Key Event #5</source>
+ <translation>Trigger System Key Event #5</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1331"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1336"/>
+ <source>Trigger System Key Event #6</source>
+ <translation>Trigger System Key Event #6</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1333"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1338"/>
+ <source>Trigger System Key Event #7</source>
+ <translation>Trigger System Key Event #7</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1335"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1340"/>
+ <source>Trigger System Key Event #8</source>
+ <translation>Trigger System Key Event #8</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1337"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1342"/>
+ <source>Trigger System Key Event #9</source>
+ <translation>Trigger System Key Event #9</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1339"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1344"/>
+ <source>Trigger System Key Event #10</source>
+ <translation>Trigger System Key Event #10</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1343"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1348"/>
+ <source>Zoom in on browser window</source>
+ <translation>Zoom in on browser window</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1345"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1350"/>
+ <source>Zoom out on browser window</source>
+ <translation>Zoom out on browser window</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1347"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1352"/>
+ <source>Toggle where keyboard input goes to</source>
+ <translation>Toggle where keyboard input goes to</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1350"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1355"/>
+ <source>Move mouse pointer up</source>
+ <translation>Move mouse pointer up</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1352"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1357"/>
+ <source>Move mouse pointer down</source>
+ <translation>Move mouse pointer down</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1354"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1359"/>
+ <source>Move mouse pointer left</source>
+ <translation>Move mouse pointer left</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1356"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1361"/>
+ <source>Move mouse pointer right</source>
+ <translation>Move mouse pointer right</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1358"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1363"/>
+ <source>Mouse Left button click</source>
+ <translation>Mouse Left button click</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1361"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1366"/>
+ <source>Scroll down half a page</source>
+ <translation>Scroll down half a page</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1363"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1368"/>
+ <source>Scroll up half a page</source>
+ <translation>Scroll up half a page</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1365"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1370"/>
+ <source>Scroll left half a page</source>
+ <translation>Scroll left half a page</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1367"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1372"/>
+ <source>Scroll right half a page</source>
+ <translation>Scroll right half a page</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1370"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1375"/>
+ <source>Move selection to next link</source>
+ <translation>Move selection to next link</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1372"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1377"/>
+ <source>Move selection to previous link</source>
+ <translation>Move selection to previous link</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1374"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1379"/>
+ <source>Follow selected link</source>
+ <translation>Follow selected link</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1376"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1381"/>
+ <source>Go back to previous page</source>
+ <translation>Go back to previous page</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1378"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1383"/>
+ <source>Go forward to previous page</source>
+ <translation>Go forward to previous page</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1383"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1388"/>
+ <source>System Exit</source>
+ <translation>System Exit</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1385"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1390"/>
+ <source>Enter Standby Mode</source>
+ <translation>Enter Standby Mode</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythui/mythmainwindow.cpp" line="1381"/>
++ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1386"/>
+ <source>Display System Exit Prompt</source>
+ <translation>Display System Exit Prompt</translation>
+ </message>
+@@ -11607,179 +11616,178 @@ Please wait...</translation>
+ <translation>Failed to initialise video output</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="594"/>
+ <source>Need to switch video renderer</source>
+- <translation>Need to switch video renderer</translation>
++ <translation type="obsolete">Need to switch video renderer</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="615"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="608"/>
+ <source>Failed to reinitialize video output</source>
+ <translation>Failed to reinitialise video output</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="961"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="960"/>
+ <source>Could not read first %1 bytes</source>
+ <translation>Could not read first %1 bytes</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="981"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="980"/>
+ <source>Could not find an A/V decoder</source>
+ <translation>Could not find an A/V decoder</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="990"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="989"/>
+ <source>Could not initialize A/V decoder</source>
+ <translation>Could not initialize A/V decoder</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1015"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1014"/>
+ <source>Could not open decoder</source>
+ <translation>Could not open decoder</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1407"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1406"/>
+ <source>TXT CAP</source>
+ <translation>TXT CAP</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1427"/>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1458"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1426"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1457"/>
+ <source>Text subtitles</source>
+ <translation>Text subtitles</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1433"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1432"/>
+ <source>Off</source>
+ <translation>Off</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1461"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1460"/>
+ <source>TXT %1</source>
+ <translation>TXT %1</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1475"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1474"/>
+ <source>On</source>
+ <translation>On</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1533"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1532"/>
+ <source>No captions</source>
+ <comment>CC/Teletext/Subtitle text not available</comment>
+ <translation>No subtitles</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1642"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1641"/>
+ <source>Forced Subtitles On</source>
+ <translation>Forced Subtitles On</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1643"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1642"/>
+ <source>Forced Subtitles Off</source>
+ <translation>Forced Subtitles Off</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1877"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1876"/>
+ <source>Failed to initialize A/V Sync</source>
+ <translation>Failed to initialise A/V Sync</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="1987"/>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="2169"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="1986"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="2168"/>
+ <source>Serious error detected in Video Output</source>
+ <translation>Serious error detected in Video Output</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="2264"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="2263"/>
+ <source>Video frame buffering failed too many times.</source>
+ <translation>Video frame buffering failed too many times.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="2693"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="2692"/>
+ <source>Error opening switch program buffer</source>
+ <translation>Error opening switch programme buffer</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="2718"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="2717"/>
+ <source>Error opening switch program file</source>
+ <translation>Error opening switch programme file</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="2843"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="2842"/>
+ <source>Error opening jump program file buffer</source>
+ <translation>Error opening jump programme file buffer</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="2853"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="2852"/>
+ <source>Error opening jump program file</source>
+ <translation>Error opening jump programme file</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="2862"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="2861"/>
+ <source>Error reopening video decoder</source>
+ <translation>Error re-opening video decoder</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="3098"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="3097"/>
+ <source>Irrecoverable recorder error</source>
+ <translation>Irrecoverable recorder error</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="3188"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="3187"/>
+ <source>Not Flagged</source>
+ <extracomment>The commercials/adverts have not been flagged</extracomment>
+ <translation>Not Flagged</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4080"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4079"/>
+ <source>Searching</source>
+ <translation>Searching</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4151"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4150"/>
+ <source>No Seektable</source>
+ <translation>No Seektable</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4181"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4180"/>
+ <source>Using previously auto-saved cuts</source>
+ <translation>Using previously auto-saved cuts</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4230"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4229"/>
+ <source>Paused</source>
+ <translation>Paused</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4315"/>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4351"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4314"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4350"/>
+ <source>New cut added.</source>
+ <translation>New cut added.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4320"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4319"/>
+ <source>Delete</source>
+ <translation>Delete</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4325"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4324"/>
+ <source>Undo Changes</source>
+ <translation>Undo Changes</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4356"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4355"/>
+ <source>Undo - %1</source>
+ <extracomment>%1 is the undo message</extracomment>
+ <translation>Undo - %1</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="4362"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="4361"/>
+ <source>Redo - %1</source>
+ <extracomment>%1 is the redo message</extracomment>
+ <translation>Redo - %1</translation>
+ </message>
+ <message numerus="yes">
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5167"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5166"/>
+ <source>%n second(s)</source>
+ <translation>
+ <numerusform>%n second</numerusform>
+@@ -11787,42 +11795,42 @@ Please wait...</translation>
+ </translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5171"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5170"/>
+ <source>Still Frame</source>
+ <translation>Still Frame</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5172"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5171"/>
+ <source>%1 of %2</source>
+ <translation>%1 of %2</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5398"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5397"/>
+ <source>Error opening remote stream buffer</source>
+ <translation>Error opening remote stream buffer</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5411"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5410"/>
+ <source>Error opening remote stream</source>
+ <translation>Error opening remote stream</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5577"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5576"/>
+ <source>Enabled Studio Levels</source>
+ <translation>Enabled Studio Levels</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5578"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5577"/>
+ <source>Disabled Studio Levels</source>
+ <translation>Disabled Studio Levels</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5602"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5601"/>
+ <source>Enabled Night Mode</source>
+ <translation>Enabled Night Mode</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythplayer.cpp" line="5608"/>
++ <location filename="../libs/libmythtv/mythplayer.cpp" line="5607"/>
+ <source>Disabled Night Mode</source>
+ <translation>Disabled Night Mode</translation>
+ </message>
+@@ -11966,207 +11974,207 @@ Please wait...</translation>
+ <context>
+ <name>MythSystemEventEditor</name>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="380"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="387"/>
+ <source>System Event Command Editor</source>
+ <translation>System Event Command Editor</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="386"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="393"/>
+ <source>Recording pending</source>
+ <translation>Recording pending</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="388"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="395"/>
+ <source>Recording about to fail</source>
+ <translation>Recording about to fail</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="390"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="397"/>
+ <source>Recording failing</source>
+ <translation>Recording failing</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="392"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="399"/>
+ <source>Recording started</source>
+ <translation>Recording started</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="394"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="401"/>
+ <source>Recording started writing</source>
+ <translation>Recording started writing</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="396"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="403"/>
+ <source>Recording finished</source>
+ <translation>Recording finished</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="398"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="405"/>
+ <source>Recording deleted</source>
+ <translation>Recording deleted</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="400"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="407"/>
+ <source>Recording expired</source>
+ <translation>Recording expired</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="402"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="409"/>
+ <source>LiveTV started</source>
+ <translation>Live TV started</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="404"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="411"/>
+ <source>LiveTV ended</source>
+ <translation>LiveTV ended</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="406"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="413"/>
+ <source>Playback started</source>
+ <translation>Playback started</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="408"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="415"/>
+ <source>Playback stopped</source>
+ <translation>Playback stopped</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="410"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="417"/>
+ <source>Playback paused</source>
+ <translation>Playback paused</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="412"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="419"/>
+ <source>Playback unpaused</source>
+ <translation>Playback unpaused</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="414"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="421"/>
+ <source>Playback program changed</source>
+ <translation>Playback programme changed</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="416"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="423"/>
+ <source>Tuning signal waiting</source>
+ <translation>Tuning signal waiting</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="418"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="425"/>
+ <source>Master backend started</source>
+ <translation>Master backend started</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="420"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="427"/>
+ <source>Master backend shutdown</source>
+ <translation>Master backend shutdown</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="422"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="429"/>
+ <source>Client connected to master backend</source>
+ <translation>Client connected to master backend</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="424"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="431"/>
+ <source>Client disconnected from master backend</source>
+ <translation>Client disconnected from master backend</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="426"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="433"/>
+ <source>Slave backend connected to master</source>
+ <translation>Slave backend connected to master</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="428"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="435"/>
+ <source>Slave backend disconnected from master</source>
+ <translation>Slave backend disconnected from master</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="430"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="437"/>
+ <source>Network Control client connected</source>
+ <translation>Network Control client connected</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="432"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="439"/>
+ <source>Network Control client disconnected</source>
+ <translation>Network Control client disconnected</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="434"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="441"/>
+ <source>mythfilldatabase ran</source>
+ <translation>mythfilldatabase ran</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="436"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="443"/>
+ <source>Scheduler ran</source>
+ <translation>Scheduler ran</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="438"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="445"/>
+ <source>Settings cache cleared</source>
+ <translation>Settings cache cleared</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="440"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="447"/>
+ <source>Screen created or destroyed</source>
+ <translation>Screen created or destroyed</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="442"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="449"/>
+ <source>Keystroke event #1</source>
+ <translation>Keystroke event #1</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="444"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="451"/>
+ <source>Keystroke event #2</source>
+ <translation>Keystroke event #2</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="446"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="453"/>
+ <source>Keystroke event #3</source>
+ <translation>Keystroke event #3</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="448"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="455"/>
+ <source>Keystroke event #4</source>
+ <translation>Keystroke event #4</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="450"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="457"/>
+ <source>Keystroke event #5</source>
+ <translation>Keystroke event #5</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="452"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="459"/>
+ <source>Keystroke event #6</source>
+ <translation>Keystroke event #6</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="454"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="461"/>
+ <source>Keystroke event #7</source>
+ <translation>Keystroke event #7</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="456"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="463"/>
+ <source>Keystroke event #8</source>
+ <translation>Keystroke event #8</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="458"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="465"/>
+ <source>Keystroke event #9</source>
+ <translation>Keystroke event #9</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="460"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="467"/>
+ <source>Keystroke event #10</source>
+ <translation>Keystroke event #10</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="462"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="469"/>
+ <source>CEC command received</source>
+ <translation>CEC command received</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/mythsystemevent.cpp" line="464"/>
++ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="471"/>
+ <source>Any event</source>
+ <translation>Any event</translation>
+ </message>
+@@ -12464,87 +12472,87 @@ Please wait...</translation>
+ <context>
+ <name>OSDSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1400"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1460"/>
+ <source>Decode VBI format</source>
+ <translation>Decode VBI format</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1402"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1462"/>
+ <source>None</source>
+ <translation>None</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1404"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1464"/>
+ <source>PAL teletext</source>
+ <translation>PAL teletext</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1406"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1466"/>
+ <source>NTSC closed caption</source>
+ <translation>NTSC closed caption</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1410"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1470"/>
+ <source>If enabled, this overrides the mythtv-setup setting used during recording when decoding captions.</source>
+ <translation>If enabled, this overrides the mythtv-setup setting used during recording when decoding captions.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1420"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1480"/>
+ <source>Subtitle Codec</source>
+ <translation>Subtitle Codec</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1505"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1565"/>
+ <source>Always display closed captioning or subtitles</source>
+ <translation>Always display subtitles</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1510"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1570"/>
+ <source>If enabled, captions will be displayed when playing back recordings or watching Live TV. Closed Captioning can be turned on or off by pressing "T" duringplayback.</source>
+ <translation>If enabled, subtitles will be displayed when playing back recordings or watching Live TV. Subtitles can be turned on/off by pressing "T" during playback.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1522"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1582"/>
+ <source>Enable interactive TV</source>
+ <translation>Enable interactive TV</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1526"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1586"/>
+ <source>If enabled, interactive TV applications (MHEG) will be activated. This is used for teletext and logos for radio and channels that are currently off-air.</source>
+ <translation>If enabled, interactive 'Red Button' TV applications (MHEG) will be activated. This is used for teletext and to display logos for radio and off-air channels.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1536"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1596"/>
+ <source>Enable network access for interactive TV</source>
+ <translation>Enable network access for interactive TV</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1538"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1598"/>
+ <source>If enabled, interactive TV applications (MHEG) will be able to access interactive content over the Internet. This is used for BBC iPlayer.</source>
+ <translation>If enabled, interactive TV applications (MHEG) will be able to access interactive content over the Internet. This is used for BBC iPlayer.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1549"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1609"/>
+ <source>Always use browse mode in Live TV</source>
+ <translation>Always use browse mode in Live TV</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1553"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1613"/>
+ <source>If enabled, browse mode will automatically be activated whenever you use channel up/down while watching Live TV.</source>
+ <translation>If enabled, browse mode will automatically be activated whenever you use channel up/down while watching Live TV.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1564"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1624"/>
+ <source>Browse all channels</source>
+ <translation>Browse all channels</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1568"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1628"/>
+ <source>If enabled, browse mode will show channels on all available recording devices, instead of showing channels on just the current recorder.</source>
+ <translation>If enabled, browse mode will show channels on all available recording devices, instead of showing channels on just the current recorder.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4042"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4102"/>
+ <source>On-screen Display</source>
+ <translation>On-screen Display</translation>
+ </message>
+@@ -12690,12 +12698,12 @@ Please wait...</translation>
+ <context>
+ <name>PlayBackScaling</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3797"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3857"/>
+ <source>Scaling</source>
+ <translation>Scaling</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3820"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3880"/>
+ <source>No scaling</source>
+ <translation>No scaling</translation>
+ </message>
+@@ -12807,8 +12815,6 @@ Please wait...</translation>
+ <location filename="../programs/mythfrontend/playbackbox.cpp" line="1749"/>
+ <location filename="../programs/mythfrontend/playbackbox.cpp" line="2151"/>
+ <location filename="../programs/mythfrontend/playbackbox.cpp" line="2152"/>
+- <location filename="../programs/mythfrontend/playbackbox.cpp" line="3613"/>
+- <location filename="../programs/mythfrontend/playbackbox.cpp" line="3615"/>
+ <location filename="../programs/mythfrontend/playbackbox.cpp" line="4535"/>
+ <location filename="../programs/mythfrontend/playbackbox.cpp" line="4742"/>
+ <source>Live TV</source>
+@@ -13417,17 +13423,17 @@ Are you sure you want to delete:</translation>
+ <context>
+ <name>PlaybackProfileConfig</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="993"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1046"/>
+ <source>if rez</source>
+ <translation>if res</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1014"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1074"/>
+ <source>Mark for deletion</source>
+ <translation>Mark for deletion</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1015"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1075"/>
+ <source>Add New Entry</source>
+ <translation>Add New Entry</translation>
+ </message>
+@@ -13435,7 +13441,7 @@ Are you sure you want to delete:</translation>
+ <context>
+ <name>PlaybackProfileConfigs</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1146"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1206"/>
+ <source>Current Video Playback Profile</source>
+ <translation>Current Video Playback Profile</translation>
+ </message>
+@@ -13443,122 +13449,163 @@ Are you sure you want to delete:</translation>
+ <context>
+ <name>PlaybackProfileItemConfig</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="668"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="692"/>
+ <source>Decoder</source>
+ <translation>Decoder</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="669"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="693"/>
+ <source>Max CPUs</source>
+ <translation>Max CPUs</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="670"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="694"/>
+ <source>Deblocking filter</source>
+ <translation>Deblocking filter</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="681"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="705"/>
+ <source> Multithreaded decoding disabled-only one CPU will be used, please recompile with --enable-ffmpeg-pthreads to enable.</source>
+ <translation>Multithreaded decoding disabled, only one CPU will be used, please re-compile with --enable-ffmpeg-pthreads to enable.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="689"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="713"/>
+ <source>When unchecked the deblocking loopfilter will be disabled </source>
+ <translation>When unchecked the deblocking loopfilter will be disabled </translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="694"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="718"/>
+ <source>When unchecked the OSD will not fade away but instead will disappear abruptly.</source>
+ <translation>When unchecked the OSD will not fade away but instead will disappear abruptly.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="696"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="720"/>
+ <source>Uncheck this if the video studders while the OSD is fading away.</source>
+ <translation>Uncheck this if the video stutters while the OSD is fading away.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="679"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="703"/>
+ <source>Maximum number of CPU cores used for video decoding and filtering.</source>
+ <translation>Maximum number of CPU cores used for video decoding and filtering.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="658"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="662"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="663"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="667"/>
+ <source>Match criteria</source>
+ <translation>Match criteria</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="659"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="664"/>
+ <source>Width</source>
+ <translation>Width</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="660"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="665"/>
+ <source>Height</source>
+ <translation>Height</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="671"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="668"/>
++ <source>Optional setting to restrict this profile to a selected picture size range. If both match criteria are used then both must be satisfied for the entry to be selected.</source>
++ <translation>Optional setting to restrict this profile to a selected picture size range. If both match criteria are used then both must be satisfied for the entry to be selected.</translation>
++ </message>
++ <message>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="675"/>
++ <source>Video Formats</source>
++ <translation>Video Formats</translation>
++ </message>
++ <message>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="681"/>
++ <source>Optional setting to restrict this profile to a video format or formats. You can also type in a format or several formats separated by space. To find the format for a video use ffprobe and look at the word after "Video:". Also you can get a complete list of available formats with ffmpeg -codecs.</source>
++ <translation>Optional setting to restrict this profile to a video format or formats. You can also type in a format or several formats separated by space. To find the format for a video use ffprobe and look at the word after "Video:". Also you can get a complete list of available formats with ffmpeg -codecs.</translation>
++ </message>
++ <message>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="687"/>
++ <source>Frame Rate Range</source>
++ <translation>Frame Rate Range</translation>
++ </message>
++ <message>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="688"/>
++ <source>Optional setting to restrict this profile to a range of frame rates. Valid formats for the setting are [nn.nnn - nn.nnn], [> nn.nnn], [>= nn.nnn], [< nn.nnn], [<= nn.nnn]. Also [nn.nnn] for an exact match.</source>
++ <translation>Optional setting to restrict this profile to a range of frame rates. Valid formats for the setting are [nn.nnn - nn.nnn], [> nn.nnn], [>= nn.nnn], [< nn.nnn], [<= nn.nnn]. Also [nn.nnn] for an exact match.</translation>
++ </message>
++ <message>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="695"/>
+ <source>Video renderer</source>
+ <translation>Video renderer</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="672"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="696"/>
+ <source>OSD renderer</source>
+ <translation>OSD renderer</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="673"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="697"/>
+ <source>OSD fade</source>
+ <translation>OSD fade</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="674"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="698"/>
+ <source>Primary deinterlacer</source>
+ <translation>Primary deinterlacer</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="675"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="699"/>
+ <source>Fallback deinterlacer</source>
+ <translation>Fallback deinterlacer</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="676"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="700"/>
+ <source>Custom filters</source>
+ <translation>Custom filters</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="686"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="710"/>
+ <source>Example custom filter list: 'ivtc,denoise3d'</source>
+ <translation>Example custom filter list: 'ivtc,denoise3d'</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="690"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="714"/>
+ <source>Disabling will significantly reduce the load on the CPU when watching HD H.264 but may significantly reduce video quality.</source>
+ <translation>Disabling will significantly reduce the load on the CPU when watching HD H.264 but may significantly reduce video quality.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="905"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="881"/>
++ <source>Invalid frame rate specification(%1), discarded</source>
++ <translation>Invalid frame rate specification(%1), discarded</translation>
++ </message>
++ <message>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="953"/>
+ <source>Main deinterlacing method. %1</source>
+ <translation>Main deinterlacing method. %1</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="912"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="960"/>
+ <source>Fallback deinterlacing method. %1</source>
+ <translation>Fallback deinterlacing method. %1</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="937"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="985"/>
+ <source>Remove this profile item?</source>
+ <translation>Remove this profile item?</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="986"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1034"/>
+ <source>&</source>
+ <comment>and</comment>
+ <translation>&</translation>
+ </message>
++ <message>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1053"/>
++ <source>formats</source>
++ <comment>video formats</comment>
++ <translation>formats</translation>
++ </message>
++ <message>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1056"/>
++ <source>framerate</source>
++ <translation>frame rate</translation>
++ </message>
+ </context>
+ <context>
+ <name>PlaybackSettings</name>
+@@ -13710,376 +13757,376 @@ Are you sure you want to delete:</translation>
+ <translation>Treat consecutive advert breaks shorter than this as one break when skipping forward. Useful if you have to skip a few times during breaks. Applies to automatic skipping as well. Set to 0 to disable.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1245"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1305"/>
+ <source>Enter Playback Profile Name</source>
+ <translation>Enter Playback Profile Name</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1271"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1331"/>
+ <source>Sorry, playback group
+ name cannot be blank.</source>
+ <translation>Sorry, playback group
+ name cannot be blank.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1272"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1332"/>
+ <source>Sorry, playback group name
+ '%1' is already being used.</source>
+ <translation>Sorry, playback group name
+ '%1' is already being used.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1291"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1351"/>
+ <source>Sort all sub-titles/multi-titles Ascending</source>
+ <translation>Sort all sub-titles/multi-titles Ascending</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1292"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1352"/>
+ <source>Sort all sub-titles/multi-titles Descending</source>
+ <translation>Sort all sub-titles/multi-titles Descending</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1293"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1353"/>
+ <source>Sort sub-titles Descending, multi-titles Ascending</source>
+ <translation>Sort sub-titles Descending, multi-titles Ascending</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1295"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1355"/>
+ <source>Sort sub-titles Ascending, multi-titles Descending</source>
+ <translation>Sort sub-titles Ascending, multi-titles Descending</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1298"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1358"/>
+ <source>Selects how to sort show episodes. Sub-titles refers to the episodes listed under a specific show title. Multi-title refers to sections (e.g. "All Programs") which list multiple titles. Sections in parentheses are not affected.</source>
+ <translation>Selects how to sort show episodes. Sub-titles refers to the episodes listed under a specific show title. Multi-title refers to sections (e.g. "All Programmes") which list multiple titles. Sections in parentheses are not affected.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1308"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1368"/>
+ <source>Episode sort orderings</source>
+ <translation>Episode sort orderings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1323"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1383"/>
+ <source>Sort episodes</source>
+ <translation>Sort episodes</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1325"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1385"/>
+ <source>Record date</source>
+ <translation>Record date</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1326"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1386"/>
+ <source>Season/Episode</source>
+ <translation>Series/Episode</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1327"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1387"/>
+ <source>Original air date</source>
+ <translation>Original air date</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1328"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1388"/>
+ <source>Program ID</source>
+ <translation>Programme ID</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1330"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1390"/>
+ <source>Selects how to sort a show's episodes</source>
+ <translation>Selects how to sort a show's episodes</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1340"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1400"/>
+ <source>Fast forward/rewind reposition amount</source>
+ <translation>Fast forward/rewind reposition amount</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1344"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1404"/>
+ <source>When exiting sticky keys fast forward/rewind mode, reposition this many 1/100th seconds before resuming normal playback. This compensates for the reaction time between seeing where to resume playback and actually exiting seeking.</source>
+ <translation>When exiting sticky keys fast forward/rewind mode, reposition this many 1/100ths of a second before resuming normal playback. This compensates for the reaction time between seeing where to resume playback and actually exiting seeking.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1359"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1419"/>
+ <source>Reverse direction in fast forward/rewind</source>
+ <translation>Reverse direction in fast forward/rewind</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1364"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1424"/>
+ <source>If enabled, pressing the sticky rewind key in fast forward mode switches to rewind mode, and vice versa. If disabled, it will decrease the current speed or switch to play mode if the speed can't be decreased further.</source>
+ <translation>If enabled, pressing the sticky rewind key in fast forward mode switches to rewind mode, and vice versa. If disabled, it will decrease the current speed or switch to play mode if the speed can't be decreased further.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1449"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1509"/>
+ <source>Vertical scaling</source>
+ <translation>Vertical scaling</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1453"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1513"/>
+ <source>Adjust this if the image does not fill your screen vertically. Range -100% to 100%</source>
+ <translation>Adjust this if the image does not fill your screen vertically. Range -100% to 100%</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1463"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1523"/>
+ <source>Horizontal scaling</source>
+ <translation>Horizontal scaling</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1467"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1527"/>
+ <source>Adjust this if the image does not fill your screen horizontally. Range -100% to 100%</source>
+ <translation>Adjust this if the image does not fill your screen horizontally. Range -100% to 100%</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1477"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1537"/>
+ <source>Scan displacement (X)</source>
+ <translation>Scan displacement (X)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1481"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1541"/>
+ <source>Adjust this to move the image horizontally.</source>
+ <translation>Adjust this to move the image horizontally.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1491"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1551"/>
+ <source>Scan displacement (Y)</source>
+ <translation>Scan displacement (Y)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1495"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1555"/>
+ <source>Adjust this to move the image vertically.</source>
+ <translation>Adjust this to move the image vertically.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1579"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1639"/>
+ <source>Clear bookmark on playback</source>
+ <translation>Clear bookmark on playback</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1583"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1643"/>
+ <source>If enabled, automatically clear the bookmark on a recording when the recording is played back. If disabled, you can mark the beginning with rewind then save position.</source>
+ <translation>If enabled, automatically clear the bookmark on a recording when the recording is played back. If disabled, you can mark the beginning with rewind then save position.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1596"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1656"/>
+ <source>Alternate clear and save bookmark</source>
+ <translation>Alternate clear and save bookmark</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1600"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1660"/>
+ <source>During playback the SELECT key (Enter or Space) will alternate between "Bookmark Saved" and "Bookmark Cleared". If disabled, the SELECT key will save the current position for each keypress.</source>
+ <translation>During playback the SELECT key (Enter or Space) will alternate between "Bookmark Saved" and "Bookmark Cleared". If disabled, the SELECT key will save the current position for each keypress.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1613"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1673"/>
+ <source>Action on playback exit</source>
+ <translation>Action on playback exit</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1615"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1675"/>
+ <source>Just exit</source>
+ <translation>Just exit</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1616"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1676"/>
+ <source>Save position and exit</source>
+ <translation>Save position and exit</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1617"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1677"/>
+ <source>Always prompt (excluding Live TV)</source>
+ <translation>Always prompt (excluding Live TV)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1619"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1679"/>
+ <source>Always prompt (including Live TV)</source>
+ <translation>Always prompt (including Live TV)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1621"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1681"/>
+ <source>Prompt for Live TV only</source>
+ <translation>Prompt for Live TV only</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1623"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1683"/>
+ <source>If set to prompt, a menu will be displayed when you exit playback mode. The options available will allow you to save your position, delete the recording, or continue watching.</source>
+ <translation>If set to prompt, a menu will be displayed when you exit playback mode. The options available will allow you to save your position, delete the recording, or continue watching.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1636"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1696"/>
+ <source>Prompt at end of recording</source>
+ <translation>Prompt at end of recording</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1640"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1700"/>
+ <source>If enabled, a menu will be displayed allowing you to delete the recording when it has finished playing.</source>
+ <translation>If enabled, a menu will be displayed allowing you to delete the recording when it has finished playing.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1650"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1710"/>
+ <source>Jump to program OSD</source>
+ <translation>Jump to programme OSD</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1654"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1714"/>
+ <source>Set the choice between viewing the current recording group in the OSD, or showing the 'Watch Recording' screen when 'Jump to Program' is activated. If enabled, the recordings are shown in the OSD</source>
+ <translation>Set the choice between viewing the current recording group in the OSD, or showing the 'Watch Recording' screen when 'Jump to Programme' is activated. If enabled, the recordings are shown in the OSD</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1667"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1727"/>
+ <source>Continue playback when embedded</source>
+ <translation>Continue playback when embedded</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1671"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1731"/>
+ <source>If enabled, TV playback continues when the TV window is embedded in the upcoming program list or recorded list. The default is to pause the recorded show when embedded.</source>
+ <translation>If enabled, TV playback continues when the TV window is embedded in the upcoming programme list or recorded list. The default is to pause the recorded show when embedded.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1684"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1744"/>
+ <source>Automatically mark a recording as watched</source>
+ <translation>Automatically mark a recording as watched</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1689"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1749"/>
+ <source>If enabled, when you exit near the end of a recording it will be marked as watched. The automatic detection is not foolproof, so do not enable this setting if you don't want an unwatched recording marked as watched.</source>
+ <translation>If enabled, when you exit near the end of a recording it will be marked as watched. The automatic detection is not foolproof, so do not enable this setting if you don't want an unwatched recording marked as watched.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1703"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1763"/>
+ <source>Live TV idle timeout (mins)</source>
+ <translation>Live TV idle timeout (mins)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1707"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1767"/>
+ <source>Exit Live TV automatically if left idle for the specified number of minutes. 0 disables the timeout.</source>
+ <translation>Exit Live TV automatically if left idle for the specified number of minutes. 0 disables the timeout.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1941"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2001"/>
+ <source>Letterboxing color</source>
+ <translation>Letterboxing colour</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1946"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2006"/>
+ <source>By default MythTV uses black letterboxing to match broadcaster letterboxing, but those with plasma screens may prefer gray to minimize burn-in. Currently only works with XVideo video renderer.</source>
+ <translation>By default MythTV uses black letterboxing to match broadcaster letterboxing, but those with plasma screens may prefer gray to minimize burn-in. Currently only works with XVideo video renderer.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1959"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2019"/>
+ <source>Video aspect override</source>
+ <translation>Video aspect override</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1964"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2024"/>
+ <source>When enabled, these will override the aspect ratio specified by any broadcaster for all video streams.</source>
+ <translation>When enabled, these will override the aspect ratio specified by any broadcaster for all video streams.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1974"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2034"/>
+ <source>Zoom</source>
+ <translation>Zoom</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="1983"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2043"/>
+ <source>When enabled, these will apply a predefined zoom to all video playback in MythTV.</source>
+ <translation>When enabled, these will apply a predefined zoom to all video playback in MythTV.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3115"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3175"/>
+ <source>Enable realtime priority threads</source>
+ <translation>Enable realtime priority threads</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3117"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3177"/>
+ <source>When running mythfrontend with root privileges, some threads can be given enhanced priority. Disable this if MythFrontend freezes during video playback.</source>
+ <translation>When running mythfrontend with root privileges, some threads can be given enhanced priority. Disable this if MythFrontend freezes during video playback.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3147"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3207"/>
+ <source>Sort titles</source>
+ <translation>Sort titles</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3149"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3209"/>
+ <source>Alphabetically</source>
+ <translation>Alphabetically</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3151"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3211"/>
+ <source>By recording priority</source>
+ <translation>By recording priority</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3154"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3214"/>
+ <source>Sets the title sorting order when the view is set to Titles only.</source>
+ <translation>Sets the title sorting order when the view is set to Titles only.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3475"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3535"/>
+ <source>Enable gamma correction for video</source>
+ <translation>Enable gamma correction for video</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3479"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3539"/>
+ <source>If enabled, QuickTime will correct the gamma of the video to match your monitor. Turning this off can save some CPU cycles.</source>
+ <translation>If enabled, QuickTime will correct the gamma of the video to match your monitor. Turning this off can save some CPU cycles.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3490"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3550"/>
+ <source>Scale video as necessary</source>
+ <translation>Scale video as necessary</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3494"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3554"/>
+ <source>If enabled, video will be scaled to fit your window or screen. If unchecked, video will never be made larger than its actual pixel size.</source>
+ <translation>If enabled, video will be scaled to fit your window or screen. If unchecked, video will never be made larger than its actual pixel size.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3505"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3565"/>
+ <source>Frames to skip in fullscreen mode</source>
+ <translation>Frames to skip in fullscreen mode</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3509"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3569"/>
+ <source>Video displayed in fullscreen or non-windowed mode will skip this many frames for each frame drawn. Set to 0 to show every frame. Only valid when either "Use GUI size for TV playback" or "Run the frontend in a window" is not checked.</source>
+ <translation>Video displayed in fullscreen or non-windowed mode will skip this many frames for each frame drawn. Set to 0 to show every frame. Only valid when either "Use GUI size for TV playback" or "Run the frontend in a window" is not checked.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3924"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3984"/>
+ <source>Playback settings</source>
+ <translation>Playback settings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3930"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3990"/>
+ <source>General Playback</source>
+ <translation>General Playback</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3959"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4019"/>
+ <source>Add a new playback profile</source>
+ <translation>Add a new playback profile</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3965"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4025"/>
+ <source>View Recordings</source>
+ <translation>View Recordings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3974"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4034"/>
+ <source>Recording Groups</source>
+ <translation>Recording Groups</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3992"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4052"/>
+ <source>Seeking</source>
+ <translation>Seeking</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4000"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4060"/>
+ <source>Commercial Skip</source>
+ <translation>Commercial Skip</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="4011"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="4071"/>
+ <source>Mac OS X Video Settings</source>
+ <translation>Mac OS X Video Settings</translation>
+ </message>
+@@ -14087,22 +14134,22 @@ name cannot be blank.</translation>
+ <context>
+ <name>PlaybackSettingsDialog</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3854"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3914"/>
+ <source>Playback Profile Menu</source>
+ <translation>Playback Profile Menu</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3858"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3918"/>
+ <source>Move Up</source>
+ <translation>Move Up</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3860"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3920"/>
+ <source>Move Down</source>
+ <translation>Move Down</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3862"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3922"/>
+ <source>Delete</source>
+ <translation>Delete</translation>
+ </message>
+@@ -15159,10 +15206,10 @@ name cannot be blank.</translation>
+ <location filename="../libs/libmyth/programinfo.cpp" line="1766"/>
+ <location filename="../libs/libmyth/programinfo.cpp" line="1770"/>
+ <location filename="../programs/mythfrontend/programrecpriority.cpp" line="125"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2421"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2459"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2476"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2497"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2422"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2460"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2477"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2498"/>
+ <source>Default</source>
+ <translation>Default</translation>
+ </message>
+@@ -15199,7 +15246,7 @@ name cannot be blank.</translation>
+ <translation>Hue</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="641"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="828"/>
+ <source>Standard</source>
+ <translation>Standard</translation>
+ </message>
+@@ -15263,13 +15310,13 @@ name cannot be blank.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="222"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="545"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="552"/>
+ <source>Inversion</source>
+ <translation>Inversion</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="223"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="546"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="553"/>
+ <source>Inversion (Default: Auto):
+ Most cards can autodetect this now, so leave it at Auto unless it won't work.</source>
+ <translation>Inversion (Default: Auto):
+@@ -15286,25 +15333,26 @@ Most cards can autodetect this now, so leave it at Auto unless it won't wor
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="375"/>
+ <location filename="../libs/libmythtv/recordingprofile.cpp" line="1275"/>
+ <location filename="../libs/libmythtv/recordingprofile.cpp" line="1302"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="549"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="563"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="576"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="636"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="652"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="666"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2214"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="556"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="570"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="583"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="643"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="659"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="673"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="718"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2274"/>
+ <source>Auto</source>
+ <translation>Auto</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="228"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="550"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="557"/>
+ <source>On</source>
+ <translation>On</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="229"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="551"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="558"/>
+ <location filename="../libs/libmythtv/videoouttypes.h" line="207"/>
+ <location filename="../libs/libmythtv/videoouttypes.h" line="271"/>
+ <source>Off</source>
+@@ -15312,12 +15360,12 @@ Most cards can autodetect this now, so leave it at Auto unless it won't wor
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="238"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="561"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="568"/>
+ <source>Bandwidth</source>
+ <translation>Bandwidth</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="562"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="569"/>
+ <source>Bandwidth (Default: Auto)</source>
+ <translation>Bandwidth (Default: Auto)</translation>
+ </message>
+@@ -15418,19 +15466,19 @@ Most DVB-C transports transmit at 6.9 or 6.875 million symbols per second.</tran
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="241"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="564"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="571"/>
+ <source>6 MHz</source>
+ <translation>6 MHz</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="242"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="565"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="572"/>
+ <source>7 MHz</source>
+ <translation>7 MHz</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="243"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="566"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="573"/>
+ <source>8 MHz</source>
+ <translation>8 MHz</translation>
+ </message>
+@@ -15450,83 +15498,83 @@ Most DVB-C transports transmit at 6.9 or 6.875 million symbols per second.</tran
+ <location filename="../libs/libmyth/recordingtypes.cpp" line="226"/>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="253"/>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="334"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="577"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="667"/>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="709"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="584"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="674"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="896"/>
+ <location filename="../libs/libmythtv/videoouttypes.h" line="301"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2298"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2299"/>
+ <source>None</source>
+ <translation>None</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="272"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="597"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="604"/>
+ <source>FEC</source>
+ <translation>FEC</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="273"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="598"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="605"/>
+ <source>Forward Error Correction (Default: Auto)</source>
+ <translation>Forward Error Correction (Default: Auto)</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="283"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="610"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="617"/>
+ <source>LP Coderate</source>
+ <translation>LP Coderate</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="284"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="611"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="618"/>
+ <source>Low Priority Code Rate (Default: Auto)</source>
+ <translation>Low Priority Code Rate (Default: Auto)</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="293"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="623"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="630"/>
+ <source>HP Coderate</source>
+ <translation>HP Coderate</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="294"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="624"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="631"/>
+ <source>High Priority Code Rate (Default: Auto)</source>
+ <translation>High Priority Code Rate (Default: Auto)</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="303"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="634"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="641"/>
+ <source>Guard Interval</source>
+ <translation>Guard Interval</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="304"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="635"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="642"/>
+ <source>Guard Interval (Default: Auto)</source>
+ <translation>Guard Interval (Default: Auto)</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="318"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="650"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="657"/>
+ <source>Trans. Mode</source>
+ <translation>Trans. Mode</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="319"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="651"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="658"/>
+ <source>Transmission Mode (Default: Auto)</source>
+ <translation>Transmission Mode (Default: Auto)</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="331"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="664"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="671"/>
+ <source>Hierarchy</source>
+ <translation>Hierarchy</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="332"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="665"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="672"/>
+ <source>Hierarchy (Default: Auto)</source>
+ <translation>Hierarchy (Default: Auto)</translation>
+ </message>
+@@ -15548,11 +15596,13 @@ Most DVB-C transports transmit at 6.9 or 6.875 million symbols per second.</tran
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="370"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="713"/>
+ <source>Roll-off</source>
+ <translation>Roll-off</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelscan/channelscanmiscsettings.h" line="371"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="714"/>
+ <source>Roll-off factor (Default: 0.35)</source>
+ <translation>Roll-off factor (Default: 0.35)</translation>
+ </message>
+@@ -16446,27 +16496,27 @@ Your grabber does not provide channel numbers, so you have to set them manually.
+ <translation>Input groups are only needed when two or more cards share the same resource such as a FireWire card and an analog card input controlling the same set top box.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3785"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3786"/>
+ <source>(New capture card)</source>
+ <translation>(New capture card)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3789"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3790"/>
+ <source>(Delete all capture cards)</source>
+ <translation>(Delete all capture cards)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3802"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3803"/>
+ <source>(New video source)</source>
+ <translation>(New video source)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3803"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3804"/>
+ <source>(Delete all video sources)</source>
+ <translation>(Delete all video sources)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="4079"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="4080"/>
+ <source>If there is more than one audio input, select which one to use.</source>
+ <translation>If there is more than one audio input, select which one to use.</translation>
+ </message>
+@@ -16516,12 +16566,12 @@ Your grabber does not provide channel numbers, so you have to set them manually.
+ <translation>Audio device is invalid/unusable.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="711"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="898"/>
+ <source>Linear blend</source>
+ <translation>Linear blend</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="727"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="914"/>
+ <source>One field</source>
+ <translation>One field</translation>
+ </message>
+@@ -16566,7 +16616,7 @@ Your grabber does not provide channel numbers, so you have to set them manually.
+ <translation>All</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="669"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="856"/>
+ <source>Standard will use ffmpeg library.</source>
+ <translation>Standard will use ffmpeg library.</translation>
+ </message>
+@@ -16819,22 +16869,22 @@ Your grabber does not provide channel numbers, so you have to set them manually.
+ <translation>Blank Frame Detection</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="642"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="829"/>
+ <source>Mac hardware acceleration</source>
+ <translation>Mac hardware acceleration</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="644"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="831"/>
+ <source>VAAPI acceleration</source>
+ <translation>VAAPI acceleration</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="645"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="832"/>
+ <source>Windows hardware acceleration</source>
+ <translation>Windows hardware acceleration</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="672"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="859"/>
+ <source>Mac hardware will try to use the graphics processor - this may hang or crash your Mac!</source>
+ <translation>Mac hardware will try to use the graphics processor - this may hang or crash your Mac!</translation>
+ </message>
+@@ -17002,7 +17052,7 @@ Your grabber does not provide channel numbers, so you have to set them manually.
+ <translation>If the input priority is not equal for all inputs, the scheduler may choose to record a show at a later time so that it can record on an input with a higher value.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3786"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3787"/>
+ <source>(Delete all capture cards on %1)</source>
+ <translation>(Delete all capture cards on %1)</translation>
+ </message>
+@@ -17080,7 +17130,7 @@ Your grabber does not provide channel numbers, so you have to set them manually.
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/transporteditor.cpp" line="66"/>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="534"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="541"/>
+ <source>Analog</source>
+ <translation>Analogue</translation>
+ </message>
+@@ -17139,31 +17189,47 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ <translation>Modulation (Constellation)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="513"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="520"/>
+ <source>QAM Auto</source>
+ <translation>QAM Auto</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="680"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="687"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="700"/>
+ <source>Modulation System</source>
+ <translation>Modulation System</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="681"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="688"/>
+ <source>Modulation System (Default: DVB-T)</source>
+ <translation>Modulation System (Default: DVB-T)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="682"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="689"/>
+ <source>DVB-T</source>
+ <translation>DVB-T</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/transporteditor.cpp" line="683"/>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="690"/>
+ <source>DVB-T2</source>
+ <translation>DVB-T2</translation>
+ </message>
+ <message>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="701"/>
++ <source>Modulation System (Default: DVB-S)</source>
++ <translation>Modulation System (Default: DVB-S)</translation>
++ </message>
++ <message>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="702"/>
++ <source>DVB-S</source>
++ <translation>DVB-S</translation>
++ </message>
++ <message>
++ <location filename="../libs/libmythtv/transporteditor.cpp" line="703"/>
++ <source>DVB-S2</source>
++ <translation>DVB-S2</translation>
++ </message>
++ <message>
+ <location filename="../libs/libmythtv/recordingprofile.cpp" line="367"/>
+ <source>SAP/Bilingual</source>
+ <translation>SAP/Bilingual</translation>
+@@ -17538,97 +17604,97 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ <translation>Port</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="184"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="185"/>
+ <source>Could not find specified tuner (%1).</source>
+ <translation>Could not find specified tuner (%1).</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="187"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="188"/>
+ <source>Specified tuner (%1) is already in use.</source>
+ <translation>Specified tuner (%1) is already in use.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="192"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="193"/>
+ <source>All tuners are currently in use. If you want to watch TV, you can cancel one of the in-progress recordings from the delete menu</source>
+ <translation>All tuners are currently in use. If you want to watch TV, you can cancel one of the in-progress recordings from the delete menu</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="1532"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="1537"/>
+ <source>This application is not compatible with the installed MythTV libraries.</source>
+ <translation>This application is not compatible with the installed MythTV libraries.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="1352"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="1349"/>
+ <source>The connection to the master backend server has gone away for some reason. Is it running?</source>
+ <translation>The connection to the master backend server has gone away for some reason. Is it running?</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="464"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="462"/>
+ <source>No UPnP backends found</source>
+ <comment>Backend Setup</comment>
+ <translation>No UPnP backends found</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="212"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="213"/>
+ <source>Failed to configure plugin</source>
+ <translation>Failed to configure plugin</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="224"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="225"/>
+ <source>Plugin failure</source>
+ <translation>Plugin failure</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="226"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="227"/>
+ <source>%1 failed to run for some reason</source>
+ <translation>%1 failed to run for some reason</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="990"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="988"/>
+ <source>Cannot find (ping) database host %1 on the network</source>
+ <comment>Backend Setup</comment>
+ <translation>Cannot find (ping) database host %1 on the network</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="999"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="997"/>
+ <source>Cannot login to database</source>
+ <comment>Backend Setup</comment>
+ <translation>Cannot login to database</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="1004"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="1002"/>
+ <source>Cannot connect to backend</source>
+ <comment>Backend Setup</comment>
+ <translation>Cannot connect to backend</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="1356"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="1353"/>
+ <source>Could not connect to the master backend server. Is it running? Is the IP address set for it in mythtv-setup correct?</source>
+ <translation>Could not connect to the master backend server. Is it running? Is the IP address set for it in mythtv-setup correct?</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="1361"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="1358"/>
+ <source>Could not connect to master backend</source>
+ <translation>Could not connect to master backend</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="1376"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="1373"/>
+ <source>Backend is online</source>
+ <translation>Backend is online</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/mythcontext.cpp" line="1390"/>
++ <location filename="../libs/libmyth/mythcontext.cpp" line="1387"/>
+ <source>The server uses network protocol version %1, but this client only understands version %2. Make sure you are running compatible versions of the backend and frontend.</source>
+ <translation>The server uses network protocol version %1, but this client only understands version %2. Make sure you are running compatible versions of the backend and frontend.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/recordingtypes.cpp" line="228"/>
+- <location filename="../libs/libmythtv/avformatdecoder.cpp" line="4128"/>
++ <location filename="../libs/libmythtv/avformatdecoder.cpp" line="4139"/>
+ <source>Subtitle</source>
+ <translation>Subtitle</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/avformatdecoder.cpp" line="4080"/>
++ <location filename="../libs/libmythtv/avformatdecoder.cpp" line="4091"/>
+ <source> (forced)</source>
+ <translation> (forced)</translation>
+ </message>
+@@ -17696,363 +17762,363 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ <translation>On known multiplex...</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="682"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="869"/>
+ <source>DXVA2 will use the graphics hardware to accelerate video decoding and playback (requires Windows Vista or later).</source>
+ <translation>DXVA2 will use the graphics hardware to accelerate video decoding and playback (requires Windows Vista or later).</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="693"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="880"/>
+ <source>VDA will attempt to use the graphics hardware to accelerate video decoding. (H264 only, requires Mac OS 10.6.3)</source>
+ <translation>VDA will attempt to use the graphics hardware to accelerate video decoding. (H264 only, requires Mac OS 10.6.3)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="699"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="886"/>
+ <source>Openmax will use the graphics hardware to accelerate video decoding on Raspberry Pi. </source>
+ <translation>OpenMAX will use the graphics hardware to accelerate video decoding on Raspberry Pi. </translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="713"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="900"/>
+ <source>Kernel</source>
+ <translation>Kernel</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="715"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="902"/>
+ <source>Kernel (2x)</source>
+ <translation>Kernel (2x)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="717"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="904"/>
+ <source>Greedy HighMotion</source>
+ <translation>Greedy HighMotion</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="719"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="906"/>
+ <source>Greedy HighMotion (2x)</source>
+ <translation>Greedy HighMotion (2x)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="721"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="908"/>
+ <source>Yadif</source>
+ <translation>Yadif</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="723"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="910"/>
+ <source>Yadif (2x)</source>
+ <translation>Yadif (2x)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="725"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="912"/>
+ <source>Bob (2x)</source>
+ <translation>Bob (2x)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="729"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="916"/>
+ <source>Interlaced (2x)</source>
+ <translation>Interlaced (2x)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="731"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="918"/>
+ <source>Linear blend (HW)</source>
+ <translation>Linear blend (HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="733"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="920"/>
+ <source>Kernel (HW)</source>
+ <translation>Kernel (HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="735"/>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="747"/>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="759"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="922"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="934"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="946"/>
+ <source>Bob (2x, HW)</source>
+ <translation>Bob (2x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="737"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="924"/>
+ <source>One field (HW)</source>
+ <translation>One field (HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="739"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="926"/>
+ <source>Kernel (2x, HW)</source>
+ <translation>Kernel (2x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="741"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="928"/>
+ <source>Linear blend (2x, HW)</source>
+ <translation>Linear blend (2x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="743"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="930"/>
+ <source>Interlaced (2x, HW)</source>
+ <translation>Interlaced (2x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="745"/>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="757"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="932"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="944"/>
+ <source>One Field (1x, HW)</source>
+ <translation>One Field (1x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="749"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="936"/>
+ <source>Temporal (1x, HW)</source>
+ <translation>Temporal (1x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="751"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="938"/>
+ <source>Temporal (2x, HW)</source>
+ <translation>Temporal (2x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="753"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="940"/>
+ <source>Advanced (1x, HW)</source>
+ <translation>Advanced (1x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="755"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="942"/>
+ <source>Advanced (2x, HW)</source>
+ <translation>Advanced (2x, HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="762"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="949"/>
+ <source>Advanced (HW)</source>
+ <translation>Advanced (HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="764"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="951"/>
+ <source>Fast (HW)</source>
+ <translation>Fast (HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="766"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="953"/>
+ <source>Line double (HW)</source>
+ <translation>Line double (HW)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1071"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1258"/>
+ <source>VDPAU High Quality</source>
+ <comment>Sample: VDPAU high quality</comment>
+ <translation>VDPAU High Quality</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1079"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1266"/>
+ <source>VDPAU Normal</source>
+ <comment>Sample: VDPAU average quality</comment>
+ <translation>VDPAU Normal</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1091"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1278"/>
+ <source>VDPAU Slim</source>
+ <comment>Sample: VDPAU low power GPU</comment>
+ <translation>VDPAU Slim</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1102"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1289"/>
+ <source>VDA High Quality</source>
+ <comment>Sample: VDA high quality</comment>
+ <translation>VDA High Quality</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1114"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1301"/>
+ <source>VDA Normal</source>
+ <comment>Sample: VDA average quality</comment>
+ <translation>VDA Normal</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1126"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1313"/>
+ <source>VDA Slim</source>
+ <comment>Sample: VDA low power GPU</comment>
+ <translation>VDA Slim</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1141"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1328"/>
+ <source>OpenGL High Quality</source>
+ <comment>Sample: OpenGL high quality</comment>
+ <translation>OpenGL High Quality</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1149"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1336"/>
+ <source>OpenGL Normal</source>
+ <comment>Sample: OpenGL average quality</comment>
+ <translation>OpenGL Normal</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1157"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1344"/>
+ <source>OpenGL Slim</source>
+ <comment>Sample: OpenGL low power GPU</comment>
+ <translation>OpenGL Slim</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1168"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1355"/>
+ <source>VAAPI Normal</source>
+ <comment>Sample: VAAPI average quality</comment>
+ <translation>VAAPI Normal</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1185"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1372"/>
+ <source>OpenMAX High Quality</source>
+ <comment>Sample: OpenMAX High Quality</comment>
+ <translation>OpenMAX High Quality</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1194"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1381"/>
+ <source>OpenMAX Normal</source>
+ <comment>Sample: OpenMAX Normal</comment>
+ <translation>OpenMAX Normal</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1225"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1412"/>
+ <source>Video rendering method</source>
+ <translation>Video rendering method</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1232"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1419"/>
+ <source>Render video offscreen. Used internally.</source>
+ <translation>Render video offscreen. Used internally.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1236"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1423"/>
+ <source>Use X11 pixel copy to render video. This is not recommended if any other option is available. The video will not be scaled to fit the screen. This will work with all X11 servers, local and remote.</source>
+ <translation>Use X11 pixel copy to render video. This is not recommended if any other option is available. The video will not be scaled to fit the screen. This will work with all X11 servers, local and remote.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1243"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1430"/>
+ <source>Use X11 shared memory pixel transfer to render video. This is only recommended over the X11 pixel copy renderer. The video will not be scaled to fit the screen. This works with most local X11 servers.</source>
+ <translation>Use X11 shared memory pixel transfer to render video. This is only recommended over the X11 pixel copy renderer. The video will not be scaled to fit the screen. This works with most local X11 servers.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1250"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1437"/>
+ <source>This is the standard video renderer for X11 systems. It uses XVideo hardware assist for scaling, color conversion. If the hardware offers picture controls the renderer supports them.</source>
+ <translation>This is the standard video renderer for X11 systems. It uses XVideo hardware assist for scaling, colour conversion. If the hardware offers picture controls the renderer supports them.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1270"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1457"/>
+ <source>This video renderer uses OpenGL for scaling and color conversion. It uses faster OpenGL functionality when available but at the expense of picture controls and GPU based deinterlacing.</source>
+ <translation>This video renderer uses OpenGL for scaling and color conversion. It uses faster OpenGL functionality when available but at the expense of picture controls and GPU based deinterlacing.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1357"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1544"/>
+ <source>This deinterlacer attempts to synchronize with interlaced displays whose size and refresh rate exactly match the video source. It has low CPU requirements.</source>
+ <translation>This deinterlacer attempts to synchronise with interlaced displays whose size and refresh rate exactly match the video source. It has low CPU requirements.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1473"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1660"/>
+ <source>Uses OpenGL in a separate thread to overlay the OSD onto the video.</source>
+ <translation>Uses OpenGL in a separate thread to overlay the OSD onto the video.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1480"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1667"/>
+ <source>Uses OpenMAX to alpha blend the OSD onto the video.</source>
+ <translation>Uses OpenMAX to alpha blend the OSD onto the video.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1256"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1443"/>
+ <source>Windows video renderer based on Direct3D. Requires video card compatible with Direct3D 9. This is the preferred renderer for current Windows systems.</source>
+ <translation>Windows video renderer based on Direct3D. Requires video card compatible with Direct3D 9. This is the preferred renderer for current Windows systems.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="646"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="833"/>
+ <source>Mac VDA hardware acceleration</source>
+ <translation>Mac VDA hardware acceleration</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="688"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="875"/>
+ <source>VAAPI will attempt to use the graphics hardware to accelerate video decoding. REQUIRES OPENGL PAINTER.</source>
+ <translation>VAAPI will attempt to use the graphics hardware to accelerate video decoding. REQUIRES OPENGL PAINTER.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1263"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1450"/>
+ <source>This video renderer uses OpenGL for scaling and color conversion with full picture controls. The GPU can be used for deinterlacing. This requires a faster GPU than XVideo.</source>
+ <translation>This video renderer uses OpenGL for scaling and color conversion with full picture controls. The GPU can be used for deinterlacing. This requires a faster GPU than XVideo.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1283"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1470"/>
+ <source>This video renderer uses VAAPI for video decoding and OpenGL for scaling and color conversion.</source>
+ <translation>This video renderer uses VAAPI for video decoding and OpenGL for scaling and color conversion.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1319"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1506"/>
+ <source>This deinterlacer requires the display to be capable of twice the frame rate as the source video.</source>
+ <translation>This deinterlacer requires the display to be capable of twice the frame rate as the source video.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1324"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1511"/>
+ <source>Perform no deinterlacing.</source>
+ <translation>Perform no deinterlacing.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1325"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1512"/>
+ <source>Use this with an interlaced display whose resolution exactly matches the video size. This is incompatible with MythTV zoom modes.</source>
+ <translation>Use this with an interlaced display whose resolution exactly matches the video size. This is incompatible with MythTV zoom modes.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1330"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1517"/>
+ <source>Shows only one of the two fields in the frame. This looks good when displaying a high motion 1080i video on a 720p display.</source>
+ <translation>Shows only one of the two fields in the frame. This looks good when displaying a high motion 1080i video on a 720p display.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1335"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1522"/>
+ <source>Shows one field of the frame followed by the other field displaced vertically.</source>
+ <translation>Shows one field of the frame followed by the other field displaced vertically.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1340"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1527"/>
+ <source>Blends the odd and even fields linearly into one frame.</source>
+ <translation>Blends the odd and even fields linearly into one frame.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1343"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1530"/>
+ <source>This filter disables deinterlacing when the two fields are similar, and performs linear deinterlacing otherwise.</source>
+ <translation>This filter disables deinterlacing when the two fields are similar, and performs linear deinterlacing otherwise.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1347"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1534"/>
+ <source>(Hardware Accelerated)</source>
+ <translation>(Hardware Accelerated)</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1349"/>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1353"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1536"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1540"/>
+ <source>This deinterlacer uses several fields to reduce motion blur. It has increased CPU requirements.</source>
+ <translation>This deinterlacer uses several fields to reduce motion blur. It has increased CPU requirements.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1362"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1549"/>
+ <source>This deinterlacer uses several fields to reduce motion blur. </source>
+ <translation>This deinterlacer uses several fields to reduce motion blur. </translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1365"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1552"/>
+ <source>This deinterlacer uses multiple fields to reduce motion blur and smooth edges. </source>
+ <translation>This deinterlacer uses multiple fields to reduce motion blur and smooth edges. </translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1422"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1609"/>
+ <source>'%1' has not been documented yet.</source>
+ <translation>'%1' has not been documented yet.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1444"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1631"/>
+ <source>OSD rendering method</source>
+ <translation>OSD rendering method</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1450"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1637"/>
+ <source>Render the OSD using the XVideo chromakey feature.This renderer does not alpha blend but is the fastest OSD renderer for XVideo.</source>
+ <translation>Render the OSD using the XVideo chromakey feature.This renderer does not alpha blend but is the fastest OSD renderer for XVideo.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1454"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1641"/>
+ <source>Note: nVidia hardware after the 5xxx series does not have XVideo chromakey support.</source>
+ <translation>Note: NVIDIA hardware after the 5xxx series does not have XVideo chromakey support.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1461"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1648"/>
+ <source>Software OSD rendering uses your CPU to alpha blend the OSD.</source>
+ <translation>Software OSD rendering uses your CPU to alpha blend the OSD.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1467"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1654"/>
+ <source>Uses OpenGL to alpha blend the OSD onto the video.</source>
+ <translation>Uses OpenGL to alpha blend the OSD onto the video.</translation>
+ </message>
+@@ -19183,40 +19249,40 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ <translation>Auto-Skip Notify</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="643"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="830"/>
+ <source>NVidia VDPAU acceleration</source>
+ <translation>NVIDIA VDPAU acceleration</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="661"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="848"/>
+ <source>Processing method used to decode video.</source>
+ <translation>Processing method used to decode video.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="677"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="864"/>
+ <source>VDPAU will attempt to use the graphics hardware to accelerate video decoding and playback.</source>
+ <translation>VDPAU will attempt to use the graphics hardware to accelerate video decoding and playback.</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1038"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1225"/>
+ <source>High Quality</source>
+ <comment>Sample: high quality</comment>
+ <translation>High Quality</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1048"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1235"/>
+ <source>Normal</source>
+ <comment>Sample: average quality</comment>
+ <translation>Normal</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1058"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1245"/>
+ <source>Slim</source>
+ <comment>Sample: low CPU usage</comment>
+ <translation>Slim</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1277"/>
++ <location filename="../libs/libmythtv/videodisplayprofile.cpp" line="1464"/>
+ <source>This is the only video renderer for NVidia VDPAU decoding.</source>
+ <translation>This is the only video renderer for NVIDIA VDPAU decoding.</translation>
+ </message>
+@@ -19241,7 +19307,7 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ <translation>No grabber</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="4078"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="4079"/>
+ <source>Audio input</source>
+ <translation>Audio input</translation>
+ </message>
+@@ -19386,7 +19452,7 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ <translation>Card %1 (type %2) is set to start on channel %3, which does not exist.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythtv-setup/main.cpp" line="558"/>
++ <location filename="../programs/mythtv-setup/main.cpp" line="562"/>
+ <source>MythTV Setup</source>
+ <translation>MythTV Setup</translation>
+ </message>
+@@ -19694,86 +19760,86 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ </message>
+ <message>
+ <location filename="../libs/libmyth/recordingtypes.cpp" line="184"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2124"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2125"/>
+ <source>Record new episodes only</source>
+ <translation>Record new episodes only</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2095"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2096"/>
+ <source>Use any available input</source>
+ <translation>Use any available input</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2102"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2103"/>
+ <source>Prefer input %1</source>
+ <translation>Prefer input %1</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2121"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2122"/>
+ <source>Record new and repeat episodes</source>
+ <translation>Record new and repeat episodes</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2418"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2419"/>
+ <source>Record using the %1 profile</source>
+ <translation>Record using the %1 profile</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2425"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2426"/>
+ <source>LiveTV</source>
+ <translation>LiveTV</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2428"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2429"/>
+ <source>High Quality</source>
+ <translation>High Quality</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2431"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2432"/>
+ <source>Low Quality</source>
+ <translation>Low Quality</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2442"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2653"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2443"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2654"/>
+ <source>Include in the "%1" recording group</source>
+ <translation>Include in the "%1" recording group</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2444"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2445"/>
+ <source>Create a new recording group</source>
+ <translation>Create a new recording group</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2474"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2475"/>
+ <source>Store in the "%1" storage group</source>
+ <translation>Store in the "%1" storage group</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2495"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2496"/>
+ <source>Use "%1" playback group settings</source>
+ <translation>Use "%1" playback group settings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2528"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2529"/>
+ <source>Don't record if this would exceed the max episodes</source>
+ <translation>Don't record if this would exceed the max episodes</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2531"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2532"/>
+ <source>Delete oldest if this would exceed the max episodes</source>
+ <translation>Delete oldest if this would exceed the max episodes</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2630"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2631"/>
+ <source>New Recording group name: </source>
+ <translation>New Recording group name: </translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2789"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2803"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2817"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2831"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2790"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2804"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2818"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="2832"/>
+ <source>Run '%1'</source>
+ <translation>Run '%1'</translation>
+ </message>
+@@ -20477,110 +20543,110 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ <context>
+ <name>ScheduleCommon</name>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="289"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="296"/>
+ <source>The following programs will be recorded instead:</source>
+ <translation>The following programmes will be recorded instead:</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="328"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="335"/>
+ <source>Watch This Channel</source>
+ <translation>Watch This Channel</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="333"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="387"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="477"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="340"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="394"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="484"/>
+ <source>Record this showing</source>
+ <translation>Record this showing</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="335"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="488"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="342"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="495"/>
+ <source>Record all showings</source>
+ <translation>Record all showings</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="340"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="491"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="347"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="498"/>
+ <source>Record one showing</source>
+ <translation>Record one showing</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="343"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="490"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="350"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="497"/>
+ <source>Record one showing (this episode)</source>
+ <translation>Record one showing (this episode)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="347"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="497"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="354"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="504"/>
+ <source>Record all showings (this channel)</source>
+ <translation>Record all showings (this channel)</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="349"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="451"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="527"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="356"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="458"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="534"/>
+ <source>Edit recording rule</source>
+ <translation>Edit recording rule</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="358"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="503"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="365"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="510"/>
+ <source>Stop this recording</source>
+ <translation>Stop this recording</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="360"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="507"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="367"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="514"/>
+ <source>Modify recording options</source>
+ <translation>Modify recording options</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="370"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="517"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="377"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="524"/>
+ <source>Restart this recording</source>
+ <translation>Restart this recording</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="393"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="519"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="400"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="526"/>
+ <source>Forget previous recording</source>
+ <translation>Forget previous recording</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="410"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="521"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="417"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="528"/>
+ <source>Don't record this showing</source>
+ <translation>Don't record this showing</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="432"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="523"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="439"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="530"/>
+ <source>Never record this episode</source>
+ <translation>Never record this episode</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="440"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="528"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="447"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="535"/>
+ <source>Edit override rule</source>
+ <translation>Edit override rule</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="442"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="531"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="449"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="538"/>
+ <source>Delete override rule</source>
+ <translation>Delete override rule</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="449"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="508"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="456"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="515"/>
+ <source>Add override rule</source>
+ <translation>Add override rule</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="453"/>
+- <location filename="../programs/mythfrontend/schedulecommon.cpp" line="530"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="460"/>
++ <location filename="../programs/mythfrontend/schedulecommon.cpp" line="537"/>
+ <source>Delete recording rule</source>
+ <translation>Delete recording rule</translation>
+ </message>
+@@ -20617,75 +20683,75 @@ Most DVB-S transponders transmit at 27.5 million symbols per second.</translatio
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="576"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="818"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="819"/>
+ <source>Main Options</source>
+ <translation>Main Options</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="578"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="820"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="821"/>
+ <source>Schedule Options</source>
+ <translation>Schedule Options</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="580"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="822"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="823"/>
+ <source>Filter Options</source>
+ <translation>Filter Options</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="582"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="824"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="825"/>
+ <source>Storage Options</source>
+ <translation>Storage Options</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="584"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="826"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="827"/>
+ <source>Post Processing</source>
+ <translation>Post Processing</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="586"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="829"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="830"/>
+ <source>Metadata Options</source>
+ <translation>Metadata Options</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="588"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="834"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="835"/>
+ <source>Use Template</source>
+ <translation>Use Template</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="590"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="831"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="832"/>
+ <source>Schedule Info</source>
+ <translation>Schedule Info</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="592"/>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="833"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="834"/>
+ <source>Preview Changes</source>
+ <translation>Preview Changes</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="805"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="806"/>
+ <source>Options</source>
+ <translation>Options</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="848"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="849"/>
+ <source>No templates available</source>
+ <translation>No templates available</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="852"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="853"/>
+ <source>Template Options</source>
+ <translation>Template Options</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="864"/>
++ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="865"/>
+ <source>Default</source>
+ <translation>Default</translation>
+ </message>
+@@ -20863,37 +20929,37 @@ is located in %2</translation>
+ <context>
+ <name>StandardSettingDialog</name>
+ <message>
+- <location filename="../libs/libmyth/standardsettings.cpp" line="983"/>
++ <location filename="../libs/libmyth/standardsettings.cpp" line="1003"/>
+ <source>Exit ?</source>
+ <translation>Exit?</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/standardsettings.cpp" line="997"/>
++ <location filename="../libs/libmyth/standardsettings.cpp" line="1017"/>
+ <source>Save then Exit</source>
+ <translation>Save then Exit</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/standardsettings.cpp" line="998"/>
++ <location filename="../libs/libmyth/standardsettings.cpp" line="1018"/>
+ <source>Exit without saving changes</source>
+ <translation>Exit without saving changes</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/standardsettings.cpp" line="999"/>
++ <location filename="../libs/libmyth/standardsettings.cpp" line="1019"/>
+ <source>Cancel</source>
+ <translation>Cancel</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/standardsettings.cpp" line="1073"/>
++ <location filename="../libs/libmyth/standardsettings.cpp" line="1093"/>
+ <source>Edit</source>
+ <translation>Edit</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/standardsettings.cpp" line="1075"/>
++ <location filename="../libs/libmyth/standardsettings.cpp" line="1095"/>
+ <source>Delete</source>
+ <translation>Delete</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmyth/standardsettings.cpp" line="1111"/>
++ <location filename="../libs/libmyth/standardsettings.cpp" line="1131"/>
+ <source>Do you want to delete the '%1' entry?</source>
+ <translation>Do you want to delete the '%1' entry?</translation>
+ </message>
+@@ -30506,105 +30572,105 @@ dd MMM yyyy</translation>
+ <context>
+ <name>VideoModeSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2100"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2160"/>
+ <source>Separate video modes for GUI and TV playback</source>
+ <translation>Separate video modes for GUI and TV playback</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2105"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2165"/>
+ <source>Switch X Window video modes for TV. Requires "xrandr" support.</source>
+ <translation>Switch X Window video modes for TV. Requires "xrandr" support.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2116"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2176"/>
+ <source>In X</source>
+ <comment>Video mode width</comment>
+ <translation>In X</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2120"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2180"/>
+ <source>Horizontal resolution of video which needs a special output resolution.</source>
+ <translation>Horizontal resolution of video which needs a special output resolution.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2132"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2192"/>
+ <source>In Y</source>
+ <comment>Video mode height</comment>
+ <translation>In Y</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2136"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2196"/>
+ <source>Vertical resolution of video which needs a special output resolution.</source>
+ <translation>Vertical resolution of video which needs a special output resolution.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2146"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2206"/>
+ <source>GUI</source>
+ <translation>GUI</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2148"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2208"/>
+ <source>Resolution of screen when not watching a video.</source>
+ <translation>Resolution of screen when not watching a video.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2178"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2238"/>
+ <source>Default screen resolution when watching a video.</source>
+ <translation>Default screen resolution when watching a video.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2180"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2240"/>
+ <source>Screen resolution when watching a video at a specific resolution.</source>
+ <translation>Screen resolution when watching a video at a specific resolution.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2186"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2246"/>
+ <source>Video output</source>
+ <translation>Video output</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2187"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2247"/>
+ <source>Output</source>
+ <translation>Output</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2261"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2321"/>
+ <source>Default refresh rate when watching a video. Leave at "Auto" to automatically use the best available</source>
+ <translation>Default refresh rate when watching a video. Leave at "Auto" to automatically use the best available</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2265"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2325"/>
+ <source>Refresh rate when watching a video at a specific resolution. Leave at "Auto" to automatically use the best available</source>
+ <translation>Refresh rate when watching a video at a specific resolution. Leave at "Auto" to automatically use the best available</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2274"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2334"/>
+ <source>Rate</source>
+ <translation>Rate</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2285"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2345"/>
+ <source>Aspect ratio when watching a video. Leave at "%1" to use ratio reported by the monitor. Set to 16:9 or 4:3 to force a specific aspect ratio.</source>
+ <translation>Aspect ratio when watching a video. Leave at "%1" to use ratio reported by the monitor. Set to 16:9 or 4:3 to force a specific aspect ratio.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2293"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2353"/>
+ <source>Aspect ratio when watching a video at a specific resolution. Leave at "%1" to use ratio reported by the monitor. Set to 16:9 or 4:3 to force a specific aspect ratio.</source>
+ <translation>Aspect ratio when watching a video at a specific resolution. Leave at "%1" to use ratio reported by the monitor. Set to 16:9 or 4:3 to force a specific aspect ratio.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2305"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2365"/>
+ <source>Aspect</source>
+ <translation>Aspect</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2309"/>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2311"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2369"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2371"/>
+ <source>Default</source>
+ <translation>Default</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="2338"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2398"/>
+ <source>Overrides for specific video sizes</source>
+ <translation>Overrides for specific video sizes</translation>
+ </message>
+@@ -30612,7 +30678,7 @@ dd MMM yyyy</translation>
+ <context>
+ <name>VideoOutWindow</name>
+ <message>
+- <location filename="../libs/libmythtv/videooutwindow.cpp" line="968"/>
++ <location filename="../libs/libmythtv/videooutwindow.cpp" line="963"/>
+ <source>Zoom %1x%2 @ (%3,%4)</source>
+ <translation>Zoom %1x%2 @ (%3,%4)</translation>
+ </message>
+@@ -30719,17 +30785,17 @@ If they no longer exist please remove them</translation>
+ <context>
+ <name>VideoSourceEditor</name>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3819"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3820"/>
+ <source>Are you sure you want to delete ALL video sources?</source>
+ <translation>Are you sure you want to delete all video sources?</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3839"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3840"/>
+ <source>New video source</source>
+ <translation>New video source</translation>
+ </message>
+ <message>
+- <location filename="../libs/libmythtv/videosource.cpp" line="3796"/>
++ <location filename="../libs/libmythtv/videosource.cpp" line="3797"/>
+ <source>Video sources</source>
+ <translation>Video Source</translation>
+ </message>
+@@ -30855,52 +30921,52 @@ If they no longer exist please remove them</translation>
+ <context>
+ <name>WatchListSettings</name>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3163"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3223"/>
+ <source>Include the 'Watch List' group</source>
+ <translation>Include the 'Watch List' group</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3167"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3227"/>
+ <source>The 'Watch List' is an abbreviated list of recordings sorted to highlight series and shows that need attention in order to keep up to date.</source>
+ <translation>The 'Watch List' is an abbreviated list of recordings sorted to highlight series and shows that need attention in order to keep up to date.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3179"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3239"/>
+ <source>Start from the Watch List view</source>
+ <translation>Start from the Watch List view</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3183"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3243"/>
+ <source>If enabled, the 'Watch List' will be the initial view each time you enter the Watch Recordings screen</source>
+ <translation>If enabled, the 'Watch List' will be the initial view each time you enter the Watch Recordings screen</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3193"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3253"/>
+ <source>Exclude recordings not set for Auto-Expire</source>
+ <translation>Exclude recordings not set for Auto-Expire</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3198"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3258"/>
+ <source>Set this if you turn off Auto-Expire only for recordings that you've seen and intend to keep. This option will exclude these recordings from the 'Watch List'.</source>
+ <translation>Set this if you turn off Auto-Expire only for recordings that you've seen and intend to keep. This option will exclude these recordings from the 'Watch List'.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3211"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3271"/>
+ <source>Maximum days counted in the score</source>
+ <translation>Maximum days counted in the score</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3215"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3275"/>
+ <source>The 'Watch List' scores are based on 1 point equals one day since recording. This option limits the maximum score due to age and affects other weighting factors.</source>
+ <translation>The 'Watch List' scores are based on 1 point equals one day since recording. This option limits the maximum score due to age and affects other weighting factors.</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3227"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3287"/>
+ <source>Days to exclude weekly episodes after delete</source>
+ <translation>Days to exclude weekly episodes after delete</translation>
+ </message>
+ <message>
+- <location filename="../programs/mythfrontend/globalsettings.cpp" line="3232"/>
++ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3292"/>
+ <source>When an episode is deleted or marked as watched, other episodes of the series are excluded from the 'Watch List' for this interval of time. Daily shows also have a smaller interval based on this setting.</source>
+ <translation>When an episode is deleted or marked as watched, other episodes of the series are excluded from the 'Watch List' for this interval of time. Daily shows also have a smaller interval based on this setting.</translation>
+ </message>
+diff --git a/mythtv/i18n/mythfrontend_it.qm b/mythtv/i18n/mythfrontend_it.qm
+index e167291a9b..de9bd1f4da 100644
+Binary files a/mythtv/i18n/mythfrontend_it.qm and b/mythtv/i18n/mythfrontend_it.qm differ
+diff --git a/mythtv/i18n/mythfrontend_it.ts b/mythtv/i18n/mythfrontend_it.ts
+index d9f3b8089f..bc325db171 100644
+--- a/mythtv/i18n/mythfrontend_it.ts
++++ b/mythtv/i18n/mythfrontend_it.ts
+@@ -8,7 +8,7 @@
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1522"/>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="388"/>
+ <source>Education</source>
+- <translation>Educazione</translation>
++ <translation>Istruzione</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1524"/>
+@@ -139,7 +139,7 @@
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1564"/>
+ <source>Commentary</source>
+- <translation>Commento</translation>
++ <translation>Telecronaca</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1566"/>
+@@ -203,7 +203,7 @@
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1586"/>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="466"/>
+ <source>Fantasy</source>
+- <translation>Fantasy</translation>
++ <translation>Fantasia</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1588"/>
+@@ -237,13 +237,13 @@
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1598"/>
+ <source>Foreign</source>
+- <translation>Straniero</translation>
++ <translation>Estero</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1600"/>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="476"/>
+ <source>Fundraiser</source>
+- <translation>Raccolta di fondi</translation>
++ <translation>Raccolta fondi</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1602"/>
+@@ -339,7 +339,7 @@
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1636"/>
+ <source>Live</source>
+- <translation>Live</translation>
++ <translation>In diretta</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1638"/>
+@@ -355,7 +355,7 @@
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1642"/>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="514"/>
+ <source>Medical</source>
+- <translation>Medico</translation>
++ <translation>Medicina</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1644"/>
+@@ -446,24 +446,24 @@
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1676"/>
+ <source>Repair</source>
+- <translation>Riparazioni</translation>
++ <translation>Ripara</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1678"/>
+ <source>Repeat</source>
+- <translation>Ripetizione</translation>
++ <translation>Ripeti</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1680"/>
+ <source>Review</source>
+- <translation>Recensione</translation>
++ <translation>Recencisci</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1682"/>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="550"/>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="330"/>
+ <source>Romance</source>
+- <translation>Romanticismo</translation>
++ <translation>Romantico</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cc608decoder.cpp" line="1684"/>
+@@ -554,12 +554,12 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="384"/>
+ <source>News/Business</source>
+- <translation>Notizie/ Commercio</translation>
++ <translation>Notizie/ Economia</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="386"/>
+ <source>Family/Children</source>
+- <translation>Famiglia/ bimbi</translation>
++ <translation>Famiglia/ Bimbi</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="390"/>
+@@ -574,7 +574,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="400"/>
+ <source>Adults only</source>
+- <translation>Solo adulti</translation>
++ <translation>Per adulti</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="402"/>
+@@ -610,7 +610,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="424"/>
+ <source>Boat</source>
+- <translation>Nautico</translation>
++ <translation>Nautica</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="426"/>
+@@ -625,7 +625,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="430"/>
+ <source>Bus./financial</source>
+- <translation>Comm./ finanziario</translation>
++ <translation>Econ./ finanza</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="432"/>
+@@ -650,7 +650,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="440"/>
+ <source>Collectibles</source>
+- <translation>Raccolte</translation>
++ <translation>Collezione</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="444"/>
+@@ -696,7 +696,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="478"/>
+ <source>Game show</source>
+- <translation>Show televisivo</translation>
++ <translation>Gioco televisivo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="482"/>
+@@ -711,7 +711,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="492"/>
+ <source>Holiday</source>
+- <translation>Vacanza</translation>
++ <translation>Vacanze</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="494"/>
+@@ -736,7 +736,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="504"/>
+ <source>House/garden</source>
+- <translation>Casa/ giardinaggio</translation>
++ <translation>Casa/ giardino</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="506"/>
+@@ -771,7 +771,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="526"/>
+ <source>Music talk</source>
+- <translation>Discussione di musica</translation>
++ <translation>Parlar di musica</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="528"/>
+@@ -861,12 +861,12 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="578"/>
+ <source>Sports non-event</source>
+- <translation>Sport no-eventi</translation>
++ <translation>Sport minori</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="580"/>
+ <source>Sports talk</source>
+- <translation>Parlare di sport</translation>
++ <translation>Parlar di sport</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="584"/>
+@@ -891,7 +891,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="600"/>
+ <source>Watersports</source>
+- <translation>Giochi d'acqua</translation>
++ <translation>Sport acquatici</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="606"/>
+@@ -911,7 +911,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="612"/>
+ <source>Anime</source>
+- <translation>Animazione</translation>
++ <translation>Anime</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="614"/>
+@@ -992,7 +992,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="650"/>
+ <source>Gay/lesbian</source>
+- <translation>Gay/ lesbian</translation>
++ <translation>Gay/ lesbo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="652"/>
+@@ -1002,7 +1002,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="654"/>
+ <source>Home improvement</source>
+- <translation>Ristrutturazione casa</translation>
++ <translation>Ristrutturare casa</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="656"/>
+@@ -1067,7 +1067,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="682"/>
+ <source>Skateboarding</source>
+- <translation>Skate</translation>
++ <translation>Skateboard</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dishdescriptors.cpp" line="684"/>
+@@ -1144,7 +1144,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="326"/>
+ <source>Soap/melodrama/folkloric</source>
+- <translation>Soap/ melodramma/ folkloristico</translation>
++ <translation>Soap/ melodramma/ folclore</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="333"/>
+@@ -1160,7 +1160,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="341"/>
+ <source>News/weather report</source>
+- <translation>Notiziario/ previsioni tempo</translation>
++ <translation>Notiziario/ previsioni meteo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="343"/>
+@@ -1195,7 +1195,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="363"/>
+ <source>Sports Magazines</source>
+- <translation>Rivista Sport</translation>
++ <translation>Riviste sportive</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="365"/>
+@@ -1220,7 +1220,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="374"/>
+ <source>Motor Sport</source>
+- <translation>Motori</translation>
++ <translation>Sport motoristici</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="376"/>
+@@ -1295,12 +1295,12 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="407"/>
+ <source>Musical/Opera</source>
+- <translation>Musical/ opera</translation>
++ <translation>Musicale/ Opera</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="412"/>
+ <source>Arts/Culture</source>
+- <translation>Arte/ cultura</translation>
++ <translation>Arte/ Cultura</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="414"/>
+@@ -1320,7 +1320,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="420"/>
+ <source>Popular Culture/Traditional Arts</source>
+- <translation>Cultura popolare/ arte tradizionale</translation>
++ <translation>Cultura popolare/ Artigianato</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="422"/>
+@@ -1330,12 +1330,12 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="424"/>
+ <source>Film/Cinema</source>
+- <translation>Film/ cinema</translation>
++ <translation>Film/ Cinema</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="426"/>
+ <source>Experimental Film/Video</source>
+- <translation>Video/ film sperimentale</translation>
++ <translation>Video/ Film sperimentale</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="428"/>
+@@ -1350,22 +1350,22 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="432"/>
+ <source>Arts/Culture Magazines</source>
+- <translation>Arte/ rivista cultura</translation>
++ <translation>Arte/ Riviste culturali</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="436"/>
+ <source>Social/Policical/Economics</source>
+- <translation>Sociale/ politico/ economico</translation>
++ <translation>Sociale/ Politico/ Economico</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="438"/>
+ <source>Magazines/Reports/Documentary</source>
+- <translation>Riviste/ reportage/ documentari</translation>
++ <translation>Riviste/ Reportage/ Documentari</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="440"/>
+ <source>Economics/Social Advisory</source>
+- <translation>Consigli economico/ sociale</translation>
++ <translation>Consigli economici/ Sociali</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="442"/>
+@@ -1375,32 +1375,32 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="445"/>
+ <source>Education/Science/Factual</source>
+- <translation>Istruzione/ scienza/ fatti Reali</translation>
++ <translation>Istruzione/ Scienza/ Fatti reali</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="447"/>
+ <source>Nature/animals/Environment</source>
+- <translation>Natura/ animali/ ambiente</translation>
++ <translation>Natura/ Animali/ Ambiente</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="449"/>
+ <source>Technology/Natural Sciences</source>
+- <translation>Tecnologia/ scienze naturali</translation>
++ <translation>Tecnologia/ Scienze naturali</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="451"/>
+ <source>Medicine/Physiology/Psychology</source>
+- <translation>Medicina/ fisiologia/ psicologia</translation>
++ <translation>Medicina/ Fisiologia/ Psicologia</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="453"/>
+ <source>Foreign Countries/Expeditions</source>
+- <translation>Città Straniere/ spedizioni</translation>
++ <translation>Paesi esteri/ Spedizioni</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="455"/>
+ <source>Social/Spiritual Sciences</source>
+- <translation>Scienze sociali/ spirituali</translation>
++ <translation>Scienze sociali/ Spirituali</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="457"/>
+@@ -1415,12 +1415,12 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="462"/>
+ <source>Leisure/Hobbies</source>
+- <translation>Tempo Libero/ hobbie</translation>
++ <translation>Tempo Libero/ Hobby</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="464"/>
+ <source>Tourism/Travel</source>
+- <translation>Turismo/ viaggi</translation>
++ <translation>Viaggi/ Turismo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="466"/>
+@@ -1440,7 +1440,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="473"/>
+ <source>Advertizement/Shopping</source>
+- <translation>Annunci pubblicitari/ shopping</translation>
++ <translation>Pubblicità/ Shopping</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="475"/>
+@@ -1450,12 +1450,12 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="478"/>
+ <source>Original Language</source>
+- <translation>Lingua originale</translation>
++ <translation>Lingua d'origine</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="480"/>
+ <source>Black & White</source>
+- <translation>Bianco-nero</translation>
++ <translation>Bianco-e Nero</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="482"/>
+@@ -1465,7 +1465,7 @@
+ <message>
+ <location filename="../libs/libmythtv/mpeg/dvbdescriptors.cpp" line="484"/>
+ <source>Live Broadcast</source>
+- <translation>Programma radiofonico dal vivo</translation>
++ <translation>Trasmesso in diretta</translation>
+ </message>
+ </context>
+ <context>
+@@ -1483,7 +1483,7 @@
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="133"/>
+ <source>If this channel uses a format other than TV Format in the General Backend Setup screen, set it here.</source>
+- <translation>Se questo canale utilizza un formato TV diverso da quello nella schermata impostazioni generali Backend, impostarlo qui.</translation>
++ <translation>Se questo canale utilizza un formato TV diverso da quello definito nelle impostazioni generali del Backend, impostalo qui.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="173"/>
+@@ -1493,7 +1493,7 @@
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="176"/>
+ <source>Offset (in minutes) to apply to the program guide data during import. This can be used when the listings for a particular channel are in a different time zone. (Works for DataDirect listings only.)</source>
+- <translation>Scostamento (in minuti) da applicare durante importazione dei dati guida programma. Questo può essere usato quando l'elenco per un particolare canale è in un differente fuso orario. (Lavora solo per elenchi DataDirect.)</translation>
++ <translation>Scostamento (in minuti) da applicare durante l'importazione della guida programmi. Questo può essere usato quando la guida di un particolare canale ha un fuso orario differente. (funziona solo per elenchi DataDirect.)</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="191"/>
+@@ -1512,7 +1512,7 @@
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="209"/>
+ <source>Image file to use as the icon for this channel on various MythTV displays.</source>
+- <translation>Immagine file da usare come icona per questo canale su differenti schermi MythTV.</translation>
++ <translation>Immagine da usare come icona per questo canale su differenti schermi MythTV.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="221"/>
+@@ -1522,7 +1522,7 @@
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="224"/>
+ <source>Filters to be used when recording from this channel. Not used with hardware encoding cards.</source>
+- <translation>I filtri sono usati quando si registra da questo canale. Non usato con schede codifca hardware.</translation>
++ <translation>I filtri sono usati quando si registra da questo canale. Non usato con schede con codifca hardware.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="238"/>
+@@ -1532,7 +1532,7 @@
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="241"/>
+ <source>Filters to be used when recordings from this channel are viewed. Start with a plus to append to the global playback filters.</source>
+- <translation>I filtri sono usati quando le registrazioni da questo canale sono guardate. Iniziare con un'aggiunta extra ai filtri di riproduzione globali.</translation>
++ <translation>Filtri utilizzati per la riproduzione delle registrazioni di questo canale . Inizia aggiungendo un plus ai filtri di riproduzione globali.</translation>
+ </message>
+ <message>
+ <source>ID used by listing services to get an exact correspondance between a channel in your line-up and a channel in their database. Normally this is set automatically when 'mythfilldatabase' is run.</source>
+@@ -1541,12 +1541,12 @@
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="193"/>
+ <source>Number of priority points to be added to any recording on this channel during scheduling. Use a positive number as the priority if you want this to be a preferred channel, a negative one to depreciate this channel.</source>
+- <translation>Numero di punti prioritari da essere aggiunti ad ogni registrazione su questo canale durante la programmazione. Usare un numero positivo sulla priorità se si desidera farlo essere un canale preferito, un negativo per deprecare questo canale.</translation>
++ <translation>Numero di punti da aggiungere alla priorità delle registrazioni di questo canale durante la programmazione. Usa un numero positivo se desideri che venga considerato come canale preferito, negativo per depriorizzare questo canale.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="256"/>
+ <source>ID used by listing services to get an exact correspondence between a channel in your line-up and a channel in their database. Normally this is set automatically when 'mythfilldatabase' is run.</source>
+- <translation>ID usato da elenco dei servizi per ottenere una corrispondenza esatta tra un canale nella scaletta e un canale nel database. Normalmente questo è impostato automaticamente quando 'mythfilldatabase' è eseguito.</translation>
++ <translation>ID usato dall'elenco servizi per trovare una corrispondenza esatta tra un canale nel palinsesto con uno nel database. Normalmente è impostato automaticamente quando viene eseguito 'mythfilldatabase'.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="312"/>
+@@ -1556,7 +1556,7 @@
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="314"/>
+ <source>Service ID (Program Number) of desired channel within the transport stream. If there is only one channel, then setting this to anything will still find it.</source>
+- <translation>ID Servizio (Numero Programma) del caacale desiderato senza il flusso di trasporto. Se c'è un solo canale, quindi impostandolo a nulla sarà ancora trovato.</translation>
++ <translation>ServiceID (Numero Programma) del canale desiderato senza il flusso di trasporto. Se c'è un solo canale, quindi impostandolo a nulla sarà ancora trovato.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="345"/>
+@@ -1566,12 +1566,12 @@
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="348"/>
+ <source>Changes the method of commercial detection used for recordings on this channel or skips detection by marking the channel as Commercial Free.</source>
+- <translation>Cambia il metodo di rilevazione pubblicità usato per le registrazioni su questo canale o salta la rilevazione marcando il canale come "senza pubblicità".</translation>
++ <translation>Cambia il metodo di rilevamento pubblicità utilizzato per le registrazioni su questo canale o salta il rilevamento e definisce il canale come "senza pubblicità".</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="370"/>
+ <source>Visible</source>
+- <translation>VIsibile</translation>
++ <translation>Visibile</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/channelsettings.cpp" line="372"/>
+@@ -2527,7 +2527,7 @@ Controllare se il video esiste</translation>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2409"/>
+ <source>Toggles mouse cursor visibility for touchscreens. By default MythTV will auto-hide the cursor if the mouse doesn't move for a period, this setting disables the cursor entirely.</source>
+- <translation>Attivare/Disattiva il cursore mouse per touchscreen. MythTv di regola nasconde il mouse se il mouse non viene mosso per un certo periodo, questa impostazione disabilita completamente il cursore.</translation>
++ <translation>Attiva/Disattiva il cursore mouse per touchscreen. MythTv di regola nasconde il mouse se il mouse non viene mosso per un certo periodo, questa impostazione disabilita completamente il cursore.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2423"/>
+@@ -5442,7 +5442,7 @@ Delete the current cut or preserved region</extracomment>
+ <message>
+ <location filename="../libs/libmythtv/diseqcsettings.cpp" line="863"/>
+ <source>This defines the offset the frequency coming from the LNB will be in high setting. For bandstacked LNBs this is the horizontal/left polarization band.</source>
+- <translation>Questo definisce la frequenza dell'offset proveniente dal LNB che deve essere in impostazione bassa. Per il bandstacked LNBs questa è la polarizzazione della banda orizzontale/sinistra.</translation>
++ <translation>Definisce la frequenza dell'offset proveniente dal LNB che deve essere in impostazione bassa. Per il bandstacked LNBs questa è la polarizzazione della banda orizzontale/sinistra.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/diseqcsettings.cpp" line="923"/>
+@@ -6557,8 +6557,8 @@ Errore %1</translation>
+ Scan storage group using menu,
+ or insert/mount local media.
+ </source>
+- <translation>Nessun immagini trovate.
+-Scansione gruppo di archiviazione usando menù,
++ <translation>Nessuna immagine trovata.
++Ricerca nel gruppo di archiviazione usando menù,
+ o inserisci/monta supporto locale.</translation>
+ </message>
+ <message>
+@@ -7168,12 +7168,12 @@ Attendere...</translation>
+ <message>
+ <location filename="../programs/mythfrontend/setupwizard_general.cpp" line="64"/>
+ <source>Save these changes and move on to the next configuration step.</source>
+- <translation>Salvare i cambiamenti e prosegui nel prossimo passo di configurazione.</translation>
++ <translation>Salva i cambiamenti e prosegui nel passo di configurazione successivo.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/setupwizard_general.cpp" line="66"/>
+ <source>Exit this wizard, save no changes.</source>
+- <translation>Uscire dalla procedura guidata, non salvare i cambiamenti.</translation>
++ <translation>Esci dalla procedura guidata, non salvare i cambiamenti.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/setupwizard_general.cpp" line="133"/>
+@@ -7281,7 +7281,7 @@ Attendere...</translation>
+ <source>You don't have any channels defined in the database.
+ The program guide will have nothing to show you.</source>
+ <translation>Non esistono canali definiti nel database
+- La guida TV non contiene alcun dato.</translation>
++La guida TV non contiene alcun dato.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/guidegrid.cpp" line="446"/>
+@@ -7891,7 +7891,7 @@ Attendere...</translation>
+ <location filename="../html/htmlstrings.h" line="57"/>
+ <location filename="../html/htmlstrings.h" line="183"/>
+ <source>Program Guide</source>
+- <translation>Guida programmi</translation>
++ <translation>Guida TV</translation>
+ </message>
+ <message>
+ <location filename="../html/htmlstrings.h" line="58"/>
+@@ -7933,7 +7933,7 @@ Attendere...</translation>
+ <message>
+ <location filename="../html/htmlstrings.h" line="65"/>
+ <source>Setup Wizard</source>
+- <translation>Impostazione guidata</translation>
++ <translation>Impostaz. guidata</translation>
+ </message>
+ <message>
+ <location filename="../html/htmlstrings.h" line="66"/>
+@@ -7944,7 +7944,7 @@ Attendere...</translation>
+ <message>
+ <location filename="../html/htmlstrings.h" line="67"/>
+ <source>System Events</source>
+- <translation>Eventi di sistema</translation>
++ <translation>Eventi sistema</translation>
+ </message>
+ <message>
+ <location filename="../html/htmlstrings.h" line="68"/>
+@@ -10094,7 +10094,7 @@ Attendere...</translation>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1960"/>
+ <source>Setup PIN code</source>
+- <translation>Impostazione codice PIN</translation>
++ <translation>Imposta codice PIN</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1962"/>
+@@ -10373,7 +10373,7 @@ Attendere...</translation>
+ <message>
+ <location filename="../programs/mythfrontend/videometadatasettings.cpp" line="96"/>
+ <source>If set, this will enable a button called "Watch With Trailers" which will play a user-specified number of trailers before the movie.</source>
+- <translation>Se impostato, questo abilita un pulsante chiamato "guardare con trailer" che farà riprodurre un numero di trailer specificati dall'utente prima del film.</translation>
++ <translation>Se impostato, abilita un pulsante chiamato "guarda con trailer" che permetterà di riprodurre prima del film un numero di trailer specificati dall'utente.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videometadatasettings.cpp" line="100"/>
+@@ -10383,7 +10383,7 @@ Attendere...</translation>
+ <message>
+ <location filename="../programs/mythfrontend/videometadatasettings.cpp" line="102"/>
+ <source>If set, all files below the MythVideo directory will be displayed unless their extension is explicitly set to be ignored.</source>
+- <translation>Se impostato, tutti i file contenuti nella directory MythVideo saranno visualizzati a meno che la loro estensione è impostata esplicitamente per essere ignorata.</translation>
++ <translation>Se impostato, tutti i file contenuti nella directory MythVideo saranno visualizzati a meno che la loro estensione sia impostata per essere ignorata.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videometadatasettings.cpp" line="106"/>
+@@ -10763,7 +10763,7 @@ database. Disabilitandolo si può notevolmente velocizzare il caricamento dell&a
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="621"/>
+ <source>Switch to the next favorite channel</source>
+- <translation>Vai al prossimo canale preferito</translation>
++ <translation>Vai al canale preferito successivo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="623"/>
+@@ -11451,7 +11451,7 @@ database. Disabilitandolo si può notevolmente velocizzare il caricamento dell&a
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="908"/>
+ <source>Jump to the next cut point</source>
+- <translation>Salta al prossimo punto di taglio</translation>
++ <translation>Salta al punto di taglio successivo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="910"/>
+@@ -11826,7 +11826,7 @@ database. Disabilitandolo si può notevolmente velocizzare il caricamento dell&a
+ <message>
+ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1370"/>
+ <source>Move selection to next link</source>
+- <translation>Sposta selezione al prossimo collegamento</translation>
++ <translation>Sposta selezione al collegamento successivo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythui/mythmainwindow.cpp" line="1372"/>
+@@ -11876,7 +11876,7 @@ database. Disabilitandolo si può notevolmente velocizzare il caricamento dell&a
+ <message>
+ <location filename="../programs/mythfrontend/main.cpp" line="1368"/>
+ <source>Program Guide</source>
+- <translation>Guida programmi</translation>
++ <translation>Guida TV</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/main.cpp" line="1370"/>
+@@ -11928,7 +11928,7 @@ database. Disabilitandolo si può notevolmente velocizzare il caricamento dell&a
+ <message>
+ <location filename="../programs/mythfrontend/main.cpp" line="1386"/>
+ <source>Previously Recorded</source>
+- <translation>Già registrato</translation>
++ <translation>Già registrati</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/main.cpp" line="1389"/>
+@@ -12581,7 +12581,7 @@ database. Disabilitandolo si può notevolmente velocizzare il caricamento dell&a
+ <message>
+ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="377"/>
+ <source>System Event Command Editor</source>
+- <translation>Editor comandi degli eventi di sistema</translation>
++ <translation>Editor comandi degli eventi sistema</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/mythsystemevent.cpp" line="383"/>
+@@ -13134,7 +13134,7 @@ Branca: %2
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1601"/>
+ <source>If enabled, interactive TV applications (MHEG) will be activated. This is used for teletext and logos for radio and channels that are currently off-air.</source>
+- <translation>Se abilitato, le applicazioni TV interattive (MHEG) sarrano attivate. Questo è usato per teletext e loghi per radio e canali che sono attualmente fuori-onda.</translation>
++ <translation>Se abilitato, le applicazioni TV interattive (MHEG) sarrano attivate. Esso è usato per teletext e loghi per radio e canali che sono attualmente fuori-onda.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1611"/>
+@@ -13144,7 +13144,7 @@ Branca: %2
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1613"/>
+ <source>If enabled, interactive TV applications (MHEG) will be able to access interactive content over the Internet. This is used for BBC iPlayer.</source>
+- <translation>Se abilitato, le applicazioni TV interattive (MHEG) sarrano abilitate all'accesso dei contenuti interrattivi su internet. Questo è usato per BBC iPlayer.</translation>
++ <translation>Se abilitato, le applicazioni TV interattive (MHEG) sarrano abilitate all'accesso dei contenuti interrattivi su internet. Esso è usato per BBC iPlayer.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1624"/>
+@@ -13159,7 +13159,7 @@ Branca: %2
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1639"/>
+ <source>Browse all channels</source>
+- <translation>Navigare in tutti canali</translation>
++ <translation>Naviga in tutti canali</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="1643"/>
+@@ -13383,7 +13383,7 @@ Branca: %2
+ <message>
+ <location filename="../libs/libmythtv/playgroup.cpp" line="236"/>
+ <source>Playback Groups</source>
+- <translation>Gruppi Di riproduzione</translation>
++ <translation>Gruppi riproduzione</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/playgroup.cpp" line="283"/>
+@@ -13673,7 +13673,7 @@ Branca: %2
+ <message>
+ <location filename="../programs/mythfrontend/playbackbox.cpp" line="409"/>
+ <source>Watch List</source>
+- <translation>Già visti</translation>
++ <translation>In evidenza</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/playbackbox.cpp" line="1449"/>
+@@ -14736,22 +14736,22 @@ non può essere vuoto.</translation>
+ <message>
+ <location filename="../programs/mythfrontend/videoplayersettings.cpp" line="87"/>
+ <source>This is the command used for any file whose extension is not specifically defined. You may also enter the name of one of the playback plugins such as 'Internal'.</source>
+- <translation>Questo è il comando usato per qualsiasi file la cui estensione non è definita specificatamente. In alternativa inserire il nome di uno dei plugin di riproduzione come "interno".</translation>
++ <translation>E' il comando usato per i file con estensione non è espressamente definita. E' posssibile inserire il nome di uno dei plugin di riproduzione come ad es. "interno".</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoplayersettings.cpp" line="92"/>
+ <source>This can be any command to launch a DVD player. Internal is the default. For other players, %d will be substituted for the DVD device (e.g. /dev/dvd).</source>
+- <translation>Questo può essere qualsiasi comando per lanciare un riproduttore DVD. "Interno" è il predefinito. Per altri riproduttori, %d sarà sostituito dal dispositivo DVD (es. /dev/dvd).</translation>
++ <translation>Può essere qualsiasi comando per lanciare un riproduttore DVD. "Interno" è quello predefinito. Per altri riproduttori, %d sarà sostituito dal dispositivo DVD (es. /dev/dvd).</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoplayersettings.cpp" line="96"/>
+ <source>This device must exist, and the user playing the DVD needs to have read permission on the device. 'default' will let the MediaMonitor choose a device.</source>
+- <translation>Questo dispositivo deve esistere e l'utente per riprodurre il DVD ha bisogno del permesso in lettura sul dispositivo. 'default' farà si che il MediaMonitor scelga un dispositivo.</translation>
++ <translation>Questo dispositivo deve esserci e per riprodurre il DVD l'utente ha bisogno del permesso in lettura sul dispositivo. 'default' fa si che il MediaMonitor scelga un dispositivo.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoplayersettings.cpp" line="101"/>
+ <source>This path is the location your operating system mounts Blu-ray discs.</source>
+- <translation>Questo percorso è il posto dove il sistema operativo monta dischi Blu-ray.</translation>
++ <translation>Questo percorso è dove il sistema operativo monterà i dischi Blu-ray.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoplayersettings.cpp" line="104"/>
+@@ -14776,7 +14776,7 @@ non può essere vuoto.</translation>
+ <message>
+ <location filename="../programs/mythfrontend/videoplayersettings.cpp" line="170"/>
+ <source>No Region</source>
+- <translation>No Regione</translation>
++ <translation>Nessuna Regione</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoplayersettings.cpp" line="174"/>
+@@ -14888,7 +14888,7 @@ non può essere vuoto.</translation>
+ <location filename="../programs/mythfrontend/progdetails.cpp" line="766"/>
+ <location filename="../programs/mythfrontend/progdetails.cpp" line="791"/>
+ <source>Switch Page</source>
+- <translation>Cambiare pagina</translation>
++ <translation>Cambia pagina</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/progdetails.cpp" line="278"/>
+@@ -15160,12 +15160,12 @@ non può essere vuoto.</translation>
+ <message>
+ <location filename="../programs/mythfrontend/progdetails.cpp" line="658"/>
+ <source>Watch List Score</source>
+- <translation>Punteggio già visti</translation>
++ <translation>Punteggio lista In evidenza</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/progdetails.cpp" line="659"/>
+ <source>Watch List Status</source>
+- <translation>Stato già visti</translation>
++ <translation>Stato lista In evidenza</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/progdetails.cpp" line="660"/>
+@@ -15277,7 +15277,7 @@ non può essere vuoto.</translation>
+ <location filename="../programs/mythfrontend/progfind.cpp" line="245"/>
+ <location filename="../programs/mythfrontend/progfind.cpp" line="318"/>
+ <source>Previously Recorded</source>
+- <translation>Già registrato</translation>
++ <translation>Già registrati</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/progfind.cpp" line="246"/>
+@@ -15435,7 +15435,7 @@ non può essere vuoto.</translation>
+ <message>
+ <location filename="../programs/mythfrontend/proglist.cpp" line="495"/>
+ <source>Custom Record</source>
+- <translation>Registrazione personalizzata</translation>
++ <translation>Registr. personalizzata</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/proglist.cpp" line="519"/>
+@@ -15488,7 +15488,7 @@ non può essere vuoto.</translation>
+ <location filename="../programs/mythfrontend/proglist.cpp" line="349"/>
+ <location filename="../programs/mythfrontend/proglist.cpp" line="757"/>
+ <source>Previously Recorded</source>
+- <translation>Già registrato</translation>
++ <translation>Già registrati</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/proglist.cpp" line="1029"/>
+@@ -15578,7 +15578,7 @@ non può essere vuoto.</translation>
+ <message>
+ <location filename="../programs/mythfrontend/proglist.cpp" line="763"/>
+ <source>Never record this episode</source>
+- <translation>Questo episodio non sarà registrato</translation>
++ <translation>Questo episodio non verrà registrato</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/proglist.cpp" line="764"/>
+@@ -15715,7 +15715,7 @@ non può essere vuoto.</translation>
+ <location filename="../programs/mythfrontend/programrecpriority.cpp" line="638"/>
+ <location filename="../programs/mythfrontend/programrecpriority.cpp" line="707"/>
+ <source>Upcoming</source>
+- <translation>Prossimo</translation>
++ <translation>Successivo</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/programrecpriority.cpp" line="639"/>
+@@ -17076,7 +17076,7 @@ La maggior parte delle schede ora possono rilevarla automaticamente, per cui las
+ <message>
+ <location filename="../libs/libmythtv/videosource.cpp" line="2985"/>
+ <source>Change the cardtype to the appropriate type for the capture card you are configuring.</source>
+- <translation>Cambiare il tipo di scheda al tipo adatto alla scheda che si vuole configurare.</translation>
++ <translation>Cambiare il tipo di scheda con un tipo adatto alla scheda che si vuole configurare.</translation>
+ </message>
+ <message>
+ <source>MJPEG capture card (Matrox G200, DC10)</source>
+@@ -17265,7 +17265,7 @@ La maggior parte delle schede ora possono rilevarla automaticamente, per cui las
+ <message>
+ <location filename="../libs/libmythtv/videosource.cpp" line="3262"/>
+ <source>If enabled, MythTV will tune using only the MPEG program number. The program numbers change more often than DVB or ATSC tuning parameters, so this is slightly less reliable. This will also inhibit EIT gathering during Live TV and recording.</source>
+- <translation>Se attivato, MythTv sintonizzerà usando solo il numero di programma MPEG. I numeri di programma cambiano più spesso rispetto ai parametri di sintonizzazione DVB o ATSC, così questo è leggermente meno attendibile. Questo inibirà anche l'aggiornamento EIT durante Live TV e registrazioni.</translation>
++ <translation>Se attivato, MythTv sintonizzerà usando solo il numero di programma MPEG. I numeri di programma cambiano più spesso rispetto ai parametri di sintonizzazione DVB o ATSC, così questo è leggermente meno attendibile. Ciò inibirà anche l'aggiornamento EIT durante Live TV e registrazioni.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/videosource.cpp" line="3280"/>
+@@ -18480,7 +18480,7 @@ avviato automaticamente o dall'utente se l'ha attivata un utente.</tra
+ <message>
+ <location filename="../libs/libmyth/programtypes.cpp" line="195"/>
+ <source>Previously Recorded</source>
+- <translation>Già registrato</translation>
++ <translation>Già registrati</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/programtypes.cpp" line="197"/>
+@@ -20639,7 +20639,7 @@ La maggior parte dei transponder DVB-S trasmette a 27,5 milioni di simboli al se
+ <message>
+ <location filename="../libs/libmythtv/videosource.cpp" line="3095"/>
+ <source>This name is displayed on screen when Live TV begins and when changing the selected input or card. If you use this, make sure the information is unique for each input.</source>
+- <translation>Questo nome è visualizzato quando si avvia la Live TV e quando viene cambiato l'ingresso selezionato o la scheda. Se usato, assicurarsi che le informazioni siano univoche per ogni ingresso.</translation>
++ <translation>Il nome è visualizzato quando si avvia la Live TV e quando viene cambiato l'ingresso selezionato o la scheda. Se usato, assicurarsi che le informazioni siano univoche per ogni ingresso.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/videosource.cpp" line="3133"/>
+@@ -22555,7 +22555,7 @@ non può essere vuoto.</translation>
+ <message>
+ <location filename="../programs/mythtv-setup/backendsettings.cpp" line="289"/>
+ <source>Maximum time to spend waiting (in minutes) for listings data on one digital TV channel before checking for new listings data on the next channel.</source>
+- <translation>Tempo massimo da spendere aspettando (in minuti) per elenchi dati su un canale digitale TV prima di controllare per nuovi elenchi di dati sul prossimo canale.</translation>
++ <translation>Tempo massimo di attesa (in minuti) per ottenere gli elenchi dati di un canale digitale TV prima di verificare l'esistenza di nuovi elenchi di dati sul canale successivo.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythtv-setup/backendsettings.cpp" line="300"/>
+@@ -22835,7 +22835,7 @@ programmi. Per esempio, impostando l'inizio alle 11 e la fine alle 13 signi
+ <message>
+ <location filename="../programs/mythtv-setup/backendsettings.cpp" line="747"/>
+ <source>If enabled, allow a DataDirect guide data provider to specify the next download time in order to distribute load on their servers. Guide data program execution start/end times are also ignored.</source>
+- <translation>Se abilitato, permette al fornitore dei dati della guida DataDirect di specificare il prossimo momento di download in ordine di distribuzione caricato sui loro server. Anche l'esecuzione inizio/fine del programma per i dati della guida ai programmi sono ignorati.</translation>
++ <translation>Se abilitato, permette al fornitore dati della guida DataDirect di specificare quando dovrà avvenire il prossimo download in modo da distribuire il carico dei loro server. Viene anche ignorata l'inizio e la fine esecuzione del programma.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythtv-setup/backendsettings.cpp" line="757"/>
+@@ -23970,7 +23970,7 @@ You may have to use the eject button under its tray.</source>
+ <location filename="../libs/libmythtv/cardutil.cpp" line="2087"/>
+ <location filename="../libs/libmythtv/cardutil.cpp" line="2145"/>
+ <source>Unable to connect to device.</source>
+- <translation>Impossibile connettere al dispositivo.</translation>
++ <translation>Non riesco a connettermi al dispositivo.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/cardutil.cpp" line="2101"/>
+@@ -24251,7 +24251,7 @@ You may have to use the eject button under its tray.</source>
+ <message>
+ <location filename="../libs/libmyth/mythcontext.cpp" line="1033"/>
+ <source>Could not connect to the master backend server. Is it running? Is the IP address set for it in mythtv-setup correct?</source>
+- <translation>Impossibile connettere al backend server primario.È in esecuzione? L'indirizzo IP è impostato correttamente in mythtv-setup?</translation>
++ <translation>Non riesco a connettermi al backend primario.È in esecuzione? In mythtv-setup l'indirizzo IP è corretto?</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/mythcontext.cpp" line="1038"/>
+@@ -25209,25 +25209,25 @@ You may have to use the eject button under its tray.</source>
+ <location filename="../programs/mythshutdown/main.cpp" line="607"/>
+ <source>Will wake up at next scheduled program</source>
+ <comment>mythshutdown</comment>
+- <translation>Sarà risveglio al prossimo programma pianificato</translation>
++ <translation>Il risveglio avverrà con il prossimo programma pianificato</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythshutdown/main.cpp" line="617"/>
+ <source>Will wake up at next daily wakeup</source>
+ <comment>mythshutdown</comment>
+- <translation>Sarà risvegliato al prossimo risveglio giornaliero</translation>
++ <translation>Il risveglio avverrà al prossimo risveglio giornaliero</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythshutdown/main.cpp" line="629"/>
+ <source>Program is scheduled but will wake up at next daily wakeup</source>
+ <comment>mythshutdown</comment>
+- <translation>Il programma è pianificato ma sarà chiamata al prossimo risveglio giornaliero</translation>
++ <translation>Il programma è pianificato ma sarà avviato al prossimo risveglio giornaliero</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythshutdown/main.cpp" line="637"/>
+ <source>Daily wakeup is set but will wake up at next scheduled program</source>
+ <comment>mythshutdown</comment>
+- <translation>Chiamata giornaliero è impostato sarà chiamata al prossimo programma pianificato</translation>
++ <translation>Il risveglio giornaliero è impostato, ma verrà eseguito con il prossimo programma pianificato</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythshutdown/main.cpp" line="682"/>
+@@ -26026,7 +26026,7 @@ Device supports up to %1</source>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="520"/>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="607"/>
+ <source>Previously Recorded</source>
+- <translation>Già registrato</translation>
++ <translation>Già registrati</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/scheduleeditor.cpp" line="576"/>
+@@ -26387,12 +26387,12 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="983"/>
+ <source>Job:</source>
+- <translation>Processi:</translation>
++ <translation>Processo:</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="985"/>
+ <source>Status: </source>
+- <translation>Stato:</translation>
++ <translation>Stato: </translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="847"/>
+@@ -26402,7 +26402,7 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="992"/>
+ <source>Scheduled Run Time:</source>
+- <translation>Tempo di esecuzione programmata:</translation>
++ <translation>Durata esecuzione programmata:</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="772"/>
+@@ -26421,7 +26421,7 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="114"/>
+ <source>Listings Status</source>
+- <translation>Elenchi stato</translation>
++ <translation>Stato elenchi</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="118"/>
+@@ -26455,28 +26455,28 @@ Nome Database: %2</translation>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="134"/>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="351"/>
+ <source>AutoExpire List</source>
+- <translation>Elenco eliminazione automatica</translation>
++ <translation>Elenco di autocancellazione</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="207"/>
+ <source>Acknowledge all log entries at this priority level or lower?</source>
+- <translation>Confermare tutte le voci di registro a questo livello di priorità o più basso?</translation>
++ <translation>Confermi tutte le voci di registro con questai priorità o inferiore?</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="224"/>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="227"/>
+ <source>Setting priority level to %1</source>
+- <translation>Impostato livello di priorità a %1</translation>
++ <translation>Imposto livello di priorità a %1</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="282"/>
+ <source>Acknowledge this log entry?</source>
+- <translation>Confermare questa voce di registro?</translation>
++ <translation>Confermi questa voce di registro?</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="302"/>
+ <source>Delete Job?</source>
+- <translation>Eliminare il processo?</translation>
++ <translation>Elimino il processo?</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="318"/>
+@@ -26486,7 +26486,7 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="331"/>
+ <source>Resume</source>
+- <translation>Riattivazione</translation>
++ <translation>Riattiva</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="333"/>
+@@ -26507,37 +26507,37 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="339"/>
+ <source>Requeue Job?</source>
+- <translation>Riaccodare il processo?</translation>
++ <translation>Riaccodo il processo?</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="357"/>
+ <source>AutoExpire Actions:</source>
+- <translation>Azioni eliminazione automatica:</translation>
++ <translation>Azioni di autocancellazione:</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="367"/>
+ <source>Delete Now</source>
+- <translation>Eliminare immediatamente</translation>
++ <translation>Elimina immediatamente</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="370"/>
+ <source>Move to Default group</source>
+- <translation>Spostare nel gruppo predefinito</translation>
++ <translation>Sposta nel gruppo predefinito</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="374"/>
+ <source>Undelete</source>
+- <translation>Incancellabile</translation>
++ <translation>Ripristina</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="376"/>
+ <source>Disable AutoExpire</source>
+- <translation>Disabilita l'eliminazione automatica</translation>
++ <translation>Disabilita cancellazione automatica</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="514"/>
+ <source>Listings Status shows the latest status information from mythfilldatabase</source>
+- <translation>Elenchi stato visualizza le ultime informazioni da mythfilldatabase</translation>
++ <translation>Stato elenchi visualizza le ultime informazioni da mythfilldatabase</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="546"/>
+@@ -26567,22 +26567,22 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="568"/>
+ <source>Suggested Next: %1</source>
+- <translation>Consigliare prossimo: %1</translation>
++ <translation>Prossimo suggerito: %1</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="579"/>
+ <source>There's no guide data available!</source>
+- <translation>Non ci sono dati per la guida disponibili!</translation>
++ <translation>Non sono disponibili dati per la guida!</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="581"/>
+ <source>Have you run mythfilldatabase?</source>
+- <translation>Avete eseguito mythfilldatabase?</translation>
++ <translation>Hai eseguito mythfilldatabase?</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="587"/>
+ <source>There is guide data until %1</source>
+- <translation>Ci sono dati della guida fino %1</translation>
++ <translation>Ci sono dati della guida fino al %1</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="597"/>
+@@ -26603,14 +26603,14 @@ Nome Database: %2</translation>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="627"/>
+ <source>%n template rule(s) (is) defined</source>
+ <translation>
+- <numerusform>%n regola modello è definita</numerusform>
+- <numerusform>%n regole modello sono definite</numerusform>
++ <numerusform>%n regola modello definita</numerusform>
++ <numerusform>%n regole modello definite</numerusform>
+ </translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="766"/>
+ <source>with lower priority</source>
+- <translation>con la priorità più bassa</translation>
++ <translation>con priorità inferiore</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="792"/>
+@@ -26630,7 +26630,7 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="854"/>
+ <source>is watching Live TV</source>
+- <translation>sta guardando la Live TV</translation>
++ <translation>sta vedendo la Diretta TV</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="861"/>
+@@ -26640,7 +26640,7 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="894"/>
+ <source>Log Entries shows any unread log entries from the system if you have logging enabled</source>
+- <translation>Voci di registro mostra tutte le voci non lette del registro di sistema se si ha il logging abilitato</translation>
++ <translation>Se si dispone di logging abilitato Voci Registro mostra tutte le voci del registro di sistema non lette</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="916"/>
+@@ -26658,22 +26658,22 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="936"/>
+ <source>No items found at priority level %1 or lower.</source>
+- <translation>Nessun oggetto trovato al livello di priorità %1 o minore.</translation>
++ <translation>Non è stato trovato nessun oggetto di priorità %1 o inferiore.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="938"/>
+ <source>Use 1-8 to change priority level.</source>
+- <translation>Usare 1-8 per cambiare il livello di priorità.</translation>
++ <translation>Usa 1-8 per cambiare il livello di priorità.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1015"/>
+ <source>Job Queue is currently empty.</source>
+- <translation>Nessun processo in coda.</translation>
++ <translation>La coda processi è vuota.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1203"/>
+ <source>Machine Status shows some operating system statistics of this machine</source>
+- <translation>Stato computer visualizza alcune statistiche delle operazioni di sistema di questo computer</translation>
++ <translation>Lo stato computer visualizza alcune statistiche sulle operazioni di sistema di questo computer</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1206"/>
+@@ -26694,7 +26694,7 @@ Nome Database: %2</translation>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1230"/>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1278"/>
+ <source>Load</source>
+- <translation>Aprire</translation>
++ <translation>Apri</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1233"/>
+@@ -26729,7 +26729,7 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1339"/>
+ <source>Total Disk Space:</source>
+- <translation>Spazio su disco totale:</translation>
++ <translation>Capacità disco:</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1344"/>
+@@ -26749,7 +26749,7 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1384"/>
+ <source>The AutoExpire List shows all recordings which may be expired and the order of their expiration. Recordings at the top of the list will be expired first.</source>
+- <translation>Eliminazione automatica visualizza tutte le registrazioni che potrebbero essere eliminate automaticamente e l'ordine di eliminazione. Le registrazioni ad inizio lista saranno eliminate per prime.</translation>
++ <translation>Auto-cancellazione visualizza tutte le registrazioni che possono essere eliminate automaticamente e il loro ordine di eliminazione. Le registrazioni in cima alla lista saranno eliminate per prime.</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="592"/>
+@@ -26787,7 +26787,7 @@ Nome Database: %2</translation>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="949"/>
+ <source>Job Queue shows any jobs currently in MythTV's Job Queue such as a commercial detection job.</source>
+- <translation>Coda processi visualizza tutti i processi attuali nella coda di lavoro MythTV, ad esempio un processo di rilevazione pubblicità.</translation>
++ <translation>Coda processi visualizza tutti i processi in coda su MythTV, ad esempio un processo di rilevamento pubblicità.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/statusbox.cpp" line="1057"/>
+@@ -26849,8 +26849,8 @@ Nome Database: %2</translation>
+ <source>%n recording(s) consuming %1 (is) allowed to expire
+ </source>
+ <translation>
+- <numerusform>%n registazione consuma %1 è permesso di eliminarsi</numerusform>
+- <numerusform>%n registazioni consumano %1 è permesso di eliminarsi</numerusform>
++ <numerusform>%n registazione occupa %1 eliminazione consentita</numerusform>
++ <numerusform>%n registazioni occupano %1 eliminazione consentita</numerusform>
+ </translation>
+ </message>
+ <message>
+@@ -26863,8 +26863,8 @@ Nome Database: %2</translation>
+ <source>%n (is) LiveTV and consume(s) %1
+ </source>
+ <translation>
+- <numerusform>%n (è) LiveTV e consuma %1</numerusform>
+- <numerusform>%n (è) LiveTV e consumano %1</numerusform>
++ <numerusform>%n (è) DirettaTV e occupa %1</numerusform>
++ <numerusform>%n (è) DirettaTV e occupano %1</numerusform>
+ </translation>
+ </message>
+ <message numerus="yes">
+@@ -26872,8 +26872,8 @@ Nome Database: %2</translation>
+ <source>%n (is) Deleted and consume(s) %1
+ </source>
+ <translation>
+- <numerusform>%n (è) cancellato e consuma %1</numerusform>
+- <numerusform>%n (è) cancellato e consumano %1</numerusform>
++ <numerusform>%n (è) cancellato e occupa %1</numerusform>
++ <numerusform>%n (è) cancellato e occupano %1</numerusform>
+ </translation>
+ </message>
+ </context>
+@@ -26904,7 +26904,7 @@ Nome Database: %2</translation>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="97"/>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="122"/>
+ <source>Enter directory name or press SELECT to enter text via the On Screen Keyboard</source>
+- <translation>Inserire il nome della directory o premere INVIO per inserire il testo con la tastiera a video</translation>
++ <translation>Inserisci il nome della directory o premi INVIO per inserire il testo con la tastiera a video</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="121"/>
+@@ -26915,7 +26915,7 @@ Nome Database: %2</translation>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="161"/>
+ <source>Remove '%1'
+ Directory From Storage Group?</source>
+- <translation>Rimuovere '%1'
++ <translation>Rimuovo '%1'
+ dal gruppo di archiviazione?</translation>
+ </message>
+ <message>
+@@ -26931,7 +26931,7 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="223"/>
+ <source>(Add New Directory)</source>
+- <translation>(Aggiunge nuova directory)</translation>
++ <translation>(Aggiungi nuova directory)</translation>
+ </message>
+ </context>
+ <context>
+@@ -26954,7 +26954,7 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="278"/>
+ <source>Enter group name or press SELECT to enter text via the On Screen Keyboard</source>
+- <translation>Inserire il nome gruppo o premere 'SELECT' per inserire con la tastiera video</translation>
++ <translation>Inserisci il nome gruppo o premi 'SELECT' per inserire con la tastiera a video</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="302"/>
+@@ -26966,26 +26966,26 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="307"/>
+ <source>Delete '%1' Storage Group?</source>
+- <translation>Eliminare '%1' gruppo di archiviazione?</translation>
++ <translation>Elimino '%1' gruppo di archiviazione?</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="312"/>
+ <source>Delete '%1' Storage Group?
+ (from remote hosts)</source>
+- <translation>Eliminare "%1" gruppo di archiviazione?
++ <translation>Elimino "%1" gruppo di archiviazione?
+ (dagli host remoti)</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="316"/>
+ <source>Delete '%1' Storage Group?
+ (from all hosts)</source>
+- <translation>Eliminare "%1" gruppo di archiviazione?
++ <translation>Elimino "%1" gruppo di archiviazione?
+ (da tutti gli host)</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="323"/>
+ <source>Yes, delete group</source>
+- <translation>Sì, eliminare il gruppo</translation>
++ <translation>Sì, elimina il gruppo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmyth/storagegroupeditor.cpp" line="324"/>
+@@ -27178,12 +27178,12 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="9186"/>
+ <source>Mute On</source>
+- <translation>Muto</translation>
++ <translation>Muto On</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="9185"/>
+ <source>Mute Off</source>
+- <translation>Muto NO</translation>
++ <translation>Muto Off</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="10013"/>
+@@ -27194,12 +27194,12 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12699"/>
+ <source>Auto-Expire OFF</source>
+- <translation>Elimazione automatica OFF</translation>
++ <translation>Auto-cancellazione OFF</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12704"/>
+ <source>Auto-Expire ON</source>
+- <translation>Eliminazione automatica ON</translation>
++ <translation>Auto-cancellazione ON</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="10899"/>
+@@ -27224,7 +27224,7 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12173"/>
+ <source>Program Guide</source>
+- <translation>Guida programmi</translation>
++ <translation>Guida TV</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12512"/>
+@@ -27254,12 +27254,12 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12222"/>
+ <source>Turn Auto-Expire OFF</source>
+- <translation>Eliminazione automatica OFF</translation>
++ <translation>Imposta auto-cancellazione OFF</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12222"/>
+ <source>Turn Auto-Expire ON</source>
+- <translation>Eliminazione automatica ON</translation>
++ <translation>Imposta auto-cancellazione ON</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12497"/>
+@@ -27381,12 +27381,12 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="8294"/>
+ <source>Partial Lock</source>
+- <translation>Agganciamento parziale</translation>
++ <translation>Sintonia parziale</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="8295"/>
+ <source>Lock</source>
+- <translation>Agganciato</translation>
++ <translation>Sintonizzato</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="8396"/>
+@@ -27466,7 +27466,7 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="13168"/>
+ <source>Next Title</source>
+- <translation>Prossimo titolo</translation>
++ <translation>Titolo successivo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12148"/>
+@@ -27888,7 +27888,7 @@ dal gruppo di archiviazione?</translation>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="8387"/>
+ <source>You should have received a channel lock by now. You can continue to wait for a signal, or you can change the channel with %1 or %2, change video source (%3), inputs (%4), etc.</source>
+- <translation>Adesso, il canale avrebbe dovuto essere agganciato. E' possibile: attendere il segnale o cambiare il canale con %1 o %2; cambiare sorgente video (%3); cambiare ingresso (%4); ecc.</translation>
++ <translation>A questo punto il canale avrebbe dovuto essere sintonizzato. E' possibile: attendere il segnale o cambiare canale con %1 o %2; cambiare sorgente video (%3); cambiare ingresso (%4); ecc.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="9057"/>
+@@ -28174,7 +28174,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="7157"/>
+ <source>Searching</source>
+- <translation>Ricerca</translation>
++ <translation>Sto cercando</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="7135"/>
+@@ -28287,12 +28287,12 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="11694"/>
+ <source>Side by Side</source>
+- <translation>Fianco a fianco</translation>
++ <translation>Affiancati</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="11696"/>
+ <source>Discard Side by Side</source>
+- <translation>Annulla fianco a fianco</translation>
++ <translation>Annulla affiancati</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="11698"/>
+@@ -28396,22 +28396,22 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12049"/>
+ <source>Open Live TV PIP</source>
+- <translation>Apri PIP LiveTV</translation>
++ <translation>Apri DirettaTV in PIP</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12058"/>
+ <source>Open Live TV PBP</source>
+- <translation>Apri PBP LiveTV</translation>
++ <translation>Apri DirettaTV in PBP</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12066"/>
+ <source>Open Recording PIP</source>
+- <translation>Apri PIP registrazioni</translation>
++ <translation>Apri registrazione in PIP</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12074"/>
+ <source>Open Recording PBP</source>
+- <translation>Apri PBP registrazioni</translation>
++ <translation>Apri registrazione in PBP</translation>
+ </message>
+ <message>
+ <source>Close PBP</source>
+@@ -28468,7 +28468,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12938"/>
+ <source>MythTV is already using all available inputs for the channel you selected. If you want to watch an in-progress recording, select one from the playback menu. If you want to watch Live TV, cancel one of the in-progress recordings from the delete menu.</source>
+- <translation>MythTV sta già utilizzando tutti gli ingressi disponibili per il canale selezionato. Se si desidera vedere una registrazione in corso, selezionarla dal menù riproduzione. Se si desidera vedere la TV in diretta, annullare una delle registrazioni in corso dal menù cancella.</translation>
++ <translation>MythTV sta già utilizzando tutti gli ingressi disponibili per il canale selezionato. Se desideri vedere una registrazione in corso, selezionala dal menù riproduzione. Se desideri vedere la TV in diretta, annulla una delle registrazioni in corso dal menù cancella.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12947"/>
+@@ -28478,7 +28478,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="12951"/>
+ <source>MythTV has no capture cards defined. Please run the mythtv-setup program.</source>
+- <translation>Non ci sono schede di acquisizione definite. Eseguire mythtv-setup.</translation>
++ <translation>Non ci sono schede di acquisizione definite. Esegui mythtv-setup.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="13231"/>
+@@ -28523,7 +28523,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="13371"/>
+ <source>Delete it</source>
+- <translation>Elimina</translation>
++ <translation>Eliminalo</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_play.cpp" line="13373"/>
+@@ -28586,7 +28586,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../libs/libmythtv/tv_rec.cpp" line="3934"/>
+ <source>Good signal seen after %1 ms</source>
+- <translation>Rilevato segnale ottimo dopo %1 ms</translation>
++ <translation>Rilevato segnale buono dopo %1 ms</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/tv_rec.cpp" line="3943"/>
+@@ -28597,7 +28597,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../libs/libmythtv/tv_rec.cpp" line="3987"/>
+ <source>Taking more than %1 ms to get a lock.</source>
+- <translation>CI è sono voluti più di %1 ms per agganciarlo.</translation>
++ <translation>Ci sono voluti più di %1 ms per sintonizzarlo.</translation>
+ </message>
+ </context>
+ <context>
+@@ -28616,7 +28616,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../programs/mythfrontend/themechooser.cpp" line="275"/>
+ <source>Refreshing Downloadable Themes Information</source>
+- <translation>Aggiornamento delle informazioni sui temi scaricabili</translation>
++ <translation>Aggiornamento informazioni sui temi scaricabili</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/themechooser.cpp" line="283"/>
+@@ -28636,7 +28636,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../programs/mythfrontend/themechooser.cpp" line="315"/>
+ <source>Failed to unzip '%1' to '%2'</source>
+- <translation>Impossibile decomprimere "%1" di "%2"</translation>
++ <translation>Impossibile estrarre "%1" su "%2"</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/themechooser.cpp" line="333"/>
+@@ -28646,7 +28646,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../programs/mythfrontend/themechooser.cpp" line="496"/>
+ <source>Error creating test file, %1 themes directory is not writable.</source>
+- <translation>Errore creazione file test, %1 directory dei temi non è scrivibile.</translation>
++ <translation>Errore creazione file test, %1 directory dei temi non scrivibile.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/themechooser.cpp" line="533"/>
+@@ -28784,7 +28784,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="996"/>
+ <source>Airdate:</source>
+- <translation>Trasmesso:</translation>
++ <translation>Andato in onda:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="772"/>
+@@ -28794,7 +28794,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="379"/>
+ <source>This screen displays the status of various system components</source>
+- <translation>Questa schermata mostra lo stato di svariati componenti di sistema</translation>
++ <translation>Questa schermata mostra lo stato di alcuni componenti del sistema</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="564"/>
+@@ -28848,7 +28848,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="792"/>
+ <source>Go up a level</source>
+- <translation>Salire di un livello</translation>
++ <translation>Sali di un livello</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="163"/>
+@@ -28887,7 +28887,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="800"/>
+ <source>Select the menu items you want to see by playback mode.</source>
+- <translation>Seleziona gli oggetti del menù da vedere in modalità riproduzione.</translation>
++ <translation>Seleziona nel menù gli oggetti che vuoi riprodurre.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="801"/>
+@@ -28922,7 +28922,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="8"/>
+ <source>Configure the recording and transcoding quality (where applicable)</source>
+- <translation>Configura la qualità di registrazione e ricodifica (dove applicabile)</translation>
++ <translation>Configura la qualità di registrazione e transcodifica (dove applicabile)</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="9"/>
+@@ -28947,7 +28947,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="13"/>
+ <source>8. System Events</source>
+- <translation>8. Eventi di sistema</translation>
++ <translation>8. Eventi sistema</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="438"/>
+@@ -28957,12 +28957,12 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="830"/>
+ <source>Recording...</source>
+- <translation>Registrazione...</translation>
++ <translation>In registrazione...</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="831"/>
+ <source>Transcoding...</source>
+- <translation>Transcodifica...</translation>
++ <translation>In transcodifica...</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="832"/>
+@@ -28997,7 +28997,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="838"/>
+ <source>Enable and disable the checkboxes below to filter the way recordings are displayed.</source>
+- <translation>Abilitare e disabilitare le caselle di controllo sottostanti per filtrare il modo in cui le registrazioni vengono visualizzate.</translation>
++ <translation>Abilita/ disabilita le caselle qui sotto per determinare il modo in cui le registrazioni sono visualizzate.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="839"/>
+@@ -29012,7 +29012,7 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="841"/>
+ <source>Show Live TV</source>
+- <translation>Mostra Live TV</translation>
++ <translation>Mostra Diretta TV</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="842"/>
+@@ -29037,21 +29037,21 @@ Do you wish to continue watching?</source>
+ <message>
+ <location filename="../themes/themestrings.h" line="696"/>
+ <source>Status Icon Help</source>
+- <translation>Icona stato di aiuto</translation>
++ <translation>Aiuto icona di stato</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="846"/>
+ <source>These icons represent information about your recordings.</source>
+- <translation>Le icone rappresentano le informazioni relative alle registrazioni.</translation>
++ <translation>Le icone forniscono le informazioni relative alle registrazioni.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="847"/>
+ <source>Using the text areas below, you can change the recording title, subtitle, and description.
+
+ Once you have completed your modifications, click the "OK" button.</source>
+- <translation>Tramite l'area di testo sotto, è possibile cambiare titolo, sottotitolo e descrizione della registrazione.
++ <translation>Tramite l'area di testo sottostante, è possibile cambiare titolo, sottotitolo e descrizione della registrazione.
+
+-Una volta completate le modifiche, preme il bottone "OK".</translation>
++Una volta completate le modifiche, premi il pulsante "OK".</translation>
+ </message>
+ <message>
+ <source>(%STARTTIME% - %ENDTIME%) %LONGREPEAT% %YEARSTARS%%DESCRIPTION%</source>
+@@ -29060,12 +29060,12 @@ Una volta completate le modifiche, preme il bottone "OK".</translation
+ <message>
+ <location filename="../themes/themestrings.h" line="850"/>
+ <source>Manually Schedule A Recording</source>
+- <translation>Programmazione manuale di una registrazione</translation>
++ <translation>Programma manualmente una registrazione</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="719"/>
+ <source>To manually schedule a recording, enter a title (optional). Then set the channel, date, start time, and duration of your recording. Note that this recording will not have any listings data or other information provided by an EPG.</source>
+- <translation>Per programmare manualmente una registrazione inserire un titolo (opzionale), quindi impostare il canale, la data, l'ora di inizio e la durata della registrazione. Nota: questa registrazione non ha alcun dato o altre informazioni provenienti da un EPG.</translation>
++ <translation>Per programmare manualmente una registrazione inserisci un titolo (opzionale), quindi imposta il canale, la data, l'ora di inizio e la durata della registrazione. Nota: questa registrazione non avrà nessuna informazione proveniente da un EPG.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="852"/>
+@@ -29129,7 +29129,7 @@ Once you have completed your rule, can can Test, Delete, or Install it right awa
+ <message>
+ <location filename="../themes/themestrings.h" line="862"/>
+ <source>Click to add clause...</source>
+- <translation>Clic per aggiungere clausole...</translation>
++ <translation>Clic per aggiungere una clausola...</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="863"/>
+@@ -29147,7 +29147,7 @@ Dopo aver completato la configurazione, premere "OK" per ricercare.</t
+ <message>
+ <location filename="../themes/themestrings.h" line="730"/>
+ <source>Below you will find the program details of the selected item. There are two available screens. You can toggle between them by pressing INFO.</source>
+- <translation>Sotto si trovano i dettagli dei programmi selezionati. Sono disponibili due schermate. Per commutare tra loro premere il tasto INFO.</translation>
++ <translation>Di seguito sono presenti i dettagli dei programmi selezionati. Sono disponibili due schermate. Per commutare tra loro premi il tasto INFO.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="867"/>
+@@ -29212,8 +29212,8 @@ Dopo aver completato la configurazione, premere "OK" per ricercare.</t
+ <location filename="../themes/themestrings.h" line="877"/>
+ <source>%n minute(s) early</source>
+ <translation>
+- <numerusform>%n minuto di anticipo</numerusform>
+- <numerusform>%n minuti di anticipo</numerusform>
++ <numerusform>%n minuto in anticipo</numerusform>
++ <numerusform>%n minuti in anticipo</numerusform>
+ </translation>
+ </message>
+ <message>
+@@ -29224,7 +29224,7 @@ Dopo aver completato la configurazione, premere "OK" per ricercare.</t
+ <message>
+ <location filename="../themes/themestrings.h" line="879"/>
+ <source>End on time</source>
+- <translation>Fine alle ore</translation>
++ <translation>Fine in orario</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="880"/>
+@@ -29244,7 +29244,7 @@ Dopo aver completato la configurazione, premere "OK" per ricercare.</t
+ <message>
+ <location filename="../themes/themestrings.h" line="884"/>
+ <source>Select how the recording file should be treated.</source>
+- <translation>Seleziona come dovrebbe essere trattata la registrazione.</translation>
++ <translation>Seleziona come dovrebbe essere gestita la registrazione.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="885"/>
+@@ -29294,17 +29294,17 @@ Dopo aver completato la configurazione, premere "OK" per ricercare.</t
+ <message>
+ <location filename="../themes/themestrings.h" line="894"/>
+ <source>Automatically Commercial Flag Recordings</source>
+- <translation>Registra con indicatore automatico della pubblicità</translation>
++ <translation>Registra con rilevamento automatico pubblicità</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="895"/>
+ <source>Automatically Transcode Recordings</source>
+- <translation>Registra con ricodifica automatica</translation>
++ <translation>Registra con transcodifica automatica</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="282"/>
+ <source>Run User Job #2</source>
+- <translation>Esegui processi utente #2</translation>
++ <translation>Esegui processo utente #2</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="897"/>
+@@ -29347,7 +29347,7 @@ Infine, testare, imediatamente attivare, archiviare o cancellare la regola.</tra
+ <message>
+ <location filename="../themes/themestrings.h" line="907"/>
+ <source>Learn what your system is up to.</source>
+- <translation>Scopri il sistema.</translation>
++ <translation>Scopri quello che il sistema può fare.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="909"/>
+@@ -29412,7 +29412,7 @@ Infine, testare, imediatamente attivare, archiviare o cancellare la regola.</tra
+ <message>
+ <location filename="../themes/themestrings.h" line="979"/>
+ <source>Icon Download Status...</source>
+- <translation>Stato scaricamento icona...</translation>
++ <translation>Stato scaricamento icone...</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="981"/>
+@@ -29433,13 +29433,13 @@ Infine, testare, imediatamente attivare, archiviare o cancellare la regola.</tra
+ <location filename="../themes/themestrings.h" line="984"/>
+ <source>You Haven't Scheduled Any Programs To Be Recorded
+ To schedule a recording, exit this screen and Select 'Program Guide' or 'Program Finder' </source>
+- <translation>Non c'è alcuna registrazione programmata
+-Per programmare una registrazione, uscire da questa schermata e selezionare 'guida programmi' o 'cerca programmi'</translation>
++ <translation>Non c'è nessuna registrazione programmata
++Per programmare una registrazione, esci da questa schermata e seleziona 'Guida TV' o 'Cerca programmi'</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="985"/>
+ <source>Search Term</source>
+- <translation>Ricerca scadenza</translation>
++ <translation>Cerca parola</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="470"/>
+@@ -29454,7 +29454,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="987"/>
+ <source>Air Date:</source>
+- <translation>Messa in onda:</translation>
++ <translation>Messo in onda:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="989"/>
+@@ -29484,12 +29484,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="994"/>
+ <source>Limit Handling:</source>
+- <translation>Limite della gestione:</translation>
++ <translation>Limite gestione:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="995"/>
+ <source>Graphite is a theme emphasizing MythUI interface improvements such as alpha, animation, unique layouts, and user-supplied backdrop content. It is extremely memory-hungry.</source>
+- <translation>Graphite è un tema che sottolinea i progressi dell'interfaccia MythUI come alpha, animazioni, layout unici e contenuti utente forniti sullo sfondo. È estremamente affamato di memoria.</translation>
++ <translation>Graphite è un tema che sottolinea i progressi dell'interfaccia MythUI come alpha, animazioni, layout unici e contenuti utente forniti sullo sfondo. È estremamente vorace di memoria.</translation>
+ </message>
+ <message>
+ <source>%EXTRA| %%ORIGIN%</source>
+@@ -29522,7 +29522,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="1012"/>
+ <source>No Recordings available, or screen loading...</source>
+- <translation>Nessuna registrazione disponibile, o schermo in caricamento ...</translation>
++ <translation>Nessuna registrazione disponibile, o schermo in avvio...</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1039"/>
+@@ -29572,7 +29572,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="997"/>
+ <source>Browseable</source>
+- <translation>Navigabile</translation>
++ <translation>Visibile</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="998"/>
+@@ -29611,7 +29611,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="479"/>
+ <source>Programme Finder</source>
+- <translation>Cerca programmi</translation>
++ <translation>Cerca programma</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="375"/>
+@@ -29651,7 +29651,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="24"/>
+ <source>Screen Setup Wizards</source>
+- <translation>Impostazione schermo guidata</translation>
++ <translation>Impostaz. schermo guidata</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="25"/>
+@@ -29694,7 +29694,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="38"/>
+ <source>Game Settings</source>
+- <translation>Impostazioni giochi</translation>
++ <translation>Imposta giochi</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="39"/>
+@@ -29719,7 +29719,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="43"/>
+ <source>Choose which news sources interest you</source>
+- <translation>Scegliere quale fonti di notizie interessano</translation>
++ <translation>Scegli le fonti di notizie di interesse</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="44"/>
+@@ -29739,7 +29739,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="47"/>
+ <source>Archive Files Settings</source>
+- <translation>Impostazioni archivi dei file</translation>
++ <translation>Impostazioni archivi file</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="48"/>
+@@ -29779,7 +29779,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="55"/>
+ <source>Schedule Recordings</source>
+- <translation>Programma registrazioni</translation>
++ <translation>Programmazione</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="56"/>
+@@ -29872,7 +29872,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="74"/>
+ <source>Pick a program based on category</source>
+- <translation>Scegli programma basato sulla categoria</translation>
++ <translation>Scegli programma in base alla categoria</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="75"/>
+@@ -29892,12 +29892,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="78"/>
+ <source>Pick a program based on time</source>
+- <translation>Scegliere un programma basato sull'ora</translation>
++ <translation>Scegli un programma in base all'ora</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="79"/>
+ <source>Program Guide</source>
+- <translation>Guida programmi</translation>
++ <translation>Guida TV</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="80"/>
+@@ -29907,7 +29907,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="81"/>
+ <source>Program Finder</source>
+- <translation>Cerca programmi</translation>
++ <translation>Cerca programma</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="82"/>
+@@ -29937,7 +29937,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="87"/>
+ <source>Custom Record</source>
+- <translation>Registrazione personalizzata</translation>
++ <translation>Registr. personalizzata</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="88"/>
+@@ -29947,7 +29947,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="89"/>
+ <source>Manual Schedule</source>
+- <translation>Programmazione manuale</translation>
++ <translation>Programmaz. manuale</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="90"/>
+@@ -29972,7 +29972,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="94"/>
+ <source>Find a program matching a keyword</source>
+- <translation>Trova programmi in base alle parole chiave</translation>
++ <translation>Trova programma in base a parola chiave</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="95"/>
+@@ -29982,7 +29982,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="96"/>
+ <source>Find a program including a given person</source>
+- <translation>Scegli programma in base a una data persona</translation>
++ <translation>Trova programma in base a una data persona</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="97"/>
+@@ -30174,7 +30174,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="289"/>
+ <source>Find Online Banners</source>
+- <translation>Trovare banner online</translation>
++ <translation>Trova banner online</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="290"/>
+@@ -30194,7 +30194,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="293"/>
+ <source>A blue theme. Originally designed before the MythUI rewrite, MythCenter has been updated to take advantage of the new UI library while still maintaining the look and feel that long-time MythTV users are used to.</source>
+- <translation>Un tema blu. Originariamente disegnato prima della riscrittura di MythUI, MythCenter è stato aggiornato per recepire i vantaggi della nuova libreria UI pur mantenendo l'aspetto e l'atmosfera che per lungo tempo è stato usato dagli utenti MythTV.</translation>
++ <translation>Un tema blu. In origine progettato prima della riscrittura di MythUI, MythCenter è stato aggiornato per recepire i vantaggi della nuova libreria UI pur mantenendo l'aspetto e l'atmosfera che per lungo tempo sono stati usati dagli utenti MythTV.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="150"/>
+@@ -30239,7 +30239,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="391"/>
+ <source>This was adapted from the Jeroen Brosens' MythCenter theme. The fonts have been changed to freely redistributable ones and layout changes have been made to make this theme look good on 1280x720 and 1920x1080 screens with a 1:1 pixel aspect ratio.</source>
+- <translation>Esso è stato adattato dal tema MythCenter di Jeron Brosens. I caratteri sono stati sostituiti con quelli distribuiti liberamente e la disposizione è stata modificata per rendere questo tema bello da vedersi su schermi 1280x720 e 1920x1080 con una proporzione 1:1 pixel.</translation>
++ <translation>Esso è stato adattato dal tema MythCenter di Jeron Brosens. I caratteri sono stati sostituiti con quelli distribuiti liberamente e la disposizione è stata modificata per rendere questo tema adatto alla visione su schermi 1280x720 e 1920x1080 con una proporzione 1:1 pixel.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="394"/>
+@@ -30326,7 +30326,7 @@ gg MMMM aaaa</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="406"/>
+ <source>Retrieving Recording Status...</source>
+- <translation>Recupero dello stato registrazione...</translation>
++ <translation>Recupero stato registrazione...</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="408"/>
+@@ -30491,17 +30491,17 @@ gg MMMM aaaa</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="384"/>
+ <source>Backend is offline</source>
+- <translation>Backend è disconesso</translation>
++ <translation>Il Backend è sconnesso</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="579"/>
+ <source>Listen to Radio Stream</source>
+- <translation>Ascolta flusso radio</translation>
++ <translation>Radio in streaming</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="580"/>
+ <source>Play radio streams</source>
+- <translation>Riproduci flussi radio</translation>
++ <translation>Riproduci radio stream</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="797"/>
+@@ -30604,7 +30604,7 @@ gg MMMM aaaa</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1030"/>
+ <source>A sleek black theme that is the default theme for the Mythbuntu distribution. The Mythbuntu theme is inspired by ProjectGrayhem.</source>
+- <translation>Un tema elegante, questo è il tema predefinito per la distribuzione Mythbuntu. Il tema Mythbuntu è inspirato da ProjectGrayhem.</translation>
++ <translation>Un tema elegante; questo è il tema predefinito per la distribuzione Mythbuntu. Il tema Mythbuntu è inspirato a ProjectGrayhem.</translation>
+ </message>
+ <message>
+ <source>%director%</source>
+@@ -30729,12 +30729,12 @@ gg MMMM aaaa</translation>
+ Once you have completed your modifications, click the "Save" button.</source>
+ <translation>Nell'area di testo sottostante, è possibile modificare il titolo della registrazione, sottotitolo e descrizione.
+
+-Una volta completate le modifiche, fare clic sull pulsante "Salva".</translation>
++Una volta completate le modifiche, fai clic sull pulsante "Salva".</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="741"/>
+ <source>You Haven't Scheduled Any Programs To Be Recorded. To schedule a recording, exit this screen and select 'Program Guide' or 'Program Finder'</source>
+- <translation>Non c'è nessuna registrazione programmata. Per programmare una registrazione, uscire da questa schermata e selezionare "Guida Programmi" o "Cerca Programmi" </translation>
++ <translation>Non c'è nessuna registrazione programmata. Per programmare una registrazione, esci da questa schermata e seleziona "Guida TV" o "Cerca Programmi" </translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1079"/>
+@@ -30749,12 +30749,12 @@ Una volta completate le modifiche, fare clic sull pulsante "Salva".</t
+ <message>
+ <location filename="../themes/themestrings.h" line="1081"/>
+ <source>Press Up/Down from letter list, to navigate to another list. Press Left/Right from Show or Episode list to navigate to another list.</source>
+- <translation>Premere su/giù nella lista caratteri alfabetici, per cambiarelettera. Premere sinistra/destra dall' elenco programmi o episodi per cambiare elenco.</translation>
++ <translation>Premi su/giù nella lista caratteri alfabetici, per cambiare lettera. Premi sinistra/destra dall' elenco programmi o episodi per cambiare elenco.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1084"/>
+ <source>Use [Menu] or [PREVVIEW]/[NEXTVIEW] to cycle through other settings</source>
+- <translation>Usare [Menù] o [PREVVIEW]/[NEXTVIEW] per scorrere le altre impostazioni</translation>
++ <translation>Usa [Menù] o [PREVVIEW]/[NEXTVIEW] per scorrere le altre impostazioni</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1082"/>
+@@ -30803,7 +30803,7 @@ Una volta completate le modifiche, fare clic sull pulsante "Salva".</t
+ <message>
+ <location filename="../themes/themestrings.h" line="1088"/>
+ <source>The recording schedule was not changed.</source>
+- <translation>La pianificazione delle registrazioni non è stata cambiata. </translation>
++ <translation>La pianificazione delle registrazioni non è stata cambiata.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1089"/>
+@@ -30970,7 +30970,7 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1107"/>
+ <source>No videos in library, or no files found. If you have configured a video directory, press MENU and select "Scan for Changes."</source>
+- <translation>Nessun video nella libreria o nessun file trovato. Se è stato configurata una directory video, premere MENÙ e selezionare "Rileva modifiche."</translation>
++ <translation>Libreria video vuota o nessun file trovato. Se è stata configurata una directory video, premi MENÙ e seleziona "Rileva modifiche."</translation>
+ </message>
+ <message>
+ <source>Category: %1</source>
+@@ -30979,7 +30979,7 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1109"/>
+ <source>Use default player</source>
+- <translation>Usa il riproduttore multimediale predefinito</translation>
++ <translation>Usa il riproduttore predefinito</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1110"/>
+@@ -31024,7 +31024,7 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1118"/>
+ <source>Get Screenshot</source>
+- <translation>Ottenere schermate</translation>
++ <translation>Copia schermo</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1119"/>
+@@ -31034,7 +31034,7 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1120"/>
+ <source>Browsable</source>
+- <translation>Navigabile</translation>
++ <translation>Consultabile</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1023"/>
+@@ -31071,7 +31071,7 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1123"/>
+ <source>Designed to show off some different element arrangements. Reminder: On Watch Recordings screen [Rew] and [FF] can be used to change the Rec. Group.</source>
+- <translation>Progettato per mostaredifferenti disposizioni degli elementi. Ricordare: sulla schermata "Registrazioni" [Rew] e [FF] possono essere usati per cambiare il gruppo di registrazione.</translation>
++ <translation>Progettato per mostare differenti disposizioni degli elementi. Ricorda: sulla schermata "Registrazioni" [Rew] e [FF] possono essere usati per cambiare il gruppo di registrazione.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1124"/>
+@@ -31171,7 +31171,7 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1143"/>
+ <source>Look at the program list and schedule them</source>
+- <translation>Cerca programmi nell'elenco e pianificali</translation>
++ <translation>Vedi i programmi in elenco e pianificali</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1144"/>
+@@ -31231,12 +31231,12 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1155"/>
+ <source>Search Term:</source>
+- <translation>Termini di ricerca:</translation>
++ <translation>Termine di ricerca:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1156"/>
+ <source>Search State:</source>
+- <translation>Stato di ricerca:</translation>
++ <translation>Stato ricerca:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1157"/>
+@@ -31266,7 +31266,7 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1162"/>
+ <source>Icon import</source>
+- <translation>Icona di importazione</translation>
++ <translation>Importa icona</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1163"/>
+@@ -31291,7 +31291,7 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1168"/>
+ <source>Use this language for Game Metadata</source>
+- <translation>Usa questa lingua per i metadati di gioco</translation>
++ <translation>Usa questa lingua per i metadati dei giochi</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1169"/>
+@@ -31361,12 +31361,12 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1183"/>
+ <source>Internet and Information</source>
+- <translation>Internet o informazioni</translation>
++ <translation>Internet e informazioni</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1184"/>
+ <source>Surf the net, read news and more</source>
+- <translation>Naviga in rete, leggi notizie o altro</translation>
++ <translation>Naviga in rete, leggi notizie e altro</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1185"/>
+@@ -31376,12 +31376,12 @@ Regista: |DIRECTOR%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1186"/>
+ <source>Setup, status information and import</source>
+- <translation>Impostazione, informazioni di stato e importazioni</translation>
++ <translation>Impostazioni, informazioni di stato e importazioni</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1187"/>
+ <source>OSD Debug Information</source>
+- <translation>OSD informazioni di debug</translation>
++ <translation>Informazioni di debug OSD</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1188"/>
+@@ -31413,14 +31413,14 @@ Regista: |DIRECTOR%</translation>
+ <source>You Haven't Scheduled Any Programs To Be Recorded.
+ To schedule a recording, exit this screen and select 'Program Guide' or 'Program Finder'</source>
+ <translation>Non c'è nessuna registrazione programmata.
+-Per programmare una registrazione, uscire da questa schermata e selezionare "Guida Programmi" o "Cerca Programmi" </translation>
++Per programmare una registrazione, esci da questa schermata e seleziona "Guida TV" o "Cerca Programmi" </translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1194"/>
+ <source>You Haven't Scheduled Any Programs To Be Recorded
+ To schedule a recording, exit this screen and Select 'Program Guide' or 'Program Finder'</source>
+ <translation>Non c'è nessuna registrazione programmata
+- Per programmare una registrazione, uscire da questa schermata e selezionare 'Guida Programmi' o 'Cerca Programmi' </translation>
++ Per programmare una registrazione, uscire da questa schermata e selezionare 'Guida TV' o 'Cerca Programmi' </translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1195"/>
+@@ -31430,7 +31430,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &quo
+ <message>
+ <location filename="../themes/themestrings.h" line="1196"/>
+ <source>System Event Command Editor</source>
+- <translation>Editor comandi degli eventi di sistema</translation>
++ <translation>Editor comandi degli eventi sistema</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1197"/>
+@@ -31472,14 +31472,14 @@ Errata: %ERRATA%</translation>
+ <source>No videos in library, or no files found.
+
+ If you have configured a video directory, press "M" (or the MENU key) and select "Scan for Changes."</source>
+- <translation>Nessun video nella libreria, o nessun file trovato.
++ <translation>Libreria vuota, o file non trovato.
+
+-Se si è configurata una directory video, premere "M" (o il tasto MENÙ) e selezionare "Rileva modifiche."</translation>
++Se hai configurato una directory video, premi "M" (o il tasto MENÙ) e seleziona "Rileva modifiche."</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1205"/>
+ <source>Video Tree</source>
+- <translation>Struttura video</translation>
++ <translation>Albero video</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1206"/>
+@@ -31504,7 +31504,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="1210"/>
+ <source>Browseable:</source>
+- <translation>Navigabile:</translation>
++ <translation>Visibile:</translation>
+ </message>
+ <message>
+ <source>Undefined</source>
+@@ -31513,7 +31513,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="1211"/>
+ <source>Perform metadata update after video scan:</source>
+- <translation>Esegui l'aggiornamento dei metadato dopo la scansione video:</translation>
++ <translation>Dopo la scansione video esegui l'aggiornamento dei metadati:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1212"/>
+@@ -31571,7 +31571,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="360"/>
+ <source>Move the selected corner of the preview image to the corner of the TV screen. Press SELECT to edit the other corner. Press MENU for options and ESC to quit.</source>
+- <translation>Spostare l'angolo dell'anteprima immagine all'angolo dello schermo TV. Premere SELECT per modificare l'altro angolo. Premere MENU per le opzioni e ESC per uscire.</translation>
++ <translation>Sposta l'angolo dell'anteprima immagine nell'angolo dello schermo TV. Premi SELECT per modificare l'altro angolo. Premi MENU per le opzioni e ESC per uscire.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="418"/>
+@@ -31586,7 +31586,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="420"/>
+ <source>Game Metadata Source:</source>
+- <translation>Sorgente metadati gioco:</translation>
++ <translation>Sorgente metadati giochi:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="421"/>
+@@ -31596,7 +31596,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="422"/>
+ <source>MythTV Configuration Wizard</source>
+- <translation>Configurazione guidata MythTV</translation>
++ <translation>Configuraz.MythTV guidata</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="423"/>
+@@ -31661,7 +31661,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="510"/>
+ <source>View and schedule recordings</source>
+- <translation>Vedi e programma registrazioni</translation>
++ <translation>Vedi e programma le registrazioni</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="511"/>
+@@ -31671,7 +31671,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="512"/>
+ <source>Play music files and internet radio streams</source>
+- <translation>Riproduci file musicali e flussi internet radio</translation>
++ <translation>Riproduci file musicali e stream radio</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="513"/>
+@@ -31721,7 +31721,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="530"/>
+ <source>Version Mismatch</source>
+- <translation>Versione non corrispondente</translation>
++ <translation>La versione non corrisponde</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="531"/>
+@@ -31826,7 +31826,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="36"/>
+ <source>Old Gallery Settings</source>
+- <translation>Vecchie impostazioni galleria </translation>
++ <translation>Imposta vecchia galleria</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="37"/>
+@@ -31841,7 +31841,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="122"/>
+ <source>Old Gallery</source>
+- <translation>Galleria vecchia</translation>
++ <translation>Vecchia galleria</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="123"/>
+@@ -31886,7 +31886,7 @@ Se si è configurata una directory video, premere "M" (o il tasto MEN
+ <message>
+ <location filename="../themes/themestrings.h" line="554"/>
+ <source>The recording schedule was not changed</source>
+- <translation>Pianificazione registrazioni invariata</translation>
++ <translation>Pianificazione registrazione invariata</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="555"/>
+@@ -31973,7 +31973,7 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="606"/>
+ <source>Play Optical Disc</source>
+- <translation>Riproduci disco ottico</translation>
++ <translation>Riproduci disco</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="607"/>
+@@ -32023,7 +32023,7 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="634"/>
+ <source>Move the selected arrow to the corner of the TV screen. Press SELECT to edit the other arrow. Press MENU for options and ESC to quit.</source>
+- <translation>Spostare la freccia selezionata nell'angolo dello schermo TV. Premere SELECT per spostare l'altra freccia. Premere MENU per le opzioni e ESC per uscire.</translation>
++ <translation>Sposta la freccia selezionata nell'angolo dello schermo TV. Premi SELECT per spostare l'altra freccia. Premi MENU per le opzioni e ESC per uscire.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="635"/>
+@@ -32113,7 +32113,7 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="653"/>
+ <source>Edit the details about this channel</source>
+- <translation>Modificare i dettagli su questo canale</translation>
++ <translation>Modifica dettagli di questo canale</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="654"/>
+@@ -32143,7 +32143,7 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="660"/>
+ <source>LiveTV</source>
+- <translation>LiveTV</translation>
++ <translation>DirettaTV</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="661"/>
+@@ -32368,7 +32368,7 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="707"/>
+ <source>To create a custom recording rule, either select an existing rule, or create a new rule by typing in a name. Then select a rule type and hit enter. The SQL code will be transferred below, and you can edit it and insert your own program information. Finally, you can test, immediately activate, store, or cancel your rule.</source>
+- <translation>Creare una regola personalizzata di registrazione o selezionare una regola esistente o creare una nuova regola da digitare in un nome, quindi selezionare un tipo di regola e premere invio. Il codice SQL verrà trasferito sotto dove sarà possibile modificarlo inserendo nel programma le proprie informazioni. Quindi sarà possibile: provare, attivare, salvare o cancellare la regola.</translation>
++ <translation>Per creare una regola personalizzata di registrazione seleziona una regola esistente o creane una nuova e assegnale un nome, quindi seleziona un tipo di regola e premie invio. Il codice SQL verrà trasferito nel campo sottostante dove sarà possibile modificarlo inserendo nel codice le proprie informazioni. Quindi sarà possibile: provare, attivare, salvare o cancellare la regola.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="709"/>
+@@ -32393,7 +32393,7 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="713"/>
+ <source>%Final Priority: |finalpriority%</source>
+- <translation></translation>
++ <translation>%Final Priority: |finalpriority%</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="714"/>
+@@ -32473,7 +32473,7 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="743"/>
+ <source>System Event command Editor</source>
+- <translation>Editor comandi degli eventi di sistema</translation>
++ <translation>Editor comandi degli eventi sistema</translation>
+ </message>
+ <message numerus="yes">
+ <location filename="../themes/themestrings.h" line="744"/>
+@@ -32566,7 +32566,7 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="771"/>
+ <source>No videos in library, or no files found. If you have configured a video directory, press "M" (or the MENU key) and select "Scan for Changes."</source>
+- <translation>Nessun video nella libreria o nessun file trovato. Se è stato configurato una directory video, premere "M" (o il tasto MENÙ) e selezionare "Rileva modifiche".</translation>
++ <translation>Libreria vuota o file non trovato. Se è stata configurata una directory video, premi "M" (o il tasto MENÙ) e seleziona "Rileva modifiche."</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="775"/>
+@@ -32668,19 +32668,19 @@ dd MMM yyyy</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="851"/>
+ <source>To manually schedule a recording, enter a title (optional). Then set the channel, date, start time, and duration of your recording. Note that this recording will not have any listings data or other information provided by an EPG.</source>
+- <translation>Per programmare manualmente una registrazione, inserire un titolo (opzionale), poi impostare il canale, la data, l'ora di inizio e la durata della registrazione. Nota che questa registrazione non ha alcun elenco dati o altre informazioni provenienti da un EPG.</translation>
++ <translation>Per programmare manualmente una registrazione, inserisci un titolo (opzionale), poi imposta il canale, la data, l'ora di inizio e la durata della registrazione. Nota che questa registrazione non ha alcun dato o altre informazioni provenienti da un EPG.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="857"/>
+ <source>To give greater or lesser priority to a channel in your lineup, select it from the list. To increase the channel's priority, press the right arrow. To decrease its priority, press the left arrow.</source>
+- <translation>Per attribuire maggiore o minore priorità ad un canale nella scaletta, selezionarlo dalla lista. Per incrementare la priorità del canale, premere la freccia destra. Per decrementare la priorità, premere la freccia sinista.</translation>
++ <translation>Per attribuire maggiore o minore priorità ad un canale nella scaletta, selezionarlo dalla lista. Per incrementare la priorità del canale, premi la freccia destra. Per decrementare la priorità, premi la freccia sinista.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="858"/>
+ <source>To create a custom priority rule, enter a name and priority adjustment. You can them select from existing priority templates or create one of your own using SQL syntax in the "Clause SQL" edit box.
+
+ Once you have completed your rule, can can Test, Delete, or Install it right away.</source>
+- <translation>Per creare regole priorità personalizzate, inserire il nome e le impostazioni della priorità. E' possibile attingere dai modelli esistenti delle priorità o crearne una nuova usando la sintassi SQL nella casella di modifica "Clausola SQL".
++ <translation>Per creare regole priorità personalizzate, inserisci il nome e le impostazioni della priorità. E' possibile attingere dai modelli delle priorità esistentio o crearne una nuova usando la sintassi SQL nella casella di modifica "Clausola SQL".
+
+ Dopo aver completato la regola, sarà possibile testarla, eliminarla, o applicarla immediatamente.</translation>
+ </message>
+@@ -32689,9 +32689,9 @@ Dopo aver completato la regola, sarà possibile testarla, eliminarla, o applicar
+ <source>You can specify basic criteria to create powerful search and record rules. Below, you may enter title, subtitle, and description phrases (all optional), as well as category, genre, and channel values to refine a complex search for programs.
+
+ When you have completed your configuration, press "OK" to search.</source>
+- <translation>Specificare le norme base per creare una potente regola di ricerca e registrazione. Per rifinire la ricerca completa per programmi è possibile inserire di seguito, come categoria, genere e valutazione canale: titolo, sottotitolo e frase di descrizione (tutto opzionale).
++ <translation>Puoi definire le norme base per creare potenti regole di ricerca e registrazione. Qui sotto è possibile inserire: titolo, sottotitolo e descrizione (tutte opzionali), come anche: categoria, genere e valutazione canale.
+
+-Dopo aver completato la configurazione, premere "OK" per ricercare.</translation>
++Dopo aver completato la configurazione, premi "OK" per avviare la ricerca.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="866"/>
+@@ -32708,7 +32708,7 @@ Dopo aver completato la configurazione, premere "OK" per ricercare.</t
+ <source>To create a custom recording rule, either select an existing rule, or create a new rule by typing in a name. Then select a rule type and hit enter. The SQL code will be transferred below, and you can edit it and insert your own program information.
+
+ Finally, you can test, immediately activate, store, or cancel your rule.</source>
+- <translation>Per creare una regola personalizzata di registrazione o selezionare una regola esistente o creare una nuova regola da digitare in un nome, selezionare un tipo di regola e premere invio. Il codice SQL verrà trasferito sotto e dove sarà possibile modificarlo e inserendo le proprie informazioni sul programma.
++ <translation>Per creare una regola personalizzata di registrazione seleziona una regola esistente o creane una nuova e assegnale un nome. Seleziona quindi un tipo di regola e premi invio. Il codice SQL verrà trasferito nel campo sottostante dove sarà possibile modificarlo inserendo le proprie informazioni sul programma.
+
+ Infine, sarà possibile provare, attivare imediatamente, archiviare o cancellare la regola.</translation>
+ </message>
+@@ -32721,8 +32721,8 @@ Infine, sarà possibile provare, attivare imediatamente, archiviare o cancellare
+ <location filename="../themes/themestrings.h" line="1001"/>
+ <source>No videos in library, or no files found.
+ If you have configured a video directory, press "M" (or the MENU key) and select "Scan for Changes."</source>
+- <translation>Nessun video nella libreria o nessun file trovato.
+- Se è stata configurata una directory video, premere "M" (o il tasto MENÙ) e selezionare "Rileva modifiche".</translation>
++ <translation>Libreria vuota o file non trovato.
++ Se hai configurato una directory video, premi "M" (o il tasto MENÙ) e seleziona "Rileva modifiche."</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1002"/>
+@@ -32775,7 +32775,7 @@ Parti |PARTNUMBER| di %%PARTTOTAL%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="1217"/>
+ <source>A redesign of the MythMediaStream theme, inspired by the MediaStream Redux skin created by JezzX: This theme has been made to look like the original XBMC skin were posible and/or applicable. Looks best with the matching menu called 'MythMediaStream' as this menu lay-out and items are tailored for this particular theme.</source>
+- <translation>Un riprogettazione del tema MythMediaStream, ispirato al MediaStream Redux skin creato da jezzX. Questo tema è stato fatto per asomigliare all'XBMC skin originale dove è stato possibile e/o applicabile. Risulta migliore con il menu corrispondente chiamato 'MythMediaStream' perchè con questa disposizione i menù e gli elementi sono fatti su misura per questo specifico tema. </translation>
++ <translation>Un riprogettazione del tema MythMediaStream, ispirato al MediaStream Redux creato da jezzX. Questo tema, dove è stato possibile e/o applicabile, è stato fatto per asomigliare all'XBMC originale. Si presente meglio con il menu corrispondente chiamato 'MythMediaStream' perchè con questa disposizione i menù e gli elementi sebrano fatti apposta per questo specifico tema.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="793"/>
+@@ -32785,7 +32785,7 @@ Parti |PARTNUMBER| di %%PARTTOTAL%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="803"/>
+ <source>Let's set up your DVR! On the next few screens, we will configure your system to play back audio and video, optimize your color and contrast, and make sure we are taking advantage of all of your hardware. Press next to begin!</source>
+- <translation>Impostazione del DVR! Nelle prossime schermate, verrà configurato il sistema per riprodurre audio e video, ottimizzare colori e contrasti e assicurarsi di prendere vantaggio dall'hardware. Premere avanti per incominciare!</translation>
++ <translation>Impostazione del DVR! Nelle prossime schermate, verrà configurato il sistema per riprodurre audio e video, ottimizza colori e contrasti e assicurati di approfittando dell'hardware disponibile. Premi avanti per incominciare!</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="804"/>
+@@ -32795,22 +32795,22 @@ Parti |PARTNUMBER| di %%PARTTOTAL%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="805"/>
+ <source>Visit Your Hardware Profile</source>
+- <translation>Visitare il profilo hardware</translation>
++ <translation>Modifica il profilo hardware</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="806"/>
+ <source>Delete Your Hardware Profile</source>
+- <translation>Eliminare il profilo hardware</translation>
++ <translation>Elimina il profilo hardware</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="807"/>
+ <source>Your profile is located at:</source>
+- <translation>Il profilo è collocato a:</translation>
++ <translation>Il profilo è collocato in:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="808"/>
+ <source>Your profile's admin password is:</source>
+- <translation>Password amministratore del profilo è:</translation>
++ <translation>La password amministratore del profilo è:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="809"/>
+@@ -32840,17 +32840,17 @@ Parti |PARTNUMBER| di %%PARTTOTAL%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="814"/>
+ <source>Test Audio</source>
+- <translation>Testare audio</translation>
++ <translation>Test audio</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="815"/>
+ <source>Test SD Playback</source>
+- <translation>Testare siproduzione SD</translation>
++ <translation>Testa siproduzione SD</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="816"/>
+ <source>Test HD Playback</source>
+- <translation>Testare riproduzione HD</translation>
++ <translation>Testa riproduzione HD</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="817"/>
+@@ -32883,7 +32883,7 @@ Parti |PARTNUMBER| di %%PARTTOTAL%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="825"/>
+ <source>Edit the details about this channel.</source>
+- <translation>Modificare i dettagli su questo canale.</translation>
++ <translation>Modifica dettagli di questo canale.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="826"/>
+@@ -32978,7 +32978,7 @@ Parti |PARTNUMBER| di %%PARTTOTAL%</translation>
+ <message>
+ <location filename="../themes/themestrings.h" line="908"/>
+ <source>Arclight is a sleek theme meant for widescreen HD displays. It is high contrast and uses shapes and an attractive layout to convey information simply and consistently.</source>
+- <translation>Arclight è un tema senza fronzoli destinato a schermi HD widescreen. È ad alto contrasto e utilizza forme e aspetto attraente per presentare informazioni semplici e consistenti.</translation>
++ <translation>Arclight è un tema senza fronzoli destinato a schermi HD widescreen. È ad alto contrasto e utilizza forme e aspetto attraenti per presentare informazioni semplici e coerenti.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="755"/>
+@@ -33035,14 +33035,14 @@ Parti |PARTNUMBER| di %%PARTTOTAL%</translation>
+ <source>On this screen, you can add new extensions to be recognized by the Video Plugin. If a scan does not add your files, create a new extension below by clicking the "New" button.
+
+ If you select "Use Default Player," the player command set for the extension will be ignored. "Ignore This File Type" prevents the items from appearing in a scan.</source>
+- <translation>In questa schermata è possibile aggiungere nuove estensioni riconosciute dal plugin video. Se la scansione non dovesse aggiungere file, creare una nuova estensione facendo clic sul pulsante "Nuovo".
++ <translation>In questa schermata è possibile aggiungere nuove estensioni riconosciute dal plugin video. Se la scansione non dovesse aggiungere file, crea una nuova estensione facendo clic sul pulsante "Nuovo".
+
+ Se si seleziona "Usa riproduttore predefinito" il riproduttore del lettore impostato per l'estensione verrà ignorato. "Ignora Questo Tipo di File" impedisce agli elementi di comparire nella scansione.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="923"/>
+ <source>Use Default Player</source>
+- <translation>Usa riproduttore predefinito</translation>
++ <translation>Usa lettore predefinito</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="924"/>
+@@ -33077,7 +33077,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="761"/>
+ <source>Next File:</source>
+- <translation>Prossimo file:</translation>
++ <translation>File successivo:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="929"/>
+@@ -33142,7 +33142,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="762"/>
+ <source>Browse:</source>
+- <translation>Navigare:</translation>
++ <translation>Naviga:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="312"/>
+@@ -33212,7 +33212,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="957"/>
+ <source>Icon Downloader</source>
+- <translation>Downloader icona</translation>
++ <translation>Downloader icone</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="647"/>
+@@ -33245,7 +33245,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="1220"/>
+ <source>TintedGlass is a transparent theme that is a little old school MythTV yet takes advantage of new MythUI features.</source>
+- <translation>TintedGlass è un tema trasparente che è un pò vecchia scuola di MythTV ora prende vantaggio dalle nuove caratteristiche di MythUI.</translation>
++ <translation>TintedGlass è un tema trasparente che è un pò vecchia scuola di MythTV orasfrutta le nuove caratteristiche di MythUI.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="1221"/>
+@@ -33259,7 +33259,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="1223"/>
+ <source>blootube-ng is a theme based on the original blootube-wide by Justin Hornsby (justin.hornsby(a)gmail.com) which uses very large graphics associated with every menu entry. All changes where made to bring this theme forward to MythTV 0.24.</source>
+- <translation>blootube-ng è un tema basato sull'originale blootube-wide di Justin Hornsby (justin.hornsby(a)gmail.com) il quale fa ampio uso di grafica associata con ogni menù. Tutti i cambiamenti sono stati fatti per aggiornare questo tema a MythTV 0.24.</translation>
++ <translation>blootube-ng è un tema basato sull'originale blootube-wide di Justin Hornsby (justin.hornsby(a)gmail.com) il quale fa ampio uso di grafica associata ad ogni menù. Tutti i cambiamenti sono stati fatti per aggiornare questo tema a MythTV 0.24.</translation>
+ </message>
+ <message>
+ <source>Blue-abstract is a modern looking theme meant for widescreen HD displays. The blue background and the consistent layout makes it an attractive and elegant looking theme.</source>
+@@ -33276,7 +33276,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="107"/>
+ <source>Playback Groups</source>
+- <translation>Gruppi di riproduzione</translation>
++ <translation>Gruppi riproduzione</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="108"/>
+@@ -33296,7 +33296,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="112"/>
+ <source>Watch TV</source>
+- <translation>Guarda TV</translation>
++ <translation>Diretta TV</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="113"/>
+@@ -33314,7 +33314,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="114"/>
+ <source>Previously Recorded</source>
+- <translation>Già registrato</translation>
++ <translation>Già registrati</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="115"/>
+@@ -33354,7 +33354,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="126"/>
+ <source>News Feeds</source>
+- <translation>News feeds</translation>
++ <translation>Sorgenti News </translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="127"/>
+@@ -33394,7 +33394,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="239"/>
+ <source>No listings found for this program.</source>
+- <translation>Nessun elenco per questo programma.</translation>
++ <translation>Nessun elenco per questa selezione.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="411"/>
+@@ -33529,12 +33529,12 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="449"/>
+ <source>Media Library</source>
+- <translation>Catalogo multimediale</translation>
++ <translation>Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="450"/>
+ <source>Info Centre</source>
+- <translation>Centro informazioni</translation>
++ <translation>Informazioni</translation>
+ </message>
+ <message>
+ <source>Cert.:</source>
+@@ -33672,7 +33672,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="184"/>
+ <source>Show Watch List</source>
+- <translation>Mostra già visti</translation>
++ <translation>Mostra lista In evidenza</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="185"/>
+@@ -33732,7 +33732,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="201"/>
+ <source>Manual Recording Schedule</source>
+- <translation>Programmazione registrazioni manuale</translation>
++ <translation>Programma registrazioni manualmente</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="202"/>
+@@ -33892,17 +33892,17 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="234"/>
+ <source>Optional title phrase:</source>
+- <translation>Frase di titolo opzionale:</translation>
++ <translation>Titolo opzionale:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="235"/>
+ <source>Optional subtitle phrase:</source>
+- <translation>Frase di sottotitolo opzionale:</translation>
++ <translation>Sottotitolo opzionale:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="236"/>
+ <source>Optional description phrase:</source>
+- <translation>Frase di descrizione opzionale:</translation>
++ <translation>Descrizione opzionale:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="471"/>
+@@ -34068,7 +34068,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="300"/>
+ <source>No videos in library, or no files found. If you have configured a video directory, press "M" (or the MENU key) and select "Scan for Changes."</source>
+- <translation>Nessun video nella libreria o nessun file trovato. Se è stato configurato una directory video, premere "M" (o il tasto MENÙ) e selezionare "Rileva modifiche".</translation>
++ <translation>Libreria vuota o file non trovato. Se hai configurato una directory video, premi "M" (o il tasto MENÙ) e seleziona "Rileva modifiche."</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="303"/>
+@@ -34088,12 +34088,12 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="20"/>
+ <source>Theme Chooser</source>
+- <translation>Selettore tema</translation>
++ <translation>Scegli Tema</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="21"/>
+ <source>Choose a local theme or download new ones</source>
+- <translation>Scegliere un tema locale o scaricarne uno nuovo</translation>
++ <translation>Sceglii un tema locale o scaricane uno nuovo</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="22"/>
+@@ -34108,7 +34108,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="14"/>
+ <source>Setup Wizard</source>
+- <translation>Impostazione guidata</translation>
++ <translation>Impostaz. guidata</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="15"/>
+@@ -34118,7 +34118,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="28"/>
+ <source>Artwork and Data Sources</source>
+- <translation>Artwork e origine dati</translation>
++ <translation>Grafiche/sorg.dati</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="29"/>
+@@ -34143,7 +34143,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="318"/>
+ <source>MythVideo File Associations</source>
+- <translation>Mythvideo associazione file</translation>
++ <translation>Mythvideo: associazione file</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="324"/>
+@@ -34257,7 +34257,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="279"/>
+ <source>Commercial Flag new recordings</source>
+- <translation>Marca pubblicità su nuove registrazioni</translation>
++ <translation>Cerca pubblicità su nuove registrazioni</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="280"/>
+@@ -34377,7 +34377,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="304"/>
+ <source>Lowest</source>
+- <translation>Più Basso</translation>
++ <translation>Il più basso</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="305"/>
+@@ -34402,7 +34402,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="308"/>
+ <source>Browsable:</source>
+- <translation>Sfogliabile:</translation>
++ <translation>Consultabile:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="297"/>
+@@ -34602,7 +34602,7 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="58"/>
+ <source>Edit or delete any recording rule</source>
+- <translation>Modifica o elimina ogni regola di registrazione</translation>
++ <translation>Modifica o elimina tutte le regole di registrazione</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="525"/>
+@@ -34612,12 +34612,12 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <message>
+ <location filename="../themes/themestrings.h" line="359"/>
+ <source>Appearance Wizard</source>
+- <translation>Impostazione schermo guidata</translation>
++ <translation>Imposta schermo</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="954"/>
+ <source>Move the selected arrow to the corner of the TV screen. Press SELECT to edit the other arrow. Press MENU for options and ESC to quit.</source>
+- <translation>Spostare la freccia selezionata nell'angolo dello schermo TV. Premere SELECT per spostare l'altra freccia. Premere MENU per le opzioni e ESC per uscire.</translation>
++ <translation>Sposta la freccia selezionata nell'angolo dello schermo TV. Premi SELECT per spostare l'altra freccia. Premi MENU per le opzioni e ESC per uscire.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="160"/>
+@@ -34690,12 +34690,12 @@ Se si seleziona "Usa riproduttore predefinito" il riproduttore del let
+ <source>You Haven't Scheduled Any Programs To Be Recorded
+ To schedule a recording, exit this screen and select 'Program Guide' or 'Program Finder'</source>
+ <translation>Non c'è nessuna registrazione programmata
+-Per programmare una registrazione, uscire da questa schermata e selezionare 'Guida Programmi' o 'Cerca Programmi' </translation>
++Per programmare una registrazione, esci da questa schermata e seleziona 'Guida TV' o 'Cerca Programmi' </translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="245"/>
+ <source>Manage Recording Rules</source>
+- <translation>Gestione delle regole di registrazioni</translation>
++ <translation>Gestione regole di registrazione</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="246"/>
+@@ -34725,7 +34725,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="241"/>
+ <source>Enter Search Text</source>
+- <translation>Inserire testo da cercare</translation>
++ <translation>Inserisci testo da cercare</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="242"/>
+@@ -34755,7 +34755,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="963"/>
+ <source>Show Times:</source>
+- <translation>Mostra ora:</translation>
++ <translation>Mostra orari:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="965"/>
+@@ -34775,7 +34775,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="972"/>
+ <source>Childish is the first MythTV theme designed specifically with children in mind. It was the winner of MythTV's v0.23 theming contest.</source>
+- <translation>ChilDish è il primo tema MythTV disegnato specificatamente per i bambini. È stato il vincitore del theming contest MythTV v0.23.</translation>
++ <translation>ChilDish è il primo tema MythTV progettato specificatamente per i bambini. È stato il vincitore del theming contest MythTV v0.23.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="326"/>
+@@ -34872,7 +34872,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="519"/>
+ <source>Keep up with the news</source>
+- <translation>Aggiornati con le notizie</translation>
++ <translation>Tieniti aggiornato con le notizie</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="568"/>
+@@ -34882,7 +34882,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="520"/>
+ <source>Browse the web</source>
+- <translation>Navigare sul web</translation>
++ <translation>Naviga sul web</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="569"/>
+@@ -34932,7 +34932,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="1182"/>
+ <source>Look at Pictures</source>
+- <translation>Vedi immagini</translation>
++ <translation>Immagini</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="587"/>
+@@ -34942,7 +34942,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="591"/>
+ <source>Media Settings</source>
+- <translation>Impostazioni multimediali</translation>
++ <translation>Multimedia</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="619"/>
+@@ -34952,12 +34952,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="593"/>
+ <source>Info Center Settings</source>
+- <translation>Impostazioni centro informazioni</translation>
++ <translation>Centro informazioni</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="620"/>
+ <source>Configure weather, news, movie info, web, and recipes</source>
+- <translation>Configura meteo,news, informazioni film, web e ricette</translation>
++ <translation>Configura meteo, news, informazioni film, web e ricette</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="595"/>
+@@ -34967,12 +34967,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="596"/>
+ <source>Manage Recordings</source>
+- <translation>Gestisci registrazioni</translation>
++ <translation>Registra</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="618"/>
+ <source>Pick and prioritize shows to record</source>
+- <translation>Seleziona e dai priorità agli programmi da registrare</translation>
++ <translation>Seleziona e assegna priorità ai programmi da registrare</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="598"/>
+@@ -35001,7 +35001,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="608"/>
+ <source>Write video to a data DVD</source>
+- <translation>Scrivi video su un DVD dati</translation>
++ <translation>Scrivi video su un DVD</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="609"/>
+@@ -35041,7 +35041,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="552"/>
+ <source>Channel #</source>
+- <translation>Numero canale #</translation>
++ <translation>Canale #</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="175"/>
+@@ -35116,12 +35116,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="26"/>
+ <source>System Event Handlers</source>
+- <translation>Gestori eventi di sistema</translation>
++ <translation>Eventi sistema</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="27"/>
+ <source>Configure System Event handler commands</source>
+- <translation>Configura i comandi del gestore eventi di sistema</translation>
++ <translation>Configura i comandi del gestore eventi sistema</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="597"/>
+@@ -35136,12 +35136,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="612"/>
+ <source>Prioritize some channels over others</source>
+- <translation>Dà priorità a alcuni canali rispetto ad altri</translation>
++ <translation>Dai priorità a alcuni canali rispetto ad altri</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="613"/>
+ <source>Prioritize some recordings over others</source>
+- <translation>Dà priorità ad alcune registrazioni rispetto ad altre</translation>
++ <translation>Dai priorità ad alcune registrazioni rispetto ad altre</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="617"/>
+@@ -35151,12 +35151,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="625"/>
+ <source>Watch Live TV</source>
+- <translation>Guarda Live TV</translation>
++ <translation>Diretta TV</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="626"/>
+ <source>Watch Online Streams</source>
+- <translation>Guarda online stream</translation>
++ <translation>Guarda stream online</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="628"/>
+@@ -35176,12 +35176,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="632"/>
+ <source>A "Media Center" menu theme. This menu theme is basically meant to bring the common "media player/DVR" functionality to the forefront, organize the plugins, and to make some of myth's more daunting options a little more subtle. Places the common media items on the top level (Recordings, Videos, TV, DVD, Music), places all informational plugins in "Plugins." Puts all setup and scheduling in "Advanced." The top two menu levels will seem new, the ones beneath Advanced->Setup are as in the default menu.</source>
+- <translation>Un menù in tema "Media Center". Questo tema ha essenzialmente lo scopo di portare le funzionalità "media player/DVR" in primo piano, organizzare i plugins e rendere molte delle opzioni di myth scoraggianti un pò più facili. Esso mette al livello superiore tutti gli oggetti multimediali più comuni (Registrazioni, Video, TV, DVD, Musica), i plugins informativi in "Plugins", tutte le impostazioni e le programmazioni in "Avanzato". I primi due livelli del menù sembreranno nuovi, quelli sottostante Avanzato->Impostazioni sono quelli nel menù predefinito.</translation>
++ <translation>Un menù in tema "Media Center". Questo tema ha essenzialmente lo scopo di portare le funzionalità "media player/DVR" in primo piano, organizzando i plugins e rendendo più semplici molte delle opzioni di myth. Esso mette al livello superiore tutti gli oggetti multimediali più comuni (Registrazioni, Video, TV, DVD, Musica), i plugins informativi in "Plugins", tutte le impostazioni e le programmazioni in "Avanzato". I primi due livelli del menù sembreranno nuovi, quelli sottostante Avanzato->Impostazioni sono quelli nel menù predefinito.</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="758"/>
+ <source>Length:</source>
+- <translation>Lunghezza:</translation>
++ <translation>Durata:</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="134"/>
+@@ -35201,7 +35201,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../themes/themestrings.h" line="142"/>
+ <source>Browse Videos</source>
+- <translation>Naviga video</translation>
++ <translation>Sfoglia video</translation>
+ </message>
+ <message>
+ <location filename="../themes/themestrings.h" line="143"/>
+@@ -35251,55 +35251,55 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="20"/>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="36"/>
+ <source>Filename (A-Z)</source>
+- <translation>Nome file (A-Z)</translation>
++ <translation>Ordina nome file (A-Z)</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="21"/>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="37"/>
+ <source>Reverse Filename (Z-A)</source>
+- <translation>Nome file inverso (Z-A)</translation>
++ <translation>Ordina nome file (Z-A)</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="22"/>
+ <source>Exif Date (oldest first)</source>
+- <translation>Data Exif (prima la più vecchia)</translation>
++ <translation>Ordina data Exif: prima la più vecchia</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="23"/>
+ <source>Reverse Exif Date (newest first)</source>
+- <translation>Data Exif inverso (prima la più recente)</translation>
++ <translation>Ordina data Exif: prima la più recente</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="24"/>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="38"/>
+ <source>File Modified Time (oldest first)</source>
+- <translation>Ora file modifica (prima la più vecchia)</translation>
++ <translation>Ordina ora modifica file: prima la più vecchia</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="25"/>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="39"/>
+ <source>Reverse File Modified Time (newest first)</source>
+- <translation>Ora file modifica, inverso(prima la più recente)</translation>
++ <translation>Ordina ora modifica file: prima la più recente</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="26"/>
+ <source>File Extension (A-Z)</source>
+- <translation>Estensione file (A-Z)</translation>
++ <translation>Ordina estensione file (A-Z)</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="27"/>
+ <source>Reverse File Extension (Z-A)</source>
+- <translation>Estensione file, inversa (Z-A)</translation>
++ <translation>Ordina estensione file (Z-A)</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="28"/>
+ <source>File Size (smallest first)</source>
+- <translation>Dimensione file (prima la più piccola)</translation>
++ <translation>Ordina dimensione file: prima più piccola</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="29"/>
+ <source>Reverse File Size (largest first)</source>
+- <translation>Dimensione file, inversa (prima la più grande)</translation>
++ <translation>Ordina dimensione file: prima più grande</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/galleryconfig.cpp" line="33"/>
+@@ -35347,7 +35347,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/gallerytransitions.h" line="147"/>
+ <source>Spin</source>
+- <translation>Rotea</translation>
++ <translation>Ruota</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/gallerytransitions.h" line="159"/>
+@@ -35410,7 +35410,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../libs/libmythtv/transporteditor.cpp" line="324"/>
+ <source>Are you sure you would like to delete this transport?</source>
+- <translation>Sicuro di voler eleiminare questo trasporto ?</translation>
++ <translation>Sei sicuro di voler eleiminare questo trasporto?</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/transporteditor.cpp" line="325"/>
+@@ -35477,7 +35477,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../libs/libmythbase/unzip.cpp" line="249"/>
+ <source>Partially corrupted archive. Some files might be extracted.</source>
+- <translation>Archivio parzialmente corrotto. Molti file potrebbero essere estratti.</translation>
++ <translation>Archivio parzialmente corrotto. Alcuni file potrebbero essere estratti.</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythbase/unzip.cpp" line="250"/>
+@@ -35671,17 +35671,17 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2552"/>
+ <source>Switch to Browse View</source>
+- <translation>Cambiare vista di navigazione</translation>
++ <translation>Cambia vista di navigazione</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2555"/>
+ <source>Switch to Gallery View</source>
+- <translation>Cambiare vista a galleria</translation>
++ <translation>Cambia vista a galleria</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2558"/>
+ <source>Switch to List View</source>
+- <translation>Cambiare vista a lista</translation>
++ <translation>Cambia vista a lista</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="1265"/>
+@@ -35692,7 +35692,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="1113"/>
+ <source>The video scan found no files, have you configured a video storage group?</source>
+- <translation>La scansione video non ha trovato file, si è configurato un gruppo di archiviazione video?</translation>
++ <translation>La scansione video non ha trovato file, hai configurato un gruppo di archiviazione video?</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2287"/>
+@@ -35799,18 +35799,18 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2529"/>
+ <source>Browse By...</source>
+- <translation>Navigare da...</translation>
++ <translation>Naviga da...</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2530"/>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2547"/>
+ <source>Change View</source>
+- <translation>Cambiare visualizzazione</translation>
++ <translation>Cambia visualizzazione</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2459"/>
+ <source>Change Video Details</source>
+- <translation>Cambiare dettagli video</translation>
++ <translation>Cambia dettagli video</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2157"/>
+@@ -35825,17 +35825,17 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2177"/>
+ <source>Retrieved details for %1</source>
+- <translation>Recuperare dettagli per %1</translation>
++ <translation>Recupero dettagli di %1</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2181"/>
+ <source>Failed to retrieve details for %1</source>
+- <translation>Fallito il recupero dei dettagli per %1</translation>
++ <translation>Recupero dettagli di %1 fallito</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2527"/>
+ <source>Retrieve All Details</source>
+- <translation>Recuperare tutti i dettagli</translation>
++ <translation>Recupero i dettagli</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2531"/>
+@@ -35860,17 +35860,17 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2569"/>
+ <source>Browse Library (recommended)</source>
+- <translation>Navigare nella libreria (raccomandato)</translation>
++ <translation>Naviga nella libreria (raccomandato)</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2571"/>
+ <source>Browse Filesystem (slow)</source>
+- <translation>Navigare nel filesystem (lento)</translation>
++ <translation>Naviga nel filesystem (lento)</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2583"/>
+ <source>Video Settings</source>
+- <translation>Impostazioni video</translation>
++ <translation>Imposta video</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2587"/>
+@@ -35885,7 +35885,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2589"/>
+ <source>File Type Settings</source>
+- <translation>Impostazione tipo di file</translation>
++ <translation>Imposta tipo di file</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2642"/>
+@@ -35945,42 +35945,42 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2690"/>
+ <source>View Details</source>
+- <translation>Vedere dettagli</translation>
++ <translation>Vedi dettagli</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2692"/>
+ <source>View Full Plot</source>
+- <translation>Vedere la trama completa</translation>
++ <translation>Vedi trama completa</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2698"/>
+ <source>View Cast</source>
+- <translation>Vedere cast</translation>
++ <translation>Vedi cast</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2700"/>
+ <source>View Homepage</source>
+- <translation>Vedere la homepage</translation>
++ <translation>Vedi homepage</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2712"/>
+ <source>Manage Video Details</source>
+- <translation>Gestione dettagli video</translation>
++ <translation>Gestisci dettagli video</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2718"/>
+ <source>Edit Details</source>
+- <translation>Modificare dettagli</translation>
++ <translation>Modifica dettagli</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2719"/>
+ <source>Retrieve Details</source>
+- <translation>Recuperare dettagli</translation>
++ <translation>Recupera dettagli</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2721"/>
+ <source>Allow Updates</source>
+- <translation>Permettere aggiornamenti</translation>
++ <translation>Permetti aggiornamenti</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2723"/>
+@@ -35990,7 +35990,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2724"/>
+ <source>Reset Details</source>
+- <translation>Azzerare dettagli</translation>
++ <translation>Azzera dettagli</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="3049"/>
+@@ -36000,7 +36000,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2152"/>
+ <source>Fetching details for %1</source>
+- <translation>Recuperare dettagli per %1</translation>
++ <translation>Recupera dettagli per %1</translation>
+ </message>
+ <message>
+ <source> %1x%2</source>
+@@ -36010,13 +36010,13 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="3557"/>
+ <source>Are you sure you want to permanently delete:
+ %1</source>
+- <translation>Eliminare veramente in maniera definitiva:
++ <translation>Sicuro di voler eliminare definitivamente:
+ %1</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="3836"/>
+ <source>There are no videos in the database, would you like to scan your video directories now?</source>
+- <translation>Non ci sono video nel database, scansionare le directory video ora?</translation>
++ <translation>Non ci sono video nel database, cerco nelle directory video?</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="2976"/>
+@@ -36026,17 +36026,17 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="3374"/>
+ <source>Failed to retrieve image(s)</source>
+- <translation>Fallito il recupero delle immagini</translation>
++ <translation>Recupero immagini fallito</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="3376"/>
+ <source>Check logs</source>
+- <translation>Controllare i registri log</translation>
++ <translation>Controlla i registri log</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videodlg.cpp" line="3595"/>
+ <source>Failed to delete file</source>
+- <translation>Fallita l'eliminazione del file</translation>
++ <translation>Eliminazione file fallita</translation>
+ </message>
+ </context>
+ <context>
+@@ -36159,27 +36159,27 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="21"/>
+ <source>4 - Highest</source>
+- <translation>4- Più Alto</translation>
++ <translation>4- Il più Alto</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="23"/>
+ <source>1 - Lowest</source>
+- <translation>1 - Più basso</translation>
++ <translation>1 - Il più basso</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="28"/>
+ <source>This is the 'level' that Video starts at. Any videos with a level at or below this will be shown in the list or while browsing by default. The Parental PIN should be set to limit changing of the default level.</source>
+- <translation>Questo è il "livello" dal quale video inizia. Ogni video con un livello uguale o minore di questo apparirà nella lista o nella ricerca predefinita. Il PIN del controllo parentale dovrebbe essere impostato per limitare la modifica del livello predefinito.</translation>
++ <translation>Questo è il "livello" assegnato inizialmente al video. Ogni video con un livello uguale o minore di questo apparirà nella lista o nella ricerca predefinita. Il PIN del controllo parentale dovrebbe essere impostato per limitare la modifica del livello predefinito.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="40"/>
+ <source>Setting this value to all numbers will make your life much easier.</source>
+- <translation>Impostare il valore a tutti i numeri renderà la vita più semplice.</translation>
++ <translation>Impostando il valore a tutti i valori ti semplificherà la vita.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="48"/>
+ <source>Parental Level 4 PIN</source>
+- <translation>Livello controllo parentale 4 PIN</translation>
++ <translation>PIN livello controllo parentale 4</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="51"/>
+@@ -36189,7 +36189,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="63"/>
+ <source>Parental Level 3 PIN</source>
+- <translation>Livello controllo parentale 3 PIN</translation>
++ <translation>PIN livello controllo parentale 3</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="66"/>
+@@ -36199,7 +36199,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="77"/>
+ <source>Parental Level 2 PIN</source>
+- <translation>Livello controllo parentale 2 PIN</translation>
++ <translation>PIN livello controllo parentale 2</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="80"/>
+@@ -36243,7 +36243,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="138"/>
+ <source>Directory that holds movie screenshots</source>
+- <translation>Directory che contengono le schermate dei film</translation>
++ <translation>Directory che contiene le schermate dei film</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="154"/>
+@@ -36263,7 +36263,7 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="207"/>
+ <source>On DVD insertion</source>
+- <translation>Inserimento in DVD</translation>
++ <translation>Su inserimento DVD</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="209"/>
+@@ -36288,12 +36288,12 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="224"/>
+ <source>Video Tree remembers last selected position</source>
+- <translation>Video Tree ricorda l'ultima posizione selezionata</translation>
++ <translation>Ricorda l'ultima posizione selezionata nell'albero dei video</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="229"/>
+ <source>If set, the current position in the Video Tree is persistent.</source>
+- <translation>Se impostato, la posizione corrente nel Video Tree è persistente.</translation>
++ <translation>Se abilitato, memorizza la posizione nella struttura ad albero dei video.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/videoglobalsettings.cpp" line="284"/>
+@@ -36439,27 +36439,27 @@ Per programmare una registrazione, uscire da questa schermata e selezionare &apo
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2289"/>
+ <source>Default refresh rate when watching a video. Leave at "Auto" to automatically use the best available</source>
+- <translation>Refresh rate predefinito quando si guarda un video. Lasciare su "Auto" per utilizzare automaticamente il migliore disponibile</translation>
++ <translation>Refresh rate predefinito quando si guarda un video. Lascia su "Auto" per utilizzare automaticamente il migliore disponibile</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2293"/>
+ <source>Refresh rate when watching a video at a specific resolution. Leave at "Auto" to automatically use the best available</source>
+- <translation>Freguenza di aggiornamento predefinito quando si guarda un video ad una specifica risoluzione. Lasciare su "Auto" per utilizzare automaticamente la migliore disponibile</translation>
++ <translation>Freguenza di aggiornamento predefinito quando si guarda un video ad una specifica risoluzione. Lascia su "Auto" per utilizzare automaticamente la migliore disponibile</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2301"/>
+ <source>Rate</source>
+- <translation>Rate</translation>
++ <translation>Frequenza</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2313"/>
+ <source>Aspect ratio when watching a video. Leave at "%1" to use ratio reported by the monitor. Set to 16:9 or 4:3 to force a specific aspect ratio.</source>
+- <translation>Rapporto di aspetto quando si sta guardando un video. Lasciare "%1" per usare il rapporto riportato dal monitor. Impostare 16:9 o 4:3 per forzarne uno specifico.</translation>
++ <translation>Rapporto di aspetto quando si sta guardando un video. Lascia "%1" per usare il rapporto riportato dal monitor. Imposta 16:9 o 4:3 per forzarne uno specifico.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2321"/>
+ <source>Aspect ratio when watching a video at a specific resolution. Leave at "%1" to use ratio reported by the monitor. Set to 16:9 or 4:3 to force a specific aspect ratio.</source>
+- <translation>Formato quando si sta guardando un video. ad una determinata risoluzione. Lasciare "%1" per usare il rapporto riportato dal monitor. Impostare 16:9 o 4:3 per forzarne uno specifico.</translation>
++ <translation>Formato quando si sta guardando un video. ad una determinata risoluzione. Lascia "%1" per usare il rapporto riportato dal monitor. Imposta 16:9 o 4:3 per forzarne uno specifico.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="2333"/>
+@@ -36530,7 +36530,7 @@ Se non esistono più rimuoverli</translation>
+ <message>
+ <location filename="../programs/mythfrontend/setupwizard_video.cpp" line="70"/>
+ <source>Select from one of the preconfigured playback profiles. When satisfied, you can test Standard Definition and High Definition playback with the selected profile before moving on.</source>
+- <translation>Selezionare uno dei profili di riproduzione preconfigurati. Prima di proseguire è possibile verificare la definizione standard e la riproduzione in alta definizione con il profilo selezionato.</translation>
++ <translation>Seleziona uno dei profili di riproduzione preconfigurati. Prima di proseguire è possibile verificare la definizione standard e la riproduzione in alta definizione con il profilo selezionato.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/setupwizard_video.cpp" line="75"/>
+@@ -36600,7 +36600,7 @@ Se non esistono più rimuoverli</translation>
+ <message>
+ <location filename="../libs/libmythtv/videosource.cpp" line="3929"/>
+ <source>Video Source Menu</source>
+- <translation>Menù sorgenti video</translation>
++ <translation>Menù sorgente video</translation>
+ </message>
+ <message>
+ <location filename="../libs/libmythtv/videosource.cpp" line="3972"/>
+@@ -36670,7 +36670,7 @@ Se non esistono più rimuoverli</translation>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="233"/>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="668"/>
+ <source>Upcoming scheduled</source>
+- <translation>Prossime programmazioni</translation>
++ <translation>Prossime in programma</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="509"/>
+@@ -36714,7 +36714,7 @@ Se non esistono più rimuoverli</translation>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="230"/>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="656"/>
+ <source>Program Guide</source>
+- <translation>Guida programmi</translation>
++ <translation>Guida TV</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="231"/>
+@@ -36726,7 +36726,7 @@ Se non esistono più rimuoverli</translation>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="234"/>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="672"/>
+ <source>Previously Recorded</source>
+- <translation>Già registrato</translation>
++ <translation>Già registrati</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/viewscheduled.cpp" line="235"/>
+@@ -36766,22 +36766,22 @@ Se non esistono più rimuoverli</translation>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3221"/>
+ <source>Include the 'Watch List' group</source>
+- <translation>Includi gruppo 'Già visti'</translation>
++ <translation>Includi gruppo 'In evidenza'</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3225"/>
+ <source>The 'Watch List' is an abbreviated list of recordings sorted to highlight series and shows that need attention in order to keep up to date.</source>
+- <translation>L'elenco 'Già visti' è una lista di registrazioni ridotta ordinata in modo da evidenziare serie e programmi a cui prestare attenzione per essere aggiornati.</translation>
++ <translation>L'elenco 'In evidenza' è una lista di registrazioni ridotta ordinata in modo da evidenziare serie e programmi a cui prestare attenzione per essere aggiornati.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3237"/>
+ <source>Start from the Watch List view</source>
+- <translation>Avvia dai "Già visti"</translation>
++ <translation>Avvia da lista "In evidenza"</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3241"/>
+ <source>If enabled, the 'Watch List' will be the initial view each time you enter the Watch Recordings screen</source>
+- <translation>Se attivata, la lista 'Già visti' diventerà la lista iniziale ogni volta che si entra nella schermata delle Registrazioni</translation>
++ <translation>Se attivata, la lista 'In evidenza' diventerà la lista iniziale ogni volta che si entra nella schermata delle Registrazioni</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3251"/>
+@@ -36791,7 +36791,7 @@ Se non esistono più rimuoverli</translation>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3256"/>
+ <source>Set this if you turn off Auto-Expire only for recordings that you've seen and intend to keep. This option will exclude these recordings from the 'Watch List'.</source>
+- <translation>Impostarlo se si vuole disattivare l'elimazione automatica delle registrazioni che si vogliono mantenere una volta viste. Questa opzione escluderà questa registrazione dalla lista 'Già visti'.</translation>
++ <translation>Impostalo se vuoi disattivare l'elimazione automatica delle registrazioni che si vogliono mantenere una volta viste. Questa opzione escluderà questa registrazione dalla lista In evidenza'.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3269"/>
+@@ -36801,7 +36801,7 @@ Se non esistono più rimuoverli</translation>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3273"/>
+ <source>The 'Watch List' scores are based on 1 point equals one day since recording. This option limits the maximum score due to age and affects other weighting factors.</source>
+- <translation>I punteggi nella lista 'Già visti' sono basati su un punto al giorno a partire dalla registrazione dello show. Questa opzione limita il punteggio massimo basato sull'età e influenza altri fattori di peso.</translation>
++ <translation>I punteggi nella lista 'In evidenzai' sono basati su un punto al giorno a partire dalla registrazione dello show. Questa opzione limita il punteggio massimo basato sull'età e influenza altri fattori di peso.</translation>
+ </message>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3285"/>
+@@ -36811,7 +36811,7 @@ Se non esistono più rimuoverli</translation>
+ <message>
+ <location filename="../programs/mythfrontend/globalsettings.cpp" line="3290"/>
+ <source>When an episode is deleted or marked as watched, other episodes of the series are excluded from the 'Watch List' for this interval of time. Daily shows also have a smaller interval based on this setting.</source>
+- <translation>Quando un episodio viene eliminato o marcato come visto, gli altri episodi della serie verranno esclusi dalla lista 'Già visti' per questo intervallo di tempo. Anche le trasmissioni giornaliere avranno un intervallo minore basato su questa impostazione.</translation>
++ <translation>Quando un episodio viene eliminato o marcato come visto, gli altri episodi della serie verranno esclusi dalla lista 'In evidenza' per questo intervallo di tempo. Anche le trasmissioni giornaliere avranno un intervallo minore basato su questa impostazione.</translation>
+ </message>
+ </context>
+ <context>
+diff --git a/mythtv/libs/libmyth/mythcontext.cpp b/mythtv/libs/libmyth/mythcontext.cpp
+index 5e169a3210..4b6680a1db 100644
+--- a/mythtv/libs/libmyth/mythcontext.cpp
++++ b/mythtv/libs/libmyth/mythcontext.cpp
+@@ -127,6 +127,7 @@ class MythContextPrivate : public QObject
+ GUIStartup *m_guiStartup;
+ QEventLoop *m_loop;
+ bool needsBackend;
++ bool m_settingsCacheDirty;
+
+ private:
+ MythConfirmationDialog *MBEversionPopup;
+@@ -241,6 +242,7 @@ MythContextPrivate::MythContextPrivate(MythContext *lparent)
+ m_sh(new MythContextSlotHandler(this)),
+ m_guiStartup(0),
+ needsBackend(false),
++ m_settingsCacheDirty(false),
+ MBEversionPopup(NULL),
+ m_registration(-1),
+ m_socket(0)
+@@ -287,7 +289,6 @@ void MythContextPrivate::TempMainWindow(bool languagePrompt)
+ SilenceDBerrors();
+
+ loadSettingsCacheOverride();
+- parent->SetDisableEventPopup(true);
+
+ #ifdef Q_OS_MAC
+ // Qt 4.4 has window-focus problems
+@@ -319,10 +320,7 @@ void MythContextPrivate::EndTempWindow(void)
+ m_guiStartup = 0;
+ }
+ }
+- DestroyMythMainWindow();
+ }
+- clearSettingsCacheOverride();
+- parent->SetDisableEventPopup(false);
+ EnableDBerrors();
+ }
+
+@@ -1007,7 +1005,6 @@ QString MythContextPrivate::TestDBconnection(bool prompt)
+ // Current DB connection may have been silenced (invalid):
+ EnableDBerrors();
+ ResetDatabase();
+- saveSettingsCache();
+
+ return QString::null;
+ }
+@@ -1423,32 +1420,38 @@ void MythContextPrivate::processEvents(void)
+
+ const QString MythContextPrivate::settingsToSave[] =
+ { "Theme", "Language", "Country", "GuiHeight",
+- "GuiOffsetX", "GuiOffsetY", "GuiWidth", "RunFrontendInWindow" };
++ "GuiOffsetX", "GuiOffsetY", "GuiWidth", "RunFrontendInWindow",
++ "AlwaysOnTop", "HideMouseCursor", "ThemePainter" };
+
+
+ bool MythContextPrivate::saveSettingsCache(void)
+ {
++ if (!m_gui)
++ return true;
+ QString cacheDirName = GetConfDir() + "/cache/";
+ QDir dir(cacheDirName);
+ dir.mkpath(cacheDirName);
+- // remove prior cache in case it was corrupt
+- QFile::remove(cacheDirName+"contextcache.xml");
+ XmlConfiguration config = XmlConfiguration("cache/contextcache.xml");
+-
+- clearSettingsCacheOverride();
+-
+ static const int arraySize = sizeof(settingsToSave)/sizeof(settingsToSave[0]);
+ for (int ix = 0; ix < arraySize; ix++)
+ {
++ QString cacheValue = config.GetValue("Settings/"+settingsToSave[ix],QString());
++ gCoreContext->ClearOverrideSettingForSession(settingsToSave[ix]);
+ QString value = gCoreContext->GetSetting(settingsToSave[ix],QString());
+- if (!value.isEmpty())
++ if (value != cacheValue)
++ {
+ config.SetValue("Settings/"+settingsToSave[ix],value);
++ m_settingsCacheDirty = true;
++ }
+ }
++ clearSettingsCacheOverride();
+ return config.Save();
+ }
+
+ void MythContextPrivate::loadSettingsCacheOverride(void)
+ {
++ if (!m_gui)
++ return;
+ XmlConfiguration config = XmlConfiguration("cache/contextcache.xml");
+ static const int arraySize = sizeof(settingsToSave)/sizeof(settingsToSave[0]);
+ for (int ix = 0; ix < arraySize; ix++)
+@@ -1516,6 +1519,8 @@ bool MythContext::Init(const bool gui,
+ const bool disableAutoDiscovery,
+ const bool ignoreDB)
+ {
++ SetDisableEventPopup(true);
++
+ if (!d)
+ {
+ LOG(VB_GENERAL, LOG_EMERG, LOC + "Init() Out-of-memory");
+@@ -1582,6 +1587,13 @@ bool MythContext::Init(const bool gui,
+ return false;
+ }
+
++ SetDisableEventPopup(false);
++ saveSettingsCache();
++ if (d->m_settingsCacheDirty)
++ {
++ DestroyMythMainWindow();
++ d->m_settingsCacheDirty = false;
++ }
+ gCoreContext->ActivateSettingsCache(true);
+
+ return true;
+diff --git a/mythtv/libs/libmythbase/mythdownloadmanager.cpp b/mythtv/libs/libmythbase/mythdownloadmanager.cpp
+index bc9db945ec..735d53c618 100644
+--- a/mythtv/libs/libmythbase/mythdownloadmanager.cpp
++++ b/mythtv/libs/libmythbase/mythdownloadmanager.cpp
+@@ -12,6 +12,7 @@
+ #include <QNetworkProxy>
+ #include <QMutexLocker>
+ #include <QUrl>
++#include <QTcpSocket>
+
+ #include "stdlib.h"
+
+diff --git a/mythtv/libs/libmythbase/mythmiscutil.cpp b/mythtv/libs/libmythbase/mythmiscutil.cpp
+index 5741a464de..4a12fd2c65 100644
+--- a/mythtv/libs/libmythbase/mythmiscutil.cpp
++++ b/mythtv/libs/libmythbase/mythmiscutil.cpp
+@@ -218,9 +218,16 @@ bool hasUtf8(const char *str)
+ /**
+ * \brief Can we ping host within timeout seconds?
+ *
+- * Some unixes don't like the -t argument. To make sure a ping failure
+- * is actually caused by a defunct server, we might have to do a ping
+- * without the -t, which will cause a long timeout.
++ * Different operating systems use different parameters to specify a
++ * timeout to the ping command. FreeBSD and derivatives use '-t';
++ * Linux and derivatives use '-w'. Using the right parameter also
++ * eliminates the need for the old behavior of falling back to pinging
++ * the localhost with and without a timeout, in order to characterize
++ * whether the right parameter was used in the first place.
++ *
++ * \note If ping fails to timeout on another supported platform,
++ * determine what parameter that platform's ping requires to specify
++ * the timeout and add another case to the \#ifdef statement.
+ */
+ bool ping(const QString &host, int timeout)
+ {
+@@ -235,34 +242,20 @@ bool ping(const QString &host, int timeout)
+ QString addrstr =
+ gCoreContext->resolveAddress(host, gCoreContext->ResolveAny, true);
+ QHostAddress addr = QHostAddress(addrstr);
++#if defined(__FreeBSD__) || CONFIG_DARWIN
++ QString timeoutparam("-t");
++#else
++ // Linux, NetBSD, OpenBSD
++ QString timeoutparam("-w");
++#endif
+ QString pingcmd =
+ addr.protocol() == QAbstractSocket::IPv6Protocol ? "ping6" : "ping";
+- QString cmd = QString("%1 -t %2 -c 1 %3 >/dev/null 2>&1")
+- .arg(pingcmd).arg(timeout).arg(host);
++ QString cmd = QString("%1 %2 %3 -c 1 %4 >/dev/null 2>&1")
++ .arg(pingcmd).arg(timeoutparam).arg(timeout).arg(host);
+
+ if (myth_system(cmd, kMSDontBlockInputDevs | kMSDontDisableDrawing |
+ kMSProcessEvents) != GENERIC_EXIT_OK)
+- {
+- // ping command may not like -t argument, or the host might not
+- // be listening. Try to narrow down with a quick ping to localhost:
+-
+- cmd = pingcmd + " -t 1 -c 1 localhost >/dev/null 2>&1";
+-
+- if (myth_system(cmd, kMSDontBlockInputDevs | kMSDontDisableDrawing |
+- kMSProcessEvents) != GENERIC_EXIT_OK)
+- {
+- // Assume -t is bad - do a ping that might cause a timeout:
+- cmd = QString("%1 -c 1 %2 >/dev/null 2>&1").arg(pingcmd).arg(host);
+-
+- if (myth_system(cmd, kMSDontBlockInputDevs | kMSDontDisableDrawing |
+- kMSProcessEvents) != GENERIC_EXIT_OK)
+- return false; // it failed with or without the -t
+-
+- return true;
+- }
+- else // Pinging localhost worked, so targeted host wasn't listening
+- return false;
+- }
++ return false;
+ #endif
+
+ return true;
+diff --git a/mythtv/libs/libmythbase/serverpool.cpp b/mythtv/libs/libmythbase/serverpool.cpp
+index fd6ad9e04a..c39e99024f 100644
+--- a/mythtv/libs/libmythbase/serverpool.cpp
++++ b/mythtv/libs/libmythbase/serverpool.cpp
+@@ -66,7 +66,7 @@ void PrivTcpServer::incomingConnection(qt_socket_fd_t socket)
+
+ ServerPool::ServerPool(QObject *parent) : QObject(parent),
+ m_listening(false), m_maxPendingConn(30), m_port(0),
+- m_proxy(QNetworkProxy::DefaultProxy), m_lastUdpSocket(NULL)
++ m_proxy(QNetworkProxy::NoProxy), m_lastUdpSocket(NULL)
+ {
+ }
+
+@@ -422,8 +422,6 @@ bool ServerPool::listen(QList<QHostAddress> addrs, quint16 port,
+ .arg(PRETTYIP(it)).arg(port));
+ if (servertype == kTCPServer)
+ m_tcpServers.append(server);
+- else
+-
+ if (m_port == 0)
+ m_port = server->serverPort();
+ }
+@@ -451,8 +449,7 @@ bool ServerPool::listen(QList<QHostAddress> addrs, quint16 port,
+ && it->protocol() == QAbstractSocket::IPv4Protocol)
+ {
+ LOG(VB_GENERAL, LOG_INFO,
+- QString("No IPv4 support on this system. Disabling MythTV IPv4."));
+- gCoreContext->OverrideSettingForSession("IPv4Support", "0");
++ QString("IPv4 support failed for this port."));
+ continue;
+ }
+
+@@ -460,8 +457,7 @@ bool ServerPool::listen(QList<QHostAddress> addrs, quint16 port,
+ && it->protocol() == QAbstractSocket::IPv6Protocol)
+ {
+ LOG(VB_GENERAL, LOG_INFO,
+- QString("No IPv6 support on this system. Disabling MythTV IPv6."));
+- gCoreContext->OverrideSettingForSession("IPv6Support", "0");
++ QString("IPv6 support failed for this port."));
+ continue;
+ }
+
+diff --git a/mythtv/libs/libmythtv/channelscan/modulationsetting.h b/mythtv/libs/libmythtv/channelscan/modulationsetting.h
+index 005846c158..df9517d61d 100644
+--- a/mythtv/libs/libmythtv/channelscan/modulationsetting.h
++++ b/mythtv/libs/libmythtv/channelscan/modulationsetting.h
+@@ -116,6 +116,8 @@ class ScanDVBSModulation: public TransMythUIComboBoxSetting
+ addSelection("QPSK", "qpsk", true);
+ addSelection("8PSK", "8psk");
+ addSelection("QAM 16","qam_16");
++ addSelection("16APSK","16apsk");
++ addSelection("32APSK","32apsk");
+
+ setLabel(QCoreApplication::translate("(ModulationSettings)",
+ "Modulation"));
+diff --git a/mythtv/libs/libmythtv/libmythtv.pro b/mythtv/libs/libmythtv/libmythtv.pro
+index 77dd7917a0..98fcd4bbf0 100644
+--- a/mythtv/libs/libmythtv/libmythtv.pro
++++ b/mythtv/libs/libmythtv/libmythtv.pro
+@@ -930,6 +930,17 @@ using_backend:using_mp3lame: LIBS += -lmp3lame
+ using_backend: LIBS += -L../../external/minilzo -lmythminilzo-$$LIBVERSION
+ LIBS += $$EXTRA_LIBS $$QMAKE_LIBS_DYNLOAD
+
++using_openmax {
++ contains( HAVE_OPENMAX_BROADCOM, yes ) {
++ using_opengl {
++ # For raspberry Pi Raspbian
++ exists(/opt/vc/lib/libbrcmEGL.so) {
++ LIBS += -L/opt/vc/lib/ -lbrcmGLESv2 -lbrcmEGL
++ }
++ }
++ }
++}
++
+ !win32-msvc* {
+ POST_TARGETDEPS += ../libmyth/libmyth-$${MYTH_SHLIB_EXT}
+ POST_TARGETDEPS += ../../external/FFmpeg/libswresample/$$avLibName(swresample)
+diff --git a/mythtv/libs/libmythtv/privatedecoder_omx.cpp b/mythtv/libs/libmythtv/privatedecoder_omx.cpp
+index f644ed50c6..cc18150e40 100644
+--- a/mythtv/libs/libmythtv/privatedecoder_omx.cpp
++++ b/mythtv/libs/libmythtv/privatedecoder_omx.cpp
+@@ -1016,18 +1016,19 @@ int PrivateDecoderOMX::GetBufferedFrame(AVStream *stream, AVFrame *picture)
+
+ if (ret)
+ {
+-#ifdef USING_BROADCOM
++#ifdef OMX_BUFFERFLAG_INTERLACED
+ if (nFlags & OMX_BUFFERFLAG_INTERLACED)
+ picture->interlaced_frame = 1;
+ else
++#endif
+ picture->interlaced_frame = 0;
++#ifdef OMX_BUFFERFLAG_TOP_FIELD_FIRST
+ if (nFlags & OMX_BUFFERFLAG_TOP_FIELD_FIRST)
+ picture->top_field_first = 1;
+ else
++#endif
+ picture->top_field_first = 0;
+ picture->repeat_pict = 0;
+-#endif // USING_BROADCOM
+-
+ if (!frame)
+ {
+ // Copy OMX buffer to the frame provided
+diff --git a/mythtv/libs/libmythtv/recorders/dvbchannel.cpp b/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
+index d2e8c48513..dbdf7adc11 100644
+--- a/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
++++ b/mythtv/libs/libmythtv/recorders/dvbchannel.cpp
+@@ -485,6 +485,8 @@ bool DVBChannel::CheckModulation(DTVModulation modulation) const
+ ((DTVModulation::kModulationQPSK == m) && (c & FE_CAN_QPSK)) ||
+ #if HAVE_FE_CAN_2G_MODULATION
+ ((DTVModulation::kModulation8PSK == m) && (c & FE_CAN_2G_MODULATION)) ||
++ ((DTVModulation::kModulation16APSK == m) && (c & FE_CAN_2G_MODULATION)) ||
++ ((DTVModulation::kModulation32APSK == m) && (c & FE_CAN_2G_MODULATION)) ||
+ #endif //HAVE_FE_CAN_2G_MODULATION
+ ((DTVModulation::kModulationQAM16 == m) && (c & FE_CAN_QAM_16)) ||
+ ((DTVModulation::kModulationQAM32 == m) && (c & FE_CAN_QAM_32)) ||
+diff --git a/mythtv/libs/libmythtv/teletextreader.cpp b/mythtv/libs/libmythtv/teletextreader.cpp
+index 0e9870e9a2..48a77c8b79 100644
+--- a/mythtv/libs/libmythtv/teletextreader.cpp
++++ b/mythtv/libs/libmythtv/teletextreader.cpp
+@@ -304,36 +304,60 @@ void TeletextReader::Reset(void)
+ void TeletextReader::AddPageHeader(int page, int subpage, const uint8_t *buf,
+ int vbimode, int lang, int flags)
+ {
+- //LOG(VB_GENERAL, LOG_ERR, QString("AddPageHeader(p %1, sp %2, lang %3)")
+- // .arg(page).arg(subpage).arg(lang));
+-
+ int magazine = MAGAZINE(page);
+ if (magazine < 1 || magazine > 8)
+ return;
+- int lastPage = m_magazines[magazine - 1].current_page;
+- int lastSubPage = m_magazines[magazine - 1].current_subpage;
+-
+- // update the last fetched page if the magazine is the same
+- // and the page no. is different
+
+- if ((page != lastPage || subpage != lastSubPage) &&
+- m_magazines[magazine - 1].loadingpage.active)
++ for(int m = 1; m <= 8; m++)
+ {
+- TeletextSubPage *ttpage = FindSubPage(lastPage, lastSubPage);
+- if (!ttpage)
++ // ETS 300 706, chapter 7.2.1:
++ // The transmission of a given page begins with, and includes, its page
++ // header packet. It is terminated by and excludes the next page header
++ // packet having the same magazine address in parallel transmission
++ // mode, or any magazine address in serial transmission mode.
++ // ETS 300 706, chapter 9.3.1.3:
++ // When set to '1' the service is designated to be in Serial mode and
++ // the transmission of a page is terminated by the next page header with
++ // a different page number.
++ // When set to '0' the service is designated to be in Parallel mode and
++ // the transmission of a page is terminated by the next page header with
++ // a different page number but the same magazine number. The same
++ // setting shall be used for all page headers in the service.
++
++ bool isMagazineSerialMode = flags & TP_MAGAZINE_SERIAL;
++ if (!(isMagazineSerialMode) && m != magazine)
+ {
+- ttpage = &(m_magazines[magazine - 1]
+- .pages[lastPage].subpages[lastSubPage]);
+- m_magazines[magazine - 1].pages[lastPage].pagenum = lastPage;
+- ttpage->subpagenum = lastSubPage;
++ continue; // in parallel mode only process magazine
+ }
+
+- memcpy(ttpage, &m_magazines[magazine - 1].loadingpage,
+- sizeof(TeletextSubPage));
++ int lastPage = m_magazines[m - 1].current_page;
++ int lastSubPage = m_magazines[m - 1].current_subpage;
+
+- m_magazines[magazine - 1].loadingpage.active = false;
++ LOG(VB_VBI, LOG_DEBUG,
++ QString("AddPageHeader(p %1, sp %2, lang %3, mag %4, lp %5, lsp %6"
++ " sm %7)")
++ .arg(page).arg(subpage).arg(lang).arg(m).arg(lastPage)
++ .arg(lastSubPage).arg(isMagazineSerialMode));
+
+- PageUpdated(lastPage, lastSubPage);
++ if ((page != lastPage || subpage != lastSubPage) &&
++ m_magazines[m - 1].loadingpage.active)
++ {
++ TeletextSubPage *ttpage = FindSubPage(lastPage, lastSubPage);
++ if (!ttpage)
++ {
++ ttpage = &(m_magazines[m - 1]
++ .pages[lastPage].subpages[lastSubPage]);
++ m_magazines[m - 1].pages[lastPage].pagenum = lastPage;
++ ttpage->subpagenum = lastSubPage;
++ }
++
++ memcpy(ttpage, &m_magazines[m - 1].loadingpage,
++ sizeof(TeletextSubPage));
++
++ m_magazines[m - 1].loadingpage.active = false;
++
++ PageUpdated(lastPage, lastSubPage);
++ }
+ }
+
+ m_fetchpage = page;
+diff --git a/mythtv/libs/libmythtv/transporteditor.cpp b/mythtv/libs/libmythtv/transporteditor.cpp
+index 6562ad7002..e4ad74cf7e 100644
+--- a/mythtv/libs/libmythtv/transporteditor.cpp
++++ b/mythtv/libs/libmythtv/transporteditor.cpp
+@@ -507,6 +507,13 @@ Modulation::Modulation(const MultiplexID *id, uint nType) :
+ // no modulation options
+ setVisible(false);
+ }
++ else if (CardUtil::DVBS2 == nType)
++ {
++ addSelection("QPSK", "qpsk");
++ addSelection("8PSK", "8psk");
++ addSelection("16APSK", "16apsk");
++ addSelection("32APSK", "32apsk");
++ }
+ else if ((CardUtil::QAM == nType) || (CardUtil::OFDM == nType) ||
+ (CardUtil::DVBT2 == nType))
+ {
+@@ -684,6 +691,34 @@ class DVBTModulationSystem : public MythUIComboBoxSetting, public MuxDBStorage
+ };
+ };
+
++class DVBSModulationSystem : public MythUIComboBoxSetting, public MuxDBStorage
++{
++ public:
++ explicit DVBSModulationSystem(const MultiplexID *id) :
++ MythUIComboBoxSetting(this), MuxDBStorage(this, id, "mod_sys")
++ {
++ setLabel(QObject::tr("Modulation System"));
++ setHelpText(QObject::tr("Modulation system (Default: DVB-S)"));
++ addSelection(QObject::tr("DVB-S"), "DVB-S");
++ addSelection(QObject::tr("DVB-S2"), "DVB-S2");
++ }
++};
++
++class RollOff : public MythUIComboBoxSetting, public MuxDBStorage
++{
++ public:
++ explicit RollOff(const MultiplexID *id) :
++ MythUIComboBoxSetting(this), MuxDBStorage(this, id, "rolloff")
++ {
++ setLabel(QObject::tr("Roll-off"));
++ setHelpText(QObject::tr("Roll-off factor (Default: 0.35)"));
++ addSelection("0.35");
++ addSelection("0.20");
++ addSelection("0.25");
++ addSelection(QObject::tr("Auto"), "auto");
++ }
++};
++
+ TransportSetting::TransportSetting(const QString &label, uint mplexid,
+ uint sourceid, uint cardtype)
+ : m_mplexid(new MultiplexID())
+@@ -724,15 +759,21 @@ TransportSetting::TransportSetting(const QString &label, uint mplexid,
+ addChild(new DVBTGuardInterval(m_mplexid));
+ addChild(new DVBTHierarchy(m_mplexid));
+ }
+- else if (CardUtil::QPSK == cardtype)
++ else if (CardUtil::QPSK == cardtype ||
++ CardUtil::DVBS2 == cardtype)
+ {
+ addChild(new DTVStandard(m_mplexid, true, false));
+ addChild(new Frequency(m_mplexid, true));
+ addChild(new DVBSymbolRate(m_mplexid));
+
+ addChild(new DVBInversion(m_mplexid));
++ addChild(new Modulation(m_mplexid, cardtype));
++ addChild(new DVBSModulationSystem(m_mplexid));
+ addChild(new DVBForwardErrorCorrection(m_mplexid));
+ addChild(new SignalPolarity(m_mplexid));
++
++ if (CardUtil::DVBS2 == cardtype)
++ addChild(new RollOff(m_mplexid));
+ }
+ else if (CardUtil::QAM == cardtype)
+ {
+diff --git a/mythtv/libs/libmythtv/videoout_omx.cpp b/mythtv/libs/libmythtv/videoout_omx.cpp
+index 5a019db0a2..b6c8c49e35 100644
+--- a/mythtv/libs/libmythtv/videoout_omx.cpp
++++ b/mythtv/libs/libmythtv/videoout_omx.cpp
+@@ -29,9 +29,6 @@
+ #ifdef OSD_EGL
+ #include <EGL/egl.h>
+ #include <QtGlobal>
+-#if QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
+-#include <QtPlatformHeaders/QEGLNativeContext>
+-#endif
+ #endif
+
+ // MythTV
+@@ -884,10 +881,14 @@ void VideoOutputOMX::Show(FrameScanType scan)
+
+ hdr->nFilledLen = frame->offsets[2] + (frame->offsets[1] >> 2);
+ hdr->nFlags = OMX_BUFFERFLAG_ENDOFFRAME;
++#ifdef OMX_BUFFERFLAG_INTERLACED
+ if (frame->interlaced_frame)
+ hdr->nFlags |= OMX_BUFFERFLAG_INTERLACED;
++#endif
++#ifdef OMX_BUFFERFLAG_TOP_FIELD_FIRST
+ if (frame->top_field_first)
+ hdr->nFlags |= OMX_BUFFERFLAG_TOP_FIELD_FIRST;
++#endif
+ OMXComponent &cmpnt = m_imagefx.IsValid() ? m_imagefx : m_render;
+ // Paused - do not display anything unless softblend set
+ if (m_videoPaused && GetOSDRenderer() != "softblend")
+diff --git a/mythtv/libs/libmythtv/videoout_vdpau.cpp b/mythtv/libs/libmythtv/videoout_vdpau.cpp
+index 07f6e6d4f4..770413f73f 100644
+--- a/mythtv/libs/libmythtv/videoout_vdpau.cpp
++++ b/mythtv/libs/libmythtv/videoout_vdpau.cpp
+@@ -336,6 +336,13 @@ bool VideoOutputVDPAU::SetupDeinterlace(bool interlaced,
+ return false;
+
+ bool enable = interlaced;
++
++ if ( video_codec_id == kCodec_HEVC_VDPAU )
++ {
++ LOG(VB_PLAYBACK, LOG_INFO, LOC + "Disabled deinterlacing for HEVC/H.265");
++ enable = false;
++ }
++
+ if (enable)
+ {
+ m_deintfiltername = db_vdisp_profile->GetFilteredDeint(override);
+@@ -652,6 +659,12 @@ void VideoOutputVDPAU::DrawSlice(VideoFrame *frame, int /* x */, int /* y */, in
+ case kCodec_VC1_VDPAU:
+ vdp_decoder_profile = VDP_DECODER_PROFILE_VC1_ADVANCED;
+ break;
++#ifdef VDP_DECODER_PROFILE_HEVC_MAIN
++ case kCodec_HEVC_VDPAU:
++ vdp_decoder_profile = VDP_DECODER_PROFILE_HEVC_MAIN;
++ max_refs = 16;
++ break;
++#endif
+ default:
+ LOG(VB_GENERAL, LOG_ERR, LOC +
+ "Codec is not supported.");
+diff --git a/mythtv/libs/libmythtv/videooutbase.cpp b/mythtv/libs/libmythtv/videooutbase.cpp
+index 15c00e1919..9b73002891 100644
+--- a/mythtv/libs/libmythtv/videooutbase.cpp
++++ b/mythtv/libs/libmythtv/videooutbase.cpp
+@@ -259,8 +259,6 @@ VideoOutput *VideoOutput::Create(
+ #endif // USING_XV
+ if (vo)
+ vo->db_vdisp_profile = vprof;
+- else
+- delete vprof;
+
+ if (vo && !(playerFlags & kVideoIsNull))
+ {
+@@ -301,6 +299,7 @@ VideoOutput *VideoOutput::Create(
+ return vo;
+ }
+
++ vo->db_vdisp_profile = NULL;
+ delete vo;
+ vo = NULL;
+ }
+@@ -312,6 +311,7 @@ VideoOutput *VideoOutput::Create(
+ return vo;
+ }
+
++ vo->db_vdisp_profile = NULL;
+ delete vo;
+ vo = NULL;
+ }
+@@ -321,6 +321,7 @@ VideoOutput *VideoOutput::Create(
+
+ LOG(VB_GENERAL, LOG_ERR, LOC +
+ "Not compiled with any useable video output method.");
++ delete vprof;
+
+ return NULL;
+ }
+diff --git a/mythtv/libs/libmythtv/videosource.cpp b/mythtv/libs/libmythtv/videosource.cpp
+index f26ee692cd..368f8b7458 100644
+--- a/mythtv/libs/libmythtv/videosource.cpp
++++ b/mythtv/libs/libmythtv/videosource.cpp
+@@ -3190,11 +3190,11 @@ class QuickTune : public CardInputComboBoxSetting
+ };
+ };
+
+-class ExternalChannelCommand : public CardInputComboBoxSetting
++class ExternalChannelCommand : public MythUITextEditSetting
+ {
+ public:
+ explicit ExternalChannelCommand(const CardInput &parent) :
+- CardInputComboBoxSetting(parent, "externalcommand")
++ MythUITextEditSetting(new CardInputDBStorage(this, parent, "externalcommand"))
+ {
+ setLabel(QObject::tr("External channel change command"));
+ setValue("");
+@@ -3205,11 +3205,11 @@ class ExternalChannelCommand : public CardInputComboBoxSetting
+ };
+ };
+
+-class PresetTuner : public CardInputComboBoxSetting
++class PresetTuner : public MythUITextEditSetting
+ {
+ public:
+ explicit PresetTuner(const CardInput &parent) :
+- CardInputComboBoxSetting(parent, "tunechan")
++ MythUITextEditSetting(new CardInputDBStorage(this, parent, "tunechan"))
+ {
+ setLabel(QObject::tr("Preset tuner to channel"));
+ setValue("");
+@@ -3729,6 +3729,7 @@ void CaptureCardEditor::AddNewCard()
+ {
+ CaptureCard *card = new CaptureCard();
+ card->setLabel(tr("New capture card"));
++ card->Load();
+ addChild(card);
+ emit settingsChanged(this);
+ }
+diff --git a/mythtv/libs/libmythui/libmythui.pro b/mythtv/libs/libmythui/libmythui.pro
+index 6b534ad2c2..74235dee55 100644
+--- a/mythtv/libs/libmythui/libmythui.pro
++++ b/mythtv/libs/libmythui/libmythui.pro
+@@ -189,6 +189,7 @@ using_opengl {
+ using_opengles {
+ DEFINES += USING_OPENGLES
+ HEADERS += mythrender_opengl2es.h
++ LIBS += -L/opt/vc/include -lbrcmGLESv2 -lbrcmEGL
+ }
+ !using_opengles {
+ SOURCES += mythrender_opengl1.cpp
+@@ -200,6 +201,18 @@ using_opengl {
+ mingw|win32-msvc*:LIBS += -lopengl32
+ }
+
++using_openmax {
++ contains( HAVE_OPENMAX_BROADCOM, yes ) {
++ using_opengl {
++ # For raspberry Pi Raspbian
++ exists(/opt/vc/lib/libbrcmEGL.so) {
++ LIBS += -L/opt/vc/lib/ -lbrcmGLESv2 -lbrcmEGL
++ }
++ }
++ }
++}
++
++
+ DEFINES += USING_QTWEBKIT
+ DEFINES += MUI_API
+
+diff --git a/mythtv/libs/libmythui/mythmainwindow.cpp b/mythtv/libs/libmythui/mythmainwindow.cpp
+index 8170e245bd..4fbd16893c 100644
+--- a/mythtv/libs/libmythui/mythmainwindow.cpp
++++ b/mythtv/libs/libmythui/mythmainwindow.cpp
+@@ -1013,8 +1013,13 @@ bool MythMainWindow::event(QEvent *e)
+ return QWidget::event(e);
+ }
+
+-void MythMainWindow::Init(QString forcedpainter)
++void MythMainWindow::Init(QString forcedpainter, bool mayReInit)
+ {
++ d->m_useDB = ! gCoreContext->GetDB()->SuppressDBMessages();
++
++ if ( !(mayReInit || d->firstinit) )
++ return;
++
+ GetMythUI()->GetScreenSettings(d->xbase, d->screenwidth, d->wmult,
+ d->ybase, d->screenheight, d->hmult);
+
+@@ -2202,9 +2207,9 @@ bool MythMainWindow::eventFilter(QObject *, QEvent *e)
+ QCoreApplication::postEvent(this, key);
+ else
+ QCoreApplication::postEvent(key_target, key);
+- }
+
+- return true;
++ return true;
++ }
+ }
+ #endif
+
+diff --git a/mythtv/libs/libmythui/mythmainwindow.h b/mythtv/libs/libmythui/mythmainwindow.h
+index 9eda99c9f6..919598270f 100644
+--- a/mythtv/libs/libmythui/mythmainwindow.h
++++ b/mythtv/libs/libmythui/mythmainwindow.h
+@@ -40,7 +40,7 @@ class MUI_PUBLIC MythMainWindow : public QWidget
+ public:
+ enum {drawRefresh = 70};
+
+- void Init(QString forcedpainter = QString());
++ void Init(QString forcedpainter = QString(), bool mayReInit=true);
+ void ReinitDone(void);
+ void Show(void);
+
+diff --git a/mythtv/libs/libmythui/mythrender_opengl.cpp b/mythtv/libs/libmythui/mythrender_opengl.cpp
+index 71e553549b..ae3eab301b 100644
+--- a/mythtv/libs/libmythui/mythrender_opengl.cpp
++++ b/mythtv/libs/libmythui/mythrender_opengl.cpp
+@@ -527,6 +527,12 @@ uint MythRenderOpenGL::CreateTexture(QSize act_size, bool use_pbo,
+ uint data_fmt, uint internal_fmt,
+ uint filter, uint wrap)
+ {
++#ifdef USING_OPENGLES
++ //OPENGLES requires same formats for internal and external.
++ internal_fmt = data_fmt;
++ glCheck();
++#endif
++
+ if (!type)
+ type = m_default_texture_type;
+
+diff --git a/mythtv/libs/libmythui/mythrender_opengl.h b/mythtv/libs/libmythui/mythrender_opengl.h
+index 04990c54e0..32402ebfb9 100644
+--- a/mythtv/libs/libmythui/mythrender_opengl.h
++++ b/mythtv/libs/libmythui/mythrender_opengl.h
+@@ -4,12 +4,18 @@
+ #include <stdint.h>
+
+ #include <QtGlobal>
+-#if defined USING_OPENGLES && QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
+-#define USE_OPENGL_QT5
+-#include <QOpenGLContext>
+-#else
++// The below is commented because it causes raspberry Pi with OpenMAX
++// to fail. If commenting it out causes problems with other
++// platforms we can add it back with additional conditions that
++// will exclude it for Raspberry Pi. With this commented, all
++// code that depends on USE_OPENGL_QT5 will be bypassed and maybe can
++// be removed later.
++//#if defined USING_OPENGLES && QT_VERSION >= QT_VERSION_CHECK(5, 4, 0)
++//#define USE_OPENGL_QT5
++//#include <QOpenGLContext>
++//#else
+ #include <QGLContext>
+-#endif
++//#endif
+ #include <QHash>
+ #include <QMutex>
+ #include <QMatrix4x4>
+diff --git a/mythtv/libs/libmythui/mythrender_opengl2.cpp b/mythtv/libs/libmythui/mythrender_opengl2.cpp
+index 74718886b0..dcac95381d 100644
+--- a/mythtv/libs/libmythui/mythrender_opengl2.cpp
++++ b/mythtv/libs/libmythui/mythrender_opengl2.cpp
+@@ -6,6 +6,18 @@
+
+ #define LOC QString("OpenGL2: ")
+
++static inline int __glCheck__(const QString &loc, const char* fileName, int n)
++{
++ int error = glGetError();
++ if (error)
++ {
++ LOG(VB_GENERAL, LOG_ERR, QString("%1: %2 @ %3, %4")
++ .arg(loc).arg(error).arg(fileName).arg(n));
++ }
++ return error;
++}
++#define glCheck() __glCheck__(LOC, __FILE__, __LINE__)
++
+ #define VERTEX_INDEX 0
+ #define COLOR_INDEX 1
+ #define TEXTURE_INDEX 2
+@@ -456,6 +468,7 @@ void MythRenderOpenGL2::DrawBitmapPriv(uint tex, const QRect *src,
+ (const void *) kTextureOffset);
+
+ glDrawArrays(GL_TRIANGLE_STRIP, 0, 4);
++ glCheck();
+
+ m_glDisableVertexAttribArray(TEXTURE_INDEX);
+ m_glDisableVertexAttribArray(VERTEX_INDEX);
+diff --git a/mythtv/programs/mythavtest/main.cpp b/mythtv/programs/mythavtest/main.cpp
+index 325d25dcdc..3c7fd0e6af 100644
+--- a/mythtv/programs/mythavtest/main.cpp
++++ b/mythtv/programs/mythavtest/main.cpp
+@@ -146,6 +146,11 @@ class VideoPerformanceTest
+
+ int main(int argc, char *argv[])
+ {
++
++#if CONFIG_OMX_RPI
++ setenv("QT_XCB_GL_INTEGRATION","none",0);
++#endif
++
+ MythAVTestCommandLineParser cmdline;
+ if (!cmdline.Parse(argc, argv))
+ {
+diff --git a/mythtv/programs/mythbackend/scheduler.cpp b/mythtv/programs/mythbackend/scheduler.cpp
+index 49b291290f..42820f5e20 100644
+--- a/mythtv/programs/mythbackend/scheduler.cpp
++++ b/mythtv/programs/mythbackend/scheduler.cpp
+@@ -74,6 +74,8 @@ Scheduler::Scheduler(bool runthread, QMap<int, EncoderLink *> *tvList,
+ lastPrepareTime(QDateTime()),
+ m_openEnd(openEndNever)
+ {
++
++ tmLastLog = 0;
+ char *debug = getenv("DEBUG_CONFLICTS");
+ debugConflicts = (debug != NULL);
+
+@@ -2077,7 +2079,7 @@ void Scheduler::run(void)
+ bool blockShutdown =
+ gCoreContext->GetNumSetting("blockSDWUwithoutClient", 1);
+ bool firstRun = true;
+- QDateTime lastSleepCheck = MythDate::current().addDays(-1);
++ QDateTime nextSleepCheck = MythDate::current();
+ RecIter startIter = reclist.begin();
+ QDateTime idleSince = QDateTime();
+ int schedRunTime = 0; // max scheduler run time in seconds
+@@ -2105,7 +2107,7 @@ void Scheduler::run(void)
+ sched_sleep = min(sched_sleep, 15000);
+ bool haveRequests = HaveQueuedRequests();
+ int const kSleepCheck = 300;
+- bool checkSlaves = lastSleepCheck.secsTo(curtime) >= kSleepCheck;
++ bool checkSlaves = curtime >= nextSleepCheck;
+
+ // If we're about to start a recording don't do any reschedules...
+ // instead sleep for a bit
+@@ -2166,12 +2168,18 @@ void Scheduler::run(void)
+ {
+ // Check for slaves that can be put to sleep.
+ PutInactiveSlavesToSleep();
+- lastSleepCheck = MythDate::current();
++ nextSleepCheck = MythDate::current().addSecs(kSleepCheck);
++ checkSlaves = false;
+ }
+ }
+
+ nextStartTime = MythDate::current().addDays(14);
+- nextWakeTime = lastSleepCheck.addSecs(kSleepCheck);
++ // If checkSlaves is still set, choose a reasonable wake time
++ // in the future instead of one that we know is in the past.
++ if (checkSlaves)
++ nextWakeTime = MythDate::current().addSecs(kSleepCheck);
++ else
++ nextWakeTime = nextSleepCheck;
+
+ // Skip past recordings that are already history
+ // (i.e. AddHistory() has been called setting oldrecstatus)
+@@ -3079,6 +3087,15 @@ void Scheduler::HandleIdleShutdown(
+ int prerollseconds, int idleTimeoutSecs, int idleWaitForRecordingTime,
+ bool &statuschanged)
+ {
++ // To ensure that one idle message is logged per 15 minutes
++ int logmask = VB_IDLE;
++ int tm = QTime::currentTime().msecsSinceStartOfDay() / 900000;
++ if (tm != tmLastLog)
++ {
++ logmask = VB_GENERAL;
++ tmLastLog = tm;
++ }
++
+ if ((idleTimeoutSecs <= 0) || (m_mainServer == NULL))
+ return;
+
+@@ -3146,7 +3163,7 @@ void Scheduler::HandleIdleShutdown(
+ prerollseconds) <
+ ((idleWaitForRecordingTime * 60) + idleTimeoutSecs))
+ {
+- LOG(VB_IDLE, LOG_NOTICE, "Blocking shutdown because "
++ LOG(logmask, LOG_NOTICE, "Blocking shutdown because "
+ "a recording is due to "
+ "start soon.");
+ idleSince = QDateTime();
+@@ -3165,7 +3182,7 @@ void Scheduler::HandleIdleShutdown(
+ (curtime.secsTo(guideRunTime) <
+ (idleWaitForRecordingTime * 60)))
+ {
+- LOG(VB_IDLE, LOG_NOTICE, "Blocking shutdown because "
++ LOG(logmask, LOG_NOTICE, "Blocking shutdown because "
+ "mythfilldatabase is due to "
+ "run soon.");
+ idleSince = QDateTime();
+@@ -3174,7 +3191,7 @@ void Scheduler::HandleIdleShutdown(
+
+ // Before starting countdown check shutdown is OK
+ if (idleSince.isValid())
+- CheckShutdownServer(prerollseconds, idleSince, blockShutdown);
++ CheckShutdownServer(prerollseconds, idleSince, blockShutdown, logmask);
+
+ if (wasValid && !idleSince.isValid())
+ {
+@@ -3206,7 +3223,7 @@ void Scheduler::HandleIdleShutdown(
+ }
+ else if (CheckShutdownServer(prerollseconds,
+ idleSince,
+- blockShutdown))
++ blockShutdown, logmask))
+ {
+ ShutdownServer(prerollseconds, idleSince);
+ }
+@@ -3234,7 +3251,7 @@ void Scheduler::HandleIdleShutdown(
+ {
+ msg = QString("%1 secs left to system shutdown!")
+ .arg(idleTimeoutSecs - itime);
+- LOG(VB_IDLE, LOG_NOTICE, msg);
++ LOG(logmask, LOG_NOTICE, msg);
+ MythEvent me(QString("SHUTDOWN_COUNTDOWN %1")
+ .arg(idleTimeoutSecs - itime));
+ gCoreContext->dispatch(me);
+@@ -3244,12 +3261,12 @@ void Scheduler::HandleIdleShutdown(
+ }
+ else
+ {
++ if (recording)
++ LOG(logmask, LOG_NOTICE, "Blocking shutdown because "
++ "of an active encoder");
+ if (blocking)
+- LOG(VB_IDLE, LOG_NOTICE, "Blocking shutdown because "
++ LOG(logmask, LOG_NOTICE, "Blocking shutdown because "
+ "of a connected client");
+- else if (recording)
+- LOG(VB_IDLE, LOG_NOTICE, "Blocking shutdown because "
+- "of an active encoder");
+
+ // not idle, make the time invalid
+ if (idleSince.isValid())
+@@ -3264,7 +3281,7 @@ void Scheduler::HandleIdleShutdown(
+
+ //returns true, if the shutdown is not blocked
+ bool Scheduler::CheckShutdownServer(int prerollseconds, QDateTime &idleSince,
+- bool &blockShutdown)
++ bool &blockShutdown, int logmask)
+ {
+ (void)prerollseconds;
+ bool retval = false;
+@@ -3277,18 +3294,18 @@ bool Scheduler::CheckShutdownServer(int prerollseconds, QDateTime &idleSince,
+ switch(state)
+ {
+ case 0:
+- LOG(VB_IDLE, LOG_INFO,
++ LOG(logmask, LOG_INFO,
+ "CheckShutdownServer returned - OK to shutdown");
+ retval = true;
+ break;
+ case 1:
+- LOG(VB_IDLE, LOG_NOTICE,
++ LOG(logmask, LOG_NOTICE,
+ "CheckShutdownServer returned - Not OK to shutdown");
+ // just reset idle'ing on retval == 1
+ idleSince = QDateTime();
+ break;
+ case 2:
+- LOG(VB_IDLE, LOG_NOTICE,
++ LOG(logmask, LOG_NOTICE,
+ "CheckShutdownServer returned - Not OK to shutdown, "
+ "need reconnect");
+ // reset shutdown status on retval = 2
+diff --git a/mythtv/programs/mythbackend/scheduler.h b/mythtv/programs/mythbackend/scheduler.h
+index a961a840fc..cd12532eaa 100644
+--- a/mythtv/programs/mythbackend/scheduler.h
++++ b/mythtv/programs/mythbackend/scheduler.h
+@@ -184,7 +184,7 @@ class Scheduler : public MThread, public MythScheduler
+ bool ChangeRecordingEnd(RecordingInfo *oldp, RecordingInfo *newp);
+
+ bool CheckShutdownServer(int prerollseconds, QDateTime &idleSince,
+- bool &blockShutdown);
++ bool &blockShutdown, int logmask);
+ void ShutdownServer(int prerollseconds, QDateTime &idleSince);
+ void PutInactiveSlavesToSleep(void);
+ bool WakeUpSlave(QString slaveHostname, bool setWakingStatus = true);
+@@ -287,6 +287,7 @@ class Scheduler : public MThread, public MythScheduler
+ typedef pair<const RecordingInfo*,const RecordingInfo*> IsSameKey;
+ typedef QMap<IsSameKey,bool> IsSameCacheType;
+ mutable IsSameCacheType cache_is_same_program;
++ int tmLastLog;
+ };
+
+ #endif
+diff --git a/mythtv/programs/mythbackend/services/video.cpp b/mythtv/programs/mythbackend/services/video.cpp
+index c73707fdfa..8cc5d11c46 100644
+--- a/mythtv/programs/mythbackend/services/video.cpp
++++ b/mythtv/programs/mythbackend/services/video.cpp
+@@ -158,7 +158,7 @@ DTC::VideoMetadataInfo* Video::GetVideoByFileName( const QString &FileName )
+ {
+ VideoMetadataListManager::metadata_list videolist;
+ VideoMetadataListManager::loadAllFromDatabase(videolist);
+- VideoMetadataListManager *mlm = new VideoMetadataListManager();
++ QScopedPointer<VideoMetadataListManager> mlm(new VideoMetadataListManager());
+ mlm->setList(videolist);
+ VideoMetadataListManager::VideoMetadataPtr metadata = mlm->byFilename(FileName);
+
+@@ -169,8 +169,6 @@ DTC::VideoMetadataInfo* Video::GetVideoByFileName( const QString &FileName )
+
+ FillVideoMetadataInfo ( pVideoMetadataInfo, metadata, true );
+
+- delete mlm;
+-
+ return pVideoMetadataInfo;
+ }
+
+@@ -301,15 +299,13 @@ bool Video::RemoveVideoFromDB( int Id )
+
+ VideoMetadataListManager::metadata_list videolist;
+ VideoMetadataListManager::loadAllFromDatabase(videolist);
+- VideoMetadataListManager *mlm = new VideoMetadataListManager();
++ QScopedPointer<VideoMetadataListManager> mlm(new VideoMetadataListManager());
+ mlm->setList(videolist);
+ VideoMetadataListManager::VideoMetadataPtr metadata = mlm->byID(Id);
+
+ if (metadata)
+ bResult = metadata->DeleteFromDatabase();
+
+- delete mlm;
+-
+ return bResult;
+ }
+
+diff --git a/mythtv/programs/mythfrontend/main.cpp b/mythtv/programs/mythfrontend/main.cpp
+index 8710e1c022..9c3a83b4cd 100644
+--- a/mythtv/programs/mythfrontend/main.cpp
++++ b/mythtv/programs/mythfrontend/main.cpp
+@@ -1767,6 +1767,10 @@ int main(int argc, char **argv)
+ bool bPromptForBackend = false;
+ bool bBypassAutoDiscovery = false;
+
++#if CONFIG_OMX_RPI
++ setenv("QT_XCB_GL_INTEGRATION","none",0);
++#endif
++
+ #ifdef Q_OS_ANDROID
+ // extra for 0 termination
+ char *newargv[argc+4+1];
+@@ -1973,9 +1977,9 @@ int main(int argc, char **argv)
+
+ MythMainWindow *mainWindow = GetMythMainWindow();
+ #if CONFIG_DARWIN
+- mainWindow->Init(QT_PAINTER);
++ mainWindow->Init(QT_PAINTER, false);
+ #else
+- mainWindow->Init();
++ mainWindow->Init(QString(), false);
+ #endif
+ mainWindow->setWindowTitle(qApp->translate("(MythFrontendMain)",
+ "MythTV Frontend",
+diff --git a/mythtv/programs/mythfrontend/mythfrontend.pro b/mythtv/programs/mythfrontend/mythfrontend.pro
+index 744fe1f2bb..926d01ea21 100644
+--- a/mythtv/programs/mythfrontend/mythfrontend.pro
++++ b/mythtv/programs/mythfrontend/mythfrontend.pro
+@@ -161,17 +161,30 @@ android {
+ using_openmax {
+ contains( HAVE_OPENMAX_BROADCOM, yes ) {
+ using_opengl {
+- # For raspberry Pi Raspbian
+- exists(/opt/vc/lib/libEGL.so) {
++ # For raspberry Pi Raspbian Stretch
++ exists(/opt/vc/lib/libbrcmEGL.so) {
+ DEFINES += USING_OPENGLES
+ # For raspberry pi raspbian
+ QMAKE_RPATHDIR += $${RUNPREFIX}/share/mythtv/lib
+ createlinks.path = $${PREFIX}/share/mythtv/lib
+- createlinks.extra = ln -fs /opt/vc/lib/libEGL.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libEGL.so.1.0.0 ;
+- createlinks.extra += ln -fs /opt/vc/lib/libEGL.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libEGL.so.1 ;
+- createlinks.extra += ln -fs /opt/vc/lib/libGLESv2.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libGLESv2.so.2.0.0 ;
+- createlinks.extra += ln -fs /opt/vc/lib/libGLESv2.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libGLESv2.so.2 ;
++ createlinks.extra = ln -fs /opt/vc/lib/libbrcmEGL.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libEGL.so.1.0.0 ;
++ createlinks.extra += ln -fs /opt/vc/lib/libbrcmEGL.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libEGL.so.1 ;
++ createlinks.extra += ln -fs /opt/vc/lib/libbrcmGLESv2.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libGLESv2.so.2.0.0 ;
++ createlinks.extra += ln -fs /opt/vc/lib/libbrcmGLESv2.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libGLESv2.so.2 ;
+ INSTALLS += createlinks
++ } else {
++ # For raspberry Pi Raspbian pre-stretch
++ exists(/opt/vc/lib/libEGL.so) {
++ DEFINES += USING_OPENGLES
++ # For raspberry pi raspbian
++ QMAKE_RPATHDIR += $${RUNPREFIX}/share/mythtv/lib
++ createlinks.path = $${PREFIX}/share/mythtv/lib
++ createlinks.extra = ln -fs /opt/vc/lib/libEGL.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libEGL.so.1.0.0 ;
++ createlinks.extra += ln -fs /opt/vc/lib/libEGL.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libEGL.so.1 ;
++ createlinks.extra += ln -fs /opt/vc/lib/libGLESv2.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libGLESv2.so.2.0.0 ;
++ createlinks.extra += ln -fs /opt/vc/lib/libGLESv2.so $(INSTALL_ROOT)/$${PREFIX}/share/mythtv/lib/libGLESv2.so.2 ;
++ INSTALLS += createlinks
++ }
+ }
+ } else {
+ # For raspberry pi ubuntu
+diff --git a/mythtv/programs/mythfrontend/schedulecommon.cpp b/mythtv/programs/mythfrontend/schedulecommon.cpp
+index 65f295bec7..697e8ce56f 100644
+--- a/mythtv/programs/mythfrontend/schedulecommon.cpp
++++ b/mythtv/programs/mythfrontend/schedulecommon.cpp
+@@ -248,9 +248,16 @@ void ScheduleCommon::ShowPrevious(void) const
+ if (!pginfo)
+ return;
+
++ ShowPrevious(pginfo->GetRecordingRuleID(), pginfo->GetTitle());
++}
++
++/**
++* \brief Show the previous recordings for this recording rule
++*/
++void ScheduleCommon::ShowPrevious(uint ruleid, const QString &title) const
++{
+ MythScreenStack *mainStack = GetMythMainWindow()->GetMainStack();
+- ProgLister *pl = new ProgLister(mainStack, pginfo->GetRecordingRuleID(),
+- pginfo->GetTitle());
++ ProgLister *pl = new ProgLister(mainStack, ruleid, title);
+ if (pl->Create())
+ mainStack->AddScreen(pl);
+ else
+diff --git a/mythtv/programs/mythfrontend/schedulecommon.h b/mythtv/programs/mythfrontend/schedulecommon.h
+index 909ddc9e8e..2bbba2a45d 100644
+--- a/mythtv/programs/mythfrontend/schedulecommon.h
++++ b/mythtv/programs/mythfrontend/schedulecommon.h
+@@ -36,6 +36,7 @@ class ScheduleCommon : public MythScreenType
+ virtual void EditRecording(bool may_watch_now = false);
+ virtual void QuickRecord(void);
+ virtual void ShowPrevious(void) const;
++ virtual void ShowPrevious(uint ruleid, const QString &title) const;
+ virtual void ShowUpcoming(void) const;
+ virtual void ShowUpcomingScheduled(void) const;
+ virtual void ShowChannelSearch(void) const;
+diff --git a/mythtv/programs/mythfrontend/scheduleeditor.cpp b/mythtv/programs/mythfrontend/scheduleeditor.cpp
+index 2b1914bbcc..c735645441 100644
+--- a/mythtv/programs/mythfrontend/scheduleeditor.cpp
++++ b/mythtv/programs/mythfrontend/scheduleeditor.cpp
+@@ -605,7 +605,8 @@ void ScheduleEditor::customEvent(QEvent *event)
+ else if (resulttext == tr("Upcoming Recordings"))
+ showUpcomingByRule();
+ else if (resulttext == tr("Previously Recorded"))
+- ShowPrevious();
++ ShowPrevious(m_recordingRule->m_recordID,
++ m_recordingRule->m_title);
+ }
+ else if (resultid == "newrecgroup")
+ {
+diff --git a/mythtv/programs/mythscreenwizard/main.cpp b/mythtv/programs/mythscreenwizard/main.cpp
+index d94ad76c93..583cf49118 100644
+--- a/mythtv/programs/mythscreenwizard/main.cpp
++++ b/mythtv/programs/mythscreenwizard/main.cpp
+@@ -111,6 +111,11 @@ static void startAppearWiz(int _x, int _y, int _w, int _h)
+
+ int main(int argc, char **argv)
+ {
++
++#if CONFIG_OMX_RPI
++ setenv("QT_XCB_GL_INTEGRATION","none",0);
++#endif
++
+ MythScreenWizardCommandLineParser cmdline;
+ if (!cmdline.Parse(argc, argv))
+ {
+diff --git a/mythtv/programs/mythtv-setup/main.cpp b/mythtv/programs/mythtv-setup/main.cpp
+index b30442d992..a6833dc11a 100644
+--- a/mythtv/programs/mythtv-setup/main.cpp
++++ b/mythtv/programs/mythtv-setup/main.cpp
+@@ -279,6 +279,10 @@ int main(int argc, char *argv[])
+ QString scanTableName = "atsc-vsb8-us";
+ QString scanInputName = "";
+
++#if CONFIG_OMX_RPI
++ setenv("QT_XCB_GL_INTEGRATION","none",0);
++#endif
++
+ MythTVSetupCommandLineParser cmdline;
+ if (!cmdline.Parse(argc, argv))
+ {
+diff --git a/mythtv/programs/mythwelcome/main.cpp b/mythtv/programs/mythwelcome/main.cpp
+index 37f34e0f21..abc4a38543 100644
+--- a/mythtv/programs/mythwelcome/main.cpp
++++ b/mythtv/programs/mythwelcome/main.cpp
+@@ -47,6 +47,10 @@ int main(int argc, char **argv)
+ {
+ bool bShowSettings = false;
+
++#if CONFIG_OMX_RPI
++ setenv("QT_XCB_GL_INTEGRATION","none",0);
++#endif
++
+ MythWelcomeCommandLineParser cmdline;
+ if (!cmdline.Parse(argc, argv))
+ {
+diff --git a/mythtv/programs/scripts/database/mythconverg_backup.pl b/mythtv/programs/scripts/database/mythconverg_backup.pl
+index 6b3d0eb13c..e13ffbbbd5 100755
+--- a/mythtv/programs/scripts/database/mythconverg_backup.pl
++++ b/mythtv/programs/scripts/database/mythconverg_backup.pl
+@@ -13,7 +13,7 @@
+
+ # Script info
+ $NAME = 'MythTV Database Backup Script';
+- $VERSION = '1.0.12';
++ $VERSION = '1.0.13';
+
+ # Some variables we'll use here
+ our ($username, $homedir, $mythconfdir, $database_information_file);
+@@ -700,12 +700,20 @@ EOF
+ {
+ my $have_database_libs = check_database_libs;
+ return 0 if ($have_database_libs < 2);
++ my $temp_host = $mysql_conf{'db_host'};
++ if ($temp_host =~ /:/)
++ {
++ if ($temp_host =~ /^(?!\[).*(?!\])$/)
++ {
++ $temp_host = "[$temp_host]";
++ }
++ }
+ $dbh = DBI->connect("dbi:mysql:".
+- "database=$mysql_conf{'db_name'}:".
+- "host=$mysql_conf{'db_host'}",
++ "host=$temp_host:".
++ "database=$mysql_conf{'db_name'}",
+ "$mysql_conf{'db_user'}",
+ "$mysql_conf{'db_pass'}",
+- { PrintError => 0 });
++ { PrintError => 1 });
+ }
+ return 1;
+ }
+diff --git a/mythtv/programs/scripts/database/mythconverg_restore.pl b/mythtv/programs/scripts/database/mythconverg_restore.pl
+index 62a60d2e4e..42c0f68b15 100755
+--- a/mythtv/programs/scripts/database/mythconverg_restore.pl
++++ b/mythtv/programs/scripts/database/mythconverg_restore.pl
+@@ -13,7 +13,7 @@
+
+ # Script info
+ $NAME = 'MythTV Database Restore Script';
+- $VERSION = '1.0.18';
++ $VERSION = '1.0.19';
+
+ # Some variables we'll use here
+ our ($username, $homedir, $mythconfdir, $database_information_file);
+@@ -915,17 +915,25 @@ EOF
+ my $use_db = shift;
+ my $show_errors = shift;
+ my $result = 1;
+- my $connect_string = 'dbi:mysql:database=';
++ my $connect_string = 'dbi:mysql';
++ my $temp_host = $mysql_conf{'db_host'};
++ if ($temp_host =~ /:/)
++ {
++ if ($temp_host =~ /^(?!\[).*(?!\])$/)
++ {
++ $temp_host = "[$temp_host]";
++ }
++ }
++ $connect_string .= ":host=$temp_host";
+ if ($use_db)
+ {
+- $connect_string .= $mysql_conf{'db_name'};
++ $connect_string .= ":database=$mysql_conf{'db_name'}";
+ }
+- $connect_string .= ":host=$mysql_conf{'db_host'}";
+ $dbh->disconnect if (defined($dbh));
+ $dbh = DBI->connect($connect_string,
+ "$mysql_conf{'db_user'}",
+ "$mysql_conf{'db_pass'}",
+- { PrintError => 0 });
++ { PrintError => 1 });
+ $result = 0 if (!defined($dbh));
+ if ($show_errors && !defined($dbh))
+ {
+diff --git a/mythtv/programs/scripts/metadata/Television/ttvdb.py b/mythtv/programs/scripts/metadata/Television/ttvdb.py
+index 492feb7f09..20ad08d433 100755
+--- a/mythtv/programs/scripts/metadata/Television/ttvdb.py
++++ b/mythtv/programs/scripts/metadata/Television/ttvdb.py
+@@ -34,10 +34,552 @@
+ #
+ # License:Creative Commons GNU GPL v2
+ # (http://creativecommons.org/licenses/GPL/2.0/)
+-#-------------------------------------
++# -------------------------------------
++"""
++Doctests
++
++>>> sys.argv = shlex.split('./ttvdb.py -B Sanctuary')
++>>> main()
++Banner:http://thetvdb.com/banners/graphical/80159-g4.jpg,http://thetvdb.com/banners/graphical/80159-g5.jpg,http://thetvdb.com/banners/graphical/80159-g3.jpg,http://thetvdb.com/banners/graphical/80159-g6.jpg,http://thetvdb.com/banners/graphical/80159-g2.jpg,http://thetvdb.com/banners/graphical/80159-g.jpg,http://thetvdb.com/banners/graphical/80159-g8.jpg
++0
++>>> sys.argv = shlex.split('./ttvdb.py -S SG-1 1 10')
++>>> main()
++<?xml version='1.0' encoding='UTF-8'?>
++<metadata>
++ <item>
++ <title>Stargate SG-1</title>
++ <subtitle>Thor's Hammer</subtitle>
++ <description>Teal'c and O'Neill are transported to an underground cage designed by the Asgard to protect an alien world from the Goa'uld.</description>
++ <season>1</season>
++ <episode>10</episode>
++ <certifications>
++ <certification locale="us" name="TV-PG"/>
++ </certifications>
++ <studios>
++ <studio name="Syfy"/>
++ </studios>
++ <runtime/>
++ <inetref>72449</inetref>
++ <collectionref>72449</collectionref>
++ <imdb>0118480</imdb>
++ <tmsref>EP00225421</tmsref>
++ <language>en</language>
++ <year>1997</year>
++ <releasedate>1997-09-26</releasedate>
++ <people>
++ <person job="Actor" name="Richard Dean Anderson" character="Jack O'Neill" url="http://thetvdb.com/banners/actors/17720.jpg" thumb="http://thetvdb.com/banners/actors/17720.jpg"/>
++ <person job="Actor" name="Amanda Tapping" character="Samantha Carter" url="http://thetvdb.com/banners/actors/17722.jpg" thumb="http://thetvdb.com/banners/actors/17722.jpg"/>
++ <person job="Actor" name="Michael Shanks" character="Dr. Daniel Jackson" url="http://thetvdb.com/banners/actors/17723.jpg" thumb="http://thetvdb.com/banners/actors/17723.jpg"/>
++ <person job="Actor" name="Ben Browder" character="Cameron Mitchell" url="http://thetvdb.com/banners/actors/17725.jpg" thumb="http://thetvdb.com/banners/actors/17725.jpg"/>
++ <person job="Actor" name="Christopher Judge" character="Teal'c" url="http://thetvdb.com/banners/actors/17726.jpg" thumb="http://thetvdb.com/banners/actors/17726.jpg"/>
++ <person job="Actor" name="Beau Bridges" character="Henry "Hank" Landry" url="http://thetvdb.com/banners/actors/17719.jpg" thumb="http://thetvdb.com/banners/actors/17719.jpg"/>
++ <person job="Actor" name="Don S. Davis" character="George S. Hammond" url="http://thetvdb.com/banners/actors/17721.jpg" thumb="http://thetvdb.com/banners/actors/17721.jpg"/>
++...
++ <person job="Guest Star" name="James Earl Jones"/>
++ <person job="Guest Star" name="Galyn Gorg"/>
++ <person job="Guest Star" name="Tamsin Kelsey"/>
++ <person job="Guest Star" name="Vincent Hammond"/>
++ <person job="Guest Star" name="Mark Gibbon"/>
++ <person job="Director" name="Brad Turner"/>
++ <person job="Author" name="Katharyn Michaelian Powers"/>
++ </people>
++ <images>
++ <image type="screenshot" url="http://thetvdb.com/banners/episodes/72449/85759.jpg" thumb="http://thetvdb.com/banners/_cache/episodes/72449/85759.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/72449-1-9.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/72449-1-9.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/72449-1.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/72449-1.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/72449-1-2.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/72449-1-2.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/72449-1-8.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/72449-1-8.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/185-1.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/185-1.jpg"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/72449-55.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/72449-55.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/72449-34.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/72449-34.jpg" width="1280" height="720"/>
++...
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/72449-75.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/72449-75.jpg" width="1280" height="720"/>
++ </images>
++ </item>
++</metadata>
++0
++>>> sys.argv = shlex.split('ttvdb -PFB "Stargate SG-1"')
++>>> main()
++Coverart:http://thetvdb.com/banners/posters/72449-4.jpg,http://thetvdb.com/banners/posters/72449-5.jpg,http://thetvdb.com/banners/posters/72449-9.jpg,http://thetvdb.com/banners/posters/72449-6.jpg,http://thetvdb.com/banners/posters/72449-7.jpg,http://thetvdb.com/banners/posters/72449-8.jpg,http://thetvdb.com/banners/posters/72449-1.jpg,http://thetvdb.com/banners/posters/72449-3.jpg,http://thetvdb.com/banners/posters/72449-2.jpg
++Fanart:http://thetvdb.com/banners/fanart/original/72449-55.jpg,http://thetvdb.com/banners/fanart/original/72449-34.jpg,http://thetvdb.com/banners/fanart/original/72449-23.jpg,http://thetvdb.com/banners/fanart/original/72449-24.jpg,http://thetvdb.com/banners/fanart/original/72449-29.jpg,http://thetvdb.com/banners/fanart/original/72449-6.jpg,http://thetvdb.com/banners/fanart/original/72449-26.jpg,http://thetvdb.com/banners/fanart/original/72449-36.jpg,http://thetvdb.com/banners/fanart/original/72449-38.jpg,http://thetvdb.com/banners/fanart/original/72449-50.jpg,http://thetvdb.com/banners/fanart/original/72449-27.jpg,http://thetvdb.com/banners/fanart/original/72449-31.jpg,http://thetvdb.com/banners/fanart/original/72449-32.jpg,http://thetvdb.com/banners/fanart/original/72449-35.jpg,http://thetvdb.com/banners/fanart/original/72449-42.jpg,http://thetvdb.com/banners/fanart/original/72449-44.jpg,http://thetvdb.com/banners/fanart/original/72449-25.jpg,http://thetvdb.com/banners/fanart/orig
inal/72449-28.jpg,http://thetvdb.com/banners/fanart/original/72449-47.jpg...
anart/original/72449-4.jpg,http://thetvdb.com/banners/fanart/original/724...
rs/fanart/original/72449-18.jpg,http://thetvdb.com/banners/fanart/origina...
++Banner:http://thetvdb.com/banners/graphical/72449-g6.jpg,http://thetvdb.com/banners/graphical/72449-g7.jpg,http://thetvdb.com/banners/graphical/185-g3.jpg,http://thetvdb.com/banners/graphical/185-g2.jpg,http://thetvdb.com/banners/graphical/72449-g2.jpg,http://thetvdb.com/banners/graphical/72449-g9.jpg,http://thetvdb.com/banners/blank/72449.jpg,http://thetvdb.com/banners/graphical/72449-g3.jpg,http://thetvdb.com/banners/graphical/72449-g4.jpg,http://thetvdb.com/banners/graphical/185-g.jpg,http://thetvdb.com/banners/graphical/72449-g.jpg,http://thetvdb.com/banners/text/185.jpg,http://thetvdb.com/banners/graphical/72449-g5.jpg,http://thetvdb.com/banners/graphical/72449-g8.jpg
++0
++
++# Coverart:http://www.thetvdb.com/banners/posters/72449-1.jpg
++# Fanart:http://www.thetvdb.com/banners/fanart/original/72449-1.jpg
++# Banner:http://www.thetvdb.com/banners/graphical/185-g3.jpg
++>>> sys.argv = shlex.split('ttvdb -B "Night Gallery"')
++>>> main()
++Banner:http://thetvdb.com/banners/graphical/70382-g4.jpg,http://thetvdb.com/banners/graphical/1013-g.jpg,http://thetvdb.com/banners/blank/70382.jpg,http://thetvdb.com/banners/graphical/70382-g.jpg,http://thetvdb.com/banners/graphical/70382-g2.jpg,http://thetvdb.com/banners/graphical/70382-g3.jpg
++0
++
++# http://www.thetvdb.com/banners/blank/70382.jpg
++>>> sys.argv = shlex.split('ttvdb -Bl en Lost')
++>>> main()
++Banner:http://thetvdb.com/banners/graphical/73739-g4.jpg,http://thetvdb.com/banners/graphical/73739-g13.jpg,http://thetvdb.com/banners/graphical/73739-g18.jpg,http://thetvdb.com/banners/graphical/73739-g6.jpg,http://thetvdb.com/banners/graphical/73739-g12.jpg,http://thetvdb.com/banners/graphical/73739-g3.jpg,http://thetvdb.com/banners/graphical/24313-g2.jpg,http://thetvdb.com/banners/graphical/73739-g8.jpg,http://thetvdb.com/banners/graphical/73739-g.jpg,http://thetvdb.com/banners/graphical/73739-g5.jpg,http://thetvdb.com/banners/graphical/73739-g7.jpg,http://thetvdb.com/banners/graphical/73739-g10.jpg,http://thetvdb.com/banners/graphical/73739-g11.jpg,http://thetvdb.com/banners/graphical/24313-g.jpg,http://thetvdb.com/banners/graphical/73739-g2.jpg,http://thetvdb.com/banners/blank/73739.jpg
++0
++
++# Banner:http://www.thetvdb.com/banners/graphical/73739-g4.jpg,http://www.t...
++> ttvdb -N --configure="/home/user/.tvdb/tvdb.conf" "Eleventh Hour" "H2O"
++>>> sys.argv = shlex.split('ttvdb -N --configure=./tvdb_test.conf "Eleventh Hour" H2O')
++>>> main()
++<?xml version='1.0' encoding='UTF-8'?>
++<metadata>
++ <item>
++ <title>Eleventh Hour (US)</title>
++ <subtitle>H2O</subtitle>
++ <description>An epidemic of sudden, violent outbursts by law-abiding citizens draws Dr. Jacob Hood to a quiet Texas community to investigate - but he soon succumbs to the same erratic behavior.</description>
++ <season>1</season>
++ <episode>10</episode>
++ <certifications>
++ <certification locale="us" name="TV-14"/>
++ </certifications>
++ <studios>
++ <studio name="CBS"/>
++ </studios>
++ <runtime/>
++ <inetref>83066</inetref>
++ <collectionref>83066</collectionref>
++ <imdb>1118697</imdb>
++ <language>en</language>
++ <year>2009</year>
++ <releasedate>2009-01-15</releasedate>
++ <people>
++ <person job="Actor" name="Rufus Sewell" character="Jacob Hood" url="http://thetvdb.com/banners/actors/78899.jpg" thumb="http://thetvdb.com/banners/actors/78899.jpg"/>
++ <person job="Actor" name="Marley Shelton" character="Rachel Young" url="http://thetvdb.com/banners/actors/78898.jpg" thumb="http://thetvdb.com/banners/actors/78898.jpg"/>
++ <person job="Actor" name="Omar Benson Miller" character="Felix Lee" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Actor" name="Chris Krauser" character="EMT" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Actor" name="Erica Frene" character="Receptionist" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Actor" name="Lei'lah Star" character="Sick Kid" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Actor" name="Mark C. Baldwin" character="Infomercial Announcer" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Director" name="McDonough"/>
++ <person job="Author" name="Kim Newton"/>
++ </people>
++ <images>
++ <image type="screenshot" url="http://thetvdb.com/banners/episodes/83066/416216.jpg" thumb="http://thetvdb.com/banners/_cache/episodes/83066/416216.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/83066-1-2.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/83066-1-2.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/83066-1.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/83066-1.jpg"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/83066-1.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/83066-1.jpg" width="1280" height="720"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/83066-3.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/83066-3.jpg" width="1280" height="720"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/83066-5.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/83066-5.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/83066-2.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/83066-2.jpg" width="1280" height="720"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/83066-4.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/83066-4.jpg" width="1280" height="720"/>
++ </images>
++ </item>
++</metadata>
++0
++
++# <language>en</language>
++# <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/83066-4.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/83066-4.jpg" width="1280" height="720"/>
++# <image type="banner" url="http://www.thetvdb.com/banners/graphical/83066-g.jpg" thumb="http://www.thetvdb.com/banners/_cache/graphical/83066-g.jpg"/>
++(Return the season numbers for a series)
++> ttvdb --configure="./tvdb_test.conf" -n "SG-1"
++>>> sys.argv = shlex.split('ttvdb --configure=./tvdb_test.conf -n SG-1')
++>>> main()
++0,1,2,3,4,5,6,7,8,9,10
++0
++
++(Return the meta data for a specific series/season/episode)
++> ttvdb.py -D 80159 2 2
++>>> sys.argv = shlex.split('ttvdb -D 80159 2 2')
++>>> main()
++<?xml version='1.0' encoding='UTF-8'?>
++<metadata>
++ <item>
++ <title>Sanctuary</title>
++ <subtitle>End of Nights (2)</subtitle>
++ <description>Furious at being duped into a trap, Magnus takes on Kate, demanding information and complete access to her Cabal contacts. The Cabal’s true agenda is revealed and Magnus realizes that they are not only holding Ashley as ransom to obtain complete control of the Sanctuary Network, but turning her into the ultimate weapon. Now transformed into a Super Abnormal with devastating powers, Ashley and her newly cloned fighters begin their onslaught, destroying Sanctuaries in cities around the world. Tesla and Henry attempt to create a weapon that can stop the attacks…without killing Ashley. As the team prepares to defend the Sanctuary with Tesla’s new weapon, Magnus must come to the realization that they may not be able to stop the Cabal’s attacks without harming Ashley. She realizes she might have to choose between saving her only daughter, or losing the Sanctuary and all the lives and secrets within it.</description>
++ <season>2</season>
++ <episode>2</episode>
++ <certifications>
++ <certification locale="us" name="TV-PG"/>
++ </certifications>
++ <studios>
++ <studio name="Space"/>
++ </studios>
++ <runtime/>
++ <inetref>80159</inetref>
++ <collectionref>80159</collectionref>
++ <imdb>0965394</imdb>
++ <tmsref>EP01085421</tmsref>
++ <language>en</language>
++ <year>2009</year>
++ <releasedate>2009-10-16</releasedate>
++ <people>
++ <person job="Actor" name="Amanda Tapping" character="Dr. Helen Magnus" url="http://thetvdb.com/banners/actors/73053.jpg" thumb="http://thetvdb.com/banners/actors/73053.jpg"/>
++ <person job="Actor" name="Robin Dunne" character="Will Zimmerman" url="http://thetvdb.com/banners/actors/73054.jpg" thumb="http://thetvdb.com/banners/actors/73054.jpg"/>
++ <person job="Actor" name="Emilie Ullerup" character="Ashley Magnus" url="http://thetvdb.com/banners/actors/73055.jpg" thumb="http://thetvdb.com/banners/actors/73055.jpg"/>
++ <person job="Actor" name="Christopher Heyerdahl" character="John Druitt" url="http://thetvdb.com/banners/actors/73056.jpg" thumb="http://thetvdb.com/banners/actors/73056.jpg"/>
++ <person job="Actor" name="Christopher Heyerdahl" character="Bigfoot" url="http://thetvdb.com/banners/actors/309797.jpg" thumb="http://thetvdb.com/banners/actors/309797.jpg"/>
++ <person job="Actor" name="Ryan Robbins" character="Henry Foss" url="http://thetvdb.com/banners/actors/80072.jpg" thumb="http://thetvdb.com/banners/actors/80072.jpg"/>
++ <person job="Actor" name="Agam Darshi" character="Kate Freelander" url="http://thetvdb.com/banners/actors/118211.jpg" thumb="http://thetvdb.com/banners/actors/118211.jpg"/>
++ <person job="Actor" name="Vincent Gale" character="Nigel Griffin" url="http://thetvdb.com/banners/actors/372548.jpg" thumb="http://thetvdb.com/banners/actors/372548.jpg"/>
++ <person job="Actor" name="Peter Wingfield" character="James Watson" url="http://thetvdb.com/banners/actors/372549.jpg" thumb="http://thetvdb.com/banners/actors/372549.jpg"/>
++ <person job="Actor" name="Jonathon Young" character="Nikola Tesla" url="http://thetvdb.com/banners/actors/372550.jpg" thumb="http://thetvdb.com/banners/actors/372550.jpg"/>
++ <person job="Actor" name="Ian Tracey" character="Adam Worth" url="http://thetvdb.com/banners/actors/372551.jpg" thumb="http://thetvdb.com/banners/actors/372551.jpg"/>
++ <person job="Actor" name="Jim Byrnes" character="Gregory Magnus" url="http://thetvdb.com/banners/actors/372552.jpg" thumb="http://thetvdb.com/banners/actors/372552.jpg"/>
++ <person job="Actor" name="Polly Walker" character="Ranna Seneschal" url="http://thetvdb.com/banners/actors/372553.jpg" thumb="http://thetvdb.com/banners/actors/372553.jpg"/>
++ <person job="Actor" name="Robert Lawrenson" character="Declan Macrae" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Actor" name="Pascale Hutton" character="Abby Corrigan" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Actor" name="Lynda Boyd" character="Dana Whitcomb" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Actor" name="Shekhar Paleja" character="Ravi" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Actor" name="Chuck Campbell" character="Two Faced Guy" url="http://thetvdb.com/banners/" thumb="http://thetvdb.com/banners/"/>
++ <person job="Guest Star" name="Jonathon Young"/>
++ <person job="Guest Star" name="Christine Chatelain"/>
++ <person job="Guest Star" name="Robert Lawrenson"/>
++ <person job="Guest Star" name="Maiko Yamamoto"/>
++ <person job="Guest Star" name="Stanley Tsang"/>
++ <person job="Guest Star" name="Darren A. Hebert"/>
++ <person job="Guest Star" name="Lynda Boyd"/>
++ <person job="Director" name="Martin Wood"/>
++ <person job="Author" name="Damian Kindler"/>
++ </people>
++ <images>
++ <image type="screenshot" url="http://thetvdb.com/banners/episodes/80159/998441.jpg" thumb="http://thetvdb.com/banners/_cache/episodes/80159/998441.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/80159-2.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/80159-2.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/80159-2-3.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/80159-2-3.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/80159-2-2.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/80159-2-2.jpg"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-10.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-10.jpg" width="1280" height="720"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-6.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-6.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-3.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-3.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-9.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-9.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-7.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-7.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-8.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-8.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-2.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-2.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-4.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-4.jpg" width="1280" height="720"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-5.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-5.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-21.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-21.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-16.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-16.jpg" width="1280" height="720"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-1.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-1.jpg" width="1280" height="720"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-15.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-15.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-17.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-17.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-18.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-18.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-19.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-19.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-20.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-20.jpg" width="1920" height="1080"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-22.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-22.jpg" width="1920" height="1080"/>
++ </images>
++ </item>
++</metadata>
++0
++
++(Return a list of "thetv.com series id and series name" that contain specific search word(s) )
++(!! Be careful with this option as poorly defined search words can result in large lists being returned !!)
++> ttvdb.py -M "night a"
++>>> sys.argv = shlex.split('ttvdb -M "night a"')
++>>> main()
++<?xml version='1.0' encoding='UTF-8'?>
++<metadata>
++ <item>
++ <language>en</language>
++ <title>A Night of Numbers</title>
++ <inetref>249306</inetref>
++ <collectionref>249306</collectionref>
++ <description>BBC FOUR celebrates mathematics and the beauty of numbers with a series of programmes about this most precise and exacting of all intellectual disciplines. Throughout the night, the channel will show films that offer insights into the minds of great mathematicians, and reveal the stories behind some of the great mathematical breakthroughs.</description>
++ <releasedate>2005-12-06</releasedate>
++ <images>
++ <image type="banner" url="http://www.thetvdb.com/banners/graphical/249306-g.jpg" thumb="http://www.thetvdb.com/banners/_cache/graphical/249306-g.jpg"/>
++ </images>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A night at The Classic</title>
++ <inetref>224951</inetref>
++ <collectionref>224951</collectionref>
++ <description>Each episode of A Night at The Classic follows MC Brendhan Lovegrove and guest comedians as they perform for a different crowd on a different "night" at The Classic. Along with stand-up comedy recorded in front of a live audience, viewers are given a glimpse of what the comedians are like backstage, providing a rare insight into the rivalries and rituals of stand-up comedians.</description>
++ <releasedate>2010-11-03</releasedate>
++ <images>
++ <image type="banner" url="http://www.thetvdb.com/banners/graphical/224951-g.jpg" thumb="http://www.thetvdb.com/banners/_cache/graphical/224951-g.jpg"/>
++ </images>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Night at the Rijksmuseum</title>
++ <inetref>268908</inetref>
++ <collectionref>268908</collectionref>
++ <releasedate>2013-04-18</releasedate>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Night of Heroes: The Sun Military Awards</title>
++ <inetref>270984</inetref>
++ <collectionref>270984</collectionref>
++ <description>Annual celebration, A Night of Heroes: Also known as The Millies, the awards recognize the excellence and sacrifice made by Britain's Armed Forces</description>
++ <images>
++ <image type="banner" url="http://www.thetvdb.com/banners/graphical/270984-g.jpg" thumb="http://www.thetvdb.com/banners/_cache/graphical/270984-g.jpg"/>
++ </images>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Night of Exploration</title>
++ <inetref>271528</inetref>
++ <collectionref>271528</collectionref>
++ <description>For well over a century the National Geographic Society has been synonymous with pioneering expeditions, groundbreaking discoveries and breathtaking imagery of world cultures and exotic locations. In celebration of the iconic yellow border’s 125th anniversary, National Geographic Channel pays tribute to the hotshots, the mavericks and the best in their field who have devoted their lives to exploring the world around us and the groundbreaking discoveries that are making a difference.</description>
++ <images>
++ <image type="banner" url="http://www.thetvdb.com/banners/graphical/271528-g.jpg" thumb="http://www.thetvdb.com/banners/_cache/graphical/271528-g.jpg"/>
++ </images>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Night at the Office</title>
++ <inetref>118511</inetref>
++ <collectionref>118511</collectionref>
++ <description>On August 11th 2009, it was announced that the cast of The Office would be reuniting for a special, called "A Night at The Office", available at BBC2 and online, it was the entire first series of the seminal BBC comedy 'The Office' with new comments from the writers and celebrity fans shown between each episode.</description>
++ <releasedate>2009-08-17</releasedate>
++ <images>
++ <image type="banner" url="http://www.thetvdb.com/banners/graphical/118511-g.jpg" thumb="http://www.thetvdb.com/banners/_cache/graphical/118511-g.jpg"/>
++ </images>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Night With The Stars</title>
++ <inetref>256045</inetref>
++ <collectionref>256045</collectionref>
++ <description>For one night only, Professor Brian Cox goes unplugged in a specially recorded programme from the lecture theatre of the Royal Institution of Great Britain. In his own inimitable style, Brian takes an audience of famous faces, scientists and members of the public on a journey through some of the most challenging concepts in physics. With the help of Jonathan Ross, Simon Pegg, Sarah Millican and James May, Brian shows how diamonds - the hardest material in nature - are made up of nothingness; how things can be in an infinite number of places at once; why everything we see or touch in the universe exists; and how a diamond in the heart of London is in communication with the largest diamond in the cosmos.</description>
++ <releasedate>2011-12-18</releasedate>
++ <images>
++ <image type="banner" url="http://www.thetvdb.com/banners/graphical/256045-g.jpg" thumb="http://www.thetvdb.com/banners/_cache/graphical/256045-g.jpg"/>
++ </images>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Night at the Festival Club</title>
++ <inetref>268969</inetref>
++ <collectionref>268969</collectionref>
++ <description>A Night at the Festival Club is an Australian stand-up comedy television event created and executive produced by the Comedy Channel programming director Darren Chau, produced by Ted Robinson and GNW TV Productions for the Comedy Channel as part of the Melbourne International Comedy Festival. The series centres around bottling the unique comedic live performances and moments that occur late night in the Festival Club during the Melbourne International Comedy Festival.</description>
++ <releasedate>2008-05-02</releasedate>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Clear Midsummer Night</title>
++ <inetref>286538</inetref>
++ <collectionref>286538</collectionref>
++ <description>The daughter of a real estate mogul Xia Wan Qing, has seemingly no way of retreating after a friend's betrayal and her boyfriend backing out of their wedding. Fortunately, she's saved by business genius Qiao Jin Fan. Jin Fan is a "playboy" and the future successor for Qiao corporation. He extends an offering hand and together they embark on a path of revenge. Each for reasons of their own, begin a love with "uncertain motives." After enduring circumstances because of their families' competing interests and a number of conspiracies the two find true love.</description>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Christmas Night with the Stars</title>
++ <inetref>248911</inetref>
++ <collectionref>248911</collectionref>
++ <description>Christmas Night with the Stars was a television show broadcast each Christmas night by the BBC from 1958 to 1972 (with the exception of 1961, 1965 and 1966) and also revived in 1994. The show was hosted each year by a leading star of BBC TV and featured specially made short seasonal editions (typically about 10 minutes long) of the previous year's most popular BBC sitcoms and light entertainment programs. The show was voted 24th in the Channel 4 100 Greatest Christmas Moments. Most of the variety segments no longer exist.</description>
++ <releasedate>1958-12-25</releasedate>
++ <images>
++ <image type="banner" url="http://www.thetvdb.com/banners/graphical/248911-g2.jpg" thumb="http://www.thetvdb.com/banners/_cache/graphical/248911-g2.jpg"/>
++ </images>
++ </item>
++ <item>
++ <language>en</language>
++ <title>A Night With My Ex</title>
++ <inetref>331751</inetref>
++ <collectionref>331751</collectionref>
++ <description>Do you have unfinished business with a partner from a previous relationship? All of the onetime couples featured on ``A Night With My Ex'' do, and the show is letting them tie up loose ends from the past. In each episode, a pair of exes spend a night together in a one-bedroom apartment complete with a multiple-camera setup. They are left to their own devices -- with no producers and no interruptions -- to try to hash things out. The participants get things off their chests, ask hard-hitting questions and face accusations of infidelity with the ultimate goal of achieving closure on the relationship. Sometimes that closure means a clean break, and other times it leads to renewing the spark and rekindling the romance. Regardless of the outcome, anything goes on the road to reaching that point as the couples confront their pasts -- and their futures.</description>
++ <releasedate>2017-07-18</releasedate>
++ </item>
++ <item>
++ <language>en</language>
++ <title>On a Lustful Night Mingling with a Priest...</title>
++ <inetref>325375</inetref>
++ <collectionref>325375</collectionref>
++ <description>The reunion of Kujo with his old female classmate. He has inherited his parents' temple and became a priest. However, after the two became drunk, he does something unexpected of him to her!</description>
++ <releasedate>2017-04-03</releasedate>
++ </item>
++ <item>
++ <language>en</language>
++ <title>Love on a Saturday Night</title>
++ <inetref>74382</inetref>
++ <collectionref>74382</collectionref>
++ <releasedate>2004-02-01</releasedate>
++ </item>
++ <item>
++ <language>en</language>
++ <title>Britain's Tudor Treasure A Night At Hampton Court</title>
++ <inetref>332440</inetref>
++ <collectionref>332440</collectionref>
++ <description>Lucy Worsley and David Starkey celebrate the 500th anniversary of Britain's finest surviving Tudor building, Hampton Court. As Henry VIII's pleasure palace, Hampton Court was a showcase for royal magnificence and ceremony - and the most important event of all was the christening of Henry's long-awaited son, Prince Edward, on October 15th, 1537. Lucy and David explore how Tudor art, architecture and ritual came together for this momentous occasion. Drawing on historical records and with the help of a team of experts, they recreate key elements of the christening ceremony - including a magnificent set-piece procession through Hampton Court involving nearly 100 people in full Tudor costume.</description>
++ </item>
++</metadata>
++0
++
++(Return TV series collection data of "thetv.com series id" for a specified language)
++>>> sys.argv = shlex.split('ttvdb -l de -C 80159')
++>>> main()
++<?xml version='1.0' encoding='UTF-8'?>
++<metadata>
++ <item>
++ <language>de</language>
++ <title>Sanctuary</title>
++ <network>Space</network>
++ <airday>Friday</airday>
++ <airtime>10:00 PM</airtime>
++ <description>Dr. Helen Magnus ist eine so brillante wie geheimnisvolle Wissenschaftlerin die sich mit den Kreaturen der Nacht beschäftigt. In ihrem Unterschlupf - genannt "Sanctuary" - hat sie ein Team versammelt, das seltsame und furchteinflößende Ungeheuer untersucht, die mit den Menschen auf der Erde leben. Konfrontiert mit ihren düstersten Ängsten und ihren schlimmsten Alpträumen versucht das Sanctuary-Team, die Welt vor den Monstern - und die Monster vor der Welt zu schützen.</description>
++ <certifications>
++ <certification locale="us" name="TV-PG"/>
++ </certifications>
++ <studios>
++ <studio name="Space"/>
++ </studios>
++ <runtime>60</runtime>
++ <inetref>80159</inetref>
++ <imdb>0965394</imdb>
++ <userrating>8.1</userrating>
++ <ratingcount>168</ratingcount>
++ <year>2007</year>
++ <releasedate>2007-03-14</releasedate>
++ <lastupdated>...</lastupdated>
++ <status>Ended</status>
++ <images>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/80159-11.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/80159-11.jpg"/>
++ <image type="banner" url="http://thetvdb.com/banners/graphical/80159-g4.jpg" thumb="http://thetvdb.com/banners/_cache/graphical/80159-g4.jpg"/>
++ </images>
++ </item>
++</metadata>
++0
++
++# test match is loose due ordering differences between py2 and 3
++# i.e. dict key ordering
++# key ordering is not sorted so that Title is first for existing client
++# compatability
++>>> sys.argv = shlex.split('ttvdb -l en -a US -D 281053')
++>>> main()
++Title:Fixer Upper
++Season:0
++Episode:1
++Subtitle:The Waco Way of Life
++Year:2014
++ReleaseDate:2014-07-16
++Director:
++Plot:Chip and Joanna Gaines tell why they love raising a family in Waco, Texas.
++UserRating:
++Writers:
++Screenshot:
++Language:en
++Airedseasonid:583817
++Dvddiscid:
++Id:5463514
++Imdbid:
++Lastupdated:1451954464
++Lastupdatedby:447800
++Productioncode:
++Seriesid:281053
++Showurl:
++Siterating:0
++Siteratingcount:0
++Thumbadded:
++Thumbauthor:1
++Cast:Chip Gaines, Joanna Gaines
++Runtime:45
++Title:Fixer Upper
++...
++Coverart:http://thetvdb.com/banners/posters/281053-4.jpg,http://thetvdb.com/banners/posters/281053-3.jpg,http://thetvdb.com/banners/posters/281053-1.jpg,http://thetvdb.com/banners/posters/281053-4.jpg,http://thetvdb.com/banners/posters/281053-3.jpg,http://thetvdb.com/banners/posters/281053-1.jpg,http://thetvdb.com/banners/posters/281053-2.jpg,http://thetvdb.com/banners/posters/281053-2.jpg
++Fanart:http://thetvdb.com/banners/fanart/original/281053-3.jpg,http://thetvdb.com/banners/fanart/original/281053-3.jpg,http://thetvdb.com/banners/fanart/original/281053-4.jpg,http://thetvdb.com/banners/fanart/original/281053-4.jpg,http://thetvdb.com/banners/fanart/original/281053-1.jpg,http://thetvdb.com/banners/fanart/original/281053-1.jpg,http://thetvdb.com/banners/fanart/original/281053-2.jpg,http://thetvdb.com/banners/fanart/original/281053-2.jpg,http://thetvdb.com/banners/fanart/original/281053-6.jpg,http://thetvdb.com/banners/fanart/original/281053-5.jpg,http://thetvdb.com/banners/fanart/original/281053-7.jpg,http://thetvdb.com/banners/fanart/original/281053-8.jpg,http://thetvdb.com/banners/fanart/original/281053-9.jpg,http://thetvdb.com/banners/fanart/original/281053-10.jpg,http://thetvdb.com/banners/fanart/original/281053-6.jpg,http://thetvdb.com/banners/fanart/original/281053-5.jpg,http://thetvdb.com/banners/fanart/original/281053-7.jpg,http://thetvdb.com/banners/fanart/or
iginal/281053-8.jpg,http://thetvdb.com/banners/fanart/original/281053-9.j...
++Banner:http://thetvdb.com/banners/graphical/281053-g2.jpg,http://thetvdb.com/banners/graphical/281053-g2.jpg,http://thetvdb.com/banners/text/281053.jpg,http://thetvdb.com/banners/graphical/281053-g.jpg,http://thetvdb.com/banners/text/281053.jpg,http://thetvdb.com/banners/graphical/281053-g.jpg
++0
++
++>>> sys.argv = shlex.split('ttvdb.py -l en -a US -N 72108 Pyramid')
++>>> main()
++<?xml version='1.0' encoding='UTF-8'?>
++<metadata>
++ <item>
++ <title>NCIS</title>
++ <subtitle>Pyramid</subtitle>
++ <description>The lives of NCIS members are in jeopardy when they come face-to-face with the infamous Port-to-Port killer, on the eighth season finale of NCIS.</description>
++ <season>8</season>
++ <episode>24</episode>
++ <certifications>
++ <certification locale="us" name="TV-14"/>
++ </certifications>
++ <studios>
++ <studio name="CBS"/>
++ </studios>
++ <runtime/>
++ <inetref>72108</inetref>
++ <collectionref>72108</collectionref>
++ <tmsref>EP00681911</tmsref>
++ <imdb/>
++ <language>en</language>
++ <year>2011</year>
++ <releasedate>2011-05-17</releasedate>
++ <people>
++ <person job="Actor" name="Mark Harmon" character="Leroy Jethro Gibbs" url="http://thetvdb.com/banners/actors/70164.jpg" thumb="http://thetvdb.com/banners/actors/70164.jpg"/>
++ <person job="Actor" name="Sean Murray" character="Timothy "Tim" McGee" url="http://thetvdb.com/banners/actors/70163.jpg" thumb="http://thetvdb.com/banners/actors/70163.jpg"/>
++ <person job="Actor" name="Emily Wickersham" character="Eleanor “Ellie” Bishop" url="http://thetvdb.com/banners/actors/321201.jpg" thumb="http://thetvdb.com/banners/actors/321201.jpg"/>
++ <person job="Actor" name="David McCallum" character="Donald "Ducky" Mallard" url="http://thetvdb.com/banners/actors/70159.jpg" thumb="http://thetvdb.com/banners/actors/70159.jpg"/>
++ <person job="Actor" name="Pauley Perrette" character="Abigail "Abby" Sciuto" url="http://thetvdb.com/banners/actors/70161.jpg" thumb="http://thetvdb.com/banners/actors/70161.jpg"/>
++ <person job="Actor" name="Rocky Carroll" character="Leon Vance" url="http://thetvdb.com/banners/actors/127861.jpg" thumb="http://thetvdb.com/banners/actors/127861.jpg"/>
++ <person job="Actor" name="Brian Dietzen" character="Jimmy Palmer" url="http://thetvdb.com/banners/actors/219761.jpg" thumb="http://thetvdb.com/banners/actors/219761.jpg"/>
++ <person job="Actor" name="Wilmer Valderrama" character="Nicholas "Nick" Torres" url="http://thetvdb.com/banners/actors/394895.jpg" thumb="http://thetvdb.com/banners/actors/394895.jpg"/>
++ <person job="Actor" name="Michael Weatherly" character="Anthony "Tony" DiNozzo" url="http://thetvdb.com/banners/actors/70160.jpg" thumb="http://thetvdb.com/banners/actors/70160.jpg"/>
++ <person job="Actor" name="Sasha Alexander" character="Caitlin "Kate" Todd" url="http://thetvdb.com/banners/actors/70162.jpg" thumb="http://thetvdb.com/banners/actors/70162.jpg"/>
++ <person job="Actor" name="Cote de Pablo" character="Ziva David" url="http://thetvdb.com/banners/actors/70165.jpg" thumb="http://thetvdb.com/banners/actors/70165.jpg"/>
++ <person job="Actor" name="Lauren Holly" character="Jennifer "Jenny" Shepard" url="http://thetvdb.com/banners/actors/77850.jpg" thumb="http://thetvdb.com/banners/actors/77850.jpg"/>
++ <person job="Actor" name="Jennifer Espósito" character="Alex Quinn" url="http://thetvdb.com/banners/actors/402126.jpg" thumb="http://thetvdb.com/banners/actors/402126.jpg"/>
++ <person job="Actor" name="Duane Henry" character="Clayton Reeves" url="http://thetvdb.com/banners/actors/418530.jpg" thumb="http://thetvdb.com/banners/actors/418530.jpg"/>
++ <person job="Guest Star" name="Kerr Smith"/>
++ <person job="Guest Star" name="Sarah Jane Morris"/>
++ <person job="Guest Star" name="Matt Craven"/>
++ <person job="Guest Star" name="David Dayan Fisher"/>
++ <person job="Guest Star" name="Muse Watson"/>
++ <person job="Guest Star" name="Alimi Ballard"/>
++ <person job="Guest Star" name="Matthew Willig"/>
++ <person job="Guest Star" name="Tehmina Sunny"/>
++ <person job="Guest Star" name="Enrique Murciano"/>
++ <person job="Guest Star" name="Jude Ciccolella"/>
++ <person job="Guest Star" name="Vera Miao"/>
++ <person job="Director" name="Dennis Smith"/>
++ <person job="Author" name="Gary Glasberg"/>
++ </people>
++ <images>
++ <image type="screenshot" url="http://thetvdb.com/banners/episodes/72108/4078484.jpg" thumb="http://thetvdb.com/banners/_cache/episodes/72108/4078484.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/72108-8-2.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/72108-8-2.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/72108-8.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/72108-8.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/seasons/72108-8-7.jpg" thumb="http://www.thetvdb.com/banners/_cache/seasons/72108-8-7.jpg"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/72108-31.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/72108-31.jpg" width="1920" height="1080"/>
++...
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/72108-33.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/72108-33.jpg" width="1920" height="1080"/>
++ </images>
++ </item>
++</metadata>
++0
++
++>>> sys.argv = shlex.split('ttvdb.py -l en -a US -N 283661 "Egg Hunt"')
++>>> main()
++<?xml version='1.0' encoding='UTF-8'?>
++<metadata>
++ <item>
++ <title>Jack Hanna's Wild Countdown</title>
++ <subtitle>Egg Hunt</subtitle>
++ <description>Jungle Jack takes off on a very special Egg Hunt, looking for creatures big and small that hatch from eggs! Crocodiles, Bald Eagles, Sea Turtles, Ostriches, Penguins, and more!</description>
++ <season>6</season>
++ <episode>17</episode>
++ <certifications>
++ <certification locale="us" name="TV-G"/>
++ </certifications>
++ <studios>
++ <studio name="ABC (US)"/>
++ </studios>
++ <runtime/>
++ <inetref>283661</inetref>
++ <collectionref>283661</collectionref>
++ <imdb>3062384</imdb>
++ <tmsref>EP01441760</tmsref>
++ <language>en</language>
++ <year>2017</year>
++ <releasedate>2017-04-15</releasedate>
++ <images>
++ <image type="screenshot" url="http://thetvdb.com/banners/episodes/283661/6050716.jpg" thumb="http://thetvdb.com/banners/_cache/episodes/283661/6050716.jpg"/>
++ <image type="coverart" url="http://www.thetvdb.com/banners/posters/283661-1.jpg" thumb="http://www.thetvdb.com/banners/_cache/posters/283661-1.jpg" width="680" height="1000"/>
++ <image type="fanart" url="http://www.thetvdb.com/banners/fanart/original/283661-1.jpg" thumb="http://www.thetvdb.com/banners/_cache/fanart/original/283661-1.jpg" width="1920" height="1080"/>
++ </images>
++ </item>
++</metadata>
++0
++
++"""
++from __future__ import print_function
++
+ __title__ ="TheTVDB.com";
+ __author__="R.D.Vaughan"
+-__version__="1.1.5"
++__version__="2.0.0"
++
+ # Version .1 Initial development
+ # Version .2 Add an option to get season and episode numbers from ep name
+ # Version .3 Cleaned up the documentation and added a usage display option
+@@ -137,6 +679,7 @@ __version__="1.1.5"
+ # Version 1.1.5 Add the -C (collection option) with corresponding XML output
+ # and add a <collectionref> XML tag to Search and Query XML output
+ # Version 1.1.6 Honor series name overrides during TV series search
++# Version 2.0.0 Update to API V2
+
+ usage_txt='''
+ Usage: ttvdb.py usage: ttvdb -hdruviomMPFBDSC [parameters]
+@@ -338,6 +881,7 @@ Banner:http://www.thetvdb.com/banners/graphical/73739-g4.jpg,http://www.t....
+ </item>
+ </metadata>
+ '''
++
+ # Episode keys that can be used in a episode data/information search.
+ # All keys are currently being used.
+ '''
+@@ -368,47 +912,94 @@ Banner:http://www.thetvdb.com/banners/graphical/73739-g4.jpg,http://www.t....
+ 'episodename'
+ '''
+
+-
+ # System modules
+-import sys, os, re, locale, ConfigParser
++import sys, os, re
+ from optparse import OptionParser
+ from copy import deepcopy
+-
+-# Verify that tvdb_api.py, tvdb_ui.py and tvdb_exceptions.py are available
++# shlex for doctest
++import shlex
++
++# import logging
++# logger = logging.getLogger()
++# ch = logging.StreamHandler()
++# fh = logging.FileHandler("ttvdb.log")
++# #ch.setLevel(logging.DEBUG)
++# fh.setLevel(logging.DEBUG)
++# logging.getLogger("dicttoxml").setLevel(logging.WARN)
++# logging.getLogger("tvdb_api").setLevel(logging.DEBUG)
++# logger.addHandler(ch)
++# logger.addHandler(fh)
++
++IS_PY2 = sys.version_info[0] == 2
++if IS_PY2:
++ import ConfigParser
++else:
++ import configparser as ConfigParser
++
++class tvdb_account:
++ # explicit username and account id are not required
++ # to use the API. API documentation is unclear in this regard
++ username = ""
++ account_identifier = ""
++ apikey = '0BB856A59C51D607'
++
++# Verify that tvdb_api.py are available
+ try:
+ # thetvdb.com specific modules
+- import MythTV.ttvdb.tvdb_ui as tvdb_ui
+- # from tvdb_api import Tvdb
+ import MythTV.ttvdb.tvdb_api as tvdb_api
+- from MythTV.ttvdb.tvdb_exceptions import (tvdb_error, tvdb_shownotfound, tvdb_seasonnotfound, tvdb_episodenotfound, tvdb_episodenotfound, tvdb_attributenotfound, tvdb_userabort)
++ from MythTV.ttvdb.tvdb_api import (tvdb_error, tvdb_shownotfound, tvdb_seasonnotfound, tvdb_episodenotfound, tvdb_episodenotfound, tvdb_attributenotfound, tvdb_userabort)
+
+ # verify version of tvdbapi to make sure it is at least 1.0
+- if tvdb_api.__version__ < '1.0':
+- print "\nYour current installed tvdb_api.py version is (%s)\n" % tvdb_api.__version__
++ if tvdb_api.__version__ < '2.0':
++ print("\nYour current installed tvdb_api.py version is (%s)\n" % tvdb_api.__version__)
+ raise
+-except Exception, e:
+- print '''
+-The modules tvdb_api.py (v1.0.0 or greater), tvdb_ui.py, tvdb_exceptions.py and cache.py.
++except Exception as e:
++ print('''
++The modules tvdb_api.py (v2.0 or greater).
+ They should have been installed along with the MythTV python bindings.
+ Error:(%s)
+-''' % e
++''' % e)
+ sys.exit(1)
++finally:
++ pass
+
+ try:
+ from MythTV.utility import levenshtein
+-except Exception, e:
+- print """Could not import levenshtein string distance method from MythTV Python Bindings
++except Exception as e:
++ print("""Could not import levenshtein string distance method from MythTV Python Bindings
+ Error:(%s)
+-""" % e
++""" % e)
+ sys.exit(1)
+
+ try:
+- from StringIO import StringIO
++ if IS_PY2:
++ from StringIO import StringIO
++ else:
++ from io import StringIO
+ from lxml import etree as etree
+-except Exception, e:
++except Exception as e:
+ sys.stderr.write(u'\n! Error - Importing the "lxml" and "StringIO" python libraries failed on error(%s)\n' % e)
+ sys.exit(1)
+
++from MythTV.utility.dicttoxml import dicttoxml
++try:
++ import json
++ from lxml import etree as eTree
++except Exception as e:
++ sys.stderr.write(u'\n! Error - Importing the "lxml" python library failed on error(%s)\n' % e)
++ sys.exit(1)
++
++if IS_PY2:
++ stdio_type = file
++else:
++ import io
++ stdio_type = io.TextIOWrapper
++ unicode = str
++
++# disable the insecure request warning that we know we are going to get
++import urllib3
++urllib3.disable_warnings(urllib3.exceptions.InsecureRequestWarning)
++
+ # Check that the lxml library is current enough
+ # From the lxml documents it states: (http://codespeak.net/lxml/installation.html)
+ # "If you want to use XPath, do not use libxml2 2.6.27. We recommend libxml2 2.7.2 or later"
+@@ -429,8 +1020,6 @@ if version < '2.7.2':
+ http_find="http://www.thetvdb.com"
+ http_replace="http://www.thetvdb.com" #Keep replace code "just in case"
+
+-logfile="/tmp/ttvdb.log"
+-
+ name_parse=[
+ # foo_[s01]_[e01]
+ re.compile('''^(.+?)[ \._\-]\[[Ss]([0-9]+?)\]_\[[Ee]([0-9]+?)\]?[^\\/]*$'''),
+@@ -447,7 +1036,7 @@ name_parse=[
+ # Episode meta data that is massaged
+ massage={'writer':'|','director':'|', 'overview':'&', 'gueststars':'|' }
+ # Keys and titles used for episode data (option '-D')
+-data_keys =['seasonnumber','episodenumber','episodename','firstaired','director','overview','rating','writer','filename','language' ]
++data_keys =['airedSeason','airedEpisodeNumber','episodeName','firstAired','directors','overview','rating','writers','filename','language' ]
+ data_titles=['Season:','Episode:','Subtitle:','ReleaseDate:','Director:','Plot:','UserRating:','Writers:','Screenshot:','Language:' ]
+ # High level dictionay keys for select graphics URL(s)
+ fanart_key='fanart'
+@@ -472,10 +1061,17 @@ confdir = os.environ.get('MYTHCONFDIR', '')
+ if (not confdir) or (confdir == '/'):
+ confdir = os.environ.get('HOME', '')
+ if (not confdir) or (confdir == '/'):
+- print "Unable to find MythTV directory for metadata cache."
++ print("Unable to find MythTV directory for metadata cache.")
+ sys.exit(1)
+ confdir = os.path.join(confdir, '.mythtv')
+-cache_dir=os.path.join(confdir, "cache/tvdb_api/")
++# different cache dirs due to different pickle protocols
++# TODO massage pickle so python3 generates python2 compatible pickles
++if IS_PY2:
++ cache_dir=os.path.join(confdir, "cache/tvdb_api/")
++else:
++ cache_dir=os.path.join(confdir, "cache/tvdb_api3/")
++if not os.path.exists(cache_dir):
++ os.mkdir(cache_dir)
+
+ def _can_int(x):
+ """Takes a string, checks if it is numeric.
+@@ -492,14 +1088,6 @@ def _can_int(x):
+ return True
+ # end _can_int
+
+-def debuglog(message):
+- message+='\n'
+- target_socket = open(logfile, "a")
+- target_socket.write(message)
+- target_socket.close()
+- return
+-# end debuglog
+-
+ class OutStreamEncoder(object):
+ """Wraps a stream with an encoder"""
+ def __init__(self, outstream, encoding=None):
+@@ -512,15 +1100,18 @@ class OutStreamEncoder(object):
+ def write(self, obj):
+ """Wraps the output stream, encoding Unicode strings with the specified encoding"""
+ if isinstance(obj, unicode):
+- self.out.write(obj.encode(self.encoding))
+- else:
++ obj = obj.encode(self.encoding)
++ if IS_PY2:
+ self.out.write(obj)
++ else:
++ self.out.buffer.write(obj)
+
+ def __getattr__(self, attr):
+ """Delegate everything but write to the stream"""
+ return getattr(self.out, attr)
+-sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
+-sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
++if isinstance(sys.stdout, stdio_type):
++ sys.stdout = OutStreamEncoder(sys.stdout, 'utf8')
++ sys.stderr = OutStreamEncoder(sys.stderr, 'utf8')
+
+ # modified Show class implementing a fuzzy search
+ class Show( tvdb_api.Show ):
+@@ -574,11 +1165,12 @@ class Episode( tvdb_api.Episode ):
+
+ # modified Tvdb API class using modified show classes
+ class Tvdb( tvdb_api.Tvdb ):
+- def series_by_sid(self, sid):
++ def series_by_sid(self, sid, language):
+ "Lookup a series via it's sid"
+ seriesid = 'sid:' + sid
+- if not self.corrections.has_key(seriesid):
+- self._getShowData(sid)
++ sid = int(sid)
++ if not seriesid in self.corrections:
++ self._getShowData(sid, language=language)
+ self.corrections[seriesid] = sid
+ return self.shows[sid]
+ #end series_by_sid
+@@ -603,10 +1195,10 @@ class Tvdb( tvdb_api.Tvdb ):
+ #end Tvdb
+
+ # Search for a series by SID or Series name
+-def search_for_series(tvdb, sid_or_name):
++def search_for_series(tvdb, sid_or_name, language):
+ "Get series data by sid or series name of the Tv show"
+ if SID == True:
+- return tvdb.series_by_sid(sid_or_name)
++ return tvdb.series_by_sid(sid_or_name, language)
+ else:
+ return tvdb[sid_or_name]
+ # end search_for_series
+@@ -615,19 +1207,21 @@ def search_for_series(tvdb, sid_or_name):
+ def searchseries(t, opts, series_season_ep):
+ global SID
+ series_name=''
+- if opts.configure != "" and override.has_key(series_season_ep[0].lower()):
+- series_name=override[series_season_ep[0].lower()][0] # Override series name
++ key = series_season_ep[0].lower()
++ if opts.configure != "" and key in override:
++ series_name=override[key][0] # Override series name
+ else:
+ series_name=series_season_ep[0] # Leave the series name alone
+ try:
+ # Search for the series or series & season or series & season & episode
++ series_data = search_for_series(t, series_name, opts.language)
+ if len(series_season_ep)>1:
+ if len(series_season_ep)>2: # series & season & episode
+- seriesfound=search_for_series(t, series_name)[ int(series_season_ep[1]) ][ int(series_season_ep[2]) ]
++ seriesfound=series_data[ int(series_season_ep[1]) ][ int(series_season_ep[2]) ]
+ else:
+- seriesfound=search_for_series(t, series_name)[ int(series_season_ep[1]) ] # series & season
++ seriesfound=series_data[ int(series_season_ep[1]) ] # series & season
+ else:
+- seriesfound=search_for_series(t, series_name) # Series only
++ seriesfound=series_data # Series only
+ except tvdb_shownotfound:
+ # No such show found.
+ # Use the show-name from the files name, and None as the ep name
+@@ -636,25 +1230,25 @@ def searchseries(t, opts, series_season_ep):
+ # The season, episode or name wasn't found, but the show was.
+ # Use the corrected show-name, but no episode name.
+ sys.exit(0)
+- except tvdb_error, errormsg:
++ except tvdb_error as errormsg:
+ # Error communicating with thetvdb.com
+ if SID == True: # Maybe the digits were a series name (e.g. 90210)
+ SID = False
+ return searchseries(t, opts, series_season_ep)
+ sys.exit(0)
+- except tvdb_userabort, errormsg:
++ except tvdb_userabort as errormsg:
+ # User aborted selection (q or ^c)
+- print "\n", errormsg
++ print("\n", errormsg)
+ sys.exit(0)
+ else:
+ if opts.raw==True:
+- print "="*20
+- print "Raw Series Data:\n"
++ print("="*20)
++ print("Raw Series Data:\n")
+ if len(series_season_ep)>1:
+- print t[ series_name ][ int(series_season_ep[1]) ]
++ print(t[ series_name ][ int(series_season_ep[1]) ])
+ else:
+- print t[ series_name ]
+- print "="*20
++ print(t[ series_name ])
++ print("="*20)
+ return(seriesfound)
+ # end searchseries
+
+@@ -663,15 +1257,28 @@ def get_graphics(t, opts, series_season_ep, graphics_type, single_option, langua
+ banners='_banners'
+ series_name=''
+ graphics=[]
+- if opts.configure != "" and override.has_key(series_season_ep[0].lower()):
+- series_name=override[series_season_ep[0].lower()][0] # Override series name
++ key = series_season_ep[0].lower()
++ if opts.configure != "" and key in override:
++ series_name=override[key][0] # Override series name
+ else:
+ series_name=series_season_ep[0] # Leave the series name alone
+
+ if SID == True:
+- URLs = t.ttvdb_parseBanners(series_name)
++ t._parseBanners(series_name)
+ else:
+- URLs = t.ttvdb_parseBanners(t._nameToSid(series_name))
++ t._parseBanners(t._nameToSid(series_name))
++ bid_order = {'fanart': [], 'poster': [], 'series': [], 'season': [], 'seasonwide': []}
++ URLs = {'fanart': [], 'poster': [], 'series': [], 'season': [], 'seasonwide': []}
++
++ # get the urls in presented order
++ for key in t.shows.keys():
++ banner = t.shows[key].data['_banners']
++ for graphic_type_items in bid_order.keys():
++ if graphic_type_items in banner:
++ for graphic_item in banner[graphic_type_items]['raw']:
++ url = banner[graphic_type_items][graphic_item['resolution']][graphic_item['id']]
++ url['rating'] = graphic_item['ratingsInfo']['average']
++ URLs[graphic_type_items].append(url)
+
+ if graphics_type == fanart_type: # Series fanart graphics
+ if not len(URLs[u'fanart']):
+@@ -692,16 +1299,18 @@ def get_graphics(t, opts, series_season_ep, graphics_type, single_option, langua
+ return []
+ if graphics_type == banner_type: # Season Banners
+ season_banners=[]
+- for url in URLs[u'season']:
+- if url[u'bannertype2'] == u'seasonwide' and url[u'season'] == series_season_ep[1]:
++ # seasonwide has blank resolution
++ for url in URLs[u'seasonwide']:
++ if url[u'resolution'] == u'' and url[u'subKey'] == series_season_ep[1]:
+ season_banners.append(url)
+ if not len(season_banners):
+ return []
+ graphics = season_banners
+ else: # Season Posters
++ # season has blank resolution
+ season_posters=[]
+ for url in URLs[u'season']:
+- if url[u'bannertype2'] == u'season' and url[u'season'] == series_season_ep[1]:
++ if url[u'resolution'] == u'' and url[u'subKey'] == series_season_ep[1]:
+ season_posters.append(url)
+ if not len(season_posters):
+ return []
+@@ -715,11 +1324,12 @@ def get_graphics(t, opts, series_season_ep, graphics_type, single_option, langua
+ wasanythingadded = 0
+ anyotherlanguagegraphics=[]
+ englishlanguagegraphics=[]
++ graphics = sorted(graphics, key=lambda k: k['rating'], reverse=True)
+ for URL in graphics:
+ if graphics_type == 'filename':
+ if URL[graphics_type] == None:
+ continue
+- if language: # Is there a language to filter URLs on?
++ if language and 'language' in URL: # Is there a language to filter URLs on?
+ if language == URL['language']:
+ graphicsURLs.append((URL['_bannerpath']).replace(http_find, http_replace))
+ else: # Check for fall back graphics in case there are no selected language graphics
+@@ -740,7 +1350,7 @@ def get_graphics(t, opts, series_season_ep, graphics_type, single_option, langua
+ graphicsURLs = anyotherlanguagegraphics
+
+ if opts.debug == True:
+- print u"\nGraphics:\n", graphicsURLs
++ print(u"\nGraphics:\n", graphicsURLs)
+
+ if len(graphicsURLs) == 1 and graphicsURLs[0] == graphics_type+':':
+ return [] # Due to the language filter there may not be any URLs
+@@ -764,8 +1374,11 @@ def change_to_commas(meta_data):
+ # Change & values to ascii equivalents
+ def change_amp(text):
+ if not text: return text
+- text = text.replace(""", "'").replace("\r\n", " ")
+- text = text.replace(r"\'", "'")
++ try:
++ text = text.replace(""", "'").replace("\r\n", " ")
++ text = text.replace(r"\'", "'")
++ except Exception as e:
++ pass
+ return text
+ # end change_amp
+
+@@ -789,26 +1402,30 @@ def Getseries_episode_data(t, opts, series_season_ep, language = None):
+
+ args = len(series_season_ep)
+ series_name=''
+- if opts.configure != "" and override.has_key(series_season_ep[0].lower()):
+- series_name=override[series_season_ep[0].lower()][0] # Override series name
++ key = series_season_ep[0].lower()
++ if opts.configure != "" and key in override:
++ series_name=override[key][0] # Override series name
+ else:
+ series_name=series_season_ep[0] # Leave the series name alone
+
+ # Get Cast members
+ cast_members=''
++ tmp_cast = ''
+ try:
+- tmp_cast = search_for_series(t, series_name)['_actors']
++ series_data = search_for_series(t, series_name, opts.language)
++ tmp_cast = series_data['_actors']
++ tmp_cast = sorted(tmp_cast, key=lambda k: k['sortOrder'])
+ except:
+ cast_members=''
+ if len(tmp_cast):
+- cast_members=''
++ cast_members=''.encode('utf8')
+ for cast in tmp_cast:
+ if cast['name']:
+- cast_members+=(cast['name']+u', ').encode('utf8')
++ cast_members+=(cast['name']+', ').encode('utf8')
+ if cast_members != '':
+ try:
+ cast_members = cast_members[:-2].encode('utf8')
+- except UnicodeDecodeError:
++ except (UnicodeDecodeError, AttributeError):
+ cast_members = unicode(cast_members[:-2],'utf8')
+ cast_members = change_amp(cast_members)
+ cast_members = change_to_commas(cast_members)
+@@ -817,43 +1434,56 @@ def Getseries_episode_data(t, opts, series_season_ep, language = None):
+ # Get genre(s)
+ genres=''
+ try:
+- genres_string = search_for_series(t, series_name)[u'genre'].encode('utf-8')
++ genres_string = series_data[u'genre'].encode('utf-8')
+ except:
+ genres_string=''
+ if genres_string != None and genres_string != '':
+ genres = change_amp(genres_string)
+ genres = change_to_commas(genres)
+
+- seasons=search_for_series(t, series_name).keys() # Get the seasons for this series
++ seasons=sorted(series_data.keys()) # Get the seasons for this series
+ for season in seasons:
+ if args > 1: # If a season was specified skip other seasons
+ if season != int(series_season_ep[1]):
+ continue
+- episodes=search_for_series(t, series_name)[season].keys() # Get the episodes for this season
++ episodes=sorted(series_data[season].keys()) # Get the episodes for this season
+ for episode in episodes: # If an episode was specified skip other episodes
+ if args > 2:
+ if episode != int(series_season_ep[2]):
+ continue
++ # get more detailed episode info
++ t.getDetailedEpisodeInfo(int(series_data['id']), season, episode)
+ extra_ep_data=[]
+- available_keys=search_for_series(t, series_name)[season][episode].keys()
++ available_keys=series_data[season][episode].keys()
+ if screenshot_request:
+ if u'filename' in available_keys:
+- screenshot = search_for_series(t, series_name)[season][episode][u'filename']
++ screenshot = series_data[season][episode][u'filename']
+ if screenshot:
+- print screenshot.replace(http_find, http_replace)
++ print(screenshot.replace(http_find, http_replace))
+ return
+ else:
+ return
++ # key ordering is not sorted so that Title is first for existing client
++ # compatability
+ key_values=[]
+ for values in data_keys: # Initialize an array for each possible data element for
+ key_values.append('') # each episode within a season
+- for key in available_keys:
++ for key in sorted(available_keys):
+ try:
++ # skip deprecated keys
++ if key in ['director']:
++ continue
+ i = data_keys.index(key) # Include only specific episode data
+ except ValueError:
+- if search_for_series(t, series_name)[season][episode][key] != None:
+- text = search_for_series(t, series_name)[season][episode][key]
+- text = change_amp(text)
++ if series_data[season][episode][key] != None:
++ text = series_data[season][episode][key]
++ if isinstance(text, dict):
++ # handle language tuple
++ text = list(text.values())[0]
++ elif isinstance(text, list):
++ # handle guest stars lists
++ text = ', '.join(text)
++ text = change_amp(unicode(text))
+ text = change_to_commas(text)
+ if text == 'None' and key.title() == 'Director':
+ text = u"Unknown"
+@@ -862,34 +1492,42 @@ def Getseries_episode_data(t, opts, series_season_ep, language = None):
+ except UnicodeDecodeError:
+ extra_ep_data.append(u"%s:%s" % (key.title(), unicode(text, "utf8")))
+ continue
+- text = search_for_series(t, series_name)[season][episode][key]
++ text = series_data[season][episode][key]
+
+ if text == None and key.title() == 'Director':
+ text = u"Unknown"
++ if isinstance(text, list):
++ text = ', '.join(text)
+ if text == None or text == 'None':
+ continue
+ else:
+- text = change_amp(text)
++ # handle language tuple
++ if isinstance(text, dict):
++ # handle language tuple
++ text = list(text.values())[0]
++ text = change_amp(unicode(text))
+ value = change_to_commas(text)
+ value = value.replace(u'\n', u' ')
+ key_values[i]=value
+ index = 0
+ if SID == False:
+- print u"Title:%s" % series_name # Ouput the full series name
++ print(u"Title:%s" % series_name) # Ouput the full series name
+ else:
+- print u"Title:%s" % search_for_series(t, series_name)[u'seriesname']
++ print(u"Title:%s" % series_data[u'seriesname'])
+
+ for key in data_titles:
+ if key_values[index] != None:
+ if data_titles[index] == u'ReleaseDate:' and len(key_values[index]) > 4:
+- print u'%s%s'% (u'Year:', key_values[index][:4])
++ print(u'%s%s'% (u'Year:', key_values[index][:4]))
+ if key_values[index] != 'None':
+- print u'%s%s' % (data_titles[index], key_values[index])
++ print(u'%s%s' % (data_titles[index], key_values[index]))
+ index+=1
+ cast_print=False
+ for extra_data in extra_ep_data:
+ if extra_data[:extra_data.index(':')] == u'Gueststars':
+ extra_cast = extra_data[extra_data.index(':')+1:]
++ if not extra_cast:
++ continue
+ if (len(extra_cast)>128) and not extra_cast.count(','):
+ continue
+ if cast_members:
+@@ -897,19 +1535,23 @@ def Getseries_episode_data(t, opts, series_season_ep, language = None):
+ else:
+ extra_data=u"Cast:%s" % extra_cast
+ cast_print=True
+- print extra_data
++ print(extra_data)
+ if cast_print == False:
+- print u"Cast:%s" % cast_members
++ print(u"Cast:%s" % cast_members)
+ if genres != '':
+- print u"Genres:%s" % genres
+- print u"Runtime:%s" % search_for_series(t, series_name)[u'runtime']
++ print(u"Genres:%s" % genres)
++ print(u"Runtime:%s" % series_data[u'runtime'])
+
+ # URL to TVDB web site episode web page for this series
+ for url_data in [u'seriesid', u'seasonid', u'id']:
+ if not url_data in available_keys:
+ break
+ else:
+- print u'URL:http://www.thetvdb.com/?tab=episode&seriesid=%s&seasonid=%s&id=%s' % (search_for_series(t, series_name)[season][episode][u'seriesid'], search_for_series(t, series_name)[season][episode][u'seasonid'],search_for_series(t, series_name)[season][episode][u'id'])
++ results = series_data
++ print(u'URL:http://www.thetvdb.com/?tab=episode&seriesid=%s&seasonid=%s&id=%s' %
++ (results[season][episode][u'seriesid'],
++ results[season][episode][u'seasonid'],
++ results[season][episode][u'id']))
+ # end Getseries_episode_data
+
+ # Get Series Season and Episode numbers
+@@ -926,8 +1568,9 @@ def Getseries_episode_numbers(t, opts, series_season_ep):
+ global xmlFlag
+ series_name=''
+ ep_name=''
+- if opts.configure != "" and override.has_key(series_season_ep[0].lower()):
+- series_name=override[series_season_ep[0].lower()][0] # Override series name
++ key = series_season_ep[0].lower()
++ if opts.configure != "" and key in override:
++ series_name=override[key][0] # Override series name
+ ep_name=series_season_ep[1]
+ if len(override[series_season_ep[0].lower()][1]) != 0: # Are there search-replace strings?
+ ep_name=massageEpisode_name(ep_name, series_season_ep)
+@@ -935,14 +1578,19 @@ def Getseries_episode_numbers(t, opts, series_season_ep):
+ series_name=series_season_ep[0] # Leave the series name alone
+ ep_name=series_season_ep[1] # Leave the episode name alone
+
+- season_ep_num=search_for_series(t, series_name).fuzzysearch(ep_name, 'episodename')
++ series = search_for_series(t, series_name, opts.language)
++ season_ep_num = series.fuzzysearch(ep_name, 'episodename')
+ if len(season_ep_num) != 0:
+ for episode in sorted(season_ep_num, key=lambda ep: _episode_sort(ep), reverse=True):
+ # if episode.distance == 0: # exact match
+ if xmlFlag:
++ # get more detailed episode info
++ t.getDetailedEpisodeInfo(series['id'], episode['airedSeason'], episode)
++ convert_series_to_xml(t, series_season_ep, season_ep_num)
+ displaySeriesXML(t, [series_name, episode['seasonnumber'], episode['episodenumber']])
+- sys.exit(0)
+- print season_and_episode_num.replace('\\n', '\n') % (int(episode['seasonnumber']), int(episode['episodenumber']))
++ return 0
++ print(season_and_episode_num.replace('\\n', '\n') %
++ (int(episode['seasonnumber']), int(episode['episodenumber'])))
+ # elif (episode['episodename'].lower()).startswith(ep_name.lower()):
+ # if len(episode['episodename']) > (len(ep_name)+1):
+ # if episode['episodename'][len(ep_name):len(ep_name)+2] != ' (':
+@@ -950,12 +1598,12 @@ def Getseries_episode_numbers(t, opts, series_season_ep):
+ # if xmlFlag:
+ # displaySeriesXML(t, [series_name, episode['seasonnumber'], episode['episodenumber']])
+ # sys.exit(0)
+-# print season_and_episode_num.replace('\\n', '\n') % (int(episode['seasonnumber']), int(episode['episodenumber']))
++# print(season_and_episode_num.replace('\\n', '\n') % (int(episode['seasonnumber']), int(episode['episodenumber'])))
+ # end Getseries_episode_numbers
+
+ # Set up a custom interface to get all series matching a partial series name
+-class returnAllSeriesUI(tvdb_ui.BaseUI):
+- def __init__(self, config, log):
++class returnAllSeriesUI(tvdb_api.BaseUI):
++ def __init__(self, config, log=None):
+ self.config = config
+ self.log = log
+
+@@ -963,7 +1611,7 @@ class returnAllSeriesUI(tvdb_ui.BaseUI):
+ return allSeries
+ # ends returnAllSeriesUI
+
+-def initialize_override_dictionary(useroptions):
++def initialize_override_dictionary(useroptions, language):
+ """ Change variables through a user supplied configuration file
+ return False and exit the script if there are issues with the configuration file values
+ """
+@@ -1001,7 +1649,15 @@ def initialize_override_dictionary(useroptions):
+ if section =='series_name_override':
+ for option in cfg.options(section):
+ overrides[option] = cfg.get(section, option)
+- tvdb = Tvdb(banners=False, debug = False, interactive = False, cache = cache_dir, custom_ui=returnAllSeriesUI, apikey="0BB856A59C51D607") # thetvdb.com API key requested by MythTV
++ tvdb = Tvdb(banners=False,
++ debug = False,
++ interactive = False,
++ cache = cache_dir,
++ custom_ui=returnAllSeriesUI,
++ apikey=tvdb_account.apikey, # thetvdb.com API key requested by MythTV
++ username=tvdb_account.username,
++ userkey=tvdb_account.account_identifier)
++ tvdb.session.verify = False
+ for key in overrides.keys():
+ sid = overrides[key]
+ if len(sid) == 0:
+@@ -1014,28 +1670,88 @@ def initialize_override_dictionary(useroptions):
+ # Make sure that the series name is not empty or all blanks
+ if len(key.replace(' ','')) == 0:
+ sys.stdout.write("! Invalid Series name (must have some non-blank characters) [%s] in config file\n" % key)
+- print parts
++ print(overrides.keys())
+ sys.exit(1)
+
+ try:
+- series_name_sid=tvdb.series_by_sid(sid)
++ series_name_sid=tvdb.series_by_sid(sid, language)
+ except:
+ sys.stdout.write("! Invalid Series (no matches found in thetvdb,com) (%s) sid (%s) in config file\n" % (key, sid))
+ sys.exit(1)
+- overrides[key]=series_name_sid[u'seriesname'].encode('utf-8')
++ overrides[key]=unicode(series_name_sid.data[u'seriesName']) #.encode('utf-8')
+ continue
+
+ for key in overrides.keys():
+ override[key] = [overrides[key],[]]
+
+ for key in massage.keys():
+- if override.has_key(key):
++ if key in override:
+ override[key][1]=massage[key]
+ else:
+ override[key]=[key, massage[key]]
+ return
+ # END initialize_override_dictionary
+
++def convert_search_to_xml(t, allSeries):
++ """
++ Convert json to xml and set up tvdb_api object as other stuff expects
++ :param t: tvdb_api object
++ :param allSeries: json array of series
++ :return: xml version of allseries
++ """
++ # Initialize XML display value to off
++ t.xml = False
++ def series_item_func(parent):
++ if parent == "root":
++ return "series"
++ return "alias"
++ xml = dicttoxml(allSeries, item_func=series_item_func, attr_type=False)
++ t.searchTree = eTree.XML(xml)
++ t.seriesInfoTree = None
++ t.epInfoTree = None
++ t.actorsInfoTree = None
++ t.imagesInfoTree = None
++ t.baseXsltDir = xslt.baseXsltPath
++
++def convert_series_to_xml(t, series_season_ep, ep_info):
++ """
++ Convert json to xml and set up tvdb_api object as other stuff expects
++ :param t: tvdb_api object
++ :param ep_info: json array of series
++ """
++ # Initialize XML display value to off
++ t.xml = False
++ def series_ep_item_func(parent):
++ if parent == "data":
++ return "series"
++ if parent == "_banners_raw":
++ return "banner"
++ if parent == "_actors":
++ return "actor"
++ return "item"
++ def series_people_item_func(parent):
++ if parent == "Actors":
++ return "Actor"
++ return "item"
++ def series_images_item_func(parent):
++ if parent == "root":
++ return "images"
++ return "Banner"
++ for show_id in t.shows.keys():
++ break
++ # sort the cast into sort order
++ t.shows[show_id].data['_actors'] = sorted(t.shows[show_id].data['_actors'], key=lambda k: k['sortOrder'])
++ t.searchTree = None
++ t.seriesInfoTree = None
++ t.epInfoTree = None
++ t.actorsInfoTree = None
++ t.imagesInfoTree = None
++ sxml = dicttoxml(t.shows[show_id].data, custom_root='series', item_func=series_ep_item_func, attr_type=False)
++ exml = dicttoxml(t.shows[show_id], custom_root='data', item_func=series_ep_item_func, attr_type=False)
++ t.seriesInfoTree = eTree.XML(exml)
++ t.seriesInfoTree.append(eTree.XML(sxml))
++ t.baseXsltDir = xslt.baseXsltPath
++
+ def initializeXslt(language):
+ ''' Initalize all data and functions for XSLT stylesheet processing
+ return nothing
+@@ -1043,13 +1759,14 @@ def initializeXslt(language):
+ global xslt, tvdbXpath
+ try:
+ import MythTV.ttvdb.tvdbXslt as tvdbXslt
+- except Exception, errmsg:
++ except Exception as errmsg:
+ sys.stderr.write('! Error: Importing tvdbXslt error(%s)\n' % errmsg)
+ sys.exit(1)
+
+ xslt = tvdbXslt.xpathFunctions()
+ xslt.language = language
+ xslt.buildFuncDict()
++ xslt.baseXsltPath = tvdbXslt.baseXsltDir
+ tvdbXpath = etree.FunctionNamespace('http://www.mythtv.org/wiki/MythTV_Universal_Metadata_Format')
+ tvdbXpath.prefix = 'tvdbXpath'
+ for key in xslt.FuncDict.keys():
+@@ -1079,7 +1796,7 @@ def displaySearchXML(tvdb_api):
+ if items.getroot() != None:
+ if len(items.xpath('//item')):
+ sys.stdout.write(etree.tostring(items, encoding='UTF-8', method="xml", xml_declaration=True, pretty_print=True, ))
+- sys.exit(0)
++ return 0
+ # end displaySearchXML()
+
+ def displaySeriesXML(tvdb_api, series_season_ep):
+@@ -1097,25 +1814,14 @@ def displaySeriesXML(tvdb_api, series_season_ep):
+ allDataElement.append(requestDetails)
+
+ # Combine the various XML inputs into a single XML element and send to the XSLT stylesheet
+- if tvdb_api.epInfoTree != None:
+- allDataElement.append(tvdb_api.epInfoTree)
+- else:
+- sys.exit(0)
+- if tvdb_api.actorsInfoTree != None:
+- allDataElement.append(tvdb_api.actorsInfoTree)
+- else:
+- allDataElement.append(etree.XML(u'<Actors></Actors>'))
+- if tvdb_api.imagesInfoTree != None:
+- allDataElement.append(tvdb_api.imagesInfoTree)
+- else:
+- allDataElement.append(etree.XML(u'<Banners></Banners>'))
++ allDataElement.append(tvdb_api.seriesInfoTree)
+
+ tvdbQueryXslt = etree.XSLT(etree.parse(u'%s%s' % (tvdb_api.baseXsltDir, u'tvdbVideo.xsl')))
+ items = tvdbQueryXslt(allDataElement)
+ if items.getroot() != None:
+ if len(items.xpath('//item')):
+ sys.stdout.write(etree.tostring(items, encoding='UTF-8', method="xml", xml_declaration=True, pretty_print=True, ))
+- sys.exit(0)
++ return 0
+ # end displaySeriesXML()
+
+ def displayCollectionXML(tvdb_api):
+@@ -1140,12 +1846,48 @@ def displayCollectionXML(tvdb_api):
+ if items.getroot() != None:
+ if len(items.xpath('//item')):
+ sys.stdout.write(etree.tostring(items, encoding='UTF-8', method="xml", xml_declaration=True, pretty_print=True, ))
+- sys.exit(0)
++ return 0
+ # end displayCollectionXML()
+
++
++def doc_test(opts):
++ import doctest
++
++ if not IS_PY2:
++ # python 3 doctest capture when teh output is utf8 (bytes)
++ # convert it back to str
++ if isinstance(sys.stdout, OutStreamEncoder):
++ sys.stdout = sys.stdout.out
++ sys.stderr = sys.stderr.out
++
++ class SpoofDocTestWriter(doctest._SpoofOut):
++ """Wraps a stream with an decoder"""
++ def __init__(self, *cwargs, **kwargs):
++ super(SpoofDocTestWriter, self).__init__(*cwargs, **kwargs)
++
++ def write(self, obj):
++ """Wraps the output stream, encoding Unicode strings with the specified encoding"""
++ if isinstance(obj, bytes):
++ obj = obj.decode('utf-8')
++ return super(SpoofDocTestWriter, self).write(obj)
++
++ def __getattr__(self, attr):
++ """Delegate everything but write to the stream"""
++ return getattr(self.out, attr)
++
++ # replace _SpoofOut with our massager
++ doctest._SpoofOut = SpoofDocTestWriter
++ return doctest.testmod(verbose=opts.debug, optionflags=doctest.ELLIPSIS, )
++
+ def main():
++ global season_and_episode_num, screenshot_request
++ # reset some globals for doctest mode
++ screenshot_request = False
++
+ parser = OptionParser(usage=u"%prog usage: ttvdb -hdruviomMPFBDS [parameters]\n <series name or 'series and season number' or 'series and season number and episode number'>\n\nFor details on using ttvdb with Mythvideo see the ttvdb wiki page at:\nhttp://www.mythtv.org/wiki/Ttvdb.py")
+
++ parser.add_option( "--doctest", action="store_true", default=False, dest="doctest",
++ help=u"Run doctests")
+ parser.add_option( "-d", "--debug", action="store_true", default=False, dest="debug",
+ help=u"Show debugging info")
+ parser.add_option( "-r", "--raw", action="store_true",default=False, dest="raw",
+@@ -1187,19 +1929,22 @@ def main():
+
+ opts, series_season_ep = parser.parse_args()
+
++ if opts.doctest:
++ return doc_test(opts)
+
+ # Test mode, if we've made it here, everything is ok
+ if opts.test:
+- print "Everything appears to be in order"
+- sys.exit(0)
++ print("Everything appears to be in order")
++ return 0
+
+ # Make everything unicode utf8
+- for index in range(len(series_season_ep)):
+- series_season_ep[index] = unicode(series_season_ep[index], 'utf8')
++ if IS_PY2:
++ for index in range(len(series_season_ep)):
++ series_season_ep[index] = unicode(series_season_ep[index], 'utf8')
+
+ if opts.debug == True:
+- print "opts", opts
+- print "\nargs", series_season_ep
++ print("opts", opts)
++ print("\nargs", series_season_ep)
+
+ # Process version command line requests
+ if opts.version == True:
+@@ -1212,34 +1957,33 @@ def main():
+ etree.SubElement(version, "description").text = 'Search and metadata downloads for thetvdb.com'
+ etree.SubElement(version, "version").text = __version__
+ sys.stdout.write(etree.tostring(version, encoding='UTF-8', pretty_print=True))
+- sys.exit(0)
++ return 0
+
+ # Process usage command line requests
+ if opts.usage == True:
+ sys.stdout.write(usage_txt)
+- sys.exit(0)
++ return 0
+
+ if len(series_season_ep) == 0:
+ parser.error("! No series or series season episode supplied")
+- sys.exit(1)
++ return 1
+
+ # Default output format of season and episode numbers
+- global season_and_episode_num, screenshot_request
+ season_and_episode_num='S%02dE%02d' # Format output example "S04E12"
+
+ if opts.numbers == False:
+ if len(series_season_ep) > 1:
+ if not _can_int(series_season_ep[1]):
+ parser.error("! Season is not numeric")
+- sys.exit(1)
++ return 1
+ if len(series_season_ep) > 2:
+ if not _can_int(series_season_ep[2]):
+ parser.error("! Episode is not numeric")
+- sys.exit(1)
++ return 1
+ else:
+ if len(series_season_ep) < 2:
+ parser.error("! An Episode name must be included")
+- sys.exit(1)
++ return 1
+ if len(series_season_ep) == 3:
+ season_and_episode_num = series_season_ep[2] # Override default output format
+
+@@ -1247,27 +1991,27 @@ def main():
+ if len(series_season_ep) > 1:
+ if not _can_int(series_season_ep[1]):
+ parser.error("! Season is not numeric")
+- sys.exit(1)
++ return 1
+ if len(series_season_ep) > 2:
+ if not _can_int(series_season_ep[2]):
+ parser.error("! Episode is not numeric")
+- sys.exit(1)
++ return 1
+ if not len(series_season_ep) > 2:
+ parser.error("! Option (-S), episode screenshot search requires Season and Episode numbers")
+- sys.exit(1)
++ return 1
+ screenshot_request = True
+
+ if opts.debug == True:
+- print series_season_ep
++ print(series_season_ep)
+
+ if opts.debug == True:
+- print "#"*20
+- print "# series_season_ep array(",series_season_ep,")"
++ print("#"*20)
++ print("# series_season_ep array(",series_season_ep,")")
+
+ if opts.debug == True:
+- print "#"*20
+- print "# Starting tvtvb"
+- print "# Processing (%s) Series" % ( series_season_ep[0] )
++ print("#"*20)
++ print("# Starting tvtvb")
++ print("# Processing (%s) Series" % ( series_season_ep[0] ))
+
+ # List of language from http://www.thetvdb.com/api/0629B785CE550C8D/languages.xml
+ # Hard-coded here as it is realtively static, and saves another HTTP request, as
+@@ -1284,18 +2028,44 @@ def main():
+
+ # Access thetvdb.com API with banners (Posters, Fanart, banners, screenshots) data retrieval enabled
+ if opts.list ==True:
+- t = Tvdb(banners=False, debug = opts.debug, cache = cache_dir, custom_ui=returnAllSeriesUI, language = opts.language, apikey="0BB856A59C51D607") # thetvdb.com API key requested by MythTV
++ t = Tvdb(banners=False,
++ debug = opts.debug,
++ cache = cache_dir,
++ custom_ui=returnAllSeriesUI,
++ language = opts.language,
++ apikey=tvdb_account.apikey, # thetvdb.com API key requested by MythTV
++ username=tvdb_account.username,
++ userkey=tvdb_account.account_identifier)
+ if opts.xml:
+ t.xml = True
+ elif opts.interactive == True:
+- t = Tvdb(banners=True, debug=opts.debug, interactive=True, select_first=False, cache=cache_dir, actors = True, language = opts.language, apikey="0BB856A59C51D607") # thetvdb.com API key requested by MythTV
++ t = Tvdb(banners=True,
++ debug=opts.debug,
++ interactive=True,
++ select_first=False,
++ cache=cache_dir,
++ actors = True,
++ language = opts.language,
++ apikey=tvdb_account.apikey, # thetvdb.com API key requested by MythTV
++ username=tvdb_account.username,
++ userkey=tvdb_account.account_identifier)
+ if opts.xml:
+ t.xml = True
+ else:
+- t = Tvdb(banners=True, debug = opts.debug, cache = cache_dir, actors = True, language = opts.language, apikey="0BB856A59C51D607") # thetvdb.com API key requested by MythTV
++ t = Tvdb(banners=True,
++ debug = opts.debug,
++ cache = cache_dir,
++ actors = True,
++ language = opts.language,
++ apikey=tvdb_account.apikey, # thetvdb.com API key requested by MythTV
++ username=tvdb_account.username,
++ userkey=tvdb_account.account_identifier)
+ if opts.xml:
+ t.xml = True
+
++ # disable certificate check
++ t.session.verify = False
++
+ # Determine if there is a SID or a series name to search with
+ global SID
+ SID = False
+@@ -1310,12 +2080,12 @@ def main():
+ pass
+ else:
+ parser.error("! Option (-C), collection requires an inetref number")
+- sys.exit(1)
++ return 1
+
+ if opts.debug == True:
+- print "# ..got tvdb mirrors"
+- print "# Start to process series or series_season_ep"
+- print "#"*20
++ print("# ..got tvdb mirrors")
++ print("# Start to process series or series_season_ep")
++ print("#"*20)
+
+ global override
+ override={} # Initialize series name override dictionary
+@@ -1324,15 +2094,15 @@ def main():
+ if opts.configure[0]=='~':
+ opts.configure=os.path.expanduser("~")+opts.configure[1:]
+ if os.path.exists(opts.configure) == 1: # Do overrides exist?
+- initialize_override_dictionary(opts.configure)
++ initialize_override_dictionary(opts.configure, opts.language)
+ else:
+- debuglog("! The specified override file (%s) does not exist" % opts.configure)
+- sys.exit(1)
++ sys.stderr.write("! The specified override file (%s) does not exist\n" % opts.configure)
++ return 1
+ else: # Check if there is a default configuration file
+ default_config = u"%s/%s" % (os.path.expanduser(u"~"), u".mythtv/ttvdb.conf")
+ if os.path.isfile(default_config):
+ opts.configure = default_config
+- initialize_override_dictionary(opts.configure)
++ initialize_override_dictionary(opts.configure, opts.language)
+
+ if len(override) == 0:
+ opts.configure = False # Turn off the override option as there is nothing to override
+@@ -1351,37 +2121,42 @@ def main():
+ # Fetch a list of matching series names
+ if opts.list ==True:
+ try:
+- if opts.configure != "" and override.has_key(series_season_ep[0].lower()):
+- allSeries = t._getSeries(override[series_season_ep[0].lower()][0])
++ key = series_season_ep[0].lower()
++ if opts.configure != "" and key in override:
++ allSeries = t._getSeries(override[key][0])
+ else:
+ allSeries=t._getSeries(series_season_ep[0])
+ except tvdb_shownotfound:
+- sys.exit(0) # No matching series
+- except Exception, e:
++ return 0 # No matching series
++ except Exception as e:
+ sys.stderr.write("! Error: %s\n" % (e))
+- sys.exit(1) # Most likely a communications error
++ raise
++ return 1 # Most likely a communications error
+ if opts.xml:
++ convert_search_to_xml(t, allSeries)
+ displaySearchXML(t)
+- sys.exit(0)
++ return 0
+ match_list = []
+ for series_name_sid in allSeries: # list search results
+ key_value = u"%s:%s" % (series_name_sid['sid'], series_name_sid['name'])
+ if not key_value in match_list: # Do not add duplicates
+ match_list.append(key_value)
+- print key_value
+- sys.exit(0) # The Series list option (-M) is the only option honoured when used
++ print(key_value)
++ return 0 # The Series list option (-M) is the only option honoured when used
+
+ # Fetch TV series collection information
+ if opts.collection:
+ try:
+- t._getShowData(series_season_ep[0])
++ t._getShowData(series_season_ep[0], opts.language)
+ except tvdb_shownotfound:
+- sys.exit(0) # No matching series
+- except Exception, e:
++ return 0 # No matching series
++ except Exception as e:
+ sys.stderr.write("! Error: %s\n" % (e))
+- sys.exit(1) # Most likely a communications error
++ raise
++ return 1 # Most likely a communications error
++ convert_series_to_xml(t, series_season_ep, None)
+ displayCollectionXML(t)
+- sys.exit(0) # The TV Series collection option (-C) is the only option honoured when used
++ return 0 # The TV Series collection option (-C) is the only option honoured when used
+
+ # Verify that thetvdb.com has the desired series_season_ep.
+ # Exit this module if series_season_ep is not found
+@@ -1396,38 +2171,38 @@ def main():
+ # Return the season numbers for a series
+ if opts.num_seasons == True:
+ season_numbers=''
+- for x in seriesfound.keys():
++ for x in sorted(seriesfound.keys()):
+ season_numbers+='%d,' % x
+- print season_numbers[:-1]
+- sys.exit(0) # Option (-n) is the only option honoured when used
++ print(season_numbers[:-1])
++ return 0 # Option (-n) is the only option honoured when used
+
+ # Dump information accessible for a Series and ONLY first season of episoded data
+ if opts.debug == True:
+- print "#"*20
+- print "# Starting Raw keys call"
+- print "Lvl #1:" # Seasons for series
++ print("#"*20)
++ print("# Starting Raw keys call")
++ print("Lvl #1:") # Seasons for series
+ x = t[series_season_ep[0]].keys()
+- print t[series_season_ep[0]].keys()
+- print "#"*20
+- print "Lvl #2:" # Episodes for each season
++ print(t[series_season_ep[0]].keys())
++ print("#"*20)
++ print("Lvl #2:") # Episodes for each season
+ for y in x:
+- print t[series_season_ep[0]][y].keys()
+- print "#"*20
+- print "Lvl #3:" # Keys for each episode within the 1st season
++ print(t[series_season_ep[0]][y].keys())
++ print("#"*20)
++ print("Lvl #3:") # Keys for each episode within the 1st season
+ z = t[series_season_ep[0]][1].keys()
+ for aa in z:
+- print t[series_season_ep[0]][1][aa].keys()
+- print "#"*20
+- print "Lvl #4:" # Available data for each episode in 1st season
++ print(t[series_season_ep[0]][1][aa].keys())
++ print("#"*20)
++ print("Lvl #4:") # Available data for each episode in 1st season
+ for aa in z:
+ codes = t[series_season_ep[0]][1][aa].keys()
+- print "\n\nStart:"
++ print("\n\nStart:")
+ for c in codes:
+- print "="*50
+- print 'Key Name=('+c+'):'
+- print t[series_season_ep[0]][1][aa][c]
+- print "="*50
+- print "#"*20
++ print("="*50)
++ print('Key Name=('+c+'):')
++ print(t[series_season_ep[0]][1][aa][c])
++ print("="*50)
++ print("#"*20)
+ sys.exit (True)
+
+ if opts.numbers == True: # Fetch and output season and episode numbers
+@@ -1437,33 +2212,38 @@ def main():
+ else:
+ xmlFlag = False
+ Getseries_episode_numbers(t, opts, series_season_ep)
+- sys.exit(0) # The Numbers option (-N) is the only option honoured when used
++ return 0 # The Numbers option (-N) is the only option honoured when used
+
+ if opts.data or screenshot_request: # Fetch and output episode data
+ if opts.mythvideo:
+ if len(series_season_ep) != 3:
+- print u"Season and Episode numbers required."
++ print(u"Season and Episode numbers required.")
+ else:
+ if opts.xml:
++ t.getDetailedEpisodeInfo(seriesfound[u'id'], series_season_ep[1], series_season_ep[2])
++ convert_series_to_xml(t, series_season_ep, seriesfound)
+ displaySeriesXML(t, series_season_ep)
+- sys.exit(0)
++ return 0
+ Getseries_episode_data(t, opts, series_season_ep, language=opts.language)
+ else:
+ if opts.xml and len(series_season_ep) == 3:
++ t.getDetailedEpisodeInfo(list(t.shows.values())[0].data['id'], series_season_ep[1], series_season_ep[2])
++ convert_series_to_xml(t, series_season_ep, seriesfound)
+ displaySeriesXML(t, series_season_ep)
+- sys.exit(0)
++ return 0
+ Getseries_episode_data(t, opts, series_season_ep, language=opts.language)
+
+ # Fetch the requested graphics URL(s)
+ if opts.debug == True:
+- print "#"*20
+- print "# Checking if Posters, Fanart or Banners are available"
+- print "#"*20
++ print("#"*20)
++ print("# Checking if Posters, Fanart or Banners are available")
++ print("#"*20)
+
+- if opts.configure != "" and override.has_key(series_season_ep[0].lower()):
+- banners_keys = search_for_series(t, override[series_season_ep[0].lower()][0])['_banners'].keys()
++ key = series_season_ep[0].lower()
++ if opts.configure != "" and key in override:
++ banners_keys = search_for_series(t, override[key][0], opts.language)['_banners'].keys()
+ else:
+- banners_keys = search_for_series(t, series_season_ep[0])['_banners'].keys()
++ banners_keys = search_for_series(t, series_season_ep[0], opts.language)['_banners'].keys()
+
+ banner= False
+ poster= False
+@@ -1479,12 +2259,12 @@ def main():
+
+ # Make sure that some graphics URL(s) (Posters, FanArt or Banners) are available
+ if ( fanart!=True and poster!=True and banner!=True ):
+- sys.exit(0)
++ return 0
+
+ if opts.debug == True:
+- print "#"*20
+- print "# One or more of Posters, Fanart or Banners are available"
+- print "#"*20
++ print("#"*20)
++ print("# One or more of Posters, Fanart or Banners are available")
++ print("#"*20)
+
+ # Determine if graphic URL identification output is required
+ if opts.data: # Along with episode data get all graphics
+@@ -1507,8 +2287,8 @@ def main():
+ season_poster_found = False
+ if opts.mythvideo:
+ if len(series_season_ep) < 2:
+- print u"Season and Episode numbers required."
+- sys.exit(0)
++ print(u"Season and Episode numbers required.")
++ return 0
+ all_posters = u'Coverart:'
+ all_empty = len(all_posters)
+ for p in get_graphics(t, opts, series_season_ep, poster_type, single_option, opts.language):
+@@ -1516,17 +2296,18 @@ def main():
+ season_poster_found = True
+ if season_poster_found == False: # If there were no season posters get the series top poster
+ series_name=''
+- if opts.configure != "" and override.has_key(series_season_ep[0].lower()):
+- series_name=override[series_season_ep[0].lower()][0] # Override series name
++ key = series_season_ep[0].lower()
++ if opts.configure != "" and key in override:
++ series_name=override[key][0] # Override series name
+ else:
+ series_name=series_season_ep[0] # Leave the series name alone
+ for p in get_graphics(t, opts, [series_name], poster_type, single_option, opts.language):
+ all_posters = all_posters+p+u','
+ if len(all_posters) > all_empty:
+ if all_posters[-1] == u',':
+- print all_posters[:-1]
++ print(all_posters[:-1])
+ else:
+- print all_posters
++ print(all_posters)
+
+ if (fanart==True and opts.fanart==True and opts.raw!=True): # Get Fan Art and send to stdout
+ all_fanart = u'Fanart:'
+@@ -1535,16 +2316,16 @@ def main():
+ all_fanart = all_fanart+f+u','
+ if len(all_fanart) > all_empty:
+ if all_fanart[-1] == u',':
+- print all_fanart[:-1]
++ print(all_fanart[:-1])
+ else:
+- print all_fanart
++ print(all_fanart)
+
+ if (banner==True and opts.banner==True and opts.raw!=True): # Also change to get ALL Series graphics
+ season_banner_found = False
+ if opts.mythvideo:
+ if len(series_season_ep) < 2:
+- print u"Season and Episode numbers required."
+- sys.exit(0)
++ print(u"Season and Episode numbers required.")
++ return 0
+ all_banners = u'Banner:'
+ all_empty = len(all_banners)
+ for b in get_graphics(t, opts, series_season_ep, banner_type, single_option, opts.language):
+@@ -1552,24 +2333,25 @@ def main():
+ season_banner_found = True
+ if not season_banner_found: # If there were no season banner get the series top banner
+ series_name=''
+- if opts.configure != "" and override.has_key(series_season_ep[0].lower()):
+- series_name=override[series_season_ep[0].lower()][0] # Override series name
++ key = series_season_ep[0].lower()
++ if opts.configure != "" and key in override:
++ series_name=override[key][0] # Override series name
+ else:
+ series_name=series_season_ep[0] # Leave the series name alone
+ for b in get_graphics(t, opts, [series_name], banner_type, single_option, opts.language):
+ all_banners = all_banners+b+u','
+ if len(all_banners) > all_empty:
+ if all_banners[-1] == u',':
+- print all_banners[:-1]
++ print(all_banners[:-1])
+ else:
+- print all_banners
++ print(all_banners)
+
+ if opts.debug == True:
+- print "#"*20
+- print "# Processing complete"
+- print "#"*20
+- sys.exit(0)
++ print("#"*20)
++ print("# Processing complete")
++ print("#"*20)
++ return 0
+ #end main
+
+ if __name__ == "__main__":
+- main()
++ sys.exit(main())
+diff --git a/mythtv/programs/scripts/metadata/Television/tvdb_test.conf b/mythtv/programs/scripts/metadata/Television/tvdb_test.conf
+new file mode 100644
+index 0000000000..709b8e7f30
+--- /dev/null
++++ b/mythtv/programs/scripts/metadata/Television/tvdb_test.conf
+@@ -0,0 +1,7 @@
++#
++[series_name_override]
++# Specify recorded "Life On Mars" shows as the US version
++# Specify recorded "Eleventh Hour" shows as the US version
++Eleventh Hour:83066
++# For overnight episode updates when a filename is used
++Eleventh Hour (US):83066
diff --git a/mythtv.spec b/mythtv.spec
index 22967ee..3ed1c89 100644
--- a/mythtv.spec
+++ b/mythtv.spec
@@ -60,8 +60,8 @@
%define desktop_vendor RPMFusion
# MythTV Version string -- preferably the output from git describe
-%define vers_string v0.28.1-45-g73cf7474ad
-%define branch fixes/0.28
+%define vers_string v29.0-28-g5dce69fbb5
+%define branch fixes/29
# Git revision and branch ID
%define _gitrev g5b917e8
@@ -77,11 +77,11 @@ Summary: A digital video recorder (DVR) application
URL: http://www.mythtv.org/
# Version/Release info
-Version: 0.28.1
+Version: 29.0
%if "%{branch}" == "master"
Release: 0.5.git.%{_gitrev}%{?dist}
%else
-Release: 8%{?dist}
+Release: 1%{?dist}
%endif
# The primary license is GPLv2+, but bits are borrowed from a number of
@@ -109,9 +109,6 @@ License: GPLv2+ and LGPLv2+ and LGPLv2 and (GPLv2 or QPL) and (GPLv2+ or
%bcond_without python
%bcond_without pulseaudio
-# FAAC is non-free, so we disable it by default
-%bcond_with faac
-
# All plugins get built by default, but you can disable them as you wish
%bcond_without plugins
%bcond_without mytharchive
@@ -132,7 +129,7 @@ Source0: https://github.com/MythTV/%{name}/archive/v%{version}.tar.gz#/%{name}
# Example: git diff -p --stat v0.26.0 > mythtv-0.26-fixes.patch
# Also update ChangeLog with git log v0.28..HEAD > ChangeLog
# and update define vers_string to v0.28-52-ge6a60f7 with git describe
-Patch0: mythtv-0.28-fixes.patch
+Patch0: mythtv-fixes.patch
Patch1: mythtv-mariadb.patch
Source10: PACKAGE-LICENSING
@@ -196,9 +193,6 @@ BuildRequires: xorg-x11-drv-openchrome-devel
BuildRequires: libGL-devel, libGLU-devel
# Misc A/V format support
-%if %{with faac}
-BuildRequires: faac-devel
-%endif
BuildRequires: fftw-devel >= 3
BuildRequires: flac-devel >= 1.0.4
BuildRequires: lame-devel
@@ -208,6 +202,7 @@ BuildRequires: libtheora-devel
BuildRequires: libvorbis-devel >= 1.0
BuildRequires: taglib-devel >= 1.7
BuildRequires: x264-devel
+BuildRequires: x265-devel
BuildRequires: xvidcore-devel >= 0.9.1
BuildRequires: exiv2-devel
@@ -221,6 +216,7 @@ BuildRequires: pulseaudio-libs-devel
BuildRequires: avahi-compat-libdns_sd-devel
# Bluray support
+BuildRequires: ant java-devel
BuildRequires: libxml2-devel
#BuildRequires: libudf-devel
@@ -434,9 +430,6 @@ Requires: xorg-x11-proto-devel
Requires: libGL-devel, libGLU-devel
# Misc A/V format support
-%if %{with faac}
-Requires: faac-devel
-%endif
Requires: fftw-devel >= 3
Requires: flac-devel >= 1.0.4
Requires: gsm-devel
@@ -451,6 +444,7 @@ Requires: libvorbis-devel >= 1.0
Requires: mjpegtools-devel >= 1.6.1
Requires: taglib-devel >= 1.5
Requires: x264-devel
+Requires: x265-devel
Requires: xvidcore-devel >= 0.9.1
# Audio framework support
@@ -505,6 +499,7 @@ Requires: mythtv-common = %{version}-%{release}
Requires: mythtv-base-themes = %{version}
Requires: mariadb >= 5
Requires: python-MythTV
+Recommends: libaacs
%{?fedora:Requires: google-droid-sans-mono-fonts}
%{?fedora:Recommends: mesa-vdpau-drivers}
Provides: mythtv-frontend-api = %{mythfeapiver}
@@ -525,6 +520,10 @@ Summary: Server component of mythtv (a DVR)
Requires: lame
Requires: mythtv-common = %{version}-%{release}
Requires: mythtv-setup
+Requires: python2-future
+Requires: python2-requests
+Requires: python-requests-cache
+
Requires(pre): shadow-utils
Conflicts: xmltv-grabbers < 0.5.37
@@ -852,12 +851,11 @@ pushd mythtv
%if ! %{with vaapi}
--disable-vaapi \
%endif
+ --enable-bdjava \
--enable-libmp3lame \
-%if %{with faac}
- --enable-libfaac \
-%endif
--enable-libtheora --enable-libvorbis \
--enable-libx264 \
+ --enable-libx265 \
--enable-libxvid \
--enable-libvpx \
%if !%{with perl}
@@ -1358,6 +1356,9 @@ exit 0
%changelog
+* Sat Sep 16 2017 Richard Shaw <hobbes1069(a)gmail.com> - 29.0-1
+- Update to new release, 29.0.
+
* Wed Sep 6 2017 Richard Shaw <hobbes1069(a)gmail.com> - 0.28.1-8
- Update to latest fixes/0/28, v0.28.1-45-g73cf7474ad.
diff --git a/sources b/sources
index 14b0fdb..21762d1 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-8084e67e5e2c8d2ca0f240770b9d8758 mythtv-0.28.1.tar.gz
+0f200127980888632e6c85736c609835 mythtv-29.0.tar.gz
7 years, 1 month
[get_iplayer] Update to version 3.03.
by mavit
commit 894713d27a169f0d0f64b618d1c753c7438a3432
Author: Peter Oliver <git(a)mavit.org.uk>
Date: Mon Oct 2 10:16:54 2017 +0100
Update to version 3.03.
.gitignore | 1 +
get_iplayer.spec | 7 +++++--
sources | 2 +-
3 files changed, 7 insertions(+), 3 deletions(-)
---
diff --git a/.gitignore b/.gitignore
index 368ae85..5ba4483 100644
--- a/.gitignore
+++ b/.gitignore
@@ -7,3 +7,4 @@ get_iplayer-2.94.tar.gz
/get_iplayer-3.00.tar.gz
/get_iplayer-3.01.tar.gz
/get_iplayer-3.02.tar.gz
+/get_iplayer-3.03.tar.gz
diff --git a/get_iplayer.spec b/get_iplayer.spec
index 7775872..4beb4bf 100644
--- a/get_iplayer.spec
+++ b/get_iplayer.spec
@@ -1,5 +1,5 @@
Name: get_iplayer
-Version: 3.02
+Version: 3.03
Release: 1%{?dist}
Summary: Lists, records and streams BBC iPlayer TV and radio programmes
@@ -42,7 +42,7 @@ Requires: ffmpeg >= 3.0
Requires: AtomicParsley
Requires: perl-interpreter
Requires: perl(Encode::Locale)
-Requires: perl(XML::LibXML)
+Requires: perl(XML::LibXML) >= 1.91
Requires: perl(LWP::Protocol::https)
Requires: perl(Mojolicious) >= 4.63
Requires: perl(JSON::PP)
@@ -109,6 +109,9 @@ fi
%changelog
+* Mon Oct 2 2017 Peter Oliver <rpm(a)mavit.org.uk> - 3.03-1
+- Update to version 3.03.
+
* Mon Aug 21 2017 Peter Oliver <rpm(a)mavit.org.uk> - 3.02-1
- Update to version 3.02.
diff --git a/sources b/sources
index 6269226..96659e3 100644
--- a/sources
+++ b/sources
@@ -1 +1 @@
-cf91f90c4126e6d68bcf1323e425c9a4 get_iplayer-3.02.tar.gz
+b15227407683feeb25ccdd0b094e41c4 get_iplayer-3.03.tar.gz
7 years, 1 month