commit 2ca749e22a3069ae23ce50cd6855c871240a40a7
Author: Richard Shaw <hobbes1069(a)gmail.com>
Date: Sun Jan 22 10:19:15 2017 -0600
Update to latest fixes/0.28 from git.
Remove SysV conditionals as EL 7 has systemd and EL 6 is not supported.
Update default permissions for /etc/mythtv and move user/group creation
to the common package, fixes RFBZ#4414.
Change some dependencies from Requires to Recommends, fixes RFBZ#4415.
ChangeLog | 99 +++++++
mythtv-0.28-fixes.patch | 679 +++++++++++++++++++++++++++++++++++++++++++++++-
mythtv.spec | 105 ++------
3 files changed, 788 insertions(+), 95 deletions(-)
---
diff --git a/ChangeLog b/ChangeLog
index dba2569..e82f7f2 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,102 @@
+commit 3930f5d13a7e0a4b6328a1b3032374752dfacbe4
+Author: Paul Harrison <pharrison(a)mythtv.org>
+Date: Thu Dec 29 12:38:49 2016 +0000
+
+ MythMusic: increase the probe buffer size to 128K
+
+ There is a increasing trend to put the cover art images into an MJPEG video
+ stream which was sometimes causing the probing of some files to fail because
+ the buffer didn't contain enough data to determine the available streams.
+
+ Fixes #12906.
+
+ (cherry picked from commit e8d36304610f79ab6ec6042d0a251db83586f08f)
+
+commit adf730061311ef0e6a4763cfe3d204fb89e79351
+Author: Ian Campbell <ijc(a)hellion.org.uk>
+Date: Thu Dec 29 11:41:44 2016 +0000
+
+ musicscanner: Compare music_directory.path as binary
+
+ SQL string comparisons are case insensitive by default (who knew!), meaning
+ that a music rescan will not pickup a renamed directory if it differs only in
+ the case.
+
+ Use BINARY rather than arranging for a case-sensitive comparison because the
+ latter still considers 'a' and 'รก' equal but for paths we need
literal binary
+ sameness.
+
+ Apply the same logic to music_songs.filename, although I've not tripped over a
+ related issue there.
+
+ Fixes #12949.
+
+ Signed-off-by: Paul Harrison <pharrison(a)mythtv.org>
+ (cherry picked from commit 258ba1fc3e6ab39c93450f276406671599f63a5d)
+
+commit 9befb426e7d92b107453736e6f000610b3381e5a
+Author: Robert Watson <robertabcdefgwatson(a)gmail.com>
+Date: Tue Dec 20 11:33:10 2016 -0700
+
+ Fix displaying of input connection display name on 'C' or 'Y'.
Video
+ output needs to be active before the OSD message can be set.
+
+ Signed-off-by: John Poet <jpoet(a)mythtv.org>
+ (cherry picked from commit f2eac57151f7e56b6a8087439f66ef10353c78f2)
+
+commit 2c5df31214a050d7247a93b39defd70d84a3a8d7
+Author: John Poet <jpoet(a)mythtv.org>
+Date: Sun Sep 4 13:02:36 2016 -0600
+
+ Stop mythfilldatabase from creating duplicate channels just because they are
+ marked as invisible.
+
+ (cherry picked from commit 83fec2bb4c0447c81f74621e7510d56e4231f599)
+
+commit 2d6466f1aa08c29531f27edd61963d5180186a96
+Author: Bradley Baetz <bbaetz(a)gmail.com>
+Date: Mon Dec 5 10:40:40 2016 +0000
+
+ Fixes #12754 - Fix deadlock in libcec initialization.
+
+ Configuring the TV at startup is done from the main thread. However, when the
+ TV state changes as a result of this, libCEC sends a message to the callback
+ handler on its own thread, which tries to get the UI lock to reset the
+ screensaver state. This results in a deadlock because the main thread already
+ has the UI lock during startup time.
+
+ Instead, run the initial setup activity at the start of the CEC handler thread.
+
+ This was missed in the patch applied for #11986.
+
+ Signed-off-by: Stuart Auchterlonie <stuarta(a)mythtv.org>
+ (cherry picked from commit 22ff48d7bafc622246141094b727dab47662bc3f)
+
+commit 128e29782fa3f397bb7b54d260be4b85606bcdeb
+Author: Guenter Kukkukk <linux(a)kukkukk.com>
+Date: Thu Dec 1 11:11:50 2016 +0000
+
+ Fixes #12945 - Add HEVC to the mpegts parser.
+
+ Enables use of DVB-T2 broadcasts in Germany.
+
+ Signed-off-by: Stuart Auchterlonie <stuarta(a)mythtv.org>
+ (cherry picked from commit 07c59e7d962c9e046c0960ae42d2a1d38d5508b3)
+
+commit 0890206d9d303db7f10829b7d9bf574e091e70fc
+Author: BlackEagle <ike.devolder(a)gmail.com>
+Date: Sat Nov 26 23:23:13 2016 +0100
+
+ Fixes #12939 - add compatibility for libcec4
+
+ added updates to the libcec4 interface, so mythtv can be compiled
+ against it. Some parts might need some cleaning.
+
+ Signed-off-by: BlackEagle <ike.devolder(a)gmail.com>
+ (cherry picked from commit f6144655200bf2927da69186c2f22040446e7bb2)
+ Signed-off-by: Stuart Auchterlonie <stuarta(a)mythtv.org>
+ (cherry picked from commit 65f16a504687f3ee7a42abc292f1d3e05aee71d7)
+
commit e9d0543d64fc21072fb1a0199ac2e24334169461
Author: Karl Dietz <dekarl(a)mythtv.org>
Date: Wed Oct 19 12:50:26 2016 +0200
diff --git a/mythtv-0.28-fixes.patch b/mythtv-0.28-fixes.patch
index 32f1662..e95238b 100644
--- a/mythtv-0.28-fixes.patch
+++ b/mythtv-0.28-fixes.patch
@@ -1,12 +1,14 @@
README.rst | 4 +-
mythplugins/mythgallery/mythgallery/main.cpp | 21 +-
mythplugins/mythmusic/mythmusic/main.cpp | 14 +-
+ .../mythmusic/mythmusic/remoteavformatcontext.h | 2 +-
mythplugins/mythnews/mythnews/mythnews.cpp | 22 +-
.../mythzoneminder/mythzmserver/zmserver.cpp | 20 +-
mythtv/README | 12 +-
mythtv/bindings/python/MythTV/dataheap.py | 1 +
.../python/MythTV/wikiscripts/wikiscripts.py | 4 +-
mythtv/configure | 34 +-
+ mythtv/external/FFmpeg/libavformat/mpegts-mythtv.c | 1 +
mythtv/html/css/Status.css | 13 +
mythtv/html/menu.qsp | 10 +-
mythtv/i18n/mythfrontend_cs.qm | Bin 599995 -> 726083 bytes
@@ -24,6 +26,7 @@
mythtv/libs/libmythbase/mythstorage.cpp | 4 +-
mythtv/libs/libmythbase/mythversion.h | 2 +-
mythtv/libs/libmythmetadata/imagemanager.cpp | 2 +-
+ mythtv/libs/libmythmetadata/musicfilescanner.cpp | 4 +-
.../services/captureServices.h | 1 -
.../services/channelServices.h | 1 -
.../services/contentServices.h | 9 +-
@@ -64,7 +67,7 @@
mythtv/libs/libmythtv/ringbuffer.cpp | 8 +-
.../test/test_eitfixups/test_eitfixups.cpp | 28 +
.../test/test_iptvrecorder/test_iptvrecorder.h | 5 +
- mythtv/libs/libmythtv/tv_play.cpp | 4 +-
+ mythtv/libs/libmythtv/tv_play.cpp | 6 +-
mythtv/libs/libmythtv/tv_rec.cpp | 20 +-
mythtv/libs/libmythtv/videodisplayprofile.cpp | 33 +-
mythtv/libs/libmythtv/videodisplayprofile.h | 2 +-
@@ -78,7 +81,7 @@
mythtv/libs/libmythtv/videosource.cpp | 35 +
mythtv/libs/libmythtv/videosource.h | 5 +
.../visualisations/videovisualcircles.cpp | 2 +-
- mythtv/libs/libmythui/cecadapter.cpp | 41 +-
+ mythtv/libs/libmythui/cecadapter.cpp | 498 +-
mythtv/libs/libmythui/libmythui.pro | 4 +-
mythtv/libs/libmythui/mythdialogbox.cpp | 10 +
mythtv/libs/libmythui/mythmainwindow.cpp | 7 +
@@ -112,6 +115,7 @@
.../programs/mythbackend/services/serviceUtil.cpp | 22 +
mythtv/programs/mythbackend/services/serviceUtil.h | 3 +
mythtv/programs/mythbackend/services/video.cpp | 3 +-
+ mythtv/programs/mythfilldatabase/channeldata.cpp | 8 +-
mythtv/programs/mythfilldatabase/xmltvparser.cpp | 3 +-
mythtv/programs/mythfrontend/galleryconfig.cpp | 13 +-
mythtv/programs/mythfrontend/galleryconfig.h | 10 +-
@@ -131,7 +135,7 @@
mythtv/programs/mythtv-setup/importicons.cpp | 6 +-
mythtv/programs/mythtv-setup/mythtv-setup.pro | 12 +
mythtv/programs/mythwelcome/mythwelcome.pro | 11 +
- 133 files changed, 32178 insertions(+), 19869 deletions(-)
+ 137 files changed, 32635 insertions(+), 19886 deletions(-)
diff --git a/README.rst b/README.rst
index 8b8014d..ec3fa1f 100644
@@ -229,6 +233,19 @@ index 0460f0c..ec54f5d 100644
}
int mythplugin_init(const char *libversion)
+diff --git a/mythplugins/mythmusic/mythmusic/remoteavformatcontext.h
b/mythplugins/mythmusic/mythmusic/remoteavformatcontext.h
+index 106a8e8..ecb8a9d 100644
+--- a/mythplugins/mythmusic/mythmusic/remoteavformatcontext.h
++++ b/mythplugins/mythmusic/mythmusic/remoteavformatcontext.h
+@@ -53,7 +53,7 @@ class RemoteAVFormatContext
+ if (!m_rf->isOpen())
+ return false;
+
+- const int BUFFER_SIZE = 0x10000;
++ const int BUFFER_SIZE = 0x20000;
+ if (!m_buffer)
+ {
+ m_buffer = (unsigned char*)av_malloc(BUFFER_SIZE +
FF_INPUT_BUFFER_PADDING_SIZE);
diff --git a/mythplugins/mythnews/mythnews/mythnews.cpp
b/mythplugins/mythnews/mythnews/mythnews.cpp
index 15ec5e3..7ec45bc 100644
--- a/mythplugins/mythnews/mythnews/mythnews.cpp
@@ -492,6 +509,18 @@ index 17d42d6..af0d6a6 100755
if test x"$target_os" = x"darwin" ; then
echo "VDA support ${vda-no}"
fi
+diff --git a/mythtv/external/FFmpeg/libavformat/mpegts-mythtv.c
b/mythtv/external/FFmpeg/libavformat/mpegts-mythtv.c
+index 2bbf89a..b62a923 100644
+--- a/mythtv/external/FFmpeg/libavformat/mpegts-mythtv.c
++++ b/mythtv/external/FFmpeg/libavformat/mpegts-mythtv.c
+@@ -717,6 +717,7 @@ static const StreamType ISO_types[] = {
+ { 0x10, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_MPEG4 },
+ { 0x11, AVMEDIA_TYPE_AUDIO, AV_CODEC_ID_AAC_LATM }, /* LATM syntax */
+ { 0x1b, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_H264 },
++ { 0x24, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_HEVC },
+ { 0xd1, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_DIRAC },
+ { 0xea, AVMEDIA_TYPE_VIDEO, AV_CODEC_ID_VC1 },
+ { 0 },
diff --git a/mythtv/html/css/Status.css b/mythtv/html/css/Status.css
index 43ede02..a50fca0 100644
--- a/mythtv/html/css/Status.css
@@ -62557,6 +62586,28 @@ index a9c802f..e0e72d9 100644
}
+diff --git a/mythtv/libs/libmythmetadata/musicfilescanner.cpp
b/mythtv/libs/libmythmetadata/musicfilescanner.cpp
+index 4b333d5..c47d999 100644
+--- a/mythtv/libs/libmythmetadata/musicfilescanner.cpp
++++ b/mythtv/libs/libmythmetadata/musicfilescanner.cpp
+@@ -195,7 +195,7 @@ int MusicFileScanner::GetDirectoryId(const QString &directory,
const int &parent
+
+ // Load the directory id or insert it and get the id
+ query.prepare("SELECT directory_id FROM music_directories "
+- "WHERE path = :DIRECTORY ;");
++ "WHERE path = BINARY :DIRECTORY ;");
+ query.bindValue(":DIRECTORY", directory);
+
+ if (!query.exec())
+@@ -785,7 +785,7 @@ void MusicFileScanner::ScanMusic(MusicLoadedMap &music_files)
+ query.prepare("SELECT CONCAT_WS('/', path, filename), date_modified
"
+ "FROM music_songs LEFT JOIN music_directories ON "
+ "music_songs.directory_id=music_directories.directory_id "
+- "WHERE filename NOT LIKE ('%://%') "
++ "WHERE filename NOT LIKE BINARY ('%://%') "
+ "AND hostname = :HOSTNAME");
+
+ query.bindValue(":HOSTNAME", gCoreContext->GetHostName());
diff --git a/mythtv/libs/libmythservicecontracts/services/captureServices.h
b/mythtv/libs/libmythservicecontracts/services/captureServices.h
index e68ed2e..6779278 100644
--- a/mythtv/libs/libmythservicecontracts/services/captureServices.h
@@ -64241,9 +64292,19 @@ index c2bd423..c3d8709 100644
diff --git a/mythtv/libs/libmythtv/tv_play.cpp b/mythtv/libs/libmythtv/tv_play.cpp
-index 9b9511b..f397506 100644
+index 9b9511b..d6367a6 100644
--- a/mythtv/libs/libmythtv/tv_play.cpp
+++ b/mythtv/libs/libmythtv/tv_play.cpp
+@@ -7397,8 +7397,8 @@ void TV::SwitchInputs(PlayerContext *ctx,
+ delete testrec;
+ }
+
+- UpdateOSDInput(ctx);
+ UnpauseLiveTV(ctx);
++ UpdateOSDInput(ctx);
+
+ ITVRestart(ctx, true);
+ }
@@ -7870,8 +7870,7 @@ void TV::ChangeChannel(PlayerContext *ctx, uint chanid, const
QString &chan)
if (ctx->prevChan.empty())
ctx->PushPreviousChannel();
@@ -64999,10 +65060,69 @@ index 1140372..e9cbf8f 100644
{
pen.setWidth((int)mag);
diff --git a/mythtv/libs/libmythui/cecadapter.cpp b/mythtv/libs/libmythui/cecadapter.cpp
-index 00a8c73..a761e32 100644
+index 00a8c73..ba63c49 100644
--- a/mythtv/libs/libmythui/cecadapter.cpp
+++ b/mythtv/libs/libmythui/cecadapter.cpp
-@@ -126,6 +126,9 @@ class CECAdapterPriv
+@@ -33,17 +33,31 @@ QWaitCondition* CECAdapter::gActionsReady = new QWaitCondition();
+ // libcec1's callback parameters are pass-by-ref
+ #define CEC_CALLBACK_PARAM_TYPE &
+ #else
+-// libcec2's callback parameters are pass-by-value
++#if CEC_LIB_VERSION_MAJOR <= 3
++// libcec2 and 3 callback parameters are pass-by-value
+ #define CEC_CALLBACK_PARAM_TYPE
+ #endif
++#endif
+
+ // The libCEC callback functions
++#if CEC_LIB_VERSION_MAJOR <= 3
+ static int CECLogMessageCallback(void *adapter, const cec_log_message
CEC_CALLBACK_PARAM_TYPE message);
+ static int CECKeyPressCallback(void *adapter, const cec_keypress CEC_CALLBACK_PARAM_TYPE
keypress);
+ static int CECCommandCallback(void *adapter, const cec_command CEC_CALLBACK_PARAM_TYPE
command);
++#endif
++#if CEC_LIB_VERSION_MAJOR >= 4
++static void CECLogMessageCallback(void *adapter, const cec_log_message* message);
++static void CECKeyPressCallback(void *adapter, const cec_keypress* keypress);
++static void CECCommandCallback(void *adapter, const cec_command* command);
++#endif
+
+ #if CEC_LIB_VERSION_MAJOR >= 2
++#if CEC_LIB_VERSION_MAJOR <= 3
+ static int CECAlertCallback(void *adapter, const libcec_alert alert, const
libcec_parameter CEC_CALLBACK_PARAM_TYPE data);
++#endif
++#if CEC_LIB_VERSION_MAJOR >= 4
++static void CECAlertCallback(void *adapter, const libcec_alert alert, const
libcec_parameter data);
++#endif
+ static void CECSourceActivatedCallback(void *adapter, const cec_logical_address address,
const uint8_t activated);
+ #endif
+
+@@ -107,13 +121,24 @@ class CECAdapterPriv
+ }
+
+ // Set up the callbacks
++#if CEC_LIB_VERSION_MAJOR <= 3
+ callbacks.CBCecLogMessage = &CECLogMessageCallback;
+ callbacks.CBCecKeyPress = &CECKeyPressCallback;
+ callbacks.CBCecCommand = &CECCommandCallback;
+-#if CEC_LIB_VERSION_MAJOR >= 2
++#endif
++#if CEC_LIB_VERSION_MAJOR >= 4
++ callbacks.logMessage = &CECLogMessageCallback;
++ callbacks.keyPress = &CECKeyPressCallback;
++ callbacks.commandReceived = &CECCommandCallback;
++#endif
++#if CEC_LIB_VERSION_MAJOR >= 2 && CEC_LIB_VERSION_MAJOR <= 3
+ callbacks.CBCecAlert = &CECAlertCallback;
+ callbacks.CBCecSourceActivated = &CECSourceActivatedCallback;
+ #endif
++#if CEC_LIB_VERSION_MAJOR >= 4
++ callbacks.alert = &CECAlertCallback;
++ callbacks.sourceActivated = &CECSourceActivatedCallback;
++#endif
+ configuration.callbackParam = this;
+ configuration.callbacks = &callbacks;
+
+@@ -126,9 +151,17 @@ class CECAdapterPriv
return false;
}
@@ -65010,9 +65130,97 @@ index 00a8c73..a761e32 100644
+ adapter->InitVideoStandalone();
+
// find adapters
++#if CEC_LIB_VERSION_MAJOR >= 4
++ cec_adapter_descriptor *devices = new cec_adapter_descriptor[MAX_CEC_DEVICES];
++ uint8_t num_devices = adapter->DetectAdapters(devices, MAX_CEC_DEVICES, NULL,
true);
++#else
cec_adapter *devices = new cec_adapter[MAX_CEC_DEVICES];
uint8_t num_devices = adapter->FindAdapters(devices, MAX_CEC_DEVICES, NULL);
-@@ -231,7 +234,16 @@ class CECAdapterPriv
++#endif
+ if (num_devices < 1)
+ {
+ LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to find any CEC
devices.");
+@@ -143,22 +176,37 @@ class CECAdapterPriv
+ .arg(num_devices));
+ for (uint8_t i = 0; i < num_devices; i++)
+ {
++#if CEC_LIB_VERSION_MAJOR >= 4
++ QString comm = QString::fromLatin1(devices[i].strComName);
++ QString path = QString::fromLatin1(devices[i].strComPath);
++#else
+ QString comm = QString::fromLatin1(devices[i].comm);
++ QString path = QString::fromLatin1(devices[i].path);
++#endif
+ bool match = find ? (comm == defaultDevice) : (i == 0);
+ devicenum = match ? i : devicenum;
+ LOG(VB_GENERAL, LOG_INFO, LOC +
+ QString("Device %1: path '%2' com port '%3'
%4").arg(i + 1)
+- .arg(QString::fromLatin1(devices[i].path)).arg(comm)
++ .arg(path).arg(comm)
+ .arg(match ? "SELECTED" : ""));
+ }
+
+ // open adapter
+- QString path = QString::fromLatin1(devices[devicenum].path);
++#if CEC_LIB_VERSION_MAJOR >= 4
++ QString comm = QString::fromLatin1(devices[devicenum].strComName);
++ QString path = QString::fromLatin1(devices[devicenum].strComPath);
++#else
+ QString comm = QString::fromLatin1(devices[devicenum].comm);
++ QString path = QString::fromLatin1(devices[devicenum].path);
++#endif
+ LOG(VB_GENERAL, LOG_INFO, LOC + QString("Trying to open device %1
(%2).")
+ .arg(path).arg(comm));
+
++#if CEC_LIB_VERSION_MAJOR >= 4
++ if (!adapter->Open(devices[devicenum].strComName))
++#else
+ if (!adapter->Open(devices[devicenum].comm))
++#endif
+ {
+ LOG(VB_GENERAL, LOG_ERR, LOC + "Failed to open device.");
+ return false;
+@@ -166,16 +214,14 @@ class CECAdapterPriv
+
+ LOG(VB_GENERAL, LOG_INFO, LOC + "Opened CEC device.");
+
+- // all good to go
+- valid = true;
+-
+ // turn on tv (if configured)
+ powerOnTV = powerOnTVOnStart;
+
+ // switch input (if configured)
+ switchInput = true;
+
+- HandleActions();
++ // all good to go
++ valid = true;
+
+ return true;
+ }
+@@ -213,6 +259,20 @@ class CECAdapterPriv
+ return 1;
+ }
+
++ void LogMessage(const cec_log_message* message)
++ {
++ QString msg(message->message);
++ int lvl = LOG_UNKNOWN;
++ switch (message->level)
++ {
++ case CEC_LOG_ERROR: lvl = LOG_ERR; break;
++ case CEC_LOG_WARNING: lvl = LOG_WARNING; break;
++ case CEC_LOG_NOTICE: lvl = LOG_INFO; break;
++ case CEC_LOG_DEBUG: lvl = LOG_DEBUG; break;
++ }
++ LOG(VB_GENERAL, lvl, LOC + QString("%1").arg(msg));
++ }
++
+ // NOTE - libcec2 changes the callbacks
+ // to be pass-by-value.
+ // For simplicity, this function remains as pass-by-ref
+@@ -231,7 +291,16 @@ class CECAdapterPriv
switch (command.opcode)
{
@@ -65030,7 +65238,37 @@ index 00a8c73..a761e32 100644
default:
break;
}
-@@ -252,6 +264,7 @@ class CECAdapterPriv
+@@ -241,6 +310,29 @@ class CECAdapterPriv
+ return 1;
+ }
+
++ void HandleCommand(const cec_command* command)
++ {
++ if (!adapter || !valid)
++ return;
++
++ LOG(VB_GENERAL, LOG_DEBUG, LOC +
++ QString("Command %1 from '%2' (%3) - destination '%4'
(%5)")
++ .arg(command->opcode)
++ .arg(adapter->ToString(command->initiator))
++ .arg(command->initiator)
++ .arg(adapter->ToString(command->destination))
++ .arg(command->destination));
++
++ switch (command->opcode)
++ {
++ // TODO
++ default:
++ break;
++ }
++ gCoreContext->SendSystemEvent(QString("CEC_COMMAND_RECEIVED COMMAND
%1")
++ .arg(command->opcode));
++ }
++
+ int HandleKeyPress(const cec_keypress &key)
+ {
+ if (!adapter || !valid)
+@@ -252,6 +344,7 @@ class CECAdapterPriv
QString code;
int action = 0;
@@ -65038,7 +65276,7 @@ index 00a8c73..a761e32 100644
switch (key.keycode)
{
case CEC_USER_CONTROL_CODE_NUMBER0:
-@@ -365,9 +378,11 @@ class CECAdapterPriv
+@@ -365,9 +458,11 @@ class CECAdapterPriv
case CEC_USER_CONTROL_CODE_PLAY:
action = Qt::Key_P;
code = "PLAY";
@@ -65051,7 +65289,7 @@ index 00a8c73..a761e32 100644
code = "PAUSE";
break;
case CEC_USER_CONTROL_CODE_STOP:
-@@ -566,7 +581,7 @@ class CECAdapterPriv
+@@ -566,12 +661,341 @@ class CECAdapterPriv
return 1;
GetMythUI()->ResetScreensaver();
@@ -65060,12 +65298,351 @@ index 00a8c73..a761e32 100644
qApp->postEvent(GetMythMainWindow(), (QEvent*)ke);
return 1;
-@@ -721,36 +736,36 @@ CECAdapter::CECAdapter() : MThread("CECAdapter"),
m_priv(new CECAdapterPriv)
+ }
+
++ void HandleKeyPress(const cec_keypress* key)
++ {
++ if (!adapter || !valid)
++ return;
++
++ // Ignore key down events and wait for the key 'up'
++ if (key->duration < 1)
++ return;
++
++ QString code;
++ int action = 0;
++ switch (key->keycode)
++ {
++ case CEC_USER_CONTROL_CODE_NUMBER0:
++ action = Qt::Key_0;
++ code = "0";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER1:
++ action = Qt::Key_1;
++ code = "1";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER2:
++ action = Qt::Key_2;
++ code = "2";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER3:
++ action = Qt::Key_3;
++ code = "3";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER4:
++ action = Qt::Key_4;
++ code = "4";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER5:
++ action = Qt::Key_5;
++ code = "5";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER6:
++ action = Qt::Key_6;
++ code = "6";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER7:
++ action = Qt::Key_7;
++ code = "7";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER8:
++ action = Qt::Key_8;
++ code = "8";
++ break;
++ case CEC_USER_CONTROL_CODE_NUMBER9:
++ action = Qt::Key_9;
++ code = "9";
++ break;
++ case CEC_USER_CONTROL_CODE_SELECT:
++ action = Qt::Key_Select;
++ code = "SELECT";
++ break;
++ case CEC_USER_CONTROL_CODE_ENTER:
++ action = Qt::Key_Enter;
++ code = "ENTER";
++ break;
++ case CEC_USER_CONTROL_CODE_UP:
++ action = Qt::Key_Up;
++ code = "UP";
++ break;
++ case CEC_USER_CONTROL_CODE_DOWN:
++ action = Qt::Key_Down;
++ code = "DOWN";
++ break;
++ case CEC_USER_CONTROL_CODE_LEFT:
++ action = Qt::Key_Left;
++ code = "LEFT";
++ break;
++ case CEC_USER_CONTROL_CODE_LEFT_UP:
++ action = Qt::Key_Left;
++ code = "LEFT_UP";
++ break;
++ case CEC_USER_CONTROL_CODE_LEFT_DOWN:
++ action = Qt::Key_Left;
++ code = "LEFT_DOWN";
++ break;
++ case CEC_USER_CONTROL_CODE_RIGHT:
++ action = Qt::Key_Right;
++ code = "RIGHT";
++ break;
++ case CEC_USER_CONTROL_CODE_RIGHT_UP:
++ action = Qt::Key_Right;
++ code = "RIGHT_UP";
++ break;
++ case CEC_USER_CONTROL_CODE_RIGHT_DOWN:
++ action = Qt::Key_Right;
++ code = "RIGHT_DOWN";
++ break;
++ case CEC_USER_CONTROL_CODE_ROOT_MENU:
++ action = Qt::Key_M;
++ code = "ROOT_MENU";
++ break;
++ case CEC_USER_CONTROL_CODE_EXIT:
++ action = Qt::Key_Escape;
++ code = "EXIT";
++ break;
++ case CEC_USER_CONTROL_CODE_PREVIOUS_CHANNEL:
++ action = Qt::Key_H;
++ code = "PREVIOUS_CHANNEL";
++ break;
++ case CEC_USER_CONTROL_CODE_SOUND_SELECT:
++ action = Qt::Key_Plus;
++ code = "SOUND_SELECT";
++ break;
++ case CEC_USER_CONTROL_CODE_VOLUME_UP:
++ action = Qt::Key_VolumeUp;
++ code = "VOLUME_UP";
++ break;
++ case CEC_USER_CONTROL_CODE_VOLUME_DOWN:
++ action = Qt::Key_VolumeDown;
++ code = "VOLUME_DOWN";
++ break;
++ case CEC_USER_CONTROL_CODE_MUTE:
++ action = Qt::Key_VolumeMute;
++ code = "MUTE";
++ break;
++ case CEC_USER_CONTROL_CODE_PLAY:
++ action = Qt::Key_P;
++ code = "PLAY";
++ break;
++ case CEC_USER_CONTROL_CODE_PAUSE:
++ action = Qt::Key_P; // same as play
++ code = "PAUSE";
++ break;
++ case CEC_USER_CONTROL_CODE_STOP:
++ action = Qt::Key_Stop;
++ code = "STOP";
++ break;
++ case CEC_USER_CONTROL_CODE_RECORD:
++ action = Qt::Key_R;
++ code = "RECORD";
++ break;
++ case CEC_USER_CONTROL_CODE_CLEAR:
++ action = Qt::Key_Clear;
++ code = "CLEAR";
++ break;
++ case CEC_USER_CONTROL_CODE_DISPLAY_INFORMATION:
++ action = Qt::Key_I;
++ code = "DISPLAY_INFORMATION";
++ break;
++ case CEC_USER_CONTROL_CODE_PAGE_UP:
++ action = Qt::Key_PageUp;
++ code = "PAGE_UP";
++ break;
++ case CEC_USER_CONTROL_CODE_PAGE_DOWN:
++ action = Qt::Key_PageDown;
++ code = "PAGE_DOWN";
++ break;
++ case CEC_USER_CONTROL_CODE_EJECT:
++ action = Qt::Key_Eject;
++ code = "EJECT";
++ break;
++ case CEC_USER_CONTROL_CODE_FORWARD:
++ action = Qt::Key_Forward;
++ code = "FORWARD";
++ break;
++ case CEC_USER_CONTROL_CODE_BACKWARD:
++ action = Qt::Key_Back;
++ code = "BACKWARD";
++ break;
++ case CEC_USER_CONTROL_CODE_F1_BLUE:
++ action = Qt::Key_F5; // NB F1 is help and we normally map blue to F5
++ code = "F1_BLUE";
++ break;
++ case CEC_USER_CONTROL_CODE_F2_RED:
++ action = Qt::Key_F2;
++ code = "F2_RED";
++ break;
++ case CEC_USER_CONTROL_CODE_F3_GREEN:
++ action = Qt::Key_F3;
++ code = "F3_GREEN";
++ break;
++ case CEC_USER_CONTROL_CODE_F4_YELLOW:
++ action = Qt::Key_F4;
++ code = "F4_YELLOW";
++ break;
++ case CEC_USER_CONTROL_CODE_SETUP_MENU:
++ action = Qt::Key_M; // Duplicate of Root Menu
++ code = "SETUP_MENU";
++ break;
++ case CEC_USER_CONTROL_CODE_CONTENTS_MENU:
++ action = Qt::Key_M; // Duplicate of Root Menu
++ code = "CONTENTS_MENU";
++ break;
++ case CEC_USER_CONTROL_CODE_FAVORITE_MENU:
++ action = Qt::Key_M; // Duplicate of Root Menu
++ code = "FAVORITE_MENU";
++ break;
++ case CEC_USER_CONTROL_CODE_DOT:
++ action = Qt::Key_Period;
++ code = "DOT";
++ break;
++ case CEC_USER_CONTROL_CODE_NEXT_FAVORITE:
++ action = Qt::Key_Slash;
++ code = "NEXT_FAVORITE";
++ break;
++ case CEC_USER_CONTROL_CODE_INPUT_SELECT:
++ action = Qt::Key_C;
++ code = "INPUT_SELECT";
++ break;
++ case CEC_USER_CONTROL_CODE_HELP:
++ action = Qt::Key_F1;
++ code = "HELP";
++ break;
++ case CEC_USER_CONTROL_CODE_STOP_RECORD:
++ action = Qt::Key_R; // Duplicate of Record
++ code = "STOP_RECORD";
++ break;
++ case CEC_USER_CONTROL_CODE_SUB_PICTURE:
++ action = Qt::Key_V;
++ code = "SUB_PICTURE";
++ break;
++ case CEC_USER_CONTROL_CODE_ELECTRONIC_PROGRAM_GUIDE:
++ action = Qt::Key_S;
++ code = "ELECTRONIC_PROGRAM_GUIDE";
++ break;
++ case CEC_USER_CONTROL_CODE_POWER:
++ action = Qt::Key_PowerOff;
++ code = "POWER";
++ break;
++
++ // these codes have 'non-standard' Qt key mappings to ensure
++ // each code has a unique key mapping
++ case CEC_USER_CONTROL_CODE_CHANNEL_DOWN:
++ action = Qt::Key_F20; // to differentiate from Up
++ code = "CHANNEL_DOWN";
++ break;
++ case CEC_USER_CONTROL_CODE_CHANNEL_UP:
++ action = Qt::Key_F21; // to differentiate from Down
++ code = "CHANNEL_UP";
++ break;
++ case CEC_USER_CONTROL_CODE_REWIND:
++ action = Qt::Key_F22; // to differentiate from Left
++ code = "REWIND";
++ break;
++ case CEC_USER_CONTROL_CODE_FAST_FORWARD:
++ action = Qt::Key_F23; // to differentiate from Right
++ code = "FAST_FORWARD";
++ break;
++ case CEC_USER_CONTROL_CODE_ANGLE:
++ action = Qt::Key_F24;
++ code = "ANGLE";
++ break;
++ case CEC_USER_CONTROL_CODE_F5:
++ action = Qt::Key_F6; // NB!
++ code = "F5";
++ break;
++
++ // codes with no obvious MythTV action
++ case CEC_USER_CONTROL_CODE_INITIAL_CONFIGURATION:
++ code = "INITIAL_CONFIGURATION";
++ break;
++ case CEC_USER_CONTROL_CODE_PAUSE_RECORD:
++ code = "PAUSE_RECORD";
++ break;
++ case CEC_USER_CONTROL_CODE_VIDEO_ON_DEMAND:
++ code = "VIDEO_ON_DEMAND";
++ break;
++ case CEC_USER_CONTROL_CODE_TIMER_PROGRAMMING:
++ code = "TIMER_PROGRAMMING";
++ break;
++ case CEC_USER_CONTROL_CODE_UNKNOWN:
++ code = "UNKNOWN";
++ break;
++ case CEC_USER_CONTROL_CODE_DATA:
++ code = "DATA";
++ break;
++
++ // Functions aren't implemented (similar to macros?)
++ case CEC_USER_CONTROL_CODE_POWER_ON_FUNCTION:
++ code = "POWER_ON_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_PLAY_FUNCTION:
++ code = "PLAY_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_PAUSE_PLAY_FUNCTION:
++ code = "PAUSE_PLAY_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_RECORD_FUNCTION:
++ code = "RECORD_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_PAUSE_RECORD_FUNCTION:
++ code = "PAUSE_RECORD_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_STOP_FUNCTION:
++ code = "STOP_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_MUTE_FUNCTION:
++ code = "MUTE_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_RESTORE_VOLUME_FUNCTION:
++ code = "RESTORE_VOLUME_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_TUNE_FUNCTION:
++ code = "TUNE_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_SELECT_MEDIA_FUNCTION:
++ code = "SELECT_MEDIA_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_SELECT_AV_INPUT_FUNCTION:
++ code = "SELECT_AV_INPUT_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_SELECT_AUDIO_INPUT_FUNCTION:
++ code = "SELECT_AUDIO_INPUT_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_POWER_TOGGLE_FUNCTION:
++ code = "POWER_TOGGLE_FUNCTION";
++ break;
++ case CEC_USER_CONTROL_CODE_POWER_OFF_FUNCTION:
++ code = "POWER_OFF_FUNCTION";
++ break;
++ }
++
++ LOG(VB_GENERAL, LOG_DEBUG, LOC + QString("Keypress %1 %2")
++ .arg(code).arg(0 == action ? "(Not actioned)" : ""));
++
++ if (0 == action)
++ return;
++
++ GetMythUI()->ResetScreensaver();
++ QKeyEvent* ke = new QKeyEvent(QEvent::KeyPress, action, Qt::NoModifier);
++ qApp->postEvent(GetMythMainWindow(), (QEvent*)ke);
++ }
++
+ #if CEC_LIB_VERSION_MAJOR >= 2
+ int HandleAlert(const libcec_alert alert, const libcec_parameter &data)
+ {
+@@ -721,36 +1145,41 @@ CECAdapter::CECAdapter() : MThread("CECAdapter"),
m_priv(new CECAdapterPriv)
void CECAdapter::run()
{
- for (;;) {
+ RunProlog();
++ // Handle any actions at startup
++ // This is done outside the lock to handle initial setup -
++ // we know that nothing else can be calling us this early.
++ m_priv->HandleActions();
++
+ while (IsValid()) {
// Note that a lock is used because the QWaitCondition needs it
// None of the other HandleActions callers need the lock because
@@ -65107,6 +65684,53 @@ index 00a8c73..a761e32 100644
return m_priv->valid;
}
+@@ -764,6 +1193,7 @@ void CECAdapter::Action(const QString &action)
+ gActionsReady->wakeAll();
+ }
+
++#if CEC_LIB_VERSION_MAJOR <= 3
+ static int CECLogMessageCallback(void *adapter, const cec_log_message
CEC_CALLBACK_PARAM_TYPE message)
+ {
+ return ((CECAdapterPriv*)adapter)->LogMessage(message);
+@@ -778,13 +1208,37 @@ static int CECCommandCallback(void *adapter, const cec_command
CEC_CALLBACK_PARA
+ {
+ return ((CECAdapterPriv*)adapter)->HandleCommand(command);
+ }
++#endif
++#if CEC_LIB_VERSION_MAJOR >= 4
++static void CECLogMessageCallback(void *adapter, const cec_log_message* message)
++{
++ ((CECAdapterPriv*)adapter)->LogMessage(message);
++}
++
++static void CECKeyPressCallback(void *adapter, const cec_keypress* keypress)
++{
++ ((CECAdapterPriv*)adapter)->HandleKeyPress(keypress);
++}
++
++static void CECCommandCallback(void *adapter, const cec_command* command)
++{
++ ((CECAdapterPriv*)adapter)->HandleCommand(command);
++}
++#endif
+
+ #if CEC_LIB_VERSION_MAJOR >= 2
++#if CEC_LIB_VERSION_MAJOR <= 3
+ static int CECAlertCallback(void *adapter, const libcec_alert alert, const
libcec_parameter CEC_CALLBACK_PARAM_TYPE data)
+ {
+ return ((CECAdapterPriv*)adapter)->HandleAlert(alert, data);
+ }
+-
++#endif
++#if CEC_LIB_VERSION_MAJOR >= 4
++static void CECAlertCallback(void *adapter, const libcec_alert alert, const
libcec_parameter data)
++{
++ ((CECAdapterPriv*)adapter)->HandleAlert(alert, data);
++}
++#endif
+ static void CECSourceActivatedCallback(void *adapter, const cec_logical_address address,
const uint8_t activated)
+ {
+ ((CECAdapterPriv*)adapter)->HandleSourceActivated(address, activated);
diff --git a/mythtv/libs/libmythui/libmythui.pro b/mythtv/libs/libmythui/libmythui.pro
index 47e46e1..321e9a3 100644
--- a/mythtv/libs/libmythui/libmythui.pro
@@ -66687,6 +67311,39 @@ index 049c189..7f977c2 100644
return true;
}
+diff --git a/mythtv/programs/mythfilldatabase/channeldata.cpp
b/mythtv/programs/mythfilldatabase/channeldata.cpp
+index b959684..c0ee522 100644
+--- a/mythtv/programs/mythfilldatabase/channeldata.cpp
++++ b/mythtv/programs/mythfilldatabase/channeldata.cpp
+@@ -124,7 +124,7 @@ QString ChannelData::normalizeChannelKey(const QString &chanName)
const
+ result = result.toLower();
+ // Strip all whitespace
+ result = result.replace(" ", "");
+-
++
+ return result;
+ }
+
+@@ -132,8 +132,8 @@ QHash<QString, ChannelInfo> ChannelData::channelList(int
sourceId)
+ {
+ QHash<QString, ChannelInfo> retList;
+
+- ChannelInfoList channelList = ChannelUtil::GetChannels(sourceId, true);
+-
++ ChannelInfoList channelList = ChannelUtil::GetChannels(sourceId, false);
++
+ ChannelInfoList::iterator it = channelList.begin();
+ for ( ; it != channelList.end(); ++it)
+ {
+@@ -234,7 +234,7 @@ void ChannelData::handleChannels(int id, ChannelInfoList *chanlist)
+ }
+ }
+ }
+-
++
+ ChannelInfo dbChan = FindMatchingChannel(*i, existingChannels);
+ if (dbChan.chanid > 0) // Channel exists, updating
+ {
diff --git a/mythtv/programs/mythfilldatabase/xmltvparser.cpp
b/mythtv/programs/mythfilldatabase/xmltvparser.cpp
index 281da9c..62a3a13 100644
--- a/mythtv/programs/mythfilldatabase/xmltvparser.cpp
diff --git a/mythtv.spec b/mythtv.spec
index d1cbdce..2fff698 100644
--- a/mythtv.spec
+++ b/mythtv.spec
@@ -31,7 +31,6 @@
#
# The following options are enabled by default. Use these options to disable:
#
-# --without systemd Use systemd for backend rather than SysV init.
# --without vdpau Disable VDPAU support
# --without vaapi Disable VAAPI support
# --without crystalhd Disable Crystal HD support
@@ -61,7 +60,7 @@
%define desktop_vendor RPMFusion
# MythTV Version string -- preferably the output from git describe
-%define vers_string v28.0-72-g228b05b
+%define vers_string v28.0-104-g3930f5d
%define branch fixes/0.28
# Git revision and branch ID
@@ -82,7 +81,7 @@ Version: 0.28
%if "%{branch}" == "master"
Release: 0.5.git.%{_gitrev}%{?dist}
%else
-Release: 11%{?dist}
+Release: 12%{?dist}
%endif
# The primary license is GPLv2+, but bits are borrowed from a number of
@@ -104,7 +103,6 @@ License: GPLv2+ and LGPLv2+ and LGPLv2 and (GPLv2 or QPL) and
(GPLv2+ or
%bcond_without vdpau
%bcond_without vaapi
%bcond_without crystalhd
-%bcond_without systemd
%bcond_without sdnotify
%bcond_without perl
%bcond_without php
@@ -135,7 +133,6 @@ Source0:
https://github.com/MythTV/%{name}/archive/v%{version}.tar.gz#/%{name}
# Also update ChangeLog with git log v0.28..HEAD > ChangeLog
# and update define vers_string to v0.28-52-ge6a60f7 with git describe
Patch0: mythtv-0.28-fixes.patch
-Patch1: mythtv-0.28-libcec4.patch
Source10: PACKAGE-LICENSING
Source11: ChangeLog
@@ -155,19 +152,11 @@ Source114: mythdb-optimize.timer
# Global MythTV and Shared Build Requirements
-%if %{with systemd}
# Use systemd
BuildRequires: systemd
Requires(post): systemd
Requires(preun): systemd
Requires(postun): systemd
-%else
-# Use SysV
-Requires(post): chkconfig
-Requires(preun): chkconfig
-Requires(preun): initscripts
-Requires(postun): initscripts
-%endif
BuildRequires: perl-generators
BuildRequires: gcc-c++
@@ -358,12 +347,7 @@ Requires: mythplugins = %{version}-%{release}
Requires: mythweb = %{version}
Requires: mythffmpeg = %{version}-%{release}
Requires: mariadb-server >= 5, mariadb >= 5
-Requires: xmltv
-%if 0%{?rhel} >= 7 || 0%{?fedora} >= 22
-Requires: udisks2
-%else
-Requires: udisks
-%endif
+Recommends: xmltv
# Generate the required mythtv-frontend-api version string here so we only
# have to do it once.
@@ -410,11 +394,7 @@ Summary: Library providing mythtv support
Requires: freetype >= 2
Requires: lame
Requires: qt5-qtbase-mysql
-%if 0%{?rhel} >= 7 || 0%{?fedora} >= 22
Requires: udisks2
-%else
-Requires: udisks
-%endif
%description libs
Common library code for MythTV and add-on modules (development)
@@ -518,7 +498,7 @@ Requires: perl(XML::Simple)
Requires: mythtv-common = %{version}-%{release}
Requires: mythtv-base-themes = %{version}
Requires: python-MythTV
-Requires: mesa-vdpau-drivers
+Recommends: mesa-vdpau-drivers
Provides: mythtv-frontend-api = %{mythfeapiver}
%description frontend
@@ -800,7 +780,6 @@ on demand content.
#find -name *.pyc -exec rm -f {} \;
%patch0 -p1
-%patch1 -p1
# Install ChangeLog
install -m 0644 %{SOURCE11} .
@@ -1000,12 +979,7 @@ pushd mythtv
mkdir -p %{buildroot}%{_localstatedir}/cache/mythtv
mkdir -p %{buildroot}%{_localstatedir}/log/mythtv
mkdir -p %{buildroot}%{_sysconfdir}/logrotate.d
- %if %{with systemd}
mkdir -p %{buildroot}%{_unitdir}
- %else
- mkdir -p %{buildroot}%{_sysconfdir}/init.d
- mkdir -p %{buildroot}%{_sysconfdir}/sysconfig
- %endif
mkdir -p %{buildroot}%{_sysconfdir}/mythtv
@@ -1013,7 +987,6 @@ pushd mythtv
echo "# to be filled in by mythtv-setup" >
%{buildroot}%{_sysconfdir}/mythtv/config.xml
### SystemD based setup. ###
- %if %{with systemd}
install -p -m 0644 %{SOURCE105} %{buildroot}%{_unitdir}/
install -p -m 0644 %{SOURCE104} %{buildroot}%{_sysconfdir}/logrotate.d/mythtv
# Install udev rules for devices that may initialize late in the boot
@@ -1030,13 +1003,6 @@ pushd mythtv
install -p -m 0755 contrib/maintenance/optimize_mythdb.pl \
%{buildroot}%{_bindir}/optimize_mythdb
- ### SysV based setup. ###
- %else
- install -p -m 0755 %{SOURCE102} %{buildroot}%{_sysconfdir}/init.d/mythbackend
- install -p -m 0644 %{SOURCE101} %{buildroot}%{_sysconfdir}/sysconfig/mythbackend
- install -p -m 0644 %{SOURCE103} %{buildroot}%{_sysconfdir}/logrotate.d/mythtv
- %endif
-
# Desktop entries
mkdir -p %{buildroot}%{_datadir}/pixmaps
mkdir -p %{buildroot}%{_datadir}/applications
@@ -1093,22 +1059,7 @@ popd
%endif
-%post libs -p /sbin/ldconfig
-
-%postun libs -p /sbin/ldconfig
-
-%pre backend
-# Add the "mythtv" user, with membership in the audio and video group
-getent group mythtv >/dev/null || groupadd -r mythtv
-getent passwd mythtv >/dev/null || \
- useradd -r -g mythtv -d %{_localstatedir}/lib/mythtv -s /sbin/nologin \
- -c "mythbackend user" mythtv
-# Make sure the mythtv user is in the audio and video group for existing
-# or new installs.
-usermod -a -G audio,video mythtv
-exit 0
-
-%pre frontend
+%pre common
# Add the "mythtv" user, with membership in the audio and video group
getent group mythtv >/dev/null || groupadd -r mythtv
getent passwd mythtv >/dev/null || \
@@ -1130,54 +1081,38 @@ getent passwd mythtv >/dev/null || \
usermod -a -G audio,video mythtv
exit 0
+%post libs -p /sbin/ldconfig
+
%post backend
-%if %{with systemd}
%systemd_post mythbackend.service
%systemd_post mythjobqueue.service
%systemd_post mythdb-optimize.service
-%else
- /sbin/chkconfig --add mythbackend
-%endif
-
%preun backend
-%if %{with systemd}
%systemd_preun mythbackend.service
%systemd_preun mythjobqueue.service
%systemd_preun mythdb-optimize.service
-%else
-if [ $1 = 0 ]; then
- /sbin/service mythbackend stop > /dev/null 2>&1
- /sbin/chkconfig --del mythbackend
-fi
-%endif
+
+%postun libs -p /sbin/ldconfig
%postun backend
-%if %{with systemd}
%systemd_postun_with_restart mythbackend.service
%systemd_postun_with_restart mythjobqueue.service
%systemd_postun_with_restart mythdb-optimize.service
-%else
-if [ "$1" -ge "1" ] ; then
- /sbin/service mythbackend condrestart >/dev/null 2>&1 || :
-fi
-%endif
################################################################################
%files
-%doc ChangeLog mythtv/PACKAGE-LICENSING
+%doc ChangeLog
+%license mythtv/PACKAGE-LICENSING
%files docs
%doc mythtv/README*
%doc mythtv/UPGRADING
%doc mythtv/AUTHORS
-%doc mythtv/COPYING
+%license mythtv/COPYING
%doc mythtv/FAQ
%doc mythtv/database mythtv/keys.txt
-# Do we really need the API documentation?
-#%%doc mythtv/docs/*.html mythtv/docs/*.png
-#%%doc mythtv/docs/*.txt
%doc mythtv/contrib
%files common
@@ -1193,8 +1128,8 @@ fi
%{_datadir}/mythtv/locales/
%{_datadir}/mythtv/metadata/
%{_datadir}/mythtv/hardwareprofile/
-%attr(-,mythtv,mythtv) %dir %{_sysconfdir}/mythtv
-%attr(0664,mythtv,mythtv) %config(noreplace) %{_sysconfdir}/mythtv/config.xml
+%attr(0775,-,mythtv) %dir %{_sysconfdir}/mythtv
+%attr(0664,-,mythtv) %config(noreplace) %{_sysconfdir}/mythtv/config.xml
%files backend
%{_bindir}/mythbackend
@@ -1209,16 +1144,11 @@ fi
%{_datadir}/mythtv/backend-config/
%attr(-,mythtv,mythtv) %dir %{_localstatedir}/lib/mythtv
%attr(-,mythtv,mythtv) %dir %{_localstatedir}/cache/mythtv
-%if %{with systemd}
%{_unitdir}/mythbackend.service
%{_unitdir}/mythjobqueue.service
%{_unitdir}/mythdb-optimize.service
%{_unitdir}/mythdb-optimize.timer
/lib/udev/rules.d/99-mythbackend.rules
-%else
-%{_sysconfdir}/init.d/mythbackend
-%config(noreplace) %{_sysconfdir}/sysconfig/mythbackend
-%endif
%config(noreplace) %{_sysconfdir}/logrotate.d/mythtv
%attr(-,mythtv,mythtv) %dir %{_localstatedir}/log/mythtv
%{_datadir}/mythtv/internetcontent/
@@ -1408,6 +1338,13 @@ fi
%changelog
+* Sun Jan 22 2017 Richard Shaw <hobbes1069(a)gmail.com> - 0.28-12
+- Update to latest fixes/0.28 from git.
+- Remove SysV conditionals as EL 7 has systemd and EL 6 is not supported.
+- Update default permissions for /etc/mythtv and move user/group creation
+ to the common package, fixes RFBZ#4414.
+- Change some dependencies from Requires to Recommends, fixes RFBZ#4415.
+
* Sat Jan 21 2017 Xavier Bachelot <xavier(a)bachelot.org> - 0.28-11
- Fix build on EL7.