Author: hobbes1069
Update of /cvs/free/rpms/mythtv/devel
In directory old02.ovh.rpmfusion.lan:/tmp/cvs-serv27541
Modified Files:
ChangeLog mythbackend.service mythtv-0.27-fixes.patch
mythtv.spec
Log Message:
* Sun Jan 4 2015 Richard Shaw <hobbes1069(a)gmail.com> - 0.27.4-3
- Update to latest bugfix release.
- Change systemd dependency from network.target to network-online.target, fixes
BZ#3482.
Index: ChangeLog
===================================================================
RCS file: /cvs/free/rpms/mythtv/devel/ChangeLog,v
retrieving revision 1.19
retrieving revision 1.20
diff -u -r1.19 -r1.20
--- ChangeLog 3 Nov 2014 19:15:51 -0000 1.19
+++ ChangeLog 4 Jan 2015 17:57:39 -0000 1.20
@@ -1,3 +1,237 @@
+commit 40506c2ba7d81fa8e65bf8bb783c998ffe65c7af
+Author: Stuart Morgan <smorgan(a)mythtv.org>
+Date: Thu Dec 11 15:49:35 2014 +0000
+
+ SSDP: Missed changes when reverting [52cb0b5]
+
+ Fixes #12333
+
+ (cherry picked from commit 3461b407b0dd0f4188108395709eb129ec32e652)
+
+commit ea73ed3989d210efbaf822d3cee029b0c8d6b553
+Author: Paul Harrison <pharrison(a)mythtv.org>
+Date: Tue Dec 9 20:50:00 2014 +0000
+
+ MythUIImage: extend the random image feature to reload if a delay is used
+
+ If the <filename> is set to a directory and the <delay> is set to a value
> 0
+ then keep reloading a random image from the directory after <delay>
+ milliseconds has passed.
+
+ For example this will display a random image from the themes 'background'
+ directory changing the image every minute (60000ms) :-
+
+ <imagetype name="background">
+ <area>0,0,1280,720</area>
+ <filename>backgrounds/</filename>
+ <delay>60000</delay>
+ </imagetype>
+
+ (cherry picked from commit 78a827b8fdbf0d4fab4525a8007c2c8c7deb4cc1)
+
+commit 86ff53a7a178f5da5e2858f0ffd889cf2eab301b
+Author: Karl Dietz <dekarl(a)mythtv.org>
+Date: Fri Apr 25 15:49:24 2014 +0200
+
+ draft patch to add support for private data specifiers and upc private data
+
+ Fixes #12091
+ (cherry picked from commit 30df98ce5d11b69d0b5c5114a9007cdfc79a7e9b)
+
+ Conflicts:
+
+ mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.h
+
+commit c32f254cd6aefdc5138e504afdf829c290878437
+Author: Karl Dietz <dekarl(a)mythtv.org>
+Date: Thu Jul 10 00:41:00 2014 +0200
+
+ Don't use the CRIDs from the authority eventis.nl
+
+ they are not fit for our scheduler (multiple IDs per series/episode
+ and multiple series/episodes per ID)
+ (cherry picked from commit 494dfa6eef01aabe1ed7bf3d0f3139f20a8b7678)
+
+commit 141b4f3e0ac970a185be60a81bc64f88f0ccd563
+Author: Paul Harrison <pharrison(a)mythtv.org>
+Date: Thu Dec 4 23:16:54 2014 +0000
+
+ MythDownloadManager: unlock m_infoLock before continuing after an error condition
+
+ Problem spotted by nouglywires on the forums.
+
+ (cherry picked from commit 8e6678a00f81fffcd8a3bf71947066db1fffbd30)
+
+commit 70653f18a203680d5bff5b8d6ceff12b5e39fd4c
+Author: Karl Dietz <dekarl(a)mythtv.org>
+Date: Sun Nov 30 23:41:58 2014 +0100
+
+ fix braino in c12af87
+ (cherry picked from commit 0f7d7ff0660a12022b76cdb8d6d6bceda032f540)
+
+commit 6fdb2d1a02e0867483e9025a8ab9477f2444af06
+Author: Stuart Morgan <smorgan(a)mythtv.org>
+Date: Sat Nov 29 22:53:27 2014 +0000
+
+ SSDP: Disable reflection attack mitigation for now, it's triggering false
positives.
+
+ (cherry picked from commit 02e92a265c1e9825bb58806156fbf31bd740515a)
+
+commit bd762efd166f3969e5acc0ac0f7a11770a44a9d3
+Author: Karl Dietz <dekarl(a)mythtv.org>
+Date: Tue Nov 25 23:37:30 2014 +0100
+
+ Properly translate star ratings in XMLTV parser.
+
+ Convert from zero based star-ratings in XMLTV to one based star-ratings
+ in MythTV.
+ (cherry picked from commit c12af87629629295975fdb1ede28072ad2fc1247)
+
+commit 65d92fd36ecf796d8e8a18b3196286d31b28501e
+Author: Stuart Morgan <smorgan(a)mythtv.org>
+Date: Wed Nov 19 12:32:59 2014 +0000
+
+ SSDP: Check that the peer address is available before doing the local network check.
+
+ Refs #12305
+
+ (cherry picked from commit d20c163ee82c38f9d8fe4652b7a811af61925de7)
+
+commit 9a72d02cb7e9a89135b5044e9179f148a45b0cf6
+Author: Paul Harrison <pharrison(a)mythtv.org>
+Date: Wed Nov 19 12:47:47 2014 +0000
+
+ Revert "Prevent --syslog, --logpath and --enable-dblog if --nologserver is
used"
+
+ Seems those options are valid for --nologserver. That option just means don't
run
+ the external mythlogserver but do the logging internally.
+
+ Refs #11992.
+
+ This reverts commit ec06dfba8e22008ac97af81f997e9b521eca62ae.
+
+commit 4572a55538303df215d28c02dae24bde757a7fde
+Author: David Engel <dengel(a)mythtv.org>
+Date: Tue Nov 18 13:27:45 2014 -0600
+
+ Fix missed cases in earlier channel-specific rules change.
+
+ Refs #12267
+
+ (cherry picked from commit d3f5031e08c0a9e0fa783310afa4d293bacf6ce0)
+
+commit 99688ed2df3e17b2776fc951dc1bc33c12e1a359
+Author: Stuart Morgan <smorgan(a)mythtv.org>
+Date: Thu Nov 13 16:17:36 2014 +0000
+
+ Add support for explicitly recognising QAM-256 with DVB-T2. This _may_ help with
scanning on devices that don't support 'auto' modulation detection.
+
+ (cherry picked from commit 864d985786a6f0f0fe2b93b4539c12ee2b0e09e2)
+ (cherry picked from commit 376955a091dbf69f7cc233fa1bf3255401e80367)
+
+commit 76da983bb8aec8a91e8d897150e85d3a5256596d
+Author: David Engel <dengel(a)mythtv.org>
+Date: Tue Nov 11 16:18:37 2014 -0600
+
+ Properly identify channel-specific rules in Recording Rules.
+
+ This was broken when channel rules were converted to all rules using
+ the this channel filter. Based on a patch from lomion(a)aon.at.
+
+ Refs #12267
+
+ (cherry picked from commit a397b94ffb5cf201aef4fdd9ccd2b28780713bed)
+
+commit ec06dfba8e22008ac97af81f997e9b521eca62ae
+Author: Bill Meek <keemllib(a)gmail.com>
+Date: Tue Nov 11 00:07:53 2014 +0000
+
+ Prevent --syslog, --logpath and --enable-dblog if --nologserver is used
+
+ Fixes #11992.
+
+ Signed-off-by: Paul Harrison <pharrison(a)mythtv.org>
+ (cherry picked from commit be72636b9e34b1b9fb032a1da578a742d562d0b9)
+
+commit be0005e12cd65ee5e3311c3511a80e7e2a8159f0
+Author: Rebecca Sutton Koeser <rlskoeser(a)gmail.com>
+Date: Mon Nov 10 22:31:07 2014 +0000
+
+ Python bindings: fix typo in MythXML getPreviewImage()
+
+ Fixes #11515.
+
+ Signed-off-by: Paul Harrison <pharrison(a)mythtv.org>
+ (cherry picked from commit e42e1d8351703798e3dc08cb01597577794bab32)
+
+commit 6eb4afbd48652a99a2ec4cddd774de2101aacc83
+Author: Jonatan Lindblad <jlindblad(a)mythtv.org>
+Date: Mon Nov 10 15:17:57 2014 +0000
+
+ Fix using ##x## for season and episode in templated text
+
+ Fixes #12003.
+
+ Signed-off-by: Paul Harrison <pharrison(a)mythtv.org>
+ (cherry picked from commit acdc9f86988379b842f56b89089f4e8d029dec37)
+
+commit 4cea476f411f5a2f146398ca20bd0b1046cb1f72
+Author: Paul Harrison <pharrison(a)mythtv.org>
+Date: Mon Nov 10 12:41:52 2014 +0000
+
+ mythfilldatabase: remove the redundant assign to userid
+
+ Refs #12300.
+
+ (cherry picked from commit 2f2261d6e3bb78f029dbb38e4746314d6ca0a2b6)
+
+commit ee025527aec0f1bed588664d3061c69fb97a642b
+Author: Bill Meek <keemllib(a)gmail.com>
+Date: Mon Nov 10 12:03:41 2014 +0000
+
+ mythfilldatabase: remove Schedules Direct userid from temporary file names
+
+ This removes the userid from the file name so it wont be exposed in any logs.
+
+ Fixes #12300.
+
+ Signed-off-by: Paul Harrison <pharrison(a)mythtv.org>
+ (cherry picked from commit 6750b358ec33c09bd651507ed57eb993ae5e5a39)
+
+commit a1096aa9fa4177a66a0cc45196c9e8179944efbd
+Author: faginbagin <mythtv(a)hbuus.com>
+Date: Mon Nov 10 11:33:22 2014 +0000
+
+ DTVRecorder: Fix 32 to 64 bit integer arithmetic in FindPSKeyFrames()
+
+ This is reported to fix commercial flagging of PVR-150/300/500 recordings
+ possibly only affecting 32 bit O/Ss due to a bad conversion from a 32 bit
+ unsigned int to a 64 bit signed int.
+
+ Fixes #12313.
+
+ Signed-off-by: Paul Harrison <pharrison(a)mythtv.org>
+ (cherry picked from commit eb0e5050a4af098b9c9dd392c324e1993b2c590e)
+
+commit 0f0e67871b38abc9de21e588a1a9670d7d7603e5
+Author: Richard Hulme <peper03(a)mythtv.org>
+Date: Thu Oct 30 22:43:05 2014 +0100
+
+ Make PID filtering work properly by removing the streams and not just the entries
from the PAT.
+ (cherry picked from commit 61f9ac9a8d7f6eb5cf1fac74376245e8b82e42f1)
+
+commit f01bd1d9607bfcad8049515592b4fda0f7a9274c
+Author: Stuart Morgan <smorgan(a)mythtv.org>
+Date: Sat Sep 7 17:02:32 2013 +0100
+
+ Add a setting to control MHEG interaction channel, patch by Lawrence Rust
+
+ This also disables the interaction channel (and iplayer) by default as
+ it appears that this is currently broken, possibly by an upstream
+ change at the BBC.
+
+ (cherry picked from commit 03c11f466a9cd8960a17e5d2d2c2c54b6bf42cc9)
+
commit e0b002787e32d2e21ec57d9686ec4a8411c0fa60
Author: lomion <lomion(a)aon.at>
Date: Sun Oct 26 17:50:57 2014 -0400
Index: mythbackend.service
===================================================================
RCS file: /cvs/free/rpms/mythtv/devel/mythbackend.service,v
retrieving revision 1.9
retrieving revision 1.10
diff -u -r1.9 -r1.10
--- mythbackend.service 7 Jan 2014 14:06:29 -0000 1.9
+++ mythbackend.service 4 Jan 2015 17:57:39 -0000 1.10
@@ -30,7 +30,7 @@
[Unit]
Description=MythTV backend service
-After=network.target mariadb.service mysqld.service time-sync.target
+After=network-online.target mariadb.service mysqld.service time-sync.target
# Uncomment the following line if you will be using the mythweb plugin on the
# same system as mythbackend.
#Wants=httpd.service
@@ -61,5 +61,12 @@
# Whether systemd will continue over-watch and restart on any halt
#Restart=always
+# MariaDB seems to have a systemd related bug and tells systemd that it is
+# ready to accept connections before it really is. If you have this problem
+# try uncommenting the following lines:
+# Restart=on-failure
+# StartLimitBurst=5
+# StartLimitInterval=1
+
[Install]
WantedBy=multi-user.target
mythtv-0.27-fixes.patch:
bindings/python/MythTV/methodheap.py | 2
libs/libmythbase/mythdownloadmanager.cpp | 3
libs/libmythbase/mythversion.h | 2
libs/libmythtv/datadirect.cpp | 56 +-
libs/libmythtv/datadirect.h | 2
libs/libmythtv/eithelper.cpp | 36 +
libs/libmythtv/mhegic.cpp | 9
libs/libmythtv/mpeg/dvbdescriptors.h | 50 +
libs/libmythtv/mpeg/mpegdescriptors.h | 16
libs/libmythtv/mpeg/mpegstreamdata.cpp | 9
libs/libmythtv/recorders/dtvrecorder.cpp | 7
libs/libmythtv/test/test_mpegtables/test_mpegtables.h | 52 ++
libs/libmythtv/test/test_mpegtables/test_mpegtables.pro | 4
libs/libmythui/mythuibuttonlist.cpp | 2
libs/libmythui/mythuiimage.cpp | 122 ++--
libs/libmythui/mythuiimage.h | 5
libs/libmythui/mythuitext.cpp | 2
libs/libmythupnp/ssdp.cpp | 2
locales/de_at.xml | 37 +
programs/mythfilldatabase/xmltvparser.cpp | 19
programs/mythfrontend/globalsettings.cpp | 13
programs/mythfrontend/programrecpriority.cpp | 69 +-
themes/default/keyboard/el.xml | 270 ++++++++++
themes/default/keyboard/el_ui.xml | 410 ++++++++++++++++
24 files changed, 1081 insertions(+), 118 deletions(-)
Index: mythtv-0.27-fixes.patch
===================================================================
RCS file: /cvs/free/rpms/mythtv/devel/mythtv-0.27-fixes.patch,v
retrieving revision 1.8
retrieving revision 1.9
diff -u -r1.8 -r1.9
--- mythtv-0.27-fixes.patch 3 Nov 2014 19:15:52 -0000 1.8
+++ mythtv-0.27-fixes.patch 4 Jan 2015 17:57:39 -0000 1.9
@@ -1,12 +1,57 @@
- mythtv/libs/libmythbase/mythversion.h | 2 +-
- mythtv/libs/libmythtv/datadirect.cpp | 52 +++-
- mythtv/libs/libmythtv/datadirect.h | 2 +
- mythtv/libs/libmythupnp/ssdp.cpp | 30 ++-
- mythtv/locales/de_at.xml | 37 +++
- mythtv/themes/default/keyboard/el.xml | 270 ++++++++++++++++++++
- mythtv/themes/default/keyboard/el_ui.xml | 410 +++++++++++++++++++++++++++++++
- 7 files changed, 792 insertions(+), 11 deletions(-)
+ mythtv/bindings/python/MythTV/methodheap.py | 2 +-
+ mythtv/libs/libmythbase/mythdownloadmanager.cpp | 3 +
+ mythtv/libs/libmythbase/mythversion.h | 2 +-
+ mythtv/libs/libmythtv/datadirect.cpp | 56 ++-
+ mythtv/libs/libmythtv/datadirect.h | 2 +
+ mythtv/libs/libmythtv/eithelper.cpp | 36 +-
+ mythtv/libs/libmythtv/mhegic.cpp | 9 +-
+ mythtv/libs/libmythtv/mpeg/dvbdescriptors.h | 50 ++-
+ mythtv/libs/libmythtv/mpeg/mpegdescriptors.h | 16 +
+ mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp | 9 +-
+ mythtv/libs/libmythtv/recorders/dtvrecorder.cpp | 7 +-
+ .../test/test_mpegtables/test_mpegtables.h | 52 +++
+ .../test/test_mpegtables/test_mpegtables.pro | 4 +
+ mythtv/libs/libmythui/mythuibuttonlist.cpp | 2 +-
+ mythtv/libs/libmythui/mythuiimage.cpp | 122 +++---
+ mythtv/libs/libmythui/mythuiimage.h | 5 +
+ mythtv/libs/libmythui/mythuitext.cpp | 2 +-
+ mythtv/libs/libmythupnp/ssdp.cpp | 2 +-
+ mythtv/locales/de_at.xml | 37 ++
+ mythtv/programs/mythfilldatabase/xmltvparser.cpp | 19 +-
+ mythtv/programs/mythfrontend/globalsettings.cpp | 13 +
+ .../programs/mythfrontend/programrecpriority.cpp | 69 ++--
+ mythtv/themes/default/keyboard/el.xml | 270 ++++++++++++++
+ mythtv/themes/default/keyboard/el_ui.xml | 410 +++++++++++++++++++++
+ 24 files changed, 1081 insertions(+), 118 deletions(-)
+diff --git a/mythtv/bindings/python/MythTV/methodheap.py
b/mythtv/bindings/python/MythTV/methodheap.py
+index d598b2f..b41b2da 100644
+--- a/mythtv/bindings/python/MythTV/methodheap.py
++++ b/mythtv/bindings/python/MythTV/methodheap.py
+@@ -1202,7 +1202,7 @@ class MythXML( XMLConnection ):
+ if height: args['Height'] = height
+ if secsin: args['SecsIn'] = secsin
+
+- return self._result('Content/GetPreviewImage', **args).read()
++ return self._request('Content/GetPreviewImage', **args).read()
+
+ class MythMusic( MusicSchema, DBCache ):
+ """
+diff --git a/mythtv/libs/libmythbase/mythdownloadmanager.cpp
b/mythtv/libs/libmythbase/mythdownloadmanager.cpp
+index 02d27a0..63e2e51 100644
+--- a/mythtv/libs/libmythbase/mythdownloadmanager.cpp
++++ b/mythtv/libs/libmythbase/mythdownloadmanager.cpp
+@@ -312,7 +312,10 @@ void MythDownloadManager::run(void)
+ m_downloadQueue.pop_front();
+
+ if (!dlInfo)
++ {
++ m_infoLock->unlock();
+ continue;
++ }
+
+ QUrl qurl(dlInfo->m_url);
+ if (m_downloadInfos.contains(qurl.toString()))
diff --git a/mythtv/libs/libmythbase/mythversion.h
b/mythtv/libs/libmythbase/mythversion.h
index b097b21..26d37ff 100644
--- a/mythtv/libs/libmythbase/mythversion.h
@@ -21,7 +66,7 @@
/** \brief Increment this whenever the MythTV network protocol changes.
*
diff --git a/mythtv/libs/libmythtv/datadirect.cpp b/mythtv/libs/libmythtv/datadirect.cpp
-index 77cdef5..714a0c1 100644
+index 77cdef5..4ec9f92 100644
--- a/mythtv/libs/libmythtv/datadirect.cpp
+++ b/mythtv/libs/libmythtv/datadirect.cpp
@@ -539,8 +539,8 @@ DataDirectProcessor::DataDirectProcessor(uint lp, QString user,
QString pass) :
@@ -93,7 +138,20 @@
file.write(postdata);
file.close();
-@@ -1833,6 +1855,18 @@ QString DataDirectProcessor::GetCookieFilename(bool &ok)
const
+@@ -1161,11 +1183,9 @@ bool DataDirectProcessor::GrabData(const QDateTime
&pstartDate,
+
+ if (m_cacheData)
+ {
+- QByteArray userid = GetUserID().toLatin1();
+ cache_dd_data = m_tmpDir +
+- QString("/mythtv_dd_cache_%1_%2_UTC_%3_to_%4")
++ QString("/mythtv_dd_cache_%1_UTC_%2_to_%3")
+ .arg(GetListingsProvider())
+- .arg(userid.constData())
+ .arg(MythDate::toString(pstartDate, MythDate::kFilename))
+ .arg(MythDate::toString(pendDate, MythDate::kFilename));
+
+@@ -1833,6 +1853,18 @@ QString DataDirectProcessor::GetCookieFilename(bool &ok)
const
return m_cookieFile;
}
@@ -112,7 +170,7 @@
void DataDirectProcessor::SetUserID(const QString &uid)
{
m_userid = uid;
-@@ -1877,7 +1911,11 @@ bool DataDirectProcessor::Post(QString url, const PostList
&list,
+@@ -1877,7 +1909,11 @@ bool DataDirectProcessor::Post(QString url, const PostList
&list,
return true;
QFile file(documentFile);
@@ -145,51 +203,577 @@
mutable QString m_cookieFile;
QDateTime m_cookieFileDT;
-diff --git a/mythtv/libs/libmythupnp/ssdp.cpp b/mythtv/libs/libmythupnp/ssdp.cpp
-index 9e503eb..ebe3bcb 100644
---- a/mythtv/libs/libmythupnp/ssdp.cpp
-+++ b/mythtv/libs/libmythupnp/ssdp.cpp
-@@ -314,6 +314,33 @@ void SSDP::run()
+diff --git a/mythtv/libs/libmythtv/eithelper.cpp b/mythtv/libs/libmythtv/eithelper.cpp
+index bf980ed..e34714f 100644
+--- a/mythtv/libs/libmythtv/eithelper.cpp
++++ b/mythtv/libs/libmythtv/eithelper.cpp
+@@ -566,17 +566,49 @@ void EITHelper::AddEIT(const DVBEventInformationTable *eit)
+ // The CRID is a URI. It could contain UTF8 sequences encoded
+ // as %XX but there's no advantage in decoding them.
+ // The BBC currently uses private types 0x31 and 0x32.
++ // IDs from the authority eventis.nl are not fit for our scheduler
+ if (desc.ContentType(k) == 0x01 || desc.ContentType(k) == 0x31)
+- programId = desc.ContentId(k);
++ {
++ if (!desc.ContentId(k).startsWith ("eventis.nl/"))
++ {
++ programId = desc.ContentId(k);
++ }
++ }
+ else if (desc.ContentType(k) == 0x02 || desc.ContentType(k) ==
0x32)
+ {
+- seriesId = desc.ContentId(k);
++ if (!desc.ContentId(k).startsWith ("eventis.nl/"))
++ {
++ seriesId = desc.ContentId(k);
++ }
+ category_type = ProgramInfo::kCategorySeries;
+ }
+ }
+ }
+ }
+
++ /* if we don't have a subtitle, try to parse one from private descriptors
*/
++ if (subtitle.isEmpty()) {
++ bool isUPC = false;
++ /* is this event carrying UPC private data? */
++ desc_list_t private_data_specifiers = MPEGDescriptor::FindAll(list,
DescriptorID::private_data_specifier);
++ for (uint j = 0; j < private_data_specifiers.size(); j++) {
++ PrivateDataSpecifierDescriptor desc(private_data_specifiers[j]);
++ if (desc.PrivateDataSpecifier() == PrivateDataSpecifierID::UPC1) {
++ isUPC = true;
++ }
++ }
++
++ if (isUPC) {
++ desc_list_t subtitles = MPEGDescriptor::FindAll(list,
PrivateDescriptorID::upc_event_episode_title);
++ for (uint j = 0; j < subtitles.size(); j++) {
++ PrivateUPCCablecomEpisodeTitleDescriptor desc(subtitles[j]);
++
++ subtitle = desc.Text();
++ }
++ }
++ }
++
++
+ QDateTime starttime = eit->StartTimeUTC(i);
+ // fix starttime only if the duration is a multiple of a minute
+ if (!(eit->DurationInSeconds(i) % 60))
+diff --git a/mythtv/libs/libmythtv/mhegic.cpp b/mythtv/libs/libmythtv/mhegic.cpp
+index d8a5fbb..31456c1 100644
+--- a/mythtv/libs/libmythtv/mhegic.cpp
++++ b/mythtv/libs/libmythtv/mhegic.cpp
+@@ -18,6 +18,7 @@ using std::getenv;
+ // Myth
+ #include "netstream.h"
+ #include "mythlogging.h"
++#include "mythcorecontext.h"
+
+ #define LOC QString("[mhegic] ")
+
+@@ -48,14 +49,16 @@ MHInteractionChannel::EStatus MHInteractionChannel::status()
+ return kInactive;
+ }
+
+- // TODO get this from mythdb
++ if (!gCoreContext->GetNumSetting("EnableMHEG", 0))
++ return kDisabled;
++
+ QStringList opts = QString(getenv("MYTHMHEG")).split(':');
+ if (opts.contains("noice", Qt::CaseInsensitive))
+ return kDisabled;
+ else if (opts.contains("ice", Qt::CaseInsensitive))
+ return kActive;
+- else // Default
+- return kActive;
++
++ return gCoreContext->GetNumSetting("EnableMHEGic", 1) ? kActive :
kDisabled;
+ }
+
+ static inline bool isCached(const QString& csPath)
+diff --git a/mythtv/libs/libmythtv/mpeg/dvbdescriptors.h
b/mythtv/libs/libmythtv/mpeg/dvbdescriptors.h
+index 682e5b5..f5a74bf 100644
+--- a/mythtv/libs/libmythtv/mpeg/dvbdescriptors.h
++++ b/mythtv/libs/libmythtv/mpeg/dvbdescriptors.h
+@@ -926,12 +926,13 @@ class TerrestrialDeliverySystemDescriptor : public MPEGDescriptor
+ kConstellationQPSK = 0x0,
+ kConstellationQAM16 = 0x1,
+ kConstellationQAM64 = 0x2,
++ kConstellationQAM256 = 0x3,
+ };
+ uint Constellation(void) const { return _data[7]>>6; }
+ QString ConstellationString(void) const
+ {
+- static QString cs[] = { "qpsk", "qam_16", "qam_64"
};
+- return (Constellation() <= kConstellationQAM64) ?
++ static QString cs[] = { "qpsk", "qam_16",
"qam_64", "qam_256" };
++ return (Constellation() <= kConstellationQAM256) ?
+ cs[Constellation()] : "auto";
+ }
+ // hierarchy_information 3 7.2
+@@ -1357,6 +1358,10 @@ class PrivateDataSpecifierDescriptor : public MPEGDescriptor
+ // descriptor_length 8 1.0
+
+ // private_data_specifier 32 2.0
++ uint32_t PrivateDataSpecifier (void) const
++ {
++ return (_data[2] << 24 | _data[3] << 16 | _data[4] << 8 |
_data[5]);
++ }
+ };
+
+ // DVB Bluebook A038 (Sept 2011) p 79
+@@ -2070,4 +2075,45 @@ class DefaultAuthorityDescriptor : public MPEGDescriptor
+ }
+ };
+
++/*
++ * private UPC Cablecom (Austria) episode descriptor for Horizon middleware
++ */
++class PrivateUPCCablecomEpisodeTitleDescriptor : public MPEGDescriptor
++{
++ public:
++ PrivateUPCCablecomEpisodeTitleDescriptor(const unsigned char *data, int len = 300)
:
++ MPEGDescriptor(data, len, PrivateDescriptorID::upc_event_episode_title) { }
++ // Name bits loc expected value
++ // descriptor_tag 8 0.0 0xa7
++ // descriptor_length 8 1.0
++
++ // ISO_639_language_code 24 2.0
++ int LanguageKey(void) const
++ {
++ return iso639_str3_to_key(&_data[2]);
++ }
++ QString LanguageString(void) const
++ {
++ return iso639_key_to_str3(LanguageKey());
++ }
++ int CanonicalLanguageKey(void) const
++ {
++ return iso639_key_to_canonical_key(LanguageKey());
++ }
++ QString CanonicalLanguageString(void) const
++ {
++ return iso639_key_to_str3(CanonicalLanguageKey());
++ }
++
++ uint TextLength(void) const
++ {
++ return _data[1] - 3;
++ }
++
++ QString Text(void) const
++ {
++ return dvb_decode_text(&_data[5], TextLength());
++ }
++};
++
+ #endif
+diff --git a/mythtv/libs/libmythtv/mpeg/mpegdescriptors.h
b/mythtv/libs/libmythtv/mpeg/mpegdescriptors.h
+index 1efd30a..626bc5a 100644
+--- a/mythtv/libs/libmythtv/mpeg/mpegdescriptors.h
++++ b/mythtv/libs/libmythtv/mpeg/mpegdescriptors.h
+@@ -191,6 +191,9 @@ class PrivateDescriptorID
+ dish_event_vchip = 0x95, /* implemented */
+ dish_event_tags = 0x96, /* implemented */
- void SSDP::ProcessData( MSocketDevice *pSocket )
++ // Private -- CH UPC Cablecom
++ upc_event_episode_title = 0xA7,
++
+ // Private -- premiere.de
+ premiere_content_order = 0xF0,
+ premiere_parental_information = 0xF1,
+@@ -198,6 +201,19 @@ class PrivateDescriptorID
+ };
+ };
+
++/*
++ * Private_Data_Specifier_ID from
http://www.dvbservices.com/identifiers/private_data_spec_id
++ */
++class PrivateDataSpecifierID
++{
++ public:
++ enum
++ {
++ /* UPC Cablecom */
++ UPC1 = 0x00000600,
++ };
++};
++
+ class MTV_PUBLIC MPEGDescriptor
+ {
+ public:
+diff --git a/mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp
b/mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp
+index e295975..9738c7f 100644
+--- a/mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp
++++ b/mythtv/libs/libmythtv/mpeg/mpegstreamdata.cpp
+@@ -147,9 +147,8 @@ void MPEGStreamData::SetRecordingType(const QString
&recording_type)
{
-+ QHostAddress peerAddress = pSocket->peerAddress();
-+ quint16 peerPort = pSocket->peerPort ();
+ _recording_type = recording_type;
+ _recording_type.detach();
+- uint neededVideo = (_recording_type == "tv") ? 1 : 0;
+ uint neededAudio = (_recording_type == "audio") ? 1 : 0;
+- SetVideoStreamsRequired(neededVideo);
++ SetVideoStreamsRequired(0);
+ SetAudioStreamsRequired(neededAudio);
+ }
+
+@@ -578,6 +577,12 @@ bool MPEGStreamData::CreatePMTSingleProgram(const ProgramMapTable
&pmt)
+ audio_cnt++;
+ audioPIDs.push_back(pid);
+ }
++ else if (_recording_type == "audio" )
++ {
++ // If not an audio PID but we only want audio,
++ // ignore this PID.
++ continue;
++ }
+
+ #ifdef DEBUG_MPEG_RADIO
+ if (is_video)
+diff --git a/mythtv/libs/libmythtv/recorders/dtvrecorder.cpp
b/mythtv/libs/libmythtv/recorders/dtvrecorder.cpp
+index 099f8a6..df05491 100644
+--- a/mythtv/libs/libmythtv/recorders/dtvrecorder.cpp
++++ b/mythtv/libs/libmythtv/recorders/dtvrecorder.cpp
+@@ -1135,7 +1135,7 @@ void DTVRecorder::FindPSKeyFrames(const uint8_t *buffer, uint len)
+ if (hasKeyFrame)
+ {
+ _last_keyframe_seen = _frames_seen_count;
+- HandleKeyframe(_payload_buffer.size() - (bufptr - bufstart));
++ HandleKeyframe((int64_t)_payload_buffer.size() - (bufptr - bufstart));
+ }
+
+ if ((aspectRatio > 0) && (aspectRatio != m_videoAspect))
+@@ -1336,6 +1336,11 @@ bool DTVRecorder::ProcessTSPacket(const TSPacket &tspacket)
+ FindOtherKeyframes(&tspacket);
+ _buffer_packets = false;
+ }
++ else if (_stream_id[pid] == 0)
++ {
++ // Ignore this packet if the PID should be stripped
++ return true;
++ }
+ else
+ {
+ // There are audio/video streams. Only write the packet
+diff --git a/mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.h
b/mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.h
+index fa1412b..84e9a6d 100644
+--- a/mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.h
++++ b/mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.h
+@@ -204,4 +204,56 @@ class TestMPEGTables: public QObject
+ QCOMPARE (descriptor2.ContentId(),
QString("eventis.nl/00000000-0000-1000-0608-000000003F9C"));
+ QCOMPARE (descriptor.ContentId(1),
QString("eventis.nl/00000000-0000-1000-0608-000000003F9C"));
+ }
++
++ /* test for coverity 1047220: Incorrect deallocator used:
++ * Calling "PSIPTable::~PSIPTable()" frees
"(&psip)->_fullbuffer"
++ * using "free" but it should have been freed using "operator
delete[]".
++ *
++ * _allocSize should be 0 thus we are not freeing something we didn't
++ * allocate in the first place (false positive)
++ */
++ void clone_test(void)
++ {
++ unsigned char *si_data = new unsigned char[8];
++ si_data[0] = 0x70; /* pp....37 */
++ si_data[1] = 0x70;
++ si_data[2] = 0x05;
++ si_data[3] = 0xdc;
++ si_data[4] = 0xa9;
++ si_data[5] = 0x12;
++ si_data[6] = 0x33;
++ si_data[7] = 0x37;
++
++ const PSIPTable si_table(si_data);
++
++ QVERIFY (!si_table.IsClone());
++ }
++
++ /* test PrivateDataSpecifierDescriptor */
++ void PrivateDataSpecifierDescriptor_test (void)
++ {
++ /* from
https://code.mythtv.org/trac/ticket/12091 */
++ const unsigned char si_data[] = {
++ 0x5f, 0x04, 0x00, 0x00, 0x06, 0x00
++ };
++ PrivateDataSpecifierDescriptor desc(si_data);
++ QCOMPARE (desc.PrivateDataSpecifier(), (uint32_t)
PrivateDataSpecifierID::UPC1);
++ }
++
++ /* test for
https://code.mythtv.org/trac/ticket/12091
++ * UPC Cablecom switched from standard DVB key/value set to
++ * custom descriptors
++ */
++ void PrivateUPCCablecomEpisodetitleDescriptor_test (void)
++ {
++ const unsigned char si_data[] = {
++ 0xa7, 0x13, 0x67, 0x65, 0x72, 0x05, 0x4b, 0x72, 0x61, 0x6e, 0x6b, 0x20,
0x76, 0x6f, 0x72, 0x20, /* ..ger.Krank vor */
++ 0x4c, 0x69, 0x65, 0x62, 0x65
/* Liebe */
++ };
++
++ PrivateUPCCablecomEpisodeTitleDescriptor descriptor(si_data);
++ QCOMPARE (descriptor.CanonicalLanguageString(), QString("ger"));
++ QCOMPARE (descriptor.TextLength(), (uint) 16);
++ QCOMPARE (descriptor.Text(), QString("Krank vor Liebe"));
++ }
+ };
+diff --git a/mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.pro
b/mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.pro
+index 2ed5ac6..b33b3fd 100644
+--- a/mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.pro
++++ b/mythtv/libs/libmythtv/test/test_mpegtables/test_mpegtables.pro
+@@ -14,6 +14,10 @@ TARGET = test_mpegtables
+ DEPENDPATH += . ../..
+ INCLUDEPATH += . ../.. ../../mpeg ../../../libmythui ../../../libmyth
../../../libmythbase
+
++LIBS += ../../dvbdescriptors.o
++LIBS += ../../iso6937tables.o
++LIBS += ../../freesat_huffman.o
++
+ LIBS += -L../../../libmythbase -lmythbase-$$LIBVERSION
+ LIBS += -L../../../libmythui -lmythui-$$LIBVERSION
+ LIBS += -L../../../libmythupnp -lmythupnp-$$LIBVERSION
+diff --git a/mythtv/libs/libmythui/mythuibuttonlist.cpp
b/mythtv/libs/libmythui/mythuibuttonlist.cpp
+index 95966a5..24669b5 100644
+--- a/mythtv/libs/libmythui/mythuibuttonlist.cpp
++++ b/mythtv/libs/libmythui/mythuibuttonlist.cpp
+@@ -3508,7 +3508,7 @@ void MythUIButtonListItem::SetToRealButton(MythUIStateType *button,
bool selecte
+
+ QString newText = text->GetTemplateText();
+
+- QRegExp regexp("%(([^\\|%]+)?\\||\\|(.))?(\\w+)(\\|(.+))?%");
++ QRegExp regexp("%(([^\\|%]+)?\\||\\|(.))?(\\S+)(\\|(.+))?%");
+ regexp.setMinimal(true);
+
+ if (!newText.isEmpty() && newText.contains(regexp))
+diff --git a/mythtv/libs/libmythui/mythuiimage.cpp
b/mythtv/libs/libmythui/mythuiimage.cpp
+index 4707f01..5674bf1 100644
+--- a/mythtv/libs/libmythui/mythuiimage.cpp
++++ b/mythtv/libs/libmythui/mythuiimage.cpp
+@@ -654,6 +654,8 @@ void MythUIImage::Init(void)
+ m_animatedImage = false;
+
+ m_runningThreads = 0;
+
-+ // Mitigate against SSDP Reflection DDOS attacks
-+ // Disallow device discovery from non-local addresses
-+ // Security Advisory (Akamai):
-+ //
https://www.prolexic.com/kcresources/prolexic-threat-advisories/prolexic-...
-+ //
https://www.prolexic.com/knowledge-center-ddos-threat-advisory-ssdp-refle...
-+ //
-+ // TODO: We may want to restrict this to the same subnet as the server
-+ // for added security
-+ if (((peerAddress.protocol() == QAbstractSocket::IPv4Protocol) &&
-+ (!peerAddress.isInSubnet(QHostAddress("172.16.0.0"), 12)
&&
-+ !peerAddress.isInSubnet(QHostAddress("192.168.0.0"), 16)
&&
-+ !peerAddress.isInSubnet(QHostAddress("10.0.0.0"), 8))) ||
-+ ((peerAddress.protocol() == QAbstractSocket::IPv6Protocol) &&
-+ !peerAddress.isInSubnet(pSocket->address(), 64))) // default subnet size
is assumed to be /64
-+ {
-+ LOG(VB_GENERAL, LOG_CRIT, QString("SSDP Request from WAN IP "
-+ "address (%1). Possible SSDP "
-+ "Reflection attempt. Ignoring as
"
-+ "security risk.")
-+ .arg(peerAddress.toString()));
-+ pSocket->readAll(); // Discard the data in the socket buffer
-+ return;
-+ }
-+
- QByteArray buffer;
- long nBytes = 0;
- int retries = 0;
-@@ -365,9 +392,6 @@ void SSDP::ProcessData( MSocketDevice *pSocket )
- if (buffer.isEmpty())
- continue;
++ m_showingRandomImage = false;
+ }
+
+ /**
+@@ -1103,7 +1105,7 @@ bool MythUIImage::Load(bool allowLoadInBackground, bool forceStat)
+ */
+ void MythUIImage::Pulse(void)
+ {
+- QWriteLocker updateLocker(&d->m_UpdateLock);
++ d->m_UpdateLock.lockForWrite();
-- QHostAddress peerAddress = pSocket->peerAddress();
-- quint16 peerPort = pSocket->peerPort ();
+ int delay = -1;
+
+@@ -1115,39 +1117,51 @@ void MythUIImage::Pulse(void)
+ if (delay > 0 &&
+ abs(m_LastDisplay.msecsTo(QTime::currentTime())) > delay)
+ {
+- m_ImagesLock.lock();
+-
+- if (m_animationCycle == kCycleStart)
++ if (m_showingRandomImage)
+ {
+- ++m_CurPos;
+-
+- if (m_CurPos >= (uint)m_Images.size())
+- m_CurPos = 0;
++ FindRandomImage();
++ d->m_UpdateLock.unlock();
++ Load();
++ d->m_UpdateLock.lockForWrite();
+ }
+- else if (m_animationCycle == kCycleReverse)
++ else
+ {
+- if ((m_CurPos + 1) >= (uint)m_Images.size())
++ m_ImagesLock.lock();
++
++ if (m_animationCycle == kCycleStart)
+ {
+- m_animationReverse = true;
++ ++m_CurPos;
++
++ if (m_CurPos >= (uint)m_Images.size())
++ m_CurPos = 0;
+ }
+- else if (m_CurPos == 0)
++ else if (m_animationCycle == kCycleReverse)
+ {
+- m_animationReverse = false;
++ if ((m_CurPos + 1) >= (uint)m_Images.size())
++ {
++ m_animationReverse = true;
++ }
++ else if (m_CurPos == 0)
++ {
++ m_animationReverse = false;
++ }
++
++ if (m_animationReverse)
++ --m_CurPos;
++ else
++ ++m_CurPos;
+ }
+
+- if (m_animationReverse)
+- --m_CurPos;
+- else
+- ++m_CurPos;
++ m_ImagesLock.unlock();
+ }
+
+- m_ImagesLock.unlock();
-
+ SetRedraw();
+ m_LastDisplay = QTime::currentTime();
+ }
+
+ MythUIType::Pulse();
++
++ d->m_UpdateLock.unlock();
+ }
+
+ /**
+@@ -1245,34 +1259,10 @@ bool MythUIImage::ParseElement(
+
+ if (m_imageProperties.filename.endsWith('/'))
+ {
+- QDir imageDir(m_imageProperties.filename);
++ m_showingRandomImage = true;
++ m_imageDirectory = m_imageProperties.filename;
+
+- if (!imageDir.exists())
+- {
+- QString themeDir = GetMythUI()->GetThemeDir() + '/';
+- imageDir = themeDir + m_imageProperties.filename;
+- }
+-
+- QStringList imageTypes;
+-
+- QList< QByteArray > exts = QImageReader::supportedImageFormats();
+- QList< QByteArray >::Iterator it = exts.begin();
+-
+- for (; it != exts.end(); ++it)
+- {
+- imageTypes.append(QString("*.").append(*it));
+- }
+-
+- imageDir.setNameFilters(imageTypes);
+-
+- QStringList imageList = imageDir.entryList();
+- QString randFile;
+-
+- if (imageList.size())
+- randFile = QString("%1%2").arg(m_imageProperties.filename)
+- .arg(imageList.takeAt(random() % imageList.size()));
+-
+- m_OrigFilename = m_imageProperties.filename = randFile;
++ FindRandomImage();
+ }
+ }
+ else if (element.tagName() == "filepattern")
+@@ -1432,6 +1422,9 @@ void MythUIImage::CopyFrom(MythUIType *base)
+ m_animationCycle = im->m_animationCycle;
+ m_animatedImage = im->m_animatedImage;
+
++ m_showingRandomImage = im->m_showingRandomImage;
++ m_imageDirectory = im->m_imageDirectory;
++
+ MythUIType::CopyFrom(base);
+
+ // We need to update forceSize in case the parent area has changed
+@@ -1621,6 +1614,43 @@ void MythUIImage::customEvent(QEvent *event)
+ // No Images were loaded, so trigger Reset to default
+ Reset();
+ }
++}
++
++void MythUIImage::FindRandomImage(void)
++{
++ QDir imageDir(m_imageDirectory);
++
++ if (!imageDir.exists())
++ {
++ QString themeDir = GetMythUI()->GetThemeDir() + '/';
++ imageDir = themeDir + m_imageDirectory;
++ }
++
++ QStringList imageTypes;
++
++ QList< QByteArray > exts = QImageReader::supportedImageFormats();
++ QList< QByteArray >::Iterator it = exts.begin();
++
++ for (; it != exts.end(); ++it)
++ {
++ imageTypes.append(QString("*.").append(*it));
++ }
++
++ imageDir.setNameFilters(imageTypes);
+
++ QStringList imageList = imageDir.entryList();
++ QString randFile;
++
++ if (imageList.size())
++ {
++ // try to find a different image
++ do
++ {
++ randFile = QString("%1%2").arg(m_imageDirectory)
++ .arg(imageList.takeAt(random() %
imageList.size()));
++
++ } while (imageList.size() > 1 && randFile == m_OrigFilename);
++ }
+
++ m_OrigFilename = m_imageProperties.filename = randFile;
+ }
+diff --git a/mythtv/libs/libmythui/mythuiimage.h b/mythtv/libs/libmythui/mythuiimage.h
+index 90901d3..a90ee3f 100644
+--- a/mythtv/libs/libmythui/mythuiimage.h
++++ b/mythtv/libs/libmythui/mythuiimage.h
+@@ -142,6 +142,8 @@ class MUI_PUBLIC MythUIImage : public MythUIType
+ void SetCropRect(int x, int y, int width, int height);
+ void SetCropRect(const MythRect &rect);
+
++ void FindRandomImage(void);
++
+ QString m_Filename;
+ QString m_OrigFilename;
+
+@@ -162,6 +164,9 @@ class MUI_PUBLIC MythUIImage : public MythUIType
+
+ int m_runningThreads;
+
++ bool m_showingRandomImage;
++ QString m_imageDirectory;
++
+ MythUIImagePrivate *d;
+
+ enum AnimationCycle {kCycleStart, kCycleReverse};
+diff --git a/mythtv/libs/libmythui/mythuitext.cpp b/mythtv/libs/libmythui/mythuitext.cpp
+index 0f7a6f6..60fa71f 100644
+--- a/mythtv/libs/libmythui/mythuitext.cpp
++++ b/mythtv/libs/libmythui/mythuitext.cpp
+@@ -196,7 +196,7 @@ void MythUIText::SetTextFromMap(const InfoMap &map)
+ if (newText.isEmpty())
+ newText = GetDefaultText();
+
+- QRegExp regexp("%(([^\\|%]+)?\\||\\|(.))?(\\w+)(\\|(.+))?%");
++ QRegExp regexp("%(([^\\|%]+)?\\||\\|(.))?(\\S+)(\\|(.+))?%");
+ regexp.setMinimal(true);
+
+ if (!newText.isEmpty() && newText.contains(regexp))
+diff --git a/mythtv/libs/libmythupnp/ssdp.cpp b/mythtv/libs/libmythupnp/ssdp.cpp
+index 9e503eb..b1a4ba0 100644
+--- a/mythtv/libs/libmythupnp/ssdp.cpp
++++ b/mythtv/libs/libmythupnp/ssdp.cpp
+@@ -367,7 +367,7 @@ void SSDP::ProcessData( MSocketDevice *pSocket )
+
+ QHostAddress peerAddress = pSocket->peerAddress();
+ quint16 peerPort = pSocket->peerPort ();
+-
++
// ------------------------------------------------------------------
QString str = QString(buffer.constData());
QStringList lines = str.split("\r\n",
QString::SkipEmptyParts);
@@ -236,6 +820,173 @@
+ <!-- MythArchive -->
+ <setting name="MythArchiveVideoFormat">PAL</setting>
+</mythlocale>
+diff --git a/mythtv/programs/mythfilldatabase/xmltvparser.cpp
b/mythtv/programs/mythfilldatabase/xmltvparser.cpp
+index d05649d..b843acb 100644
+--- a/mythtv/programs/mythfilldatabase/xmltvparser.cpp
++++ b/mythtv/programs/mythfilldatabase/xmltvparser.cpp
+@@ -359,7 +359,8 @@ ProgInfo *XMLTVParser::parseProgram(QDomElement &element)
+ {
+ QDomNodeList values = info.elementsByTagName("value");
+ QDomElement item;
+- QString stars, num, den;
++ QString stars;
++ float num, den;
+ float rating = 0.0;
+
+ // Use the first rating to appear in the xml, this should be
+@@ -371,14 +372,22 @@ ProgInfo *XMLTVParser::parseProgram(QDomElement &element)
+ // In the case of uk_rt it's not unknown for a recommendation
+ // to be given to programmes which are 'so bad, you have to
+ // watch!'
++ //
++ // XMLTV uses zero based ratings and signals no rating by absence.
++ // A rating from 1 to 5 is encoded as 0/4 to 4/4.
++ // MythTV uses zero to signal no rating!
++ // The same rating is encoded as 0.2 to 1.0 with steps of 0.2, it
++ // is not encoded as 0.0 to 1.0 with steps of 0.25 because
++ // 0 signals no rating!
++ // See
http://xmltv.cvs.sourceforge.net/viewvc/xmltv/xmltv/xmltv.dtd?revision=1....
+ item = values.item(0).toElement();
+ if (!item.isNull())
+ {
+ stars = getFirstText(item);
+- num = stars.section('/', 0, 0);
+- den = stars.section('/', 1, 1);
+- if (0.0 < den.toFloat())
+- rating = num.toFloat()/den.toFloat();
++ num = stars.section('/', 0, 0).toFloat() + 1;
++ den = stars.section('/', 1, 1).toFloat() + 1;
++ if (0.0 < den)
++ rating = num/den;
+ }
+
+ pginfo->stars.setNum(rating);
+diff --git a/mythtv/programs/mythfrontend/globalsettings.cpp
b/mythtv/programs/mythfrontend/globalsettings.cpp
+index a487a49..ad99e0b 100644
+--- a/mythtv/programs/mythfrontend/globalsettings.cpp
++++ b/mythtv/programs/mythfrontend/globalsettings.cpp
+@@ -1604,6 +1604,18 @@ static HostCheckBox *EnableMHEG()
+ return gc;
+ }
+
++static HostCheckBox *EnableMHEGic()
++{
++ HostCheckBox *gc = new HostCheckBox("EnableMHEGic");
++ gc->setLabel(QObject::tr("Enable network access for interactive TV"));
++ gc->setValue(false);
++ gc->setHelpText(QObject::tr(
++ "If enabled, interactive TV applications (MHEG) will
"
++ "be able to access interactive content over the "
++ "internet. This is used for BBC iPlayer."));
++ return gc;
++}
++
+ static HostCheckBox *PersistentBrowseMode()
+ {
+ HostCheckBox *gc = new HostCheckBox("PersistentBrowseMode");
+@@ -4051,6 +4063,7 @@ OSDSettings::OSDSettings()
+ osd->setLabel(tr("On-screen Display"));
+
+ osd->addChild(EnableMHEG());
++ osd->addChild(EnableMHEGic());
+ osd->addChild(PersistentBrowseMode());
+ osd->addChild(BrowseAllTuners());
+ osd->addChild(DefaultCCMode());
+diff --git a/mythtv/programs/mythfrontend/programrecpriority.cpp
b/mythtv/programs/mythfrontend/programrecpriority.cpp
+index 22e561a..ea6914b 100644
+--- a/mythtv/programs/mythfrontend/programrecpriority.cpp
++++ b/mythtv/programs/mythfrontend/programrecpriority.cpp
+@@ -1483,25 +1483,20 @@ void ProgramRecPriority::UpdateList()
+ item->SetText(tempTime, "lastrecordedtime", state);
+
+ QString channame = progInfo->channame;
+- if ((progInfo->recType == kAllRecord) ||
+- (progInfo->recType == kOneRecord) ||
+- (progInfo->recType == kDailyRecord) ||
+- (progInfo->recType == kWeeklyRecord))
+- channame = tr("Any");
+- item->SetText(channame, "channel", state);
+ QString channum = progInfo->chanstr;
+- if ((progInfo->recType == kAllRecord) ||
+- (progInfo->recType == kOneRecord) ||
+- (progInfo->recType == kDailyRecord) ||
+- (progInfo->recType == kWeeklyRecord))
+- channum = tr("Any");
+- item->SetText(channum, "channum", state);
+ QString callsign = progInfo->chansign;
+- if ((progInfo->recType == kAllRecord) ||
+- (progInfo->recType == kOneRecord) ||
+- (progInfo->recType == kDailyRecord) ||
+- (progInfo->recType == kWeeklyRecord))
++ if (progInfo->recType != kSingleRecord &&
++ progInfo->recType != kOverrideRecord &&
++ progInfo->recType != kDontRecord &&
++ !(progInfo->GetRecordingRule()->m_filter & 1024) &&
++ progInfo->GetRecordingRule()->m_searchType != kManualSearch)
++ {
++ channame = tr("Any");
++ channum = tr("Any");
+ callsign = tr("Any");
++ }
++ item->SetText(channame, "channel", state);
++ item->SetText(channum, "channum", state);
+ item->SetText(callsign, "callsign", state);
+
+ QString profile = progInfo->profile;
+@@ -1600,37 +1595,27 @@ void ProgramRecPriority::updateInfo(MythUIButtonListItem *item)
+ m_lastRecordedTimeText->SetText(tempTime);
+ }
+
+- if (m_channameText)
++ if (m_channameText || m_channumText || m_callsignText)
+ {
+ QString channame = pgRecInfo->channame;
+- if ((pgRecInfo->rectype == kAllRecord) ||
+- (pgRecInfo->rectype == kOneRecord) ||
+- (pgRecInfo->rectype == kDailyRecord) ||
+- (pgRecInfo->rectype == kWeeklyRecord))
+- channame = tr("Any");
+- m_channameText->SetText(channame);
+- }
+-
+- if (m_channumText)
+- {
+ QString channum = pgRecInfo->chanstr;
+- if ((pgRecInfo->rectype == kAllRecord) ||
+- (pgRecInfo->rectype == kOneRecord) ||
+- (pgRecInfo->rectype == kDailyRecord) ||
+- (pgRecInfo->rectype == kWeeklyRecord))
+- channum = tr("Any");
+- m_channumText->SetText(channum);
+- }
+-
+- if (m_callsignText)
+- {
+ QString callsign = pgRecInfo->chansign;
+- if ((pgRecInfo->rectype == kAllRecord) ||
+- (pgRecInfo->rectype == kOneRecord) ||
+- (pgRecInfo->rectype == kDailyRecord) ||
+- (pgRecInfo->rectype == kWeeklyRecord))
++ if (pgRecInfo->recType != kSingleRecord &&
++ pgRecInfo->recType != kOverrideRecord &&
++ pgRecInfo->recType != kDontRecord &&
++ !(pgRecInfo->GetRecordingRule()->m_filter & 1024) &&
++ pgRecInfo->GetRecordingRule()->m_searchType != kManualSearch)
++ {
++ channame = tr("Any");
++ channum = tr("Any");
+ callsign = tr("Any");
+- m_callsignText->SetText(callsign);
++ }
++ if (m_channameText)
++ m_channameText->SetText(channame);
++ if (m_channumText)
++ m_channumText->SetText(channum);
++ if (m_callsignText)
++ m_callsignText->SetText(callsign);
+ }
+
+ if (m_recProfileText)
diff --git a/mythtv/themes/default/keyboard/el.xml
b/mythtv/themes/default/keyboard/el.xml
new file mode 100644
index 0000000..da192cf
Index: mythtv.spec
===================================================================
RCS file: /cvs/free/rpms/mythtv/devel/mythtv.spec,v
retrieving revision 1.148
retrieving revision 1.149
diff -u -r1.148 -r1.149
--- mythtv.spec 4 Nov 2014 21:10:01 -0000 1.148
+++ mythtv.spec 4 Jan 2015 17:57:39 -0000 1.149
@@ -60,7 +60,7 @@
%define desktop_vendor RPMFusion
# MythTV Version string -- preferably the output from git --describe
-%define vers_string v0.27.4-6-ge0b0027
+%define vers_string v0.27.4-27-g40506c2
%define branch fixes/0.27
# Git revision and branch ID
@@ -76,9 +76,9 @@
# Version/Release info
Version: 0.27.4
%if "%{branch}" == "master"
-Release: 0.2.git.%{_gitrev}%{?dist}
+Release: 0.1.git.%{_gitrev}%{?dist}
%else
-Release: 2%{?dist}
+Release: 3%{?dist}
%endif
# The primary license is GPLv2+, but bits are borrowed from a number of
@@ -1423,12 +1423,14 @@
%changelog
+* Sun Jan 4 2015 Richard Shaw <hobbes1069(a)gmail.com> - 0.27.4-3
+- Update to latest bugfix release.
+- Change systemd dependency from network.target to network-online.target, fixes
+ BZ#3482.
+
* Tue Nov 04 2014 Nicolas Chauvet <kwizart(a)gmail.com> - 0.27.4-2
- Rebuilt for vaapi 0.36
-* Mon Nov 3 2014 Richard Shaw <hobbes1069(a)gmail.com> - 0.27.4-2
-- Update to latest bugfix release, 0.27.4.
-
* Mon Oct 13 2014 Richard Shaw <hobbes1069(a)gmail.com> - 0.27.3-2.1
- Update to latest fixes.
- Add patch for schedules direct service change.