diff options
| -rw-r--r-- | CONTRIBUTORS | 1 | ||||
| -rw-r--r-- | HISTORY | 1 | ||||
| -rw-r--r-- | PLUGINS.html | 27 | ||||
| -rw-r--r-- | PLUGINS/src/hello/HISTORY | 1 | ||||
| -rw-r--r-- | PLUGINS/src/hello/hello.c | 8 | ||||
| -rwxr-xr-x | newplugin | 8 | ||||
| -rw-r--r-- | plugin.c | 28 | ||||
| -rw-r--r-- | plugin.h | 6 | ||||
| -rw-r--r-- | vdr.c | 4 | 
9 files changed, 78 insertions, 6 deletions
| diff --git a/CONTRIBUTORS b/CONTRIBUTORS index fb42367c..35ef4090 100644 --- a/CONTRIBUTORS +++ b/CONTRIBUTORS @@ -132,6 +132,7 @@ Stefan Huelswitt <huels@iname.com>   lists"   for suggesting to make the cPlugin::Start() function return a boolean value that   indicates if the plugin will not be able to perform its task + for suggesting to add the cPlugin::Housekeeping() function  Ulrich Röder <roeder@efr-net.de>   for pointing out that there are channels that have a symbol rate higher than @@ -1274,3 +1274,4 @@ Video Disk Recorder Revision History  - Changed the cPlugin::Start() function to return a boolean value that indicates    if the plugin will not be able to perform its task (suggested by Stefan Huelswitt). +- Added the cPlugin::Housekeeping() function (suggested by Stefan Huelswitt). diff --git a/PLUGINS.html b/PLUGINS.html index b2af135b..3ecad7e5 100644 --- a/PLUGINS.html +++ b/PLUGINS.html @@ -482,6 +482,33 @@ interaction is possible. If a specific action takes longer than a few seconds,  the plugin should launch a separate thread to do this.  </b> +<!--X1.1.2--><table width=100%><tr><td bgcolor=red> </td><td width=100%> +<hr><h2>Housekeeping</h2> + +<center><i><b>Chores, chores...</b></i></center><p> + +From time to time a plugin may want to do some regular tasks, like cleaning +up some files or other things. In order to do this it can implement the function + +<p><table><tr><td bgcolor=#F0F0F0><pre><br> +virtual void Housekeeping(void); +</pre></td></tr></table><p> + +which gets called when VDR is otherwise idle. The intervals between subsequent +calls to this function are not defined. There may be several hours between two +calls (if, for instance, there are recordings or replays going on) or they may +be as close as ten seconds. The only thing that is guaranteed is that there are +at least ten seconds between two subsequent calls to the <tt>Housekeeping()</tt> +function of the same plugin. +<p> +<b> +It is very important that a call to <tt>Housekeeping()</tt> returns as soon +as possible! As long as the program stays inside this function, no other user +interaction is possible. If a specific action takes longer than a few seconds, +the plugin should launch a separate thread to do this. +</b> +<!--X1.1.2--></td></tr></table> +  <hr><h2>Setup parameters</h2>  <center><i><b>Remember me...</b></i></center><p> diff --git a/PLUGINS/src/hello/HISTORY b/PLUGINS/src/hello/HISTORY index 9abd4971..31b668e8 100644 --- a/PLUGINS/src/hello/HISTORY +++ b/PLUGINS/src/hello/HISTORY @@ -12,3 +12,4 @@ VDR Plugin 'hello' Revision History  2002-05-12: Version 0.0.3  - Changed return type of cPluginHello::Start(). +- Added cPluginHello::Housekeeping(). diff --git a/PLUGINS/src/hello/hello.c b/PLUGINS/src/hello/hello.c index 55e6bcbb..9a6c6e31 100644 --- a/PLUGINS/src/hello/hello.c +++ b/PLUGINS/src/hello/hello.c @@ -3,7 +3,7 @@   *   * See the README file for copyright information and how to reach the author.   * - * $Id: hello.c 1.3 2002/05/12 09:24:08 kls Exp $ + * $Id: hello.c 1.4 2002/05/12 10:18:59 kls Exp $   */  #include <getopt.h> @@ -28,6 +28,7 @@ public:    virtual const char *CommandLineHelp(void);    virtual bool ProcessArgs(int argc, char *argv[]);    virtual bool Start(void); +  virtual void Housekeeping(void);    virtual const char *MainMenuEntry(void) { return tr(MAINMENUENTRY); }    virtual cOsdMenu *MainMenuAction(void);    virtual cMenuSetupPage *SetupMenu(void); @@ -117,6 +118,11 @@ bool cPluginHello::Start(void)    return true;  } +void cPluginHello::Housekeeping(void) +{ +  // Perform any cleanup or other regular tasks. +} +  cOsdMenu *cPluginHello::MainMenuAction(void)  {    // Perform the action when selected from the main VDR menu. @@ -12,7 +12,7 @@  # See the main source file 'vdr.c' for copyright information and  # how to reach the author.  # -# $Id: newplugin 1.2 2002/05/12 09:06:43 kls Exp $ +# $Id: newplugin 1.3 2002/05/12 10:14:47 kls Exp $  $PLUGIN_NAME = $ARGV[0] || die "Usage: newplugin <name>\n"; @@ -159,6 +159,7 @@ public:    virtual const char *CommandLineHelp(void);    virtual bool ProcessArgs(int argc, char *argv[]);    virtual bool Start(void); +  virtual void Housekeeping(void);    virtual const char *MainMenuEntry(void) { return MAINMENUENTRY; }    virtual cOsdMenu *MainMenuAction(void);    virtual cMenuSetupPage *SetupMenu(void); @@ -195,6 +196,11 @@ bool cPlugin${PLUGIN_CLASS}::Start(void)    return true;  } +void cPlugin${PLUGIN_CLASS}::Housekeeping(void) +{ +  // Perform any cleanup or other regular tasks. +} +  cOsdMenu *cPlugin${PLUGIN_CLASS}::MainMenuAction(void)  {    // Perform the action when selected from the main VDR menu. @@ -4,19 +4,21 @@   * See the main source file 'vdr.c' for copyright information and   * how to reach the author.   * - * $Id: plugin.c 1.2 2002/05/12 09:04:51 kls Exp $ + * $Id: plugin.c 1.3 2002/05/12 10:10:38 kls Exp $   */  #include "plugin.h"  #include <ctype.h>  #include <dirent.h>  #include <dlfcn.h> +#include <time.h>  #include "config.h"  #define LIBVDR_PREFIX  "libvdr-"  #define SO_INDICATOR   ".so."  #define MAXPLUGINARGS  1024 +#define HOUSEKEEPINGDELTA 10 // seconds  // --- cPlugin --------------------------------------------------------------- @@ -50,6 +52,10 @@ bool cPlugin::Start(void)    return true;  } +void cPlugin::Housekeeping(void) +{ +} +  const char *cPlugin::MainMenuEntry(void)  {    return NULL; @@ -202,6 +208,8 @@ cPluginManager *cPluginManager::pluginManager = NULL;  cPluginManager::cPluginManager(const char *Directory)  {    directory = NULL; +  lastHousekeeping = time(NULL); +  nextHousekeeping = -1;    if (pluginManager) {       fprintf(stderr, "vdr: attempt to create more than one plugin manager - exiting!\n");       exit(2); @@ -278,13 +286,29 @@ bool cPluginManager::StartPlugins(void)           Setup.OSDLanguage = 0; // the i18n texts are only available _after_ Start()           isyslog(LOG_INFO, "starting plugin: %s (%s): %s", p->Name(), p->Version(), p->Description());           Setup.OSDLanguage = Language; -         if (!dll->Plugin()->Start()) +         if (!p->Start())              return false;           }        }    return true;  } +void cPluginManager::Housekeeping(void) +{ +  if (time(NULL) - lastHousekeeping > HOUSEKEEPINGDELTA) { +     if (++nextHousekeeping >= dlls.Count()) +        nextHousekeeping = 0; +     cDll *dll = dlls.Get(nextHousekeeping); +     if (dll) { +        cPlugin *p = dll->Plugin(); +        if (p) { +           p->Housekeeping(); +           } +        } +     lastHousekeeping = time(NULL); +     } +} +  bool cPluginManager::HasPlugins(void)  {    return pluginManager && pluginManager->dlls.Count(); @@ -4,7 +4,7 @@   * See the main source file 'vdr.c' for copyright information and   * how to reach the author.   * - * $Id: plugin.h 1.2 2002/05/12 09:05:06 kls Exp $ + * $Id: plugin.h 1.3 2002/05/12 09:58:54 kls Exp $   */  #ifndef __PLUGIN_H @@ -33,6 +33,7 @@ public:    virtual bool ProcessArgs(int argc, char *argv[]);    virtual bool Start(void); +  virtual void Housekeeping(void);    virtual const char *MainMenuEntry(void);    virtual cOsdMenu *MainMenuAction(void); @@ -64,6 +65,8 @@ class cPluginManager {  private:    static cPluginManager *pluginManager;    char *directory; +  time_t lastHousekeeping; +  int nextHousekeeping;    cDlls dlls;  public:    cPluginManager(const char *Directory); @@ -72,6 +75,7 @@ public:    void AddPlugin(const char *Args);    bool LoadPlugins(bool Log = false);    bool StartPlugins(void); +  void Housekeeping(void);    static bool HasPlugins(void);    static cPlugin *GetPlugin(int Index);    static cPlugin *GetPlugin(const char *Name); @@ -22,7 +22,7 @@   *   * The project's page is at http://www.cadsoft.de/people/kls/vdr   * - * $Id: vdr.c 1.106 2002/05/12 09:05:37 kls Exp $ + * $Id: vdr.c 1.107 2002/05/12 10:11:08 kls Exp $   */  #include <getopt.h> @@ -574,6 +574,8 @@ int main(int argc, char *argv[])                   }                // Disk housekeeping:                RemoveDeletedRecordings(); +              // Plugins housekeeping: +              PluginManager.Housekeeping();                }             }          } | 
