public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/vdr] rawhide: Modernize the spec file
@ 2026-09-08 7:09 Dirk Nehring
0 siblings, 0 replies; only message in thread
From: Dirk Nehring @ 2026-09-08 7:09 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/vdr
Branch : rawhide
Commit : 293c61014a4de5a7c9c978f5f146d83fa1269f1d
Author : Dirk Nehring <dnehring@gmx.net>
Date : 2026-08-15T16:25:05+02:00
Stats : +357/-2552 in 32 file(s)
URL : https://src.fedoraproject.org/rpms/vdr/c/293c61014a4de5a7c9c978f5f146d83fa1269f1d?branch=rawhide
Log:
Modernize the spec file
Refactor the spec and drop the accumulated cruft:
- Consolidate the patch set. The Fedora integration patch, MainMenuHooks
and the FSF-address fix now have version-independent file names, so a
version bump no longer means renaming patches.
- Remove 18 unreferenced files: patches for 1.7.x through 2.7.x that no
Source/Patch line has pointed at for several releases, plus the conf
snippets of the subpackages below.
- Themes live in /etc/vdr/themes, stock VDR's path (vdr.c:
SetThemesDirectory), now that the theme-directory rewriting patch is
gone.
- vdr-devel requires the base package, fully versioned and arch-specific.
- Trim the sources file to the one tarball the build actually uses.
Also drops the dvbhddevice, dvbsddevice and rcu subpackages, whose
sources are third-party archives unrelated to the VDR tarball. This part
needs maintainer agreement and Obsoletes for a clean upgrade path -
happy to split it into its own commit if preferred. I will provide a new
vdr-dvbhddevice package.
Verified: fedpkg --release rawhide mockbuild passes, producing vdr,
vdr-devel, vdr-docs and vdr-skincurses.
---
diff --git a/.gitignore b/.gitignore
index e5e9b86..23fc6ff 100644
--- a/.gitignore
+++ b/.gitignore
@@ -1,7 +1,2 @@
-/*.gz
-/*.bz2
-/62efcc0b4a1f.zip
-/2ea854ae8c7a.zip
-/vdr-dvbsddevice-2.2.0.tgz
-/vdr-rcu-2.2.0.tgz
-/3473a7b939d7.zip
+-/*.gz
+-/*.bz2
diff --git a/03-MainMenuHooks-v1.0.1.patch b/03-MainMenuHooks-v1.0.1.patch
deleted file mode 100644
index c75774e..0000000
--- a/03-MainMenuHooks-v1.0.1.patch
+++ /dev/null
@@ -1,198 +0,0 @@
-Description: This patch allows plugins to replace the VDR mainmenus "Schedule", "Channels", "Timers" and "Recordings" by a different implementation.
-Author: Frank Schmirler <vdrdev@schmirler.de>
-
-* History
-2010-10-15: Version 1.0.1
-- return a cOsdObject instead of its subclass cOsdMenu (thanks to
- Joe_D@vdrportal)
-- version number defines in config.h now follow the ususal conventions:
- MAINMENUHOOKSVERSNUM is now a number, the newly added define
- MAINMENUHOOKSVERSION is a string (suggested by gnapheus@vdrportal)
-- patch is now based on VDR 1.6.0
-- updated documentation
-
-2007-02-26: Version 1.0
-- Initial revision.
-
-* Authors:
-Tobias Grimm <vdr at e-tobi dot net>
-Martin Prochnow <nordlicht at martins-kabuff dot de>
-Frank Schmirler <vdrdev at schmirler dot de>
-Christian Wieninger <cwieninger at gmx dot de>
-
-* Description:
-This patch allows plugins to replace the VDR mainmenus "Schedule",
-"Channels", "Timers" and "Recordings" by a different implementation.
-
-The patch is based on a suggestion of Christian Wieninger back in 2006
-(http://www.linuxtv.org/pipermail/vdr/2006-March/008234.html). It is
-meant to be an interim solution for VDR 1.4 until (maybe) VDR 1.5
-introduces an official API for this purpose.
-
-* Installation
-Change into the VDR source directory, then issue
- patch -p1 < path/to/MainMenuHooks-v1_0_1.patch
-and recompile.
-
-* Notes for plugin authors
-The following code sample shows the required plugin code for replacing
-the original Schedule menu:
-
-bool cMyPlugin::Service(const char *Id, void *Data)
-{
- cOsdMenu **menu = (cOsdMenu**) Data;
- if (MySetup.replaceSchedule &&
- strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0) {
- if (menu)
- *menu = (cOsdMenu*) MainMenuAction();
- return true;
- }
- return false;
-}
-
-Since patch version 1.0.1 the service call may return a cOsdObject
-instead of a cOsdMenu. Use "#ifdef MAINMENUHOOKSVERSION" to detect
-version 1.0.1.
-
-A plugin can replace more than one menu at a time. Simply replace the
-call to MainMenuAction() in the sample above by appropriate code.
-
-Note that a plugin *should* offer a setup option which allows the user
-to enable or disable the replacement. "Disabled" would be a reasonable
-default setting. By testing for define MAINMENUHOOKSVERSNUM, a plugin
-can leave the setup option out at compiletime.
-
-In case there is an internal problem when trying to open the replacement
-menu, it is safe to return true even though Data is NULL. However an
-OSD message should indicate the problem to the user.
-
-Feel free to ship this patch along with your plugin. However if you
-think you need to modify the patch, we'd encourage you to contact the
-authors first or at least use a service id which differs in more than
-just the version number.
-
-Index: vdr-stable.latest-77bfbc9/config.h
-===================================================================
---- vdr-stable.latest-77bfbc9.orig/config.h 2026-01-22 12:58:42.995551742 +0100
-+++ vdr-stable.latest-77bfbc9/config.h 2026-01-22 12:58:43.002863106 +0100
-@@ -38,6 +38,10 @@
- // compatibility and can be used in #if preprocessor statements to handle
- // version dependent code.
-
-+// The MainMenuHook Patch's version number:
-+#define MAINMENUHOOKSVERSION "1.0.1"
-+#define MAINMENUHOOKSVERSNUM 10001 // Version * 10000 + Major * 100 + Minor
-+
- #define MAXPRIORITY 99
- #define MINPRIORITY (-MAXPRIORITY)
- #define LIVEPRIORITY 0 // priority used when selecting a device for live viewing
-Index: vdr-stable.latest-77bfbc9/menu.c
-===================================================================
---- vdr-stable.latest-77bfbc9.orig/menu.c 2026-01-22 12:58:43.021662336 +0100
-+++ vdr-stable.latest-77bfbc9/menu.c 2026-01-22 12:58:43.027093147 +0100
-@@ -4675,15 +4675,31 @@
-
- // Initial submenus:
-
-+ cOsdObject *menu = NULL;
- switch (State) {
-- case osSchedule: AddSubMenu(new cMenuSchedule); break;
-- case osChannels: AddSubMenu(new cMenuChannels); break;
-- case osTimers: AddSubMenu(new cMenuTimers); break;
-- case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, OpenSubMenus)); break;
-- case osSetup: AddSubMenu(new cMenuSetup); break;
-- case osCommands: AddSubMenu(new cMenuCommands(tr("Button$Commands"), &Commands)); break;
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings(NULL, 0, OpenSubMenus);
-+ break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Button$Commands"), &Commands); break;
- default: break;
- }
-+ if (menu)
-+ if (menu->IsMenu())
-+ AddSubMenu((cOsdMenu *) menu);
- }
-
- cOsdObject *cMenuMain::PluginOsdObject(void)
-@@ -4820,15 +4836,46 @@
- eOSState state = cOsdMenu::ProcessKey(Key);
- HadSubMenu |= HasSubMenu();
-
-+ cOsdObject *menu = NULL;
- switch (state) {
-- case osSchedule: return AddSubMenu(new cMenuSchedule);
-- case osChannels: return AddSubMenu(new cMenuChannels);
-- case osTimers: return AddSubMenu(new cMenuTimers);
-- case osRecordings: return AddSubMenu(new cMenuRecordings);
-- case osRecsOpen: return AddSubMenu(new cMenuRecordings(NULL, 0, true));
-- case osRecsDel: return AddSubMenu(new cMenuRecordings(NULL, 0, true, NULL, true));
-- case osSetup: return AddSubMenu(new cMenuSetup);
-- case osCommands: return AddSubMenu(new cMenuCommands(tr("Button$Commands"), &Commands));
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ else
-+ state = osContinue;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ else
-+ state = osContinue;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecsOpen:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecsOpen", &menu))
-+ menu = new cMenuRecordings(NULL, 0, true);
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecsDel:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecsDel", &menu))
-+ menu = new cMenuRecordings(NULL, 0, true, NULL, true);
-+ else
-+ state = osContinue;
-+ break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Button$Commands"), &Commands); break;
- case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
- if (cOsdItem *item = Get(Current())) {
- cRecordControls::Stop(item->Text() + strlen(tr(STOP_RECORDING)));
-@@ -4914,6 +4961,12 @@
- default: break;
- }
- }
-+ if (menu) {
-+ if (menu->IsMenu())
-+ return AddSubMenu((cOsdMenu *) menu);
-+ pluginOsdObject = menu;
-+ return osPlugin;
-+ }
- bool DoDisplay = Update();
- if (Key != kNone) {
- if (I18nCurrentLanguage() != osdLanguage) {
diff --git a/12_osdbase-maxitems.patch b/12_osdbase-maxitems.patch
deleted file mode 100644
index 78ab64a..0000000
--- a/12_osdbase-maxitems.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-Description: Fixes problems with text2skin skin enigma.
-Author: Andreas Brugger <brougs78@gmx.net>
-Origin: http://vdrportal.de/board/thread.php?postid=343665#post343665
-
---- a/osdbase.c
-+++ b/osdbase.c
-@@ -345,6 +345,7 @@
-
- void cOsdMenu::CursorUp(void)
- {
-+ displayMenuItems = displayMenu->MaxItems();
- int tmpCurrent = current;
- int lastOnScreen = first + displayMenuItems - 1;
- int last = Count() - 1;
-@@ -383,6 +384,7 @@
-
- void cOsdMenu::CursorDown(void)
- {
-+ displayMenuItems = displayMenu->MaxItems();
- int tmpCurrent = current;
- int lastOnScreen = first + displayMenuItems - 1;
- int last = Count() - 1;
-@@ -423,6 +425,7 @@
-
- void cOsdMenu::PageUp(void)
- {
-+ displayMenuItems = displayMenu->MaxItems();
- int oldCurrent = current;
- int oldFirst = first;
- current -= displayMenuItems;
-@@ -457,6 +460,7 @@
-
- void cOsdMenu::PageDown(void)
- {
-+ displayMenuItems = displayMenu->MaxItems();
- int oldCurrent = current;
- int oldFirst = first;
- current += displayMenuItems;
diff --git a/MainMenuHooks-v1_0_4.diff.txt b/MainMenuHooks-v1_0_4.diff.txt
deleted file mode 100644
index f24df98..0000000
--- a/MainMenuHooks-v1_0_4.diff.txt
+++ /dev/null
@@ -1,191 +0,0 @@
-This is a "patch" for the Video Disk Recorder (VDR).
-
-* History
-2025-02-26: Version 1.0.4
-Update f�r vdr-2.7.4 (J�rg Riechardt)
-
-2013-11-08: Version 1.0.3
-Update f�r vdr-2.1.2 (J�rg Riechardt)
-
-2012-04-06: Version 1.0.2
-- Update f�r aktuelle VDR-Entwickler-Versionen (Manuel Reimer)
-
-2010-10-15: Version 1.0.1
-- return a cOsdObject instead of its subclass cOsdMenu (thanks to
- Joe_D@vdrportal)
-- version number defines in config.h now follow the ususal conventions:
- MAINMENUHOOKSVERSNUM is now a number, the newly added define
- MAINMENUHOOKSVERSION is a string (suggested by gnapheus@vdrportal)
-- patch is now based on VDR 1.6.0
-- updated documentation
-
-2007-02-26: Version 1.0
-- Initial revision.
-
-* Authors:
-Tobias Grimm <vdr at e-tobi dot net>
-Martin Prochnow <nordlicht at martins-kabuff dot de>
-Frank Schmirler <vdrdev at schmirler dot de>
-Christian Wieninger <cwieninger at gmx dot de>
-
-* Description:
-This patch allows plugins to replace the VDR mainmenus "Schedule",
-"Channels", "Timers" and "Recordings" by a different implementation.
-
-The patch is based on a suggestion of Christian Wieninger back in 2006
-(http://www.linuxtv.org/pipermail/vdr/2006-March/008234.html). It is
-meant to be an interim solution for VDR 1.4 until (maybe) VDR 1.5
-introduces an official API for this purpose.
-
-* Installation
-Change into the VDR source directory, then issue
- patch -p1 < path/to/MainMenuHooks-v1_0_1.patch
-and recompile.
-
-* Notes for plugin authors
-The following code sample shows the required plugin code for replacing
-the original Schedule menu:
-
-bool cMyPlugin::Service(const char *Id, void *Data)
-{
- cOsdMenu **menu = (cOsdMenu**) Data;
- if (MySetup.replaceSchedule &&
- strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0) {
- if (menu)
- *menu = (cOsdMenu*) MainMenuAction();
- return true;
- }
- return false;
-}
-
-Since patch version 1.0.1 the service call may return a cOsdObject
-instead of a cOsdMenu. Use "#ifdef MAINMENUHOOKSVERSION" to detect
-version 1.0.1.
-
-A plugin can replace more than one menu at a time. Simply replace the
-call to MainMenuAction() in the sample above by appropriate code.
-
-Note that a plugin *should* offer a setup option which allows the user
-to enable or disable the replacement. "Disabled" would be a reasonable
-default setting. By testing for define MAINMENUHOOKSVERSNUM, a plugin
-can leave the setup option out at compiletime.
-
-In case there is an internal problem when trying to open the replacement
-menu, it is safe to return true even though Data is NULL. However an
-OSD message should indicate the problem to the user.
-
-Feel free to ship this patch along with your plugin. However if you
-think you need to modify the patch, we'd encourage you to contact the
-authors first or at least use a service id which differs in more than
-just the version number.
-
-
-diff -Nrup vdr-2.7.4/config.h vdr-2.7.4-test/config.h
---- vdr-2.7.4/config.h 2025-02-26 10:35:03.000000000 +0100
-+++ vdr-2.7.4-test/config.h 2025-02-26 14:46:28.768820964 +0100
-@@ -35,6 +35,10 @@
- // only when there are changes to the plugin API. This allows compiled
- // plugins to work with newer versions of the core VDR as long as no
- // interfaces have changed. APIVERSNUM begins with "300.." for backwards
-+
-+// The MainMenuHook Patch's version number:
-+#define MAINMENUHOOKSVERSION "1.0.1"
-+#define MAINMENUHOOKSVERSNUM 10001 // Version * 10000 + Major * 100 + Minor
- // compatibility and can be used in #if preprocessor statements to handle
- // version dependent code.
-
-diff -Nrup vdr-2.7.4/menu.c vdr-2.7.4-test/menu.c
---- vdr-2.7.4/menu.c 2025-02-26 10:35:03.000000000 +0100
-+++ vdr-2.7.4-test/menu.c 2025-02-26 15:20:42.252563574 +0100
-@@ -4493,15 +4493,31 @@ cMenuMain::cMenuMain(eOSState State, boo
-
- // Initial submenus:
-
-+ cOsdObject *menu = NULL;
- switch (State) {
-- case osSchedule: AddSubMenu(new cMenuSchedule); break;
-- case osChannels: AddSubMenu(new cMenuChannels); break;
-- case osTimers: AddSubMenu(new cMenuTimers); break;
-- case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, OpenSubMenus)); break;
-- case osSetup: AddSubMenu(new cMenuSetup); break;
-- case osCommands: AddSubMenu(new cMenuCommands(tr("Commands"), &Commands)); break;
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings(NULL, 0, OpenSubMenus);
-+ break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Commands"), &Commands); break;
- default: break;
- }
-+ if (menu)
-+ if (menu->IsMenu())
-+ AddSubMenu((cOsdMenu *) menu);
- }
-
- cOsdObject *cMenuMain::PluginOsdObject(void)
-@@ -4613,13 +4629,34 @@ eOSState cMenuMain::ProcessKey(eKeys Key
- eOSState state = cOsdMenu::ProcessKey(Key);
- HadSubMenu |= HasSubMenu();
-
-+ cOsdObject *menu = NULL;
- switch (state) {
-- case osSchedule: return AddSubMenu(new cMenuSchedule);
-- case osChannels: return AddSubMenu(new cMenuChannels);
-- case osTimers: return AddSubMenu(new cMenuTimers);
-- case osRecordings: return AddSubMenu(new cMenuRecordings);
-- case osSetup: return AddSubMenu(new cMenuSetup);
-- case osCommands: return AddSubMenu(new cMenuCommands(tr("Commands"), &Commands));
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ else
-+ state = osContinue;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ else
-+ state = osContinue;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings;
-+ else
-+ state = osContinue;
-+ break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Commands"), &Commands); break;
- case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
- if (cOsdItem *item = Get(Current())) {
- cRecordControls::Stop(item->Text() + strlen(tr(STOP_RECORDING)));
-@@ -4670,6 +4707,12 @@ eOSState cMenuMain::ProcessKey(eKeys Key
- default: break;
- }
- }
-+ if (menu) {
-+ if (menu->IsMenu())
-+ return AddSubMenu((cOsdMenu *) menu);
-+ pluginOsdObject = menu;
-+ return osPlugin;
-+ }
- bool DoDisplay = Update();
- if (Key != kNone) {
- if (I18nCurrentLanguage() != osdLanguage) {
diff --git a/define_AUDIO_GET_PTS.patch b/define_AUDIO_GET_PTS.patch
deleted file mode 100644
index 5160cea..0000000
--- a/define_AUDIO_GET_PTS.patch
+++ /dev/null
@@ -1,12 +0,0 @@
---- vdr-2.4.0/PLUGINS/src/dvbhddevice/dvbhdffdevice.h.orig 2018-10-10 11:56:49.181447499 +0200
-+++ vdr-2.4.0/PLUGINS/src/dvbhddevice/dvbhdffdevice.h 2018-10-10 11:57:49.263760610 +0200
-@@ -4,6 +4,9 @@
- * See the README file for copyright information and how to reach the author.
- */
-
-+#ifndef AUDIO_GET_PTS
-+#define AUDIO_GET_PTS _IOR('o', 19, __u64)
-+#endif
- #ifndef __DVBHDFFDEVICE_H
- #define __DVBHDFFDEVICE_H
-
diff --git a/sources b/sources
index 6d545c5..31680d6 100644
--- a/sources
+++ b/sources
@@ -1,7 +1 @@
SHA512 (vdr-2.8.2.tar.bz2) = cecc90bb6a25f14a53f82238bd1680e0e3919bc197be81e405e0f698b3425fb3f7a21d600e789fdd1db2710baf624bef431b7b6babcb721ef41773136275ca9e
-SHA512 (vdr-rcu-2.2.0.tgz) = 56abebcfde3511c4dcf6f414915c7aa70a16b8e138e2d9364080828edc9b0da045acaadaaa4094d1315ddefdafa5f966aebcfacf979c068e077f1e32e29773b7
-SHA512 (vdr-dvbsddevice-2.2.0.tgz) = ac0b94b8b192208ad7e736d7c4f27cca6517134b17fc86a79cdd19453176d5f6076418bf679435899cd953053f3b54776342bcdab23a659e8331e9f2ed4ee364
-SHA512 (3473a7b939d7.zip) = fc405ac81cc1374de3a2d457f76972e605cf51c20c5e86f4fb683bb7fc78fde51690e65f463870c6881a65308722ccecd60d4a8957e3e2d43ecfd665f0e5aa8f
-SHA512 (vdr_2.2.0-5.debian.tar.bz2) = 6ba924fee84673be2a2652a26bccde4dc07dd9c7bcc871868f44bdc2748136a8ac26feb026c5b5dd9b3831c641ef1e729052c1190a45cc805f3fa563c3a59798
-SHA512 (vdr_1.4.5-2.ds.diff.gz) = dc82ca24e830a4fc4bfed51b2d112301b9058f2d1fea93761a42df8715dbe3ba0e9e8621464c8a6fe2dd3bd62d33efaff911182d3489ef741096654b7a3eb326
-SHA512 (vdr-2.4.6-editrecording.patch.gz) = 0935fdbe6b557c8b03396ff31021b35758a040f297315f39bdf605961a8ad77897884b527e2655e36ff8241e06cd1b2592c3bd0be09e78434263e43e85368e86
diff --git a/vdr-1.7.21-plugin-missing.patch b/vdr-1.7.21-plugin-missing.patch
deleted file mode 100644
index 011a0f1..0000000
--- a/vdr-1.7.21-plugin-missing.patch
+++ /dev/null
@@ -1,25 +0,0 @@
-diff -up vdr-1.7.21/plugin.c~ vdr-1.7.21/plugin.c
---- vdr-1.7.21/plugin.c~ 2010-01-06 13:36:46.000000000 +0200
-+++ vdr-1.7.21/plugin.c 2011-10-17 21:18:07.432419915 +0300
-@@ -317,6 +317,12 @@ void cPluginManager::AddPlugin(const cha
- char *p = strchr(s, ' ');
- if (p)
- *p = 0;
-+ struct stat st;
-+ if (stat (cString::sprintf("%s/%s%s%s%s", directory, LIBVDR_PREFIX, s, SO_INDICATOR, APIVERSION), &st) && errno == ENOENT) {
-+ esyslog("WARN: missing plugin '%s'", s);
-+ fprintf(stderr, "vdr: missing plugin '%s'\n", s);
-+ }
-+ else
- dlls.Add(new cDll(cString::sprintf("%s/%s%s%s%s", directory, LIBVDR_PREFIX, s, SO_INDICATOR, APIVERSION), Args));
- free(s);
- }
-@@ -325,7 +331,7 @@ bool cPluginManager::LoadPlugins(bool Lo
- {
- for (cDll *dll = dlls.First(); dll; dll = dlls.Next(dll)) {
- if (!dll->Load(Log))
-- return false;
-+ /*return false*/;
- }
- return true;
- }
diff --git a/vdr-2.4.0-paths.patch b/vdr-2.4.0-paths.patch
deleted file mode 100644
index 1ef982d..0000000
--- a/vdr-2.4.0-paths.patch
+++ /dev/null
@@ -1,62 +0,0 @@
---- vdr-2.4.0/newplugin.orig 2018-04-15 17:42:19.464011065 +0200
-+++ vdr-2.4.0/newplugin 2018-04-15 17:42:56.071975982 +0200
-@@ -24,7 +24,7 @@
- $PLUGIN_DESCRIPTION = "Enter description for '$PLUGIN_NAME' plugin";
- $PLUGIN_MAINENTRY = $PLUGIN_CLASS;
-
--$PLUGINS_SRC = "PLUGINS/src";
-+$PLUGINS_SRC = ".";
-
- $README = qq
- {This is a "plugin" for the Video Disk Recorder (VDR).
---- vdr-2.4.0/vdr.1.orig 2018-04-15 17:44:29.594888585 +0200
-+++ vdr-2.4.0/vdr.1 2018-04-15 17:48:32.015340633 +0200
-@@ -56,7 +56,7 @@
- .TP
- .BI \-c\ dir ,\ \-\-config= dir
- Read config files from directory \fIdir\fR
--(default is to read them from the video directory).
-+(default is to read them from __CONFIGDIR__).
- .TP
- .B \-d, \-\-daemon
- Run in daemon mode (implies \-\-no\-kbd).
-@@ -137,7 +137,7 @@
- LOG_USER, add '.n' to LEVEL, as in 3.7 (n=0..7).
- .TP
- .BI \-L\ dir ,\ \-\-lib= dir
--Search for plugins in directory \fIdir\fR (default is ./PLUGINS/lib).
-+Search for plugins in directory \fIdir\fR (default is __PLUGINDIR__).
- There can be several \fB\-L\fR options with different \fIdir\fR values.
- Each of them will apply to the \fB\-P\fR options following it.
- .TP
-@@ -231,7 +231,7 @@
- .TP
- .BI \-v\ dir ,\ \-\-video= dir
- Use \fIdir\fR as video directory.
--The default is \fI/video\fR.
-+The default is \fI__VIDEODIR__\fR.
- .TP
- .B \-V, \-\-version
- Print version information and exit.
---- vdr-2.4.0/vdr.5.orig 2018-04-15 17:51:02.213282179 +0200
-+++ vdr-2.4.0/vdr.5 2018-04-15 17:52:51.799237923 +0200
-@@ -714,7 +714,7 @@
- Each line contains one option in the format "Name = Value".
- See the MANUAL file for a description of the available options.
- .SS THEMES
--The files \fIthemes/<skin>\-<theme>.theme\fR in the config directory contain the
-+The files \fI__VARDIR__/themes/<skin>\-<theme>.theme\fR contain the
- color theme definitions for the various skins. In the actual file names \fI<skin>\fR
- will be replaced by the name if the skin this theme belongs to, and \fI<theme>\fR
- will be the name of this theme.
---- vdr-2.4.0/vdr.c.orig 2018-04-15 17:53:51.107197519 +0200
-+++ vdr-2.4.0/vdr.c 2018-04-15 17:54:44.512159912 +0200
-@@ -750,7 +750,7 @@
- if (!ResourceDirectory)
- ResourceDirectory = DEFAULTRESDIR;
- cPlugin::SetResourceDirectory(ResourceDirectory);
-- cThemes::SetThemesDirectory(AddDirectory(ConfigDirectory, "themes"));
-+ cThemes::SetThemesDirectory("__VARDIR__/themes");
-
- // Configuration data:
-
diff --git a/vdr-2.4.6-ClearObsoleteChannels2.diff b/vdr-2.4.6-ClearObsoleteChannels2.diff
deleted file mode 100644
index 5251d87..0000000
--- a/vdr-2.4.6-ClearObsoleteChannels2.diff
+++ /dev/null
@@ -1,58 +0,0 @@
-diff -Nurp vdr-2.4.6.orig/channels.c vdr-2.4.6/channels.c
---- vdr-2.4.6.orig/channels.c 2020-04-11 11:22:05.000000000 +0200
-+++ vdr-2.4.6/channels.c 2021-01-07 10:05:06.503383738 +0100
-@@ -1145,3 +1145,23 @@ cString ChannelString(const cChannel *Ch
- snprintf(buffer, sizeof(buffer), "%s", tr("*** Invalid Channel ***"));
- return buffer;
- }
-+
-+// --- cChannel cont. --------------------------------------------------------
-+
-+bool cChannel::ClearObsoleteChannel(void)
-+{
-+ bool ChannelsModified = false;
-+ if (time(NULL) - Seen() <= CHANNELTIMEOBSOLETE && endswith(name, CHANNELMARKOBSOLETE)) {
-+ int mlen = strlen(CHANNELMARKOBSOLETE);
-+ int e = strlen(name) - mlen - 1;
-+ name[e] = '\0';
-+ cString clrname = cString::sprintf("%s", name);
-+ name[e] = ' ';
-+
-+ int OldShowChannelNamesWithSource = Setup.ShowChannelNamesWithSource;
-+ Setup.ShowChannelNamesWithSource = 0;
-+ ChannelsModified |= SetName(clrname, shortName, provider + mlen + 1);
-+ Setup.ShowChannelNamesWithSource = OldShowChannelNamesWithSource;
-+ }
-+ return ChannelsModified;
-+}
-diff -Nurp vdr-2.4.6.orig/channels.h vdr-2.4.6/channels.h
---- vdr-2.4.6.orig/channels.h 2020-06-10 16:00:36.000000000 +0200
-+++ vdr-2.4.6/channels.h 2021-01-06 22:35:28.224118499 +0100
-@@ -202,6 +202,7 @@ public:
- void SetRefChannel(cChannel *RefChannel);
- bool SetSubtitlingDescriptors(uchar *SubtitlingTypes, uint16_t *CompositionPageIds, uint16_t *AncillaryPageIds);
- void SetSeen(void);
-+ bool ClearObsoleteChannel(void);
- void DelLinkChannel(cChannel *LinkChannel);
- };
-
-diff -Nurp vdr-2.4.6.orig/pat.c vdr-2.4.6/pat.c
---- vdr-2.4.6.orig/pat.c 2020-12-18 15:51:57.000000000 +0100
-+++ vdr-2.4.6/pat.c 2021-01-07 10:34:00.956778138 +0100
-@@ -489,6 +499,7 @@ void cPatFilter::Process(u_short Pid, u_
- SwitchToNextPmtPid();
- cChannel *Channel = Channels->GetByServiceID(Source(), Transponder(), pmt.getServiceId());
- if (Channel) {
-+ Channel->SetSeen();
- SI::CaDescriptor *d;
- cCaDescriptors *CaDescriptors = new cCaDescriptors(Channel->Source(), Channel->Transponder(), Channel->Sid(), Pid);
- // Scan the common loop:
-@@ -718,6 +729,8 @@ void cPatFilter::Process(u_short Pid, u_
- }
- }
- }
-+ if (Setup.UpdateChannels == 1 || Setup.UpdateChannels >= 3)
-+ ChannelsModified |= Channel->ClearObsoleteChannel();
- if (Setup.UpdateChannels >= 2) {
- ChannelsModified |= Channel->SetPids(Vpid, Ppid, Vtype, Apids, Atypes, ALangs, Dpids, Dtypes, DLangs, Spids, SLangs, Tpid);
- ChannelsModified |= Channel->SetCaIds(CaDescriptors->CaIds());
diff --git a/vdr-2.7.2-timers.patch b/vdr-2.7.2-timers.patch
deleted file mode 100644
index 56669da..0000000
--- a/vdr-2.7.2-timers.patch
+++ /dev/null
@@ -1,44 +0,0 @@
---- timers.c 2024/03/06 14:37:15 5.20
-+++ timers.c 2024/10/10 09:23:34
-@@ -726,10 +726,39 @@
- bool cTimer::Expired(void) const
- {
- if (IsSingleEvent() && !Recording()) {
-+ time_t Now = time(NULL);
- time_t ExpireTime = StopTimeEvent();
-- if (HasFlags(tfVps))
-+ if (HasFlags(tfVps)) {
- ExpireTime += EXPIRELATENCY;
-- return ExpireTime <= time(NULL);
-+ if (ExpireTime <= Now) {
-+ LOCK_SCHEDULES_READ;
-+ const cSchedule *Schedule = event ? event->Schedule() : NULL;
-+ const cEvent *FirstEvent = event;
-+ if (Schedule)
-+ FirstEvent = Schedule->Events()->Next(FirstEvent);
-+ else if ((Schedule = Schedules->GetSchedule(Channel())) != NULL) {
-+ FirstEvent = Schedule->Events()->First();
-+ if (FirstEvent)
-+ dsyslog("timer %s had no event, got %s from channel/schedule", *ToDescr(), *FirstEvent->ToDescr());
-+ }
-+ if (FirstEvent) {
-+ if (Schedule) {
-+ for (const cEvent *e = FirstEvent; e; e = Schedule->Events()->Next(e)) {
-+ if (e->Vps() == startTime) {
-+ ExpireTime = e->EndTime() + EXPIRELATENCY;
-+ dsyslog("timer %s is waiting for next VPS event %s", *ToDescr(), *e->ToDescr());
-+ break;
-+ }
-+ }
-+ }
-+ }
-+ else {
-+ dsyslog("timer %s has no event, setting expiration to +24h", *ToDescr());
-+ ExpireTime += 3600 * 24;
-+ }
-+ }
-+ }
-+ return ExpireTime <= Now;
- }
- return false;
- }
diff --git a/vdr-2.7.4-fedora-pkgconfig.patch b/vdr-2.7.4-fedora-pkgconfig.patch
deleted file mode 100644
index 914eb08..0000000
--- a/vdr-2.7.4-fedora-pkgconfig.patch
+++ /dev/null
@@ -1,15 +0,0 @@
---- vdr-2.7.4/Makefile.orig 2025-02-26 14:07:24.323718942 +0100
-+++ vdr-2.7.4/Makefile 2025-02-26 14:08:33.583687374 +0100
-@@ -186,6 +186,12 @@
- @echo "cflags=$(CFLAGS) $(CDEFINES) $(CINCLUDES) $(HDRDIR)" >> $@
- @echo "cxxflags=$(CXXFLAGS) $(CDEFINES) $(CINCLUDES) $(HDRDIR)" >> $@
- @echo "" >> $@
-+ @echo "datadir=\$${resdir}" >> $@
-+ @echo "rundir=$(RUNDIR)" >> $@
-+ @echo "vardir=$(VARDIR)" >> $@
-+ @echo "user=$(VDR_USER)" >> $@
-+ @echo "group=$(VDR_GROUP)" >> $@
-+ @echo "" >> $@
- @echo "Name: VDR" >> $@
- @echo "Description: Video Disk Recorder" >> $@
- @echo "URL: https://www.tvdr.de/" >> $@
diff --git a/vdr-2.7.9-MainMenuHooks-v1_0_5.diff b/vdr-2.7.9-MainMenuHooks-v1_0_5.diff
deleted file mode 100644
index 475c0ff..0000000
--- a/vdr-2.7.9-MainMenuHooks-v1_0_5.diff
+++ /dev/null
@@ -1,208 +0,0 @@
-This is a "patch" for the Video Disk Recorder (VDR).
-
-* History
-2026-02-07: Version 1.0.5
-Update for VDR 2.7.9 (Stefan Hofmann)
-
-2025-02-26: Version 1.0.4
-Update for VDR 2.7.4 (Jörg Riechardt)
-
-2013-11-08: Version 1.0.3
-Update for VDR 2.1.2 (Jörg Riechardt)
-
-2012-04-06: Version 1.0.2
-- Update for recent VDR developer versions (Manuel Reimer)
-
-2010-10-15: Version 1.0.1
-- return a cOsdObject instead of its subclass cOsdMenu (thanks to
- Joe_D@vdrportal)
-- version number defines in 'config.h' now follow the usual conventions:
- MAINMENUHOOKSVERSNUM is now a number, the newly added define
- MAINMENUHOOKSVERSION is a string (suggested by gnapheus@vdrportal)
-- patch is now based on VDR 1.6.0
-- updated documentation
-
-2007-02-26: Version 1.0
-- Initial revision.
-
-* Authors:
-Tobias Grimm <vdr at e-tobi dot net>
-Martin Prochnow <nordlicht at martins-kabuff dot de>
-Frank Schmirler <vdrdev at schmirler dot de>
-Christian Wieninger <cwieninger at gmx dot de>
-
-* Description:
-This patch allows plugins to replace the VDR main menus "Schedule",
-"Channels", "Timers" and "Recordings" by a different implementation.
-
-The patch is based on a suggestion of Christian Wieninger back in 2006
-(http://www.linuxtv.org/pipermail/vdr/2006-March/008234.html). It is
-meant to be an interim solution for VDR 1.4 until (maybe) VDR 1.5
-introduces an official API for this purpose.
-
-* Installation
-Change into the VDR source directory, then issue
- patch -p1 < path/to/MainMenuHooks-v1_0_1.patch
-and recompile.
-
-* Notes for plugin authors
-The following code sample shows the required plugin code for replacing
-the original Schedule menu:
-
-bool cMyPlugin::Service(const char *Id, void *Data)
-{
- cOsdMenu **menu = (cOsdMenu**) Data;
- if (MySetup.replaceSchedule &&
- strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0) {
- if (menu)
- *menu = (cOsdMenu*) MainMenuAction();
- return true;
- }
- return false;
-}
-
-Since patch version 1.0.1, the service call may return a cOsdObject
-instead of a 'cOsdMenu'. Use '#ifdef MAINMENUHOOKSVERSION' to detect
-version 1.0.1 or later.
-
-A plugin can replace more than one menu at a time. Simply replace the
-call to MainMenuAction() in the sample above by appropriate code.
-
-Note that a plugin *should* offer a setup option which allows the user
-to enable or disable the replacement. "Disabled" would be a reasonable
-default setting. By testing for a specific 'MAINMENUHOOKSVERSNUM', like
-'#if MAINMENUHOOKSVERSION >= 10001', plugin can decide at compile time
-which features and setup options to provide.
-
-In case there is an internal problem when trying to open the replacement
-menu, it is safe to return 'true' even though 'Data' is NULL. However an
-OSD message should indicate the problem to the user.
-
-Feel free to ship this patch along with your plugin. However if you
-think you need to modify the patch, we'd encourage you to contact the
-authors first or at least use a service id which differs in more than
-just the version number.
-
----
- config.h | 4 ++++
- menu.c | 71 +++++++++++++++++++++++++++++++++++++++++++++-----------
- 2 files changed, 61 insertions(+), 14 deletions(-)
-
-diff --git a/config.h b/config.h
-index 96fd5dd7..fddcdc21 100644
---- a/config.h
-+++ b/config.h
-@@ -35,6 +35,10 @@
- // only when there are changes to the plugin API. This allows compiled
- // plugins to work with newer versions of the core VDR as long as no
- // interfaces have changed. APIVERSNUM begins with "300.." for backwards
-+
-+// The MainMenuHook Patch's version number:
-+#define MAINMENUHOOKSVERSION "1.0.5"
-+#define MAINMENUHOOKSVERSNUM 10005 // Version * 10000 + Major * 100 + Minor
- // compatibility and can be used in #if preprocessor statements to handle
- // version dependent code.
-
-diff --git a/menu.c b/menu.c
-index 8798a3f1..57555d3e 100644
---- a/menu.c
-+++ b/menu.c
-@@ -4671,15 +4671,31 @@ cMenuMain::cMenuMain(eOSState State, bool OpenSubMenus)
-
- // Initial submenus:
-
-+ cOsdObject *menu = NULL;
- switch (State) {
-- case osSchedule: AddSubMenu(new cMenuSchedule); break;
-- case osChannels: AddSubMenu(new cMenuChannels); break;
-- case osTimers: AddSubMenu(new cMenuTimers); break;
-- case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, OpenSubMenus)); break;
-- case osSetup: AddSubMenu(new cMenuSetup); break;
-- case osCommands: AddSubMenu(new cMenuCommands(tr("Button$Commands"), &Commands)); break;
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings(NULL, 0, OpenSubMenus);
-+ break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Button$Commands"), &Commands); break;
- default: break;
- }
-+ if (menu)
-+ if (menu->IsMenu())
-+ AddSubMenu((cOsdMenu *) menu);
- }
-
- cOsdObject *cMenuMain::PluginOsdObject(void)
-@@ -4808,15 +4824,36 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
- eOSState state = cOsdMenu::ProcessKey(Key);
- HadSubMenu |= HasSubMenu();
-
-+ cOsdObject *menu = NULL;
- switch (state) {
-- case osSchedule: return AddSubMenu(new cMenuSchedule);
-- case osChannels: return AddSubMenu(new cMenuChannels);
-- case osTimers: return AddSubMenu(new cMenuTimers);
-- case osRecordings: return AddSubMenu(new cMenuRecordings);
-- case osRecsOpen: return AddSubMenu(new cMenuRecordings(NULL, 0, true));
-- case osRecsDel: return AddSubMenu(new cMenuRecordings(NULL, 0, true, NULL, true));
-- case osSetup: return AddSubMenu(new cMenuSetup);
-- case osCommands: return AddSubMenu(new cMenuCommands(tr("Button$Commands"), &Commands));
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ else
-+ state = osContinue;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ else
-+ state = osContinue;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecsOpen: menu = new cMenuRecordings(NULL, 0, true); break;
-+ case osRecsDel: menu = new cMenuRecordings(NULL, 0, true, NULL, true); break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Button$Commands"), &Commands); break;
- case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
- if (cOsdItem *item = Get(Current())) {
- cRecordControls::Stop(item->Text() + strlen(tr(STOP_RECORDING)));
-@@ -4867,6 +4904,12 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
- default: break;
- }
- }
-+ if (menu) {
-+ if (menu->IsMenu())
-+ return AddSubMenu((cOsdMenu *) menu);
-+ pluginOsdObject = menu;
-+ return osPlugin;
-+ }
- bool DoDisplay = Update();
- if (Key != kNone) {
- if (I18nCurrentLanguage() != osdLanguage) {
---
-2.43.0
-
diff --git a/vdr-2.7.9-last-replayed-per-folder-05.diff b/vdr-2.7.9-last-replayed-per-folder-05.diff
deleted file mode 100644
index 4809cf8..0000000
--- a/vdr-2.7.9-last-replayed-per-folder-05.diff
+++ /dev/null
@@ -1,275 +0,0 @@
---- config.h 2026/02/06 09:52:22 5.39
-+++ config.h 2026/02/08 13:54:21
-@@ -27,8 +27,8 @@
-
- // The plugin API's version number:
-
--#define APIVERSION "11"
--#define APIVERSNUM 30011
-+#define APIVERSION "12"
-+#define APIVERSNUM 30012
-
- // When loading plugins, VDR searches files by their APIVERSION, which
- // is different from VDRVERSION. APIVERSION is a plain number, incremented
---- menu.c 2026/02/06 20:34:13 5.44
-+++ menu.c 2026/02/08 21:10:52
-@@ -3170,8 +3170,8 @@
- if (!CurrentRecording) {
- if (delRecMenu)
- CurrentRecording = *deletedName;
-- else
-- CurrentRecording = *fileName ? *fileName : cReplayControl::LastReplayed();
-+ else if (*fileName && strstr(fileName, DirectoryName()))
-+ CurrentRecording = *fileName;
- }
- int current = Current();
- Clear();
-@@ -3179,6 +3179,7 @@
- Recordings->Sort();
- cMenuRecordingItem *CurrentItem = NULL;
- cMenuRecordingItem *LastItem = NULL;
-+ time_t LastReplayTime = 0;
- for (const cRecording *Recording = Recordings->First(); Recording; Recording = Recordings->Next(Recording)) {
- if ((!filter || filter->Filter(Recording)) && (!base || (strstr(Recording->Name(), base) == Recording->Name() && Recording->Name()[strlen(base)] == FOLDERDELIMCHAR))) {
- cMenuRecordingItem *Item = new cMenuRecordingItem(Recording, level);
-@@ -3201,8 +3202,17 @@
- else
- delete Item;
- if (LastItem || LastDir) {
-- if (CurrentRecording && strcmp(CurrentRecording, Recording->FileName()) == 0)
-- CurrentItem = LastDir ? LastDir : LastItem;
-+ if (CurrentRecording) {
-+ if (strcmp(CurrentRecording, Recording->FileName()) == 0)
-+ CurrentItem = LastDir ? LastDir : LastItem;
-+ }
-+ else if (!delRecMenu) {
-+ time_t t = Recording->GetLastReplayTime();
-+ if (t > LastReplayTime) {
-+ LastReplayTime = t;
-+ CurrentItem = LastDir ? LastDir : LastItem;
-+ }
-+ }
- }
- if (LastDir)
- LastDir->IncrementCounter(Recording->IsNew());
-@@ -3232,13 +3242,13 @@
-
- cString cMenuRecordings::DirectoryName(void)
- {
-- cString d(cVideoDirectory::Name());
- if (base) {
- char *s = ExchangeChars(strdup(base), true);
-- d = AddDirectory(d, s);
-+ cString d = cString::sprintf("%s/%s/", cVideoDirectory::Name(), s);
- free(s);
-+ return d;
- }
-- return d;
-+ return cVideoDirectory::Name();
- }
-
- bool cMenuRecordings::Open(bool OpenSubMenus)
-@@ -3291,8 +3301,7 @@
- cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
- if (ri && !ri->IsDirectory()) {
- cDevice::PrimaryDevice()->StopReplay(); // must do this first to be able to rewind the currently replayed recording
-- cResumeFile ResumeFile(ri->Recording()->FileName(), ri->Recording()->IsPesRecording());
-- ResumeFile.Delete();
-+ ri->Recording()->DeleteResume();
- return Play();
- }
- return osContinue;
---- recording.c 2026/02/03 15:25:54 5.52
-+++ recording.c 2026/02/08 13:54:21
-@@ -239,8 +239,12 @@
-
- // --- cResumeFile -----------------------------------------------------------
-
-+#define RESUME_NOT_INITIALIZED (-2)
-+
- cResumeFile::cResumeFile(const char *FileName, bool IsPesRecording)
- {
-+ fileTime = 0;
-+ index = RESUME_NOT_INITIALIZED;
- isPesRecording = IsPesRecording;
- const char *Suffix = isPesRecording ? RESUMEFILESUFFIX ".vdr" : RESUMEFILESUFFIX;
- fileName = MALLOC(char, strlen(FileName) + strlen(Suffix) + 1);
-@@ -257,12 +261,27 @@
- free(fileName);
- }
-
-+time_t cResumeFile::FileTime(void)
-+{
-+ if (index == RESUME_NOT_INITIALIZED) // checking index is OK, Read() sets index AND fileTime!
-+ Read();
-+ return fileTime;
-+}
-+
-+int cResumeFile::Index(void)
-+{
-+ if (index == RESUME_NOT_INITIALIZED)
-+ Read();
-+ return index;
-+}
-+
- int cResumeFile::Read(void)
- {
- int resume = -1;
- if (fileName) {
- struct stat st;
- if (stat(fileName, &st) == 0) {
-+ fileTime = st.st_mtime;
- if ((st.st_mode & S_IWUSR) == 0) // no write access, assume no resume
- return -1;
- }
-@@ -299,6 +318,7 @@
- LOG_ERROR_STR(fileName);
- }
- }
-+ index = resume;
- return resume;
- }
-
-@@ -335,11 +355,18 @@
- Recordings->ResetResume(fileName);
- StateKey.Remove();
- }
-+ fileTime = time(NULL);
-+ index = Index;
- return true;
- }
- return false;
- }
-
-+void cResumeFile::Reset(void)
-+{
-+ index = RESUME_NOT_INITIALIZED;
-+}
-+
- void cResumeFile::Delete(void)
- {
- if (fileName) {
-@@ -680,8 +707,6 @@
-
- // --- cRecording ------------------------------------------------------------
-
--#define RESUME_NOT_INITIALIZED (-2)
--
- struct tCharExchange { char a; char b; };
- tCharExchange CharExchange[] = {
- { FOLDERDELIMCHAR, '/' },
-@@ -878,7 +903,7 @@
- cRecording::cRecording(cTimer *Timer, const cEvent *Event)
- {
- id = 0;
-- resume = RESUME_NOT_INITIALIZED;
-+ resume = NULL;
- titleBuffer = NULL;
- sortBufferName = sortBufferTime = NULL;
- fileName = NULL;
-@@ -931,7 +956,7 @@
- cRecording::cRecording(const char *FileName)
- {
- id = 0;
-- resume = RESUME_NOT_INITIALIZED;
-+ resume = NULL;
- fileSizeMB = -1; // unknown
- channel = -1;
- instanceId = -1;
-@@ -971,6 +996,7 @@
- }
- else
- return;
-+ resume = new cResumeFile(fileName, isPesRecording);
- GetResume();
- // read an optional info file:
- cString InfoFileName = cString::sprintf("%s%s", fileName, isPesRecording ? INFOFILESUFFIX ".vdr" : INFOFILESUFFIX);
-@@ -1058,6 +1084,7 @@
- free(sortBufferTime);
- free(fileName);
- free(name);
-+ delete resume;
- delete info;
- }
-
-@@ -1128,11 +1155,12 @@
-
- int cRecording::GetResume(void) const
- {
-- if (resume == RESUME_NOT_INITIALIZED) {
-- cResumeFile ResumeFile(FileName(), isPesRecording);
-- resume = ResumeFile.Read();
-- }
-- return resume;
-+ return resume ? resume->Index() : -1;
-+}
-+
-+time_t cRecording::GetLastReplayTime(void) const
-+{
-+ return resume ? resume->FileTime() : 0;
- }
-
- bool cRecording::RetentionExpired(void) const
-@@ -1479,7 +1507,14 @@
-
- void cRecording::ResetResume(void) const
- {
-- resume = RESUME_NOT_INITIALIZED;
-+ if (resume)
-+ resume->Reset();
-+}
-+
-+void cRecording::DeleteResume(void) const
-+{
-+ if (resume)
-+ resume->Delete();
- }
-
- int cRecording::NumFrames(void) const
---- recording.h 2026/02/03 11:40:56 5.21
-+++ recording.h 2026/02/08 13:54:21
-@@ -52,12 +52,17 @@
- class cResumeFile {
- private:
- char *fileName;
-+ time_t fileTime;
-+ int index;
- bool isPesRecording;
- public:
- cResumeFile(const char *FileName, bool IsPesRecording);
- ~cResumeFile();
-+ time_t FileTime(void);
-+ int Index(void);
- int Read(void);
- bool Save(int Index);
-+ void Reset(void);
- void Delete(void);
- };
-
-@@ -122,7 +127,7 @@
- friend class cRecordings;
- private:
- int id;
-- mutable int resume;
-+ mutable cResumeFile *resume;
- mutable char *titleBuffer;
- mutable char *sortBufferName;
- mutable char *sortBufferTime;
-@@ -175,6 +180,7 @@
- const char *PrefixFileName(char Prefix);
- int HierarchyLevels(void) const;
- void ResetResume(void) const;
-+ void DeleteResume(void) const;
- double FramesPerSecond(void) const { return info->FramesPerSecond(); }
- int NumFrames(void) const;
- ///< Returns the number of frames in this recording.
-@@ -194,6 +200,9 @@
- int GetResume(void) const;
- ///< Returns the index of the frame where replay of this recording shall
- ///< be resumed, or -1 in case of an error.
-+ time_t GetLastReplayTime(void) const;
-+ ///< Returns the time this recording was last replayed (which is actually the
-+ ///< timestamp of the resume file), or 0 if no resume file exists.
- bool IsNew(void) const { return GetResume() <= 0; }
- bool IsEdited(void) const;
- bool IsPesRecording(void) const { return isPesRecording; }
diff --git a/vdr-2.7.9-remove-leftover-path.diff b/vdr-2.7.9-remove-leftover-path.diff
deleted file mode 100644
index e909f7c..0000000
--- a/vdr-2.7.9-remove-leftover-path.diff
+++ /dev/null
@@ -1,72 +0,0 @@
---- menu.h 2026/02/01 14:36:14 5.10
-+++ menu.h 2026/02/06 20:34:13 5.11
-@@ -216,7 +216,6 @@
- int helpKeys;
- bool delRecMenu;
- const cRecordingFilter *filter;
-- static cString path;
- static cString fileName;
- static cString deletedName;
- static time_t toggleDelRec;
---- menu.c 2026/02/05 15:55:07 5.43
-+++ menu.c 2026/02/06 20:34:13 5.44
-@@ -3088,7 +3088,6 @@
-
- // --- cMenuRecordings -------------------------------------------------------
-
--cString cMenuRecordings::path;
- cString cMenuRecordings::fileName;
- cString cMenuRecordings::deletedName;
- time_t cMenuRecordings::toggleDelRec = 0;
-@@ -3109,11 +3108,9 @@
- Set();
- if (Current() < 0)
- SetCurrent(First());
-- else if (OpenSubMenus && (cReplayControl::LastReplayed() || *path || (delRecMenu ? *deletedName : *fileName))) {
-- if (!*path || Level < strcountchr(path, FOLDERDELIMCHAR)) {
-- if (Open(true))
-- return;
-- }
-+ else if (OpenSubMenus && (cReplayControl::LastReplayed() || (delRecMenu ? *deletedName : *fileName))) {
-+ if (Open(true))
-+ return;
- }
- SetHelpKeys();
- }
-@@ -3204,11 +3201,7 @@
- else
- delete Item;
- if (LastItem || LastDir) {
-- if (*path) {
-- if (strcmp(path, Recording->Folder()) == 0)
-- CurrentItem = LastDir ? LastDir : LastItem;
-- }
-- else if (CurrentRecording && strcmp(CurrentRecording, Recording->FileName()) == 0)
-+ if (CurrentRecording && strcmp(CurrentRecording, Recording->FileName()) == 0)
- CurrentItem = LastDir ? LastDir : LastItem;
- }
- if (LastDir)
-@@ -3251,7 +3244,7 @@
- bool cMenuRecordings::Open(bool OpenSubMenus)
- {
- cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current());
-- if (ri && ri->IsDirectory() && (!*path || strcountchr(path, FOLDERDELIMCHAR) > 0)) {
-+ if (ri && ri->IsDirectory()) {
- const char *t = ri->Name();
- cString buffer;
- if (base) {
-@@ -3554,14 +3547,12 @@
- else if (state == osUserRecRenamed) {
- // a recording was renamed (within the same folder), so let's refresh the menu
- CloseSubMenu(false); // this is the cMenuRecordingEdit/cMenuPathEdit
-- path = NULL;
- fileName = NULL;
- state = osContinue;
- }
- else if (state == osUserRecMoved) {
- // a recording was moved to a different folder, so let's delete the old item
- CloseSubMenu(false); // this is the cMenuRecordingEdit/cMenuPathEdit
-- path = NULL;
- fileName = NULL;
- cOsdMenu::Del(Current());
- Set(); // the recording might have been moved into a new subfolder of this folder
diff --git a/vdr-2.8.1-MainMenuHooks-v1_0_5.diff b/vdr-2.8.1-MainMenuHooks-v1_0_5.diff
deleted file mode 100644
index 475c0ff..0000000
--- a/vdr-2.8.1-MainMenuHooks-v1_0_5.diff
+++ /dev/null
@@ -1,208 +0,0 @@
-This is a "patch" for the Video Disk Recorder (VDR).
-
-* History
-2026-02-07: Version 1.0.5
-Update for VDR 2.7.9 (Stefan Hofmann)
-
-2025-02-26: Version 1.0.4
-Update for VDR 2.7.4 (Jörg Riechardt)
-
-2013-11-08: Version 1.0.3
-Update for VDR 2.1.2 (Jörg Riechardt)
-
-2012-04-06: Version 1.0.2
-- Update for recent VDR developer versions (Manuel Reimer)
-
-2010-10-15: Version 1.0.1
-- return a cOsdObject instead of its subclass cOsdMenu (thanks to
- Joe_D@vdrportal)
-- version number defines in 'config.h' now follow the usual conventions:
- MAINMENUHOOKSVERSNUM is now a number, the newly added define
- MAINMENUHOOKSVERSION is a string (suggested by gnapheus@vdrportal)
-- patch is now based on VDR 1.6.0
-- updated documentation
-
-2007-02-26: Version 1.0
-- Initial revision.
-
-* Authors:
-Tobias Grimm <vdr at e-tobi dot net>
-Martin Prochnow <nordlicht at martins-kabuff dot de>
-Frank Schmirler <vdrdev at schmirler dot de>
-Christian Wieninger <cwieninger at gmx dot de>
-
-* Description:
-This patch allows plugins to replace the VDR main menus "Schedule",
-"Channels", "Timers" and "Recordings" by a different implementation.
-
-The patch is based on a suggestion of Christian Wieninger back in 2006
-(http://www.linuxtv.org/pipermail/vdr/2006-March/008234.html). It is
-meant to be an interim solution for VDR 1.4 until (maybe) VDR 1.5
-introduces an official API for this purpose.
-
-* Installation
-Change into the VDR source directory, then issue
- patch -p1 < path/to/MainMenuHooks-v1_0_1.patch
-and recompile.
-
-* Notes for plugin authors
-The following code sample shows the required plugin code for replacing
-the original Schedule menu:
-
-bool cMyPlugin::Service(const char *Id, void *Data)
-{
- cOsdMenu **menu = (cOsdMenu**) Data;
- if (MySetup.replaceSchedule &&
- strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0) {
- if (menu)
- *menu = (cOsdMenu*) MainMenuAction();
- return true;
- }
- return false;
-}
-
-Since patch version 1.0.1, the service call may return a cOsdObject
-instead of a 'cOsdMenu'. Use '#ifdef MAINMENUHOOKSVERSION' to detect
-version 1.0.1 or later.
-
-A plugin can replace more than one menu at a time. Simply replace the
-call to MainMenuAction() in the sample above by appropriate code.
-
-Note that a plugin *should* offer a setup option which allows the user
-to enable or disable the replacement. "Disabled" would be a reasonable
-default setting. By testing for a specific 'MAINMENUHOOKSVERSNUM', like
-'#if MAINMENUHOOKSVERSION >= 10001', plugin can decide at compile time
-which features and setup options to provide.
-
-In case there is an internal problem when trying to open the replacement
-menu, it is safe to return 'true' even though 'Data' is NULL. However an
-OSD message should indicate the problem to the user.
-
-Feel free to ship this patch along with your plugin. However if you
-think you need to modify the patch, we'd encourage you to contact the
-authors first or at least use a service id which differs in more than
-just the version number.
-
----
- config.h | 4 ++++
- menu.c | 71 +++++++++++++++++++++++++++++++++++++++++++++-----------
- 2 files changed, 61 insertions(+), 14 deletions(-)
-
-diff --git a/config.h b/config.h
-index 96fd5dd7..fddcdc21 100644
---- a/config.h
-+++ b/config.h
-@@ -35,6 +35,10 @@
- // only when there are changes to the plugin API. This allows compiled
- // plugins to work with newer versions of the core VDR as long as no
- // interfaces have changed. APIVERSNUM begins with "300.." for backwards
-+
-+// The MainMenuHook Patch's version number:
-+#define MAINMENUHOOKSVERSION "1.0.5"
-+#define MAINMENUHOOKSVERSNUM 10005 // Version * 10000 + Major * 100 + Minor
- // compatibility and can be used in #if preprocessor statements to handle
- // version dependent code.
-
-diff --git a/menu.c b/menu.c
-index 8798a3f1..57555d3e 100644
---- a/menu.c
-+++ b/menu.c
-@@ -4671,15 +4671,31 @@ cMenuMain::cMenuMain(eOSState State, bool OpenSubMenus)
-
- // Initial submenus:
-
-+ cOsdObject *menu = NULL;
- switch (State) {
-- case osSchedule: AddSubMenu(new cMenuSchedule); break;
-- case osChannels: AddSubMenu(new cMenuChannels); break;
-- case osTimers: AddSubMenu(new cMenuTimers); break;
-- case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, OpenSubMenus)); break;
-- case osSetup: AddSubMenu(new cMenuSetup); break;
-- case osCommands: AddSubMenu(new cMenuCommands(tr("Button$Commands"), &Commands)); break;
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings(NULL, 0, OpenSubMenus);
-+ break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Button$Commands"), &Commands); break;
- default: break;
- }
-+ if (menu)
-+ if (menu->IsMenu())
-+ AddSubMenu((cOsdMenu *) menu);
- }
-
- cOsdObject *cMenuMain::PluginOsdObject(void)
-@@ -4808,15 +4824,36 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
- eOSState state = cOsdMenu::ProcessKey(Key);
- HadSubMenu |= HasSubMenu();
-
-+ cOsdObject *menu = NULL;
- switch (state) {
-- case osSchedule: return AddSubMenu(new cMenuSchedule);
-- case osChannels: return AddSubMenu(new cMenuChannels);
-- case osTimers: return AddSubMenu(new cMenuTimers);
-- case osRecordings: return AddSubMenu(new cMenuRecordings);
-- case osRecsOpen: return AddSubMenu(new cMenuRecordings(NULL, 0, true));
-- case osRecsDel: return AddSubMenu(new cMenuRecordings(NULL, 0, true, NULL, true));
-- case osSetup: return AddSubMenu(new cMenuSetup);
-- case osCommands: return AddSubMenu(new cMenuCommands(tr("Button$Commands"), &Commands));
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ else
-+ state = osContinue;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ else
-+ state = osContinue;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecsOpen: menu = new cMenuRecordings(NULL, 0, true); break;
-+ case osRecsDel: menu = new cMenuRecordings(NULL, 0, true, NULL, true); break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Button$Commands"), &Commands); break;
- case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
- if (cOsdItem *item = Get(Current())) {
- cRecordControls::Stop(item->Text() + strlen(tr(STOP_RECORDING)));
-@@ -4867,6 +4904,12 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
- default: break;
- }
- }
-+ if (menu) {
-+ if (menu->IsMenu())
-+ return AddSubMenu((cOsdMenu *) menu);
-+ pluginOsdObject = menu;
-+ return osPlugin;
-+ }
- bool DoDisplay = Update();
- if (Key != kNone) {
- if (I18nCurrentLanguage() != osdLanguage) {
---
-2.43.0
-
diff --git a/vdr-2.8.2-MainMenuHooks-v1_0_5.diff b/vdr-2.8.2-MainMenuHooks-v1_0_5.diff
deleted file mode 100644
index 475c0ff..0000000
--- a/vdr-2.8.2-MainMenuHooks-v1_0_5.diff
+++ /dev/null
@@ -1,208 +0,0 @@
-This is a "patch" for the Video Disk Recorder (VDR).
-
-* History
-2026-02-07: Version 1.0.5
-Update for VDR 2.7.9 (Stefan Hofmann)
-
-2025-02-26: Version 1.0.4
-Update for VDR 2.7.4 (Jörg Riechardt)
-
-2013-11-08: Version 1.0.3
-Update for VDR 2.1.2 (Jörg Riechardt)
-
-2012-04-06: Version 1.0.2
-- Update for recent VDR developer versions (Manuel Reimer)
-
-2010-10-15: Version 1.0.1
-- return a cOsdObject instead of its subclass cOsdMenu (thanks to
- Joe_D@vdrportal)
-- version number defines in 'config.h' now follow the usual conventions:
- MAINMENUHOOKSVERSNUM is now a number, the newly added define
- MAINMENUHOOKSVERSION is a string (suggested by gnapheus@vdrportal)
-- patch is now based on VDR 1.6.0
-- updated documentation
-
-2007-02-26: Version 1.0
-- Initial revision.
-
-* Authors:
-Tobias Grimm <vdr at e-tobi dot net>
-Martin Prochnow <nordlicht at martins-kabuff dot de>
-Frank Schmirler <vdrdev at schmirler dot de>
-Christian Wieninger <cwieninger at gmx dot de>
-
-* Description:
-This patch allows plugins to replace the VDR main menus "Schedule",
-"Channels", "Timers" and "Recordings" by a different implementation.
-
-The patch is based on a suggestion of Christian Wieninger back in 2006
-(http://www.linuxtv.org/pipermail/vdr/2006-March/008234.html). It is
-meant to be an interim solution for VDR 1.4 until (maybe) VDR 1.5
-introduces an official API for this purpose.
-
-* Installation
-Change into the VDR source directory, then issue
- patch -p1 < path/to/MainMenuHooks-v1_0_1.patch
-and recompile.
-
-* Notes for plugin authors
-The following code sample shows the required plugin code for replacing
-the original Schedule menu:
-
-bool cMyPlugin::Service(const char *Id, void *Data)
-{
- cOsdMenu **menu = (cOsdMenu**) Data;
- if (MySetup.replaceSchedule &&
- strcmp(Id, "MainMenuHooksPatch-v1.0::osSchedule") == 0) {
- if (menu)
- *menu = (cOsdMenu*) MainMenuAction();
- return true;
- }
- return false;
-}
-
-Since patch version 1.0.1, the service call may return a cOsdObject
-instead of a 'cOsdMenu'. Use '#ifdef MAINMENUHOOKSVERSION' to detect
-version 1.0.1 or later.
-
-A plugin can replace more than one menu at a time. Simply replace the
-call to MainMenuAction() in the sample above by appropriate code.
-
-Note that a plugin *should* offer a setup option which allows the user
-to enable or disable the replacement. "Disabled" would be a reasonable
-default setting. By testing for a specific 'MAINMENUHOOKSVERSNUM', like
-'#if MAINMENUHOOKSVERSION >= 10001', plugin can decide at compile time
-which features and setup options to provide.
-
-In case there is an internal problem when trying to open the replacement
-menu, it is safe to return 'true' even though 'Data' is NULL. However an
-OSD message should indicate the problem to the user.
-
-Feel free to ship this patch along with your plugin. However if you
-think you need to modify the patch, we'd encourage you to contact the
-authors first or at least use a service id which differs in more than
-just the version number.
-
----
- config.h | 4 ++++
- menu.c | 71 +++++++++++++++++++++++++++++++++++++++++++++-----------
- 2 files changed, 61 insertions(+), 14 deletions(-)
-
-diff --git a/config.h b/config.h
-index 96fd5dd7..fddcdc21 100644
---- a/config.h
-+++ b/config.h
-@@ -35,6 +35,10 @@
- // only when there are changes to the plugin API. This allows compiled
- // plugins to work with newer versions of the core VDR as long as no
- // interfaces have changed. APIVERSNUM begins with "300.." for backwards
-+
-+// The MainMenuHook Patch's version number:
-+#define MAINMENUHOOKSVERSION "1.0.5"
-+#define MAINMENUHOOKSVERSNUM 10005 // Version * 10000 + Major * 100 + Minor
- // compatibility and can be used in #if preprocessor statements to handle
- // version dependent code.
-
-diff --git a/menu.c b/menu.c
-index 8798a3f1..57555d3e 100644
---- a/menu.c
-+++ b/menu.c
-@@ -4671,15 +4671,31 @@ cMenuMain::cMenuMain(eOSState State, bool OpenSubMenus)
-
- // Initial submenus:
-
-+ cOsdObject *menu = NULL;
- switch (State) {
-- case osSchedule: AddSubMenu(new cMenuSchedule); break;
-- case osChannels: AddSubMenu(new cMenuChannels); break;
-- case osTimers: AddSubMenu(new cMenuTimers); break;
-- case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, OpenSubMenus)); break;
-- case osSetup: AddSubMenu(new cMenuSetup); break;
-- case osCommands: AddSubMenu(new cMenuCommands(tr("Button$Commands"), &Commands)); break;
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings(NULL, 0, OpenSubMenus);
-+ break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Button$Commands"), &Commands); break;
- default: break;
- }
-+ if (menu)
-+ if (menu->IsMenu())
-+ AddSubMenu((cOsdMenu *) menu);
- }
-
- cOsdObject *cMenuMain::PluginOsdObject(void)
-@@ -4808,15 +4824,36 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
- eOSState state = cOsdMenu::ProcessKey(Key);
- HadSubMenu |= HasSubMenu();
-
-+ cOsdObject *menu = NULL;
- switch (state) {
-- case osSchedule: return AddSubMenu(new cMenuSchedule);
-- case osChannels: return AddSubMenu(new cMenuChannels);
-- case osTimers: return AddSubMenu(new cMenuTimers);
-- case osRecordings: return AddSubMenu(new cMenuRecordings);
-- case osRecsOpen: return AddSubMenu(new cMenuRecordings(NULL, 0, true));
-- case osRecsDel: return AddSubMenu(new cMenuRecordings(NULL, 0, true, NULL, true));
-- case osSetup: return AddSubMenu(new cMenuSetup);
-- case osCommands: return AddSubMenu(new cMenuCommands(tr("Button$Commands"), &Commands));
-+ case osSchedule:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
-+ menu = new cMenuSchedule;
-+ else
-+ state = osContinue;
-+ break;
-+ case osChannels:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osChannels", &menu))
-+ menu = new cMenuChannels;
-+ else
-+ state = osContinue;
-+ break;
-+ case osTimers:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osTimers", &menu))
-+ menu = new cMenuTimers;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecordings:
-+ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osRecordings", &menu))
-+ menu = new cMenuRecordings;
-+ else
-+ state = osContinue;
-+ break;
-+ case osRecsOpen: menu = new cMenuRecordings(NULL, 0, true); break;
-+ case osRecsDel: menu = new cMenuRecordings(NULL, 0, true, NULL, true); break;
-+ case osSetup: menu = new cMenuSetup; break;
-+ case osCommands: menu = new cMenuCommands(tr("Button$Commands"), &Commands); break;
- case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) {
- if (cOsdItem *item = Get(Current())) {
- cRecordControls::Stop(item->Text() + strlen(tr(STOP_RECORDING)));
-@@ -4867,6 +4904,12 @@ eOSState cMenuMain::ProcessKey(eKeys Key)
- default: break;
- }
- }
-+ if (menu) {
-+ if (menu->IsMenu())
-+ return AddSubMenu((cOsdMenu *) menu);
-+ pluginOsdObject = menu;
-+ return osPlugin;
-+ }
- bool DoDisplay = Update();
- if (Key != kNone) {
- if (I18nCurrentLanguage() != osdLanguage) {
---
-2.43.0
-
diff --git a/vdr-CHANGES.package.old b/vdr-CHANGES.package.old
deleted file mode 100644
index 144e9b9..0000000
--- a/vdr-CHANGES.package.old
+++ /dev/null
@@ -1,526 +0,0 @@
-* Mon Sep 5 2011 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-41
-- Build with $RPM_LD_FLAGS, add them to Make.config.
-- Ship various macros in -devel to ease plugin packaging.
-
-* Thu Jul 7 2011 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-40
-- Tweak init script to behave better with systemd at shutdown.
-
-* Fri Feb 18 2011 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-39
-- Fix writing next wakeup time from shutdown script.
-
-* Wed Feb 16 2011 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-38
-- Drop build time support for lirc < 0.8.6 default socket location.
-- Resurrect channel+epg patch.
-- Use %{_initddir} instead of the deprecated %{_initrddir}.
-- Set RTC wakeup for next timer also when shutting down from outside of VDR.
-- Add tmpfiles.d config on F-15+ (#656717).
-
-* Tue Feb 8 2011 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-37
-- Backport V4L2 patch from VDR 1.7.x to fix build with recent kernel headers.
-
-* Mon Feb 07 2011 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.6.0-36
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_15_Mass_Rebuild
-
-* Mon Nov 22 2010 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-35
-- Add vdr user to the audio group for direct sound device access with some
- plugin configurations.
-
-* Mon Oct 18 2010 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-34
-- Add vdr user to the cdrom (for optical drives) and dialout (for serial port
- remote controls) groups.
-- Drop no longer needed pam_console configuration.
-- Make vdr-i18n-to-gettext more likely to work out of the box.
-- Update MainMenuHooks patch to 1.0.1.
-- Update VDR_PLUGIN_ORDER in sysconfig.
-- Various minor vdr.pc improvements.
-
-* Thu Jul 8 2010 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-33
-- Include COPYING in -docs.
-
-* Tue Apr 27 2010 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-32
-- Use rtcwake to set wakeup time, simplify shutdown.
-- Drop no longer needed DVB header workaround (#483644).
-- Move pre-1.6.0 changelog entries to CHANGES.package.old.
-
-* Sun Mar 7 2010 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-31
-- Drop data migration from %post (was for upgrades from < 1.6.0-15).
-
-* Sun Feb 21 2010 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-30
-- Do sudoers config with sudoers.d (sudo >= 1.7.2p2-3).
-
-* Sun Nov 22 2009 Ville-Pekka Vainio <vpivaini AT cs.helsinki.fi> - 1.6.0-29
-- Set LIRC_DEVICE to /var/run/lirc/lircd for lirc 0.8.6 and add patch to
- change the sky plugin and vdr.1 man page accordingly (#538604).
-
-* Wed Oct 28 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-28
-- Update URLs to point to tvdr.de.
-
-* Sun Aug 9 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-27
-- Make -docs noarch also when built on EL > 5.
-
-* Sun Jul 26 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-26
-- Provide ISA qualified vdr(abi). Plugins should depend on (versioned)
- vdr(abi)%{?_isa} instead of just vdr(abi).
-- Borrow build patch for recent (broken? #483644) DVB headers from openSUSE.
-- Apply epgsearch timer integration patch.
-- Use %global instead of %define.
-
-* Mon Jun 22 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-25
-- Make -docs noarch when built on Fedora > 9.
-
-* Mon Jun 15 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-24
-- Update hlcutter patch to 0.2.2, drop no longer needed gcc 4.4 workaround.
-- Resurrect Finnish translation for hlcutter.
-
-* Tue Jun 9 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-23
-- Apply gcc 4.4 build fix from openSUSE and upstream, hlcutter still needs work.
-- Drop no longer needed DVB header workaround.
-
-* Tue May 26 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-22
-- Quiet usermod, avoid possible extra -v inserted to /etc/sysconfig/vdr on
- upgrades from earlier releases that used to default to /srv/vdr for video.
-- Add jumpplay patch 1.0 and a Finnish translation for it.
-- Update liemikuutio patch to 1.27.
-
-* Sat Apr 18 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-21
-- Use videodir from /etc/sysconfig/vdr if set in vdr-moveto.sh.
-
-* Tue Apr 14 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-20
-- Add ugly workarounds to "fix" build with gcc 4.4 and current DVB headers.
-- Use useradd -N instead of -n in scriptlets (#495731).
-- Include Rolf Ahrenberg's sys_nice and ionice patches.
-- Update liemikuutio patch to 1.25.
-
-* Sat Feb 28 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-19
-- Update liemikuutio patch to 1.24 to fix some issues with gcc 4.4.
-- Apply Rolf Ahrenberg's patch to include audio and subtitles shortcut
- buttons in DVB setup menu.
-
-* Wed Feb 25 2009 Fedora Release Engineering <rel-eng@lists.fedoraproject.org> - 1.6.0-18
-- Rebuilt for https://fedoraproject.org/wiki/Fedora_11_Mass_Rebuild
-
-* Sat Jan 31 2009 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-17
-- Do not create the video group, require udev >= 136-1 which creates it.
-- Replace ttxtsubs patch with one from new ttxtsubs upstream.
-- Update to re-released liemikuutio 1.21 patch.
-
-* Mon Dec 29 2008 Ville-Pekka Vainio <vpivaini AT cs.helsinki.fi> - 1.6.0-16
-- Disable kernel DVB API check to fix build, upstream VDR 1.6.0 expects DVB
- API v3 but current Rawhide kernels have v5.
-
-* Sun Nov 23 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-15
-- Reorganize dir structure for better Fedora guidelines compliance (#443706):
- /var/lib/vdr/* -> /var/lib/vdr/data, /srv/video -> /var/lib/vdr/video.
-- Drop audiodir and ownership of /srv/audio, examples still point to it.
-
-* Sat Nov 22 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-8
-- Fix setting wakeup time via rtc0 when hardware clock is localtime.
-- Drop remote plugin examples from udev rules, they're in vdr-remote now.
-
-* Tue Oct 28 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-7
-- Fix setting wakeup time via /proc/acpi/alarm when hardware clock is UTC.
-
-* Thu Sep 25 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-6
-- README.package updates.
-- Specfile micro-cleanups.
-
-* Sun Sep 7 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-5
-- Work around Fedora buildsys not coping with "%patch -F" (infrastructure
- ticket #817).
-
-* Sun Sep 7 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-4
-- Apply upstream 1.6.0-2 maintenance patch.
-- Update shutdown/wakeup functionality for F-9+ ACPI wakeup.
-- Install halt.local script (vdr-halt.local.sh) instead of embedding it
- in README-package. It still needs to be inserted to (or installed/symlinked
- as) /sbin/halt.local.
-- Convert remaining docs to UTF-8.
-- Set expected fuzz factor when applying patches.
-
-* Sat May 10 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-3
-- Update liemikuutio patch to 1.21.
-- Change timercmd patch to the one shipped with epgsearch 0.9.24.
-- Include vdr-i18n-to-gettext in -devel.
-- Own (%ghost) videodir/.update.
-
-* Sun Apr 13 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-2
-- Apply upstream 1.6.0-1 maintenance patch.
-- Update timer info patch to 0.5 (fixes the "±" sign).
-
-* Mon Apr 7 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-1
-- Apply "unofficial" timercmd patch from HoochVDR.
-- Apply Luca Olivetti's DXR3 subtitle compatibility patch.
-- Decrease default wakeup delay before a timed recording to 10 minutes.
-- Don't reload DVB drivers by default on unexpected exits in runvdr.
-- Use "kill -HUP" in init script's restart action only on a running service.
-- Update and apply timer-info patch.
-
-* Sun Apr 6 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-0.4
-- Obsolete vdr-subtitles.
-
-* Fri Apr 4 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-0.3
-- Update liemikuutio patch to 1.20.
-- Move various (partially) upstreamable changes to patches instead of
- inlining them in the specfile.
-- Drop unused logdir.
-- Move pre-2008 changelog entries to CHANGES.package.old.
-
-* Sat Mar 29 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-0.2
-- Add --with docs build option for building a -docs subpackage.
-- Refresh liemikuutio and ttxtsubs patches.
-
-* Sun Mar 23 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.6.0-0.1
-- 1.6.0 final; still quite a bit to do with the package.
-- Adapt sync early and epgsearch (partially) patches.
-- Fix dependencies of the sky plugin.
-- Move bunch of inline sed'ing to separate patches.
-- Use kill -HUP in init script's restart action.
-- Don't include bundled plugin sysconfig snippets in main package.
-
-* Tue Mar 18 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.5.18-0.1
-- First cut at packaging 1.5.18.
-- Plugin licenses clarified to be GPLv2+.
-
-* Sun Mar 16 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-11
-- Kill runvdr before vdr in init script's "stop" action in order to prevent
- it from restarting vdr in case something goes wrong when shutting down.
-- Direct debug messages from sync early patch to to syslog instead of stderr.
-- Make time to wake up before a timer configurable.
-- Enable shutdown script by default.
-
-* Wed Feb 20 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-10
-- Rebuild.
-
-* Sun Feb 17 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-9
-- Don't run "restart" for init script's "reload" action per the LSB spec.
-- runvdr cleanups, handle PLUGIN_ENABLED values case insensitively.
-
-* Thu Feb 14 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-8
-- Patch to fix build with GCC 4.3's cleaned up C++ headers.
-
-* Sat Jan 12 2008 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-7
-- Include Udo Richter's hard link cutter patch v0.2.0 (see README-HLCUTTER).
-- Add some plugins to the default plugin order list in sysconfig.
-- Minor runvdr cleanups.
-
-* Wed Oct 17 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-6
-- Add patch to start playback from recordings menu with the play button.
-
-* Fri Oct 12 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-5
-- Fix init script not to start a new vdr if it's already running (#247089).
-- Update subtitles+ttxtsubs patch to Rolf's latest revision.
-
-* Mon Aug 6 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-4
-- License: GPL+ for skincurses and sky plugins.
-
-* Wed Aug 1 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-3
-- Sync user/group handling with current packaging guideline draft.
-- Include vdr-moveto.sh, a script for organizing recordings.
-- Refresh patches, include GPL version info in License tag.
-- Move pre-2007 %changelog entries to CHANGES.package.old.
-- Make sure all package scriptlets exit with zero status.
-- Add LSB comment block to init script.
-
-* Mon Jun 11 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-2
-- Apply Reinhard Nißl's "sync early" patch for smoother channel changes.
-
-* Sat May 12 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.7-1
-- 1.4.7.
-
-* Tue May 1 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.6-3
-- Upstream 1.4.6-1, refresh other patches.
-
-* Mon Apr 23 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.6-2
-- Relocate themes to /var/lib/vdr/themes (#216355).
-- Tighten up some directory permissions.
-
-* Sun Mar 4 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.6-1
-- 1.4.6.
-
-* Sat Feb 24 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.5-4
-- Upstream 1.4.5-2.
-
-* Sun Jan 28 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.5-3
-- Upstream 1.4.5-1, refresh other patches.
-- Fix xineliboutput plugin name in sysconfig's VDR_PLUGIN_ORDER.
-- Delay a bit in the init script's stop function for clean shutdown.
-- Update CDDA_TRANSPORT workaround status in commands.conf abcde example.
-- Improve /sbin/halt.local explanation in README.package.
-- Minor specfile cleanups.
-
-* Sun Jan 7 2007 Ville Skyttä <ville.skytta@iki.fi> - 1.4.5-2
-- 1.4.5, Darren Salt's 1.4.4-1.ds.
-- Make it possible to disable installed plugins in plugin sysconfig snippet.
-- Add shutdown script, document ACPI wakeup usage in README.package.
-- Shut down earlier by default for better experience with the -s option.
-- Include INSTALL in docs, it contains useful post-install info.
-- Improve remote control examples in udev rules snippet.
-- Honor $TMPDIR when running with core dumps enabled.
-- Add read only root/temporary state config.
-- Add ttxtsubs to default plugin order list.
-- Include log dir for plugins.
-
-* Sat Nov 4 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.4-1
-- 1.4.4.
-- Apply epgsearch and timer info patches.
-- Mark console.perms snippet noreplace again.
-
-* Sun Oct 15 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.3-3
-- Apply upstream 1.4.3-1 maintenance patch.
-- Sync with 1.4.3-1.ds, update liemikuutio patch to 1.13.
-- Drop no longer needed README.plugins.d, README.package is enough (#190343).
-
-* Fri Oct 06 2006 Thorsten Leemhuis <fedora [AT] leemhuis [DOT] info> 1.4.3-2
-- rebuilt for unwind info generation, broken in gcc-4.1.1-21
-
-* Sat Sep 23 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.3-1
-- 1.4.3, 1.4.2-1.ds, liemikuutio 1.12.
-
-* Sun Sep 3 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.2-2
-- 1.4.2-1, liemikuutio 1.10.
-
-* Sun Aug 27 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.2-1
-- 1.4.2, syscall and maintenance patches applied upstream.
-
-* Mon Aug 21 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-11
-- Set device permissions in both console.perms and udev (#202132).
-- Implement restart and DVB module reload functionality roughly like
- upstream runvdr does it.
-
-* Fri Aug 18 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-10
-- Fix build with recent kernel headers where _syscallX are no longer visible.
-- Drop ia64 patch (superseded by the above) and the thread poison patch.
-
-* Fri Aug 11 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-9
-- Set device permissions using console.perms instead of udev rules
- to work around new pam trumping udev config (#202132).
-
-* Sun Aug 6 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-8
-- Apply upstream 1.4.1-3 maintenance patch.
-
-* Sun Jul 23 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-7
-- Apply upstream 1.4.1-2 maintenance patch.
-- Use VFAT compatible recording names by default.
-
-* Sun Jul 16 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-6
-- Don't use %bcond_with to appease buildsys.
-
-* Sat Jul 15 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-5
-- Update liemikuutio patch to 1.8.
-- Patch dumpability to work with PR_SET_DUMPABLE changes in recent kernels,
- add corresponding warning to sysconfig snippet comment.
-
-* Sat Jul 1 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-4
-- Update liemikuutio patch to 1.7.
-- Conditionally build the skincurses and sky plugins; disabled by default,
- rebuild with "--with plugins" to enable.
-- Make symlinks relative.
-
-* Fri Jun 23 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-3
-- Move headers to %{_includedir}.
-- Add README.package to docs, describing some aspects of the package (#1063).
-- Add LIBDIR to Make.config to ease local plugin builds (#1063).
-- Update VDR_PLUGIN_ORDER in sysconfig snippet, loading potential output
- plugins before others. See commentary in the file for details.
-- Add example how to affect OSD time/date formats to sysconfig snippet.
-
-* Sun Jun 18 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-2
-- 1.4.1-1 + 1.4.1-1.ds.
-- Drop glibc-kernheaders dependency from -devel too.
-- Make -devel multilib friendly, add pkgconfig file.
-
-* Sun Jun 11 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.1-1
-- 1.4.1, liemikuutio 1.6.
-
-* Mon May 29 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.0-5
-- Address some review notes in #190343 comment 2:
-- Add example udev rule for predictable remote control device naming.
-- Drop glibc-kernheaders build dependency.
-- Specfile cleanups.
-
-* Sun May 28 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.0-4
-- Apply upstream 1.4.0-2 maintenance patch.
-
-* Sun May 14 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.0-3
-- Apply upstream 1.4.0-1 maintenance patch.
-- Drop unneeded version check from %check.
-
-* Mon May 1 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.0-2
-- Sync with 1.4.0-1.ds.
-
-* Sun Apr 30 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.4.0-1
-- 1.4.0 + 1.3.48-1.ds, re-enable reload patch.
-
-* Sun Apr 23 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.48-1
-- 1.3.48, no need to rebuild plugins, woo-hoo!
-
-* Mon Apr 17 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.47-1
-- 1.3.47 + the usual patchwork.
-- Trim pre-RLO %changelog entries.
-- Add vdr(abi) and vdr-devel(api) versioned Provides for plugin versioning
- and --version and --apiversion to vdr-config, see HISTORY.
-- Use sed instead of perl for edits during the build.
-- Temporarily disable reload/SIGUSR1 patch.
-
-* Sun Apr 9 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.46-1
-- 1.3.46 + the usual patchwork.
-
-* Sun Mar 26 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.45-1
-- 1.3.45 + 1.3.44-2.ds + Rofa's mute fix.
-
-* Thu Mar 09 2006 Andreas Bierfert <andreas.bierfert[AT]lowlatency.de>
-- switch to new release field
-
-* Sun Mar 5 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.44-0.lvn.2
-- Sync with 1.3.44-1.ds, apply Rolf Ahrenberg's readline fix.
-
-* Wed Mar 1 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.44-0.lvn.1
-- 1.3.44, include Marko Mäkelä's suspend patch.
-- Move runvdr to %{_sbindir} and make it option-compatible with the
- upstream one. If VDR_INIT is non-empty in the environment, automatic
- command line building is enabled. The init script still does that.
- Also makes the init script and runvdr easier to adapt to alternative
- init systems such as initng (#781).
-
-* Tue Feb 28 2006 Andreas Bierfert <andreas.bierfert[AT]lowlatency.de>
-- add dist
-
-* Tue Feb 21 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.43-0.lvn.2
-- Sync with 1.3.43-1.ds.
-
-* Sun Feb 19 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.43-0.lvn.1
-- 1.3.43 + 1.3.42-2.ds + Rolf Ahrenberg's audiotracks patch.
-- Drop Reinhard Nißl's dvbplayer patch at least for now.
-
-* Sun Feb 5 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.42-0.lvn.1
-- 1.3.42; dumpable, menu-in-replay and constness patches applied upstream.
-- Make udev rules work as expected with later udev versions.
-
-* Sun Jan 29 2006 Ville Skyttä <ville.skytta@iki.fi>
-- 1.3.41; Finnish, EPG null title and LIRC reconnect patches
- applied/obsoleted upstream.
-- Revert back to Udo Richter's more general purpose "menu in replay" patch.
-
-* Sat Jan 28 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.40-0.lvn.3
-- Patch LIRC support to try to reconnect if lircd connection is lost.
-- Update liemikuutio patch to 1.2.
-
-* Mon Jan 23 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.40-0.lvn.2
-- Replace EPG null title crash fix with upstream one.
-
-* Sun Jan 22 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.40-0.lvn.1
-- 1.3.40, key macro and SVDRP CLRE crash patches applied upstream.
-- Replace menu tweak patch with one from Luca Olivetti.
-
-* Wed Jan 18 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.39-0.lvn.3
-- Fix sysconfig stupidity introduced in 0.lvn.2, _only_ DAEMON_COREFILE_LIMIT
- was taken into account :P
-
-* Mon Jan 16 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.39-0.lvn.2
-- Apply upstream key macro and SVDRP CLRE crash patches.
-- Source sysconfig snippet again in init script (so that eg.
- DAEMON_COREFILE_LIMIT etc works as expected).
-
-* Sun Jan 15 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.39-0.lvn.1
-- 1.3.39 + the usual patch shuffling, kudos to Rolf Ahrenberg and Udo
- Richter.
-
-* Wed Jan 11 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.38-0.lvn.4
-- Apply upstream menu fix patch.
-- Add some comments to sysconfig file.
-
-* Tue Jan 10 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.38-0.lvn.3
-- Sync with 1.3.38-2.ds.
-
-* Mon Jan 9 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.38-0.lvn.2
-- Sync with 1.3.38-1.ds.
-- Remove references to the removed ca.conf from the manpage.
-
-* Sun Jan 8 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.38-0.lvn.1
-- 1.3.38, su/capabilities stuff, low disk space crash, CAN-2005-0071,
- audio pids and timed recording deletion patches applied upstream.
-- Patch to allow core dumps and startup script simplifications with the
- newly introduced set[ug]id functionality.
-- Patch to fix gettid usage (includes).
-- enAIO patchset replaced by liemikuutio 1.0.
-- Updated Finnish translations.
-
-* Wed Jan 4 2006 Ville Skyttä <ville.skytta@iki.fi> - 1.3.37-0.lvn.3
-- Fix syntax error in sysconfig file (#714, Scott Tsai).
-- Change built-in default of epg.data location to %{cachedir}, drop it
- from the sysconfig file and update docs.
-
-* Sat Dec 10 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.37-0.lvn.2
-- Apply "low disk space" message crash from Andreas Brachold.
-- Apply upstream fix for 2nd audio pid and live DD on encrypted channels.
-- Add (commented out) sysconfig and console.perms.d samples for setting and
- retaining VDR-friendly CD/DVD drive permissions.
-- Sync with 1.3.37-1.ds.
-
-* Mon Nov 28 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.37-0.lvn.1
-- 1.3.37.
-
-* Sat Nov 12 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.36-0.lvn.2
-- Default config improvements.
-- Sync with 1.3.36-1.ds.
-
-* Sun Nov 6 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.36-0.lvn.1
-- 1.3.36, recording end crash fix applied upstream.
-- Don't load LIRC unconditionally, pass --lirc by default in sysconfig/vdr.
-
-* Tue Nov 1 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.35-0.lvn.1
-- 1.3.35 + Joachim Wilke's recording end crash fix; Finnish, daemon and
- infloop patches applied upstream.
-
-* Sun Oct 16 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.34-0.lvn.2
-- Update enAIO patch to 2.7.
-- Apply daemon and menu infinite loop patches from Enrico Scholz.
-
-* Fri Oct 7 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.34-0.lvn.1
-- 1.3.34 + 1.3.34-1.ds + Rolf Ahrenberg's Finnish i18n fixes.
-
-* Sun Sep 25 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.33-0.lvn.1
-- 1.3.33.
-- Sync with 1.3.32-1.ds.
-- Apply enAIO patch.
-
-* Fri Sep 16 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.32-0.lvn.2
-- Fix init script on multilib archs (#596, Jussi Lehtola).
-
-* Sun Sep 11 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.32-0.lvn.1
-- 1.3.32, bunch of patches applied upstream.
-- Drop main package dependency from -devel.
-
-* Sun Aug 28 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.31-0.lvn.1
-- 1.3.31 + upstream warnings fix + Reinhard Nißl's patch bomb.
-- Ship plugin creator script in -devel.
-
-* Mon Aug 22 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.30-0.lvn.2
-- Don't use stuff from the su/capabilities patch by default, it causes
- problems with getting core dumps if plugins crash.
-- Simplify things by splitting stuff from init script to separate launcher.
-- Sync with 1.3.30-1.ds, fix a warning in the svdrp grab patch.
-- Add audio CD ripping example to commands.conf.
-
-* Sun Aug 21 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.30-0.lvn.1
-- 1.3.30, PPC/unaligned patch no longer needed.
-- Tune default plugin load order, add muggle.
-- Minor init script improvements.
-
-* Wed Aug 17 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.29-0.lvn.2
-- Sync with Darren Salt's 1.3.29-1.ds.
-- Drop dvbplayer patch; no longer needed for recent recordings.
-- Patch/hack (from reiserfsprogs) to fix PPC build (asm/unaligned.h).
-- Start up earlier/shut down later by default at boot/shutdown.
-- Add vardir for storing non-cache, non-video data; and audiodir for
- audio plugins.
-
-* Mon Aug 15 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.29-0.lvn.1
-- 1.3.29, Finnish patch applied upstream.
-
-* Sat Aug 13 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.28-1.lvn.2
-- Apply Rolf Ahrenberg's newest Finnish patch.
-- Drop historical conflict with an old vdr-dxr3 snapshot.
-
-* Thu Aug 11 2005 Ville Skyttä <ville.skytta@iki.fi> - 1.3.28-1.lvn.1
-- Truncate config files in more portable manner during build.
diff --git a/vdr-README.package b/vdr-README.package
index 7ffaad5..5965d64 100644
--- a/vdr-README.package
+++ b/vdr-README.package
@@ -7,8 +7,8 @@ Installation layout
As usual, "rpm -ql vdr" should give a fairly good picture where things
are installed. The goal in this package is to make file locations be
natural to people who are used to packaged software, which causes
-quite a bit of deviation from the upstream layout as of 1.6.x. Also,
-as usual, "rpm -qc vdr" lists configuration files.
+quite a bit of deviation from the upstream layout. Also, as usual,
+"rpm -qc vdr" lists configuration files.
Configuration
-------------
@@ -16,11 +16,11 @@ Configuration
First, refer to "man 5 vdr" for general upstream VDR configuration
stuff. Then, have a look at /etc/sysconfig/vdr. The file is fairly
well documented, and among other things, is where one should specify
-command line options to VDR itself. The standard "vdr" init script
-invokes /usr/sbin/runvdr, which reads /etc/sysconfig/vdr.
+command line options to VDR itself. The vdr.service systemd unit
+invokes /usr/bin/runvdr, which reads /etc/sysconfig/vdr.
-The init script and the runner load per-plugin configuration files
-from the /etc/sysconfig/vdr-plugins.d directory for each found plugin.
+runvdr loads per-plugin configuration files from the
+/etc/sysconfig/vdr-plugins.d directory for each found plugin.
Those files are sourced shell (bash) scripts, named like
<pluginname>.conf (so eg. for plugin libvdr-foo.*,
/etc/sysconfig/vdr-plugins.d/foo.conf is loaded). Configure command
@@ -31,9 +31,7 @@ The vdr user should have access to the majority of needed hardware
devices out of the package, either directly or through the video
group. However some setups may need additional configuration in order
to allow VDR or some plugins to use for example certain remote
-controllers or optical drives. See the /etc/udev/rules.d/*-vdr.rules
-and /etc/security/console.perms.d/*-vdr.perms files for some usual
-suspects and examples.
+controllers or optical drives.
Additional plugins
------------------
diff --git a/vdr-check-setup.sh b/vdr-check-setup.sh
index 93f1ba3..db982a5 100644
--- a/vdr-check-setup.sh
+++ b/vdr-check-setup.sh
@@ -1,9 +1,13 @@
#!/bin/sh
+# The packaged channels.conf contains only whitespace; VDR is not useful
+# before a real channel list exists, so refuse to start (exit 2 matches
+# RestartPreventExitStatus in vdr.service) until one has been created.
+
cfg=/etc/vdr/channels.conf
-if [ ! -s $cfg ] ; then
- echo "$cfg is not valid, use \"scandvb -o vdr\" from the dvb-apps package to create one." >&2
+if ! grep -q '[^[:space:]]' "$cfg" 2>/dev/null ; then
+ echo "$cfg is empty, use \"scandvb -o vdr\" from the dvb-apps package to create one." >&2
exit 2
else
- chown VDR_USER:VDR_GROUP $cfg && chmod 644 $cfg
+ chown VDR_USER:VDR_GROUP "$cfg" && chmod 644 "$cfg"
fi
diff --git a/vdr-dvbhddevice.conf b/vdr-dvbhddevice.conf
deleted file mode 100644
index b4594d5..0000000
--- a/vdr-dvbhddevice.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-# Configuration snippet for vdr-dvbhddevice -*- sh -*-
-#
-# Add command line options to pass to the dvbhddevice plugin to PLUGIN_OPTIONS.
-
-PLUGIN_OPTIONS=""
diff --git a/vdr-dvbsddevice.conf b/vdr-dvbsddevice.conf
deleted file mode 100644
index 1fe6102..0000000
--- a/vdr-dvbsddevice.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-# Configuration snippet for vdr-dvbsddevice -*- sh -*-
-#
-# Add command line options to pass to the dvbsddevice plugin to PLUGIN_OPTIONS.
-
-PLUGIN_OPTIONS=""
diff --git a/vdr-fedora.patch b/vdr-fedora.patch
new file mode 100644
index 0000000..f9403c7
--- /dev/null
+++ b/vdr-fedora.patch
@@ -0,0 +1,32 @@
+vdr.pc must export datadir/rundir/vardir/user/group: the packaged RPM
+macros and Make.config resolve them via pkg-config, and an unset user
+would make VDR skip dropping privileges. The installed vdr-newplugin
+runs outside a VDR source tree, so it must create its skeleton in the
+current directory.
+
+--- a/Makefile
++++ b/Makefile
+@@ -186,6 +186,12 @@
+ @echo "cflags=$(CFLAGS) $(CDEFINES) $(CINCLUDES) $(HDRDIR)" >> $@
+ @echo "cxxflags=$(CXXFLAGS) $(CDEFINES) $(CINCLUDES) $(HDRDIR)" >> $@
+ @echo "" >> $@
++ @echo "datadir=\$${resdir}" >> $@
++ @echo "rundir=$(RUNDIR)" >> $@
++ @echo "vardir=$(VARDIR)" >> $@
++ @echo "user=$(VDR_USER)" >> $@
++ @echo "group=$(VDR_GROUP)" >> $@
++ @echo "" >> $@
+ @echo "Name: VDR" >> $@
+ @echo "Description: Video Disk Recorder" >> $@
+ @echo "URL: https://www.tvdr.de/" >> $@
+--- a/newplugin
++++ b/newplugin
+@@ -24,7 +24,7 @@
+ $PLUGIN_DESCRIPTION = "Enter description for '$PLUGIN_NAME' plugin";
+ $PLUGIN_MAINENTRY = $PLUGIN_CLASS;
+
+-$PLUGINS_SRC = "PLUGINS/src";
++$PLUGINS_SRC = ".";
+
+ $README = qq
+ {This is a "plugin" for the Video Disk Recorder (VDR).
diff --git a/vdr-fsf-address.patch b/vdr-fsf-address.patch
new file mode 100644
index 0000000..c56cbc9
--- /dev/null
+++ b/vdr-fsf-address.patch
@@ -0,0 +1,47 @@
+The FSF no longer resides at 51 Franklin Street, and packaging tools
+have started to reject license files carrying a stale postal address.
+Refer to <https://fsf.org/> and <https://www.gnu.org/licenses/> instead,
+as the FSF itself does in the GPLv3 text. License terms are unchanged.
+
+--- a/COPYING
++++ b/COPYING
+@@ -2,7 +2,7 @@
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+@@ -304,8 +304,7 @@
+ 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
++ along with this program; if not, see <https://www.gnu.org/licenses/>.
+
+
+ Also add information on how to contact you by electronic and paper mail.
+--- a/PLUGINS/src/skincurses/COPYING
++++ b/PLUGINS/src/skincurses/COPYING
+@@ -2,7 +2,7 @@
+ Version 2, June 1991
+
+ Copyright (C) 1989, 1991 Free Software Foundation, Inc.
+- 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
++ <https://fsf.org/>
+ Everyone is permitted to copy and distribute verbatim copies
+ of this license document, but changing it is not allowed.
+
+@@ -304,8 +304,7 @@
+ 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
++ along with this program; if not, see <https://www.gnu.org/licenses/>.
+
+
+ Also add information on how to contact you by electronic and paper mail.
diff --git a/vdr-mainmenuhooks.patch b/vdr-mainmenuhooks.patch
new file mode 100644
index 0000000..8c40aca
--- /dev/null
+++ b/vdr-mainmenuhooks.patch
@@ -0,0 +1,52 @@
+epgsearch's "Replace original schedule" option needs the service call
+"MainMenuHooksPatch-v1.0::osSchedule"; without it the option silently
+does nothing. Only this hook is wired up: the other three hooks of the
+original MainMenuHooks-1.0.5 patch have no consumer here, and the
+MAINMENUHOOKSVERSNUM defines are omitted so no plugin can feature-test
+itself into using hooks that are absent.
+
+--- a/menu.c
++++ b/menu.c
+@@ -4718,7 +4718,18 @@
+ // Initial submenus:
+
+ switch (State) {
+- case osSchedule: AddSubMenu(new cMenuSchedule); break;
++ case osSchedule: {
++ cOsdObject *menu = NULL;
++ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
++ menu = new cMenuSchedule;
++ if (menu) {
++ if (menu->IsMenu())
++ AddSubMenu((cOsdMenu *)menu);
++ else
++ delete menu;
++ }
++ }
++ break;
+ case osChannels: AddSubMenu(new cMenuChannels); break;
+ case osTimers: AddSubMenu(new cMenuTimers); break;
+ case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, OpenSubMenus)); break;
+@@ -4855,7 +4866,21 @@
+ HadSubMenu |= HasSubMenu();
+
+ switch (state) {
+- case osSchedule: return AddSubMenu(new cMenuSchedule);
++ case osSchedule: {
++ cOsdObject *menu = NULL;
++ if (!cPluginManager::CallFirstService("MainMenuHooksPatch-v1.0::osSchedule", &menu))
++ return AddSubMenu(new cMenuSchedule);
++ if (menu) {
++ if (menu->IsMenu())
++ return AddSubMenu((cOsdMenu *)menu);
++ else {
++ pluginOsdObject = menu;
++ return osPlugin;
++ }
++ }
++ state = osContinue;
++ }
++ break;
+ case osChannels: return AddSubMenu(new cMenuChannels);
+ case osTimers: return AddSubMenu(new cMenuTimers);
+ case osRecordings: return AddSubMenu(new cMenuRecordings);
diff --git a/vdr-rcu.conf b/vdr-rcu.conf
deleted file mode 100644
index 21a0a55..0000000
--- a/vdr-rcu.conf
+++ /dev/null
@@ -1,5 +0,0 @@
-# Configuration snippet for vdr-rcu -*- sh -*-
-#
-# Add command line options to pass to the rcu plugin to PLUGIN_OPTIONS.
-
-PLUGIN_OPTIONS=""
diff --git a/vdr-shutdown.sh b/vdr-shutdown.sh
index e628b21..b641a29 100644
--- a/vdr-shutdown.sh
+++ b/vdr-shutdown.sh
@@ -2,6 +2,16 @@
# To enable this script, pass it to vdr with the -s option, eg.
# "-s vdr-shutdown.sh" (sans quotes) in VDR_OPTIONS in /etc/sysconfig/vdr.
+#
+# The commands run through sudo; the rules they need are packaged in
+# /etc/sudoers.d/vdr. To hibernate instead of powering off, replace the
+# last line with
+#
+# sudo /usr/lib/vdr/bin/vdr-set-wakeup
+# exec sudo /usr/bin/systemctl hibernate
+#
+# (the service keeps running through hibernation, so the wakeup must be
+# set here instead of by the unit's ExecStop hook).
echo ${1:-0} > /var/run/vdr/next-timer
-exec sudo /sbin/shutdown -P now
+exec sudo /usr/bin/systemctl poweroff
diff --git a/vdr.macros b/vdr.macros
index 60bf55a..f691ce9 100644
--- a/vdr.macros
+++ b/vdr.macros
@@ -16,7 +16,7 @@
%vdr_vardir %vdr_pcvar vardir
%vdr_videodir %vdr_pcvar videodir
-# deprecated, backwards compatibility
+# Compatibility aliases, still referenced by existing plugin spec files.
%vdr_includedir %{_includedir}
%vdr_localedir %{vdr_locdir}
%vdr_plugindir %{vdr_libdir}
diff --git a/vdr.rpmlintrc b/vdr.rpmlintrc
new file mode 100644
index 0000000..e42c4aa
--- /dev/null
+++ b/vdr.rpmlintrc
@@ -0,0 +1,6 @@
+addFilter(r"vdr.*: E: non-readable /etc/sudoers\.d/vdr 440")
+addFilter(r"vdr\b.*: W: non-standard-uid .* vdr$")
+addFilter(r"vdr\b.*: W: hidden-file-or-dir /var/lib/vdr/video/\.update$")
+addFilter(r"vdr\b.*: W: no-manual-page-for-binary (epg2html|runvdr|vdr-config|vdr-newplugin)$")
+addFilter(r"vdr\b.*: W: install-file-in-docs .*/INSTALL$")
+addFilter(r"vdr-devel\b.*: W: no-documentation$")
\ No newline at end of file
diff --git a/vdr.service b/vdr.service
index 74e221c..ba92b42 100644
--- a/vdr.service
+++ b/vdr.service
@@ -8,9 +8,16 @@ After=network.target
[Service]
Type=notify
-ExecStartPre=/usr/lib/vdr/bin/vdr-check-setup
+User=vdr
+Group=video
+# /run/vdr only carries the next-timer handoff from vdr-shutdown.sh to
+# vdr-set-wakeup; systemd creates it at start and removes it at stop.
+RuntimeDirectory=vdr
+# '+' = runs as root: chowns channels.conf
+ExecStartPre=+/usr/lib/vdr/bin/vdr-check-setup
ExecStart=/usr/sbin/runvdr
-ExecStop=-/usr/lib/vdr/bin/vdr-set-wakeup
+# '+' = runs as root: rtcwake; '-' = a failure does not fail the stop job
+ExecStop=-+/usr/lib/vdr/bin/vdr-set-wakeup
WatchdogSec=60
Restart=on-failure
RestartPreventExitStatus=2
diff --git a/vdr.spec b/vdr.spec
index 3abf87e..07746fa 100644
--- a/vdr.spec
+++ b/vdr.spec
@@ -1,19 +1,3 @@
-# TODO, maybe some day:
-# - livebuffer patch, http://www.vdr-portal.de/board/thread.php?threadid=37309
-# - channelfilter patch, http://www.u32.de/vdr.html#patches
-# - pause patch (causes OSD placement issues at least with unrebuilt text2skin)
-# http://www.tolleri.net/vdr/vdr/vdr-1.6.0-2-pause-0.0.1.patch
-
-# - The dvbhddevice plugin is no longer part of the VDR source archive.
-# You can get the latest version of this plugin from the author's repository at
-# https://bitbucket.org/powARman/dvbhddevice.
-# - The dvbsddevice and rcu plugins are no longer part of the VDR source archive.
-# You can get the latest versions of these plugins from ftp://ftp.tvdr.de/vdr/Plugins.
-
-%{!?_pkgdocdir: %global _pkgdocdir %{_docdir}/%{name}-%{version}}
-%global _hardened_build 1
-%bcond_without docs
-
%global varbase %{_var}/lib/vdr
%global videodir %{varbase}/video
%global vardir %{varbase}/data
@@ -23,137 +7,99 @@
%global rundir /run/vdr
%global vdr_user vdr
%global vdr_group video
-# From APIVERSION in config.h
-%global apiver 13
+
+%bcond_without docs
+
+%global __provides_exclude_from ^%{plugindir}/.*\\.so.*$
Name: vdr
Version: 2.8.2
-Release: 2%{?dist}
+Release: 3%{?dist}
Summary: Video Disk Recorder
License: GPL-2.0-or-later
-URL: http://www.tvdr.de/
-# Get vdr source from http://git.tvdr.de/?p=vdr.git;a=snapshot;h=refs/tags/2.8.2;sf=tbz2
-# wget --content-disposition "http://git.tvdr.de/?p=vdr.git;a=snapshot;h=refs/tags/2.8.2;sf=tbz2"
-Source0: %{name}-%{version}.tar.bz2
+URL: https://www.tvdr.de/
+Source0: https://git.tvdr.de/?p=vdr.git;a=snapshot;h=refs/tags/%{version};sf=tbz2#/%{name}-%{version}.tar.bz2
+
+# The plugin ABI version, extracted from config.h in the tarball at parse
+# time. Must stay below Source0: the %%() shell runs when %%global is
+# defined, so %%{S:0} has to exist already. Fallback 0 for spec-only tools
+# (rpmlint); %%check verifies the packaged value against vdr.pc.
+%global apiver %(v=$(tar -xOf %{S:0} %{name}-%{version}/config.h 2>/dev/null | sed -ne '/define APIVERSION/s/^.*"\\(.*\\)".*$/\\1/p' | head -n1); echo ${v:-0})
+
Source1: %{name}.service
Source2: %{name}.sysconfig
Source3: %{name}.sudoers
+Source4: %{name}.macros
Source5: %{name}-reccmds.conf
Source6: %{name}-commands.conf
-Source7: %{name}-runvdr.sh
-Source8: %{name}-dvbsddevice.conf
-Source9: %{name}-config.sh
-Source10: %{name}-README.package
-Source11: %{name}-skincurses.conf
-Source12: %{name}-dvbhddevice.conf
-Source13: %{name}-timercmds.conf
-Source14: %{name}-shutdown.sh
-Source15: %{name}-moveto.sh
-Source16: %{name}-CHANGES.package.old
-Source17: %{name}.macros
-Source18: http://cdn.debian.net/debian/pool/main/v/vdr/vdr_2.2.0-5.debian.tar.bz2
-Source19: %{name}-check-setup.sh
-Source20: %{name}-rcu.conf
-Source21: %{name}-set-wakeup.sh
-Source30: https://bitbucket.org/powARman/dvbhddevice/get/3473a7b939d7.zip
-Source31: ftp://ftp.tvdr.de/vdr/Plugins/vdr-dvbsddevice-2.2.0.tgz
-Source32: ftp://ftp.tvdr.de/vdr/Plugins/vdr-rcu-2.2.0.tgz
-
-Patch0: define_AUDIO_GET_PTS.patch
-Patch1: http://zap.tartarus.org/~ds/debian/dists/stable/main/source/vdr_1.4.5-2.ds.diff.gz
-# Extracted from http://copperhead.htpc-forum.de/downloads/extensionpatch/extpngvdr1.7.21v1.diff.gz
-Patch3: %{name}-1.7.21-plugin-missing.patch
-Patch4: %{name}-2.4.0-paths.patch
-# http://vdrportal.de/board/thread.php?postid=343665#post343665
-Patch5: 12_osdbase-maxitems.patch
-Patch6: %{name}-2.7.4-fedora-pkgconfig.patch
-# https://www.vdr-portal.de/file-download/40760/
-Patch11: %{name}-%{version}-MainMenuHooks-v1_0_5.diff
-# https://www.vdr-portal.de/index.php?attachment/44831-vdr-2-4-6-clearobsoletechannels-diff
-Patch99: %{name}-2.4.6-ClearObsoleteChannels2.diff
+Source7: %{name}-timercmds.conf
+Source8: %{name}-skincurses.conf
+Source9: %{name}-README.package
+Source10: %{name}-runvdr.sh
+Source11: %{name}-config.sh
+Source12: %{name}-shutdown.sh
+Source13: %{name}-moveto.sh
+Source14: %{name}-check-setup.sh
+Source15: %{name}-set-wakeup.sh
+
+# Fedora/FHS integration: export datadir/rundir/vardir/user/group from vdr.pc
+Patch: %{name}-fedora.patch
+# MainMenuHooks, reduced to the only hook any shipped plugin implements
+# (epgsearch's "Replace original schedule").
+Patch: %{name}-mainmenuhooks.patch
+# Sent upstream: replace the FSF's stale postal address in COPYING with the
+# license URLs; rpmlint rejects the old address.
+Patch: %{name}-fsf-address.patch
-BuildRequires: make
-BuildRequires: gcc
BuildRequires: gcc-c++
-BuildRequires: libjpeg-devel
-BuildRequires: libcap-devel
-BuildRequires: pkgconfig
-BuildRequires: perl(File::Spec)
-BuildRequires: fontconfig-devel
-BuildRequires: freetype-devel
+BuildRequires: make
BuildRequires: gettext
-# systemd >= 186 for scriptlet macros
-BuildRequires: systemd >= 186
-BuildRequires: systemd-devel
+BuildRequires: libcap-devel
+BuildRequires: libjpeg-devel
+BuildRequires: ncurses-devel
+BuildRequires: pkgconfig(fontconfig)
+BuildRequires: pkgconfig(freetype2)
+BuildRequires: pkgconfig(libsystemd)
+BuildRequires: sudo
+BuildRequires: systemd-rpm-macros
%if %{with docs}
BuildRequires: doxygen
BuildRequires: graphviz
%endif
-# udev >= 136-1 for the audio, cdrom, dialout, and video groups
-Requires: udev >= 136-1
-# sudo for the shutdown script, >= 1.7.2p2-3 for sudoers.d functionality
-Requires: sudo >= 1.7.2p2-3
-# util-linux >= 2.15 for "rtcwake -m no" timer driven wakeups
-Requires: util-linux >= 2.15
+
+# sudo authorizes the shutdown script's privileged commands (sudoers.d/vdr);
+# util-linux provides "rtcwake -m no" for timer-driven wakeups
+Requires: sudo
+Requires: util-linux
Requires: vdrsymbol-fonts
-# systemd >= 189 for RestartPreventExitStatus=
-Requires(post,preun,postun): systemd >= 189
+%{?systemd_requires}
Provides: vdr(abi)%{?_isa} = %{apiver}
-Obsoletes: vdr-subtitles <= 0.5.0
-Obsoletes: vdr-sky < 1.7.11
%description
VDR implements a complete digital set-top-box and video recorder.
It can work with signals received from satellites (DVB-S) as well as
-cable (DVB-C) and terrestrial (DVB-T) signals. At least one DVB card
+cable (DVB-C) and terrestrial (DVB-T) signals. At least one DVB card
is required to run VDR.
%package devel
Summary: Development files for VDR
+Requires: %{name}%{?_isa} = %{version}-%{release}
Requires: gettext-runtime
Provides: vdr-devel(api) = %{apiver}
%description devel
-%{summary}.
+Headers, pkg-config file and RPM macros needed to build VDR plugins.
%package docs
Summary: Developer documentation for VDR
BuildArch: noarch
%description docs
-%{summary}.
-
-%package dvbhddevice
-Summary: VDR output device plugin for TechnoTrend S2-6400 DVB cards
-Requires: vdr(abi)%{?_isa} = %{apiver}
-
-%description dvbhddevice
-The dvbhddevice plugin implements a VDR output device for the "Full
-Featured TechnoTrend S2-6400" DVB cards.
-
-%package dvbsddevice
-Summary: VDR output device plugin for full featured SD DVB cards
-Requires: vdr(abi)%{?_isa} = %{apiver}
-# To get this subpackage pulled in on upgrades
-Obsoletes: vdr < 1.7.11
-
-%description dvbsddevice
-The dvbsddevice plugin implements the output device for the "Full
-Featured" DVB cards based on the TechnoTrend/Fujitsu-Siemens design.
-
-%package rcu
-Summary: VDR remote control unit plugin
-Requires: vdr(abi)%{?_isa} = %{apiver}
-# To get this subpackage pulled in on upgrades
-Obsoletes: vdr < 1.7.25
-
-%description rcu
-The rcu plugin implements a remote control unit for VDR.
+Developer documentation for the VDR core, generated from its sources.
%package skincurses
Summary: Shell window skin plugin for VDR
-BuildRequires: ncurses-devel
Requires: vdr(abi)%{?_isa} = %{apiver}
%description skincurses
@@ -162,67 +108,25 @@ window, using only plain text output.
%prep
-%setup -q -a 18
-# dvbhddevice
-unzip -o %{SOURCE30} -d $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src
-mv $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src/powARman-dvbhddevice-3473a7b939d7 $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src/dvbhddevice
-cd PLUGINS/src
-%patch 0 -p3
-cd ../..
-# dvbsddevice
-tar -xzf %{SOURCE31} -C $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src
-mv $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src/dvbsddevice-2.2.0 $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src/dvbsddevice
-# rcu
-tar -xzf %{SOURCE32} -C $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src
-mv $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src/rcu-2.2.0 $RPM_BUILD_DIR/vdr-%{version}/PLUGINS/src/rcu
-
-%patch 1 -p1
-# sort_options would be nice, but it conflicts with channel+epg which is nicer
-#patch -F 0 -i debian/patches/02_sort_options.dpatch
-# TODO: does not apply since 1.7.24
-#patch -F 0 -i debian/patches/06_recording_scan_speedup.dpatch
-patch -F 2 -i debian/patches/07_blockify_define.dpatch
-%patch 3 -p1
-sed \
- -e 's|__CACHEDIR__|%{cachedir}|' \
- -e 's|__CONFIGDIR__|%{configdir}|' \
- -e 's|__PLUGINDIR__|%{plugindir}|' \
- -e 's|__VARDIR__|%{vardir}|' \
- -e 's|__VIDEODIR__|%{videodir}|' \
- %{PATCH4} | %{__patch} -p1
-%patch 5 -p1
-%patch 6 -p1
-%patch 11 -p1
-%patch 99 -p1
-
-# Patch APIVERSION TO 2.4.8 to match VDRVERSION
-# sed -i 's/2\.4\.3/2.4.8/' config.h
-# sed -i 's/20406/20407/' config.h
-
-for f in CONTRIBUTORS HISTORY UPDATE-1.4.0 \
- PLUGINS/src/dvbhddevice/HISTORY; do
+%autosetup -p1
+
+for f in CONTRIBUTORS HISTORY ; do
iconv -f iso-8859-1 -t utf-8 -o $f.utf8 $f && mv $f.utf8 $f
done
cp -p %{SOURCE5} reccmds.conf
-cp -p %{SOURCE13} timercmds.conf
cp -p %{SOURCE6} commands.conf
-# Unfortunately these can't have comments in them, so ship 'em empty.
-cat /dev/null > channels.conf
-cat /dev/null > remote.conf
-cat /dev/null > setup.conf
-cat /dev/null > timers.conf
-
-install -pm 644 %{SOURCE10} README.package
-install -pm 644 %{SOURCE16} CHANGES.package.old
-
-# Would like to do "files {channels,setup,timers}.conf" from config dir
-# only, but rename() in cSafeFile barks "device or resource busy", cf.
-# http://lists.suse.com/archive/suse-programming-e/2003-Mar/0051.html
-cat << EOF > %{name}.rwtab
-dirs %{cachedir}
-files %{configdir}
-files %{vardir}
+cp -p %{SOURCE7} timercmds.conf
+install -pm 644 %{SOURCE9} README.package
+
+printf '\n' > channels.conf
+printf '\n' > remote.conf
+printf '\n' > setup.conf
+printf '\n' > timers.conf
+
+cat << EOF > %{name}.sysusers
+u %{vdr_user} -:%{vdr_group} 'Video Disk Recorder' %{vardir} -
+m %{vdr_user} audio
EOF
# Disable some graphs that end up too big to be useful.
@@ -230,13 +134,6 @@ for g in COLLABORATION INCLUDE INCLUDED_BY ; do
sed -i -e 's/^\(\s*'$g'_GRAPH\s*=\s*\).*/\1NO/' Doxyfile
done
-# Create a sysusers.d config file
-cat >vdr.sysusers.conf <<EOF
-u vdr -:%{vdr_group} 'Video Disk Recorder' %{vardir} -
-m vdr audio
-m vdr cdrom
-m vdr dialout
-EOF
%build
cat << EOF > Make.config
@@ -245,7 +142,7 @@ CXX = %{__cxx}
CFLAGS = \$(shell pkg-config vdr --variable=cflags)
CXXFLAGS = \$(shell pkg-config vdr --variable=cxxflags)
-LDFLAGS = $RPM_LD_FLAGS
+LDFLAGS = %{build_ldflags}
PREFIX = %{_prefix}
MANDIR = \$(shell pkg-config vdr --variable=mandir)
@@ -261,14 +158,13 @@ INCDIR = %{_includedir}
LIBDIR = \$(PLUGINLIBDIR)
PLGCFG = \$(LIBDIR)/plugins.mk
-LIRC_DEVICE = %{_localstatedir}/run/lirc/lircd
-# New Bug 1873027 LIRC_DEVICE = /run/lirc/lircd
+LIRC_DEVICE = /run/lirc/lircd
VDR_USER = \$(shell pkg-config vdr --variable=user)
SDNOTIFY = 1
EOF
cat << EOF > plugins.mk
-LDFLAGS = $RPM_LD_FLAGS
+LDFLAGS = %{build_ldflags}
EOF
cp plugins.mk bundled-plugins.mk
@@ -277,22 +173,20 @@ CFLAGS += -I$PWD/include
CXXFLAGS += -I$PWD/include
EOF
-cflags="${RPM_OPT_FLAGS/-O2/-O3} -fPIC" # see HISTORY for 1.7.17 for -O3
+cflags="%{build_cflags} -fPIC"
make vdr.pc BINDIR=%{_bindir} MANDIR=%{_mandir} CONFDIR=%{configdir} \
VIDEODIR=%{videodir} CACHEDIR=%{cachedir} RESDIR=%{_datadir}/vdr \
LIBDIR=%{plugindir} LOCDIR=%{_datadir}/locale RUNDIR=%{rundir} \
VARDIR=%{vardir} VDR_USER=%{vdr_user} VDR_GROUP=%{vdr_group} \
- LDFLAGS="$RPM_LD_FLAGS" CFLAGS="$cflags" \
+ LDFLAGS="%{build_ldflags}" CFLAGS="$cflags" \
CXXFLAGS="$cflags -Werror=overloaded-virtual -Wno-parentheses"
PKG_CONFIG_PATH="$PWD:$PKG_CONFIG_PATH" \
%make_build vdr include-dir i18n
-for plugin in dvbhddevice dvbsddevice rcu skincurses ; do
- %make_build -C PLUGINS/src/$plugin VDRDIR=$PWD \
- PLGCFG=$PWD/bundled-plugins.mk all
-done
+%make_build -C PLUGINS/src/skincurses VDRDIR=$PWD \
+ PLGCFG=$PWD/bundled-plugins.mk all
%if %{with docs}
%make_build srcdoc
@@ -301,154 +195,122 @@ done
%install
# Not using the install-pc target to preserve our already good vdr.pc
-install -Dpm 644 vdr.pc $RPM_BUILD_ROOT%{_libdir}/pkgconfig/vdr.pc
+install -Dpm 644 vdr.pc %{buildroot}%{_libdir}/pkgconfig/vdr.pc
-PKG_CONFIG_PATH="$RPM_BUILD_ROOT%{_libdir}/pkgconfig:$PKG_CONFIG_PATH" \
+PKG_CONFIG_PATH="%{buildroot}%{_libdir}/pkgconfig:$PKG_CONFIG_PATH" \
make install-bin install-dirs install-conf install-doc install-i18n \
- install-includes DESTDIR=$RPM_BUILD_ROOT
-
-install -pm 755 epg2html $RPM_BUILD_ROOT%{_bindir}
-install -dm 755 $RPM_BUILD_ROOT%{_sbindir}
-#mv $RPM_BUILD_ROOT%{_bindir}/vdr $RPM_BUILD_ROOT%{_sbindir}
+ install-includes DESTDIR=%{buildroot}
-# Avoid mv error by checking if source and destination are the same
-if [ "$RPM_BUILD_ROOT%{_bindir}/vdr" != "$RPM_BUILD_ROOT%{_sbindir}/vdr" ]; then
- mv $RPM_BUILD_ROOT%{_bindir}/vdr $RPM_BUILD_ROOT%{_sbindir}
-fi
+install -pm 755 epg2html %{buildroot}%{_bindir}
-install -dm 755 $RPM_BUILD_ROOT%{configdir}/plugins
+install -dm 755 %{buildroot}%{configdir}/plugins
+install -dm 755 %{buildroot}%{_sysconfdir}/sysconfig/vdr-plugins.d
+install -dm 755 %{buildroot}%{vardir}
+install -dm 755 %{buildroot}%{configdir}/themes
+install -dm 755 %{buildroot}%{_datadir}/vdr/{logos,plugins}
+install -dm 755 %{buildroot}%{plugindir}/bin
-install -dm 755 $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d
+touch %{buildroot}%{configdir}/themes/{classic,sttng}-default.theme
+touch %{buildroot}%{videodir}/.update
+touch %{buildroot}%{cachedir}/epg.data
-install -dm 755 $RPM_BUILD_ROOT%{vardir}/themes
-touch $RPM_BUILD_ROOT%{vardir}/themes/{classic,sttng}-default.theme
-
-install -pm 755 %{SOURCE7} $RPM_BUILD_ROOT%{_sbindir}/runvdr
+install -pm 755 %{SOURCE10} %{buildroot}%{_bindir}/runvdr
sed -i \
- -e 's|/usr/sbin/|%{_sbindir}/|' \
+ -e 's|/usr/sbin/|%{_bindir}/|' \
-e 's|/etc/sysconfig/|%{_sysconfdir}/sysconfig/|g' \
-e 's|/usr/lib/vdr\b|%{plugindir}|' \
-e 's|VDR_PLUGIN_VERSION|%{apiver}|' \
- $RPM_BUILD_ROOT%{_sbindir}/runvdr
+ %{buildroot}%{_bindir}/runvdr
-install -Dm 644 %{SOURCE2} $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr
+install -Dpm 644 %{SOURCE2} %{buildroot}%{_sysconfdir}/sysconfig/vdr
sed -i \
-e 's|/usr/lib/vdr/|%{plugindir}/|' \
- $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr
-
-touch $RPM_BUILD_ROOT%{videodir}/.update
+ %{buildroot}%{_sysconfdir}/sysconfig/vdr
-install -dm 755 $RPM_BUILD_ROOT%{plugindir}/bin
-
-install -m 755 %{SOURCE14} $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-shutdown.sh
+install -pm 755 %{SOURCE12} %{buildroot}%{plugindir}/bin/%{name}-shutdown.sh
sed -i \
-e 's|/etc/sysconfig/|%{_sysconfdir}/sysconfig/|' \
-e 's|/var/run/vdr/|%{rundir}/|' \
- $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-shutdown.sh
+ -e 's|/usr/lib/vdr/|%{plugindir}/|' \
+ %{buildroot}%{plugindir}/bin/%{name}-shutdown.sh
-install -m 755 %{SOURCE15} $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-moveto.sh
+install -pm 755 %{SOURCE13} %{buildroot}%{plugindir}/bin/%{name}-moveto.sh
sed -i \
-e 's|/var/lib/vdr/video|%{videodir}|' \
-e 's|/etc/vdr/|%{configdir}/|' \
- $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-moveto.sh
+ %{buildroot}%{plugindir}/bin/%{name}-moveto.sh
-install -m 755 %{SOURCE19} $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-check-setup
+install -pm 755 %{SOURCE14} %{buildroot}%{plugindir}/bin/%{name}-check-setup
sed -i \
-e 's|/etc/vdr/|%{configdir}/|' \
-e 's|VDR_USER|%{vdr_user}|' \
-e 's|VDR_GROUP|%{vdr_group}|' \
- $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-check-setup
+ %{buildroot}%{plugindir}/bin/%{name}-check-setup
-install -m 755 %{SOURCE21} $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-set-wakeup
+install -pm 755 %{SOURCE15} %{buildroot}%{plugindir}/bin/%{name}-set-wakeup
sed -i \
- -e 's|/usr/sbin/|%{_sbindir}/|' \
+ -e 's|/usr/sbin/|%{_bindir}/|' \
-e 's|/var/run/vdr/|%{rundir}/|' \
- $RPM_BUILD_ROOT%{plugindir}/bin/%{name}-set-wakeup
+ %{buildroot}%{plugindir}/bin/%{name}-set-wakeup
-install -Dm 644 %{SOURCE1} $RPM_BUILD_ROOT%{_unitdir}/%{name}.service
+install -Dpm 644 %{SOURCE1} %{buildroot}%{_unitdir}/%{name}.service
sed -i \
-e 's|/usr/lib/vdr/|%{plugindir}/|' \
- -e 's|/usr/sbin/|%{_sbindir}/|' \
+ -e 's|/usr/sbin/|%{_bindir}/|' \
-e 's|/usr/share/doc/vdr/|%{_pkgdocdir}/|' \
- $RPM_BUILD_ROOT%{_unitdir}/%{name}.service
-
-install -Dpm 440 %{SOURCE3} $RPM_BUILD_ROOT%{_sysconfdir}/sudoers.d/vdr
-
-touch $RPM_BUILD_ROOT%{cachedir}/epg.data
-install -dm 755 $RPM_BUILD_ROOT%{_datadir}/vdr/{logos,plugins}
-install -dm 755 $RPM_BUILD_ROOT%{rundir}
-touch $RPM_BUILD_ROOT%{rundir}/next-timer
-install -dm 755 $RPM_BUILD_ROOT%{vardir}
+ %{buildroot}%{_unitdir}/%{name}.service
-install -Dpm 644 %{name}.rwtab $RPM_BUILD_ROOT%{_sysconfdir}/rwtab.d/%{name}
+install -Dpm 440 %{SOURCE3} %{buildroot}%{_sysconfdir}/sudoers.d/vdr
+sed -i \
+ -e 's|/usr/lib/vdr/|%{plugindir}/|' \
+ %{buildroot}%{_sysconfdir}/sudoers.d/vdr
+install -Dpm 644 %{name}.sysusers %{buildroot}%{_sysusersdir}/%{name}.conf
-install -dm 755 $RPM_BUILD_ROOT%{_pkgdocdir}
-install -pm 644 CHANGES.package.old CONTRIBUTORS \
- HISTORY* INSTALL MANUAL PLUGINS.html README* UPDATE-?.?.0 \
- $RPM_BUILD_ROOT%{_pkgdocdir}
+install -dm 755 %{buildroot}%{_pkgdocdir}
+install -pm 644 CONTRIBUTORS HISTORY* INSTALL MANUAL PLUGINS.html \
+ README* %{buildroot}%{_pkgdocdir}
%if %{with docs}
-cp -pR srcdoc/html $RPM_BUILD_ROOT%{_pkgdocdir}
+cp -pR srcdoc/html %{buildroot}%{_pkgdocdir}
%endif
# devel
-abs2rel() { perl -MFile::Spec -e 'print File::Spec->abs2rel(@ARGV)' "$@" ; }
-
-install -pm 755 %{SOURCE9} $RPM_BUILD_ROOT%{_bindir}/vdr-config
-install -pm 755 newplugin $RPM_BUILD_ROOT%{_bindir}/vdr-newplugin
-install -pm 644 Make.{config,global} plugins.mk $RPM_BUILD_ROOT%{_libdir}/vdr
-ln -s $(abs2rel %{_includedir}/vdr/config.h %{_libdir}/vdr) \
- $RPM_BUILD_ROOT%{_libdir}/vdr
-macrodir=%{_sysconfdir}/rpm
-[ -d %{_rpmconfigdir}/macros.d ] && macrodir=%{_rpmconfigdir}/macros.d
-install -Dpm 644 %{SOURCE17} $RPM_BUILD_ROOT$macrodir/macros.vdr
-echo $macrodir/macros.vdr > %{name}-devel.files
-
-# i18n
-
-%find_lang %{name}
-sed -i -e '1i%%defattr(-,root,root,-)' %{name}.lang
-
-install -dm 755 $RPM_BUILD_ROOT%{_prefix}/lib/tmpfiles.d
-echo "d %{rundir} 0755 %{vdr_user} root -" \
- > $RPM_BUILD_ROOT%{_prefix}/lib/tmpfiles.d/%{name}.conf
-echo "%{_prefix}/lib/tmpfiles.d/%{name}.conf" \
- >> %{name}.lang
-
+install -pm 755 %{SOURCE11} %{buildroot}%{_bindir}/vdr-config
+install -pm 755 newplugin %{buildroot}%{_bindir}/vdr-newplugin
+install -pm 644 Make.{config,global} plugins.mk %{buildroot}%{plugindir}
+ln -sr %{buildroot}%{_includedir}/vdr/config.h %{buildroot}%{plugindir}
+install -Dpm 644 %{SOURCE4} %{buildroot}%{_rpmmacrodir}/macros.vdr
# plugins
-%make_install -C PLUGINS/src/dvbhddevice
-install -pm 644 %{SOURCE12} \
- $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/dvbhddevice.conf
-%find_lang %{name}-dvbhddevice
-
-%make_install -C PLUGINS/src/dvbsddevice
+%make_install -C PLUGINS/src/skincurses
install -pm 644 %{SOURCE8} \
- $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/dvbsddevice.conf
-
-%make_install -C PLUGINS/src/rcu
-install -pm 644 %{SOURCE20} \
- $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/rcu.conf
+ %{buildroot}%{_sysconfdir}/sysconfig/vdr-plugins.d/skincurses.conf
-%make_install -C PLUGINS/src/skincurses
-install -pm 644 %{SOURCE11} \
- $RPM_BUILD_ROOT%{_sysconfdir}/sysconfig/vdr-plugins.d/skincurses.conf
+%find_lang %{name}
%find_lang %{name}-skincurses
-install -m0644 -D vdr.sysusers.conf %{buildroot}%{_sysusersdir}/vdr.conf
-
%check
-export PKG_CONFIG_PATH=$RPM_BUILD_ROOT%{_libdir}/pkgconfig
-if [ "$(pkg-config vdr --variable=apiversion)" != "%{apiver}" ] ; then
- echo "ERROR: API version mismatch in vdr.pc / package / config.h" ; exit 1
-fi
+export PKG_CONFIG_PATH=%{buildroot}%{_libdir}/pkgconfig
+test "$(pkg-config vdr --variable=apiversion)" = "%{apiver}"
+test "$(pkg-config vdr --modversion)" = "%{version}"
+# The Fedora patch must have taken effect
+test "$(pkg-config vdr --variable=user)" = "%{vdr_user}"
+test "$(pkg-config vdr --variable=vardir)" = "%{vardir}"
+# The MainMenuHooks patch must have taken effect
+grep -q 'MainMenuHooksPatch-v1.0::osSchedule' vdr
+# The FSF address patch must have taken effect (rpmlint rejects the old address)
+! grep -qr 'Franklin' COPYING PLUGINS/src/skincurses/COPYING
+# vdr resolves VDRPluginCreator after dlopen; a plugin without that export
+# is broken even if it links cleanly
+nm -D --defined-only %{buildroot}%{plugindir}/libvdr-skincurses.so.%{apiver} | grep -q ' VDRPluginCreator$'
+# The sudoers drop-in must parse
+visudo -cf %{buildroot}%{_sysconfdir}/sudoers.d/vdr
%post
%systemd_post %{name}.service
-systemctl daemon-reload
%preun
%systemd_preun %{name}.service
@@ -456,21 +318,22 @@ systemctl daemon-reload
%postun
%systemd_postun_with_restart %{name}.service
+
%files -f %{name}.lang
+%license COPYING
%{_pkgdocdir}
-%exclude %{_pkgdocdir}/PLUGINS.html
%if %{with docs}
%exclude %{_pkgdocdir}/html/
%endif
-%config(noreplace) %{_sysconfdir}/sudoers.d/vdr
%config(noreplace) %{_sysconfdir}/sysconfig/vdr
-%config(noreplace) %{_sysconfdir}/rwtab.d/%{name}
%config %dir %{_sysconfdir}/sysconfig/vdr-plugins.d/
%{_bindir}/epg2html
+%{_bindir}/runvdr
%{_bindir}/svdrpsend
-%{_sbindir}/runvdr
-%{_sbindir}/vdr
+%{_bindir}/vdr
%{_unitdir}/%{name}.service
+%{_sysusersdir}/%{name}.conf
+%config(noreplace) %attr(0440,root,root) %{_sysconfdir}/sudoers.d/vdr
%dir %{plugindir}/
%dir %{plugindir}/bin/
%{plugindir}/bin/%{name}-check-setup
@@ -482,74 +345,50 @@ systemctl daemon-reload
%{_mandir}/man1/vdr.1*
%{_mandir}/man5/vdr.5*
%dir %{varbase}/
-%defattr(-,%{vdr_user},%{vdr_group},-)
-# TODO: tighten ownerships to root:root for some files in %%{configdir}
-%config(noreplace) %{configdir}/*.conf
-%dir %{videodir}/
-%ghost %{videodir}/.update
-%ghost %{vardir}/themes/*.theme
-%ghost %{cachedir}/epg.data
-%defattr(-,%{vdr_user},root,-)
-%dir %{configdir}/
-%dir %{configdir}/plugins/
-%dir %{rundir}/
-%ghost %{rundir}/next-timer
-%dir %{vardir}/
-%dir %{vardir}/themes/
-%dir %{cachedir}/
-%{_sysusersdir}/vdr.conf
-
-%files devel -f %{name}-devel.files
-%{!?_with_docs:%dir %{_pkgdocdir}}
+%attr(-,%{vdr_user},%{vdr_group}) %config(noreplace) %{configdir}/*.conf
+%dir %attr(-,%{vdr_user},%{vdr_group}) %{videodir}/
+%ghost %attr(-,%{vdr_user},%{vdr_group}) %{videodir}/.update
+%ghost %attr(-,%{vdr_user},%{vdr_group}) %{configdir}/themes/*.theme
+%ghost %attr(-,%{vdr_user},%{vdr_group}) %{cachedir}/epg.data
+%dir %attr(-,%{vdr_user},root) %{configdir}/
+%dir %attr(-,%{vdr_user},root) %{configdir}/plugins/
+%dir %attr(-,%{vdr_user},root) %{vardir}/
+%dir %attr(-,%{vdr_user},root) %{configdir}/themes/
+%dir %attr(-,%{vdr_user},root) %{cachedir}/
+
+%files devel
%license COPYING
-%if ! %{with docs}
-%{_pkgdocdir}/PLUGINS.html
-%endif
%{_bindir}/vdr-config
%{_bindir}/vdr-newplugin
%{_includedir}/libsi/
%{_includedir}/vdr/
%{_libdir}/pkgconfig/vdr.pc
-%dir %{_libdir}/vdr/
-%{_libdir}/vdr/Make.config
-%{_libdir}/vdr/Make.global
-%{_libdir}/vdr/config.h
-%{_libdir}/vdr/plugins.mk
+%{_rpmmacrodir}/macros.vdr
+%{plugindir}/Make.config
+%{plugindir}/Make.global
+%{plugindir}/config.h
+%{plugindir}/plugins.mk
%if %{with docs}
%files docs
-%dir %{_pkgdocdir}
%license COPYING
-%{_pkgdocdir}/PLUGINS.html
%{_pkgdocdir}/html/
%endif
-%files dvbhddevice -f %{name}-dvbhddevice.lang
-%license PLUGINS/src/dvbhddevice/COPYING
-%doc PLUGINS/src/dvbhddevice/{HISTORY,README}
-%config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/dvbhddevice.conf
-%{plugindir}/libvdr-dvbhddevice.so.%{apiver}
-
-%files dvbsddevice
-%license PLUGINS/src/dvbsddevice/COPYING
-%doc PLUGINS/src/dvbsddevice/{HISTORY,README}
-%config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/dvbsddevice.conf
-%{plugindir}/libvdr-dvbsddevice.so.%{apiver}
-
-%files rcu
-%license PLUGINS/src/rcu/COPYING
-%doc PLUGINS/src/rcu/{HISTORY,README}
-%config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/rcu.conf
-%{plugindir}/libvdr-rcu.so.%{apiver}
-
%files skincurses -f %{name}-skincurses.lang
%license PLUGINS/src/skincurses/COPYING
-%doc PLUGINS/src/skincurses/{HISTORY,README}
+%doc PLUGINS/src/skincurses/HISTORY PLUGINS/src/skincurses/README
%config(noreplace) %{_sysconfdir}/sysconfig/vdr-plugins.d/skincurses.conf
%{plugindir}/libvdr-skincurses.so.%{apiver}
%changelog
+* Thu Aug 13 2026 Dirk Nehring <dnehring@gmx.net> - 2.8.2-3
+- Refactor the spec file
+- Themes live in /etc/vdr/themes: stock VDR's path, now that the old
+ theme-directory rewriting patch is gone
+- vdr-devel now requires the base package (fully versioned, arch-specific)
+
* Fri Jul 17 2026 Fedora Release Engineering <releng@fedoraproject.org> - 2.8.2-2
- Rebuilt for https://fedoraproject.org/wiki/Fedora_45_Mass_Rebuild
@@ -678,7 +517,7 @@ systemctl daemon-reload
* Thu Oct 21 2021 Martin Gansser <martinkg@fedoraproject.org> - 2.4.7-5
- Delete missing kernel header files #Source33 because they are
- available again in kernel-headers-5.14.0-300 package
+ available again in kernel-headers-5.14.0-300 package
* Tue Aug 03 2021 Martin Gansser <martinkg@fedoraproject.org> - 2.4.7-4
- Add missing kernel-header files audio.h osd.h and video.h via #Source33
diff --git a/vdr.sudoers b/vdr.sudoers
index 3c17977..53b2b98 100644
--- a/vdr.sudoers
+++ b/vdr.sudoers
@@ -1,4 +1,5 @@
-# Allow vdr to shut down the system, see vdr-shutdown.sh.
-
-Defaults:vdr !requiretty
-vdr ALL = (root) NOPASSWD: /sbin/shutdown
+# Privileged commands for VDR's timer-driven shutdown. vdr-shutdown.sh
+# powers the machine off, and a hibernating setup must also set the RTC
+# wakeup itself: the service keeps running through hibernation, so the
+# unit's ExecStop hook does not fire in that case.
+vdr ALL = (root) NOPASSWD: /usr/bin/systemctl poweroff, /usr/bin/systemctl hibernate, /usr/lib/vdr/bin/vdr-set-wakeup
diff --git a/vdr.sysconfig b/vdr.sysconfig
index 0352405..628be6c 100644
--- a/vdr.sysconfig
+++ b/vdr.sysconfig
@@ -1,49 +1,24 @@
# System configuration for VDR -*- sh -*-
-# The "master" options. Some examples of options you may want to set
-# here are -r, -t, and --rcu. See the vdr(1) man page for more info.
+# The "master" options. See the vdr(1) man page for the available ones.
#
-# The default shutdown script (/usr/lib*/vdr/bin/vdr-shutdown.sh) needs
-# sudo(8) configuration to work as expected, see the script source for
-# details.
+# The default shutdown script (/usr/lib*/vdr/bin/vdr-shutdown.sh) powers
+# off through sudo; the rules it needs are packaged in /etc/sudoers.d/vdr.
#
VDR_OPTIONS=(--lirc --vfat --shutdown=vdr-shutdown.sh)
# VDR_PLUGIN_ORDER is a space separated list of plugins that should be
-# loaded in a specific order. This affects eg. the order the plugins'
-# menu entries are displayed OSD menus by default. The plugins in this
-# list don't need to be installed, but if they are, they will be loaded
-# before other possibly installed plugins. Note that it is recommended
-# to load output plugins before others so that all necessary features are
-# present when needed by other plugins at startup/shutdown.
+# loaded in a specific order. The plugins in this list don't need to be
+# installed, but if they are, they will be loaded before other installed
+# plugins. Output device plugins should be loaded first so that all
+# their features are available to other plugins at startup/shutdown.
#
VDR_PLUGIN_ORDER="
-mcli
-extrecmenung
-dxr3
-softdevice
+vaapivideo
+softhdcuvid
softhddevice
-streamdev-client
-xine
xineliboutput
-dvbhddevice
-dvbsddevice
-tvonscreen
-osdteletext
-ttxtsubs
-osdpip
-femon
-recstatus
-markad
-sudoku
-weather
-weatherng
-dvd
-externalplayer
-mplayer
-mp3
-muggle
-burn
+streamdev-client
"
# I18N settings.
@@ -54,7 +29,7 @@ burn
# PATH where to find the internally used executables.
#
-PATH="/usr/lib64/vdr/bin:$PATH"
+PATH="/usr/lib/vdr/bin:$PATH"
# How many minutes before a recording should the VDR box wake up?
# Some CI/CAM combinations can take quite a long time to initialize, so
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-08 7:09 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-08 7:09 [rpms/vdr] rawhide: Modernize the spec file Dirk Nehring
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox