[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, 4 months
[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, 4 months
[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, 4 months
[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, 4 months
[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, 4 months
[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, 4 months
[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>
+-