From 57e0533f20b14e208e41e56f80fd15b3d18f90f1 Mon Sep 17 00:00:00 2001 From: Martin Prochnow Date: Mon, 8 Oct 2007 20:36:03 +0200 Subject: Version 1.0 - it is now possible to cancel a moving-between-filesystems-process - applied changes for MainMenuHooksPatch - added MainMenuHooksPatch to contrib/-dir; removed old one, which is now obsolete - free disk space is shown for the filesystem of the current directory (can be switched of in plugin's setup menu) - added support for hidding PIN-protected recordings in co-work with PIN-Plugin - added queue for moving recordings between filesystems - added cutter queue - added #ifdef's to switch of font patching for vdr >= 1.5.3 - added setup option to switch of font patching --- contrib/MainMenuHooks-v1_0.patch | 155 +++++++++++++++++++++++++++++++++++++ contrib/vdr-1.3.43-extrecmenu.diff | 31 -------- 2 files changed, 155 insertions(+), 31 deletions(-) create mode 100644 contrib/MainMenuHooks-v1_0.patch delete mode 100644 contrib/vdr-1.3.43-extrecmenu.diff (limited to 'contrib') diff --git a/contrib/MainMenuHooks-v1_0.patch b/contrib/MainMenuHooks-v1_0.patch new file mode 100644 index 0000000..70a72a3 --- /dev/null +++ b/contrib/MainMenuHooks-v1_0.patch @@ -0,0 +1,155 @@ +This is a "patch" for the Video Disk Recorder (VDR). + +* Authors: +Tobias Grimm +Martin Prochnow +Frank Schmirler +Christian Wieninger + +* 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.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; +} + +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. + +--- vdr-1.4.5/menu.c.orig 2007-02-07 08:23:49.000000000 +0100 ++++ vdr-1.4.5/menu.c 2007-02-20 11:05:34.000000000 +0100 +@@ -2792,15 +2792,30 @@ + + // Initial submenus: + ++ cOsdMenu *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, true)); 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, true); ++ break; ++ case osSetup: menu = new cMenuSetup; break; ++ case osCommands: menu = new cMenuCommands(tr("Commands"), &Commands); break; + default: break; + } ++ if (menu) ++ AddSubMenu(menu); + } + + cOsdObject *cMenuMain::PluginOsdObject(void) +@@ -2927,13 +2942,34 @@ + eOSState state = cOsdMenu::ProcessKey(Key); + HadSubMenu |= HasSubMenu(); + ++ cOsdMenu *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?"))) { + cOsdItem *item = Get(Current()); + if (item) { +@@ -2985,6 +3021,8 @@ + default: break; + } + } ++ if (menu) ++ return AddSubMenu(menu); + if (!HasSubMenu() && Update(HadSubMenu)) + Display(); + if (Key != kNone) { +--- vdr-1.4.5/config.h.orig 2007-02-20 11:55:40.000000000 +0100 ++++ vdr-1.4.5/config.h 2007-02-20 11:56:43.000000000 +0100 +@@ -35,6 +35,8 @@ + // plugins to work with newer versions of the core VDR as long as no + // VDR header files have changed. + ++#define MAINMENUHOOKSVERSNUM 1.0 ++ + #define MAXPRIORITY 99 + #define MAXLIFETIME 99 + diff --git a/contrib/vdr-1.3.43-extrecmenu.diff b/contrib/vdr-1.3.43-extrecmenu.diff deleted file mode 100644 index 6e980f0..0000000 --- a/contrib/vdr-1.3.43-extrecmenu.diff +++ /dev/null @@ -1,31 +0,0 @@ ---- menu.c.org 2006-02-20 16:20:18.000000000 +0100 -+++ menu.c 2006-03-13 14:27:33.000000000 +0100 -@@ -2897,7 +2897,11 @@ - break; - case osChannels: AddSubMenu(new cMenuChannels); break; - case osTimers: AddSubMenu(new cMenuTimers); break; -- case osRecordings: AddSubMenu(new cMenuRecordings(NULL, 0, true)); break; -+ case osRecordings: { -+ cPlugin *p = cPluginManager::GetPlugin("extrecmenu"); -+ (p && !p->SetupParse("IsOrgRecMenu", "0")) ? AddSubMenu((cOsdMenu *)p->MainMenuAction()) : AddSubMenu(new cMenuRecordings(NULL, 0, true)); -+ } -+ break; - case osSetup: AddSubMenu(new cMenuSetup); break; - case osCommands: AddSubMenu(new cMenuCommands(tr("Commands"), &Commands)); break; - default: break; -@@ -3044,7 +3048,14 @@ - break; - case osChannels: return AddSubMenu(new cMenuChannels); - case osTimers: return AddSubMenu(new cMenuTimers); -- case osRecordings: return AddSubMenu(new cMenuRecordings); -+ case osRecordings: { -+ cPlugin *p = cPluginManager::GetPlugin("extrecmenu"); -+ if (p && !p->SetupParse("IsOrgRecMenu", "0")) -+ return AddSubMenu((cOsdMenu *)p->MainMenuAction()); -+ else -+ return AddSubMenu(new cMenuRecordings); -+ } -+ break; - case osSetup: return AddSubMenu(new cMenuSetup); - case osCommands: return AddSubMenu(new cMenuCommands(tr("Commands"), &Commands)); - case osStopRecord: if (Interface->Confirm(tr("Stop recording?"))) { -- cgit v1.2.3