vdr  2.7.6
plugin.h
Go to the documentation of this file.
1 /*
2  * plugin.h: The VDR plugin interface
3  *
4  * See the main source file 'vdr.c' for copyright information and
5  * how to reach the author.
6  *
7  * $Id: plugin.h 5.2 2025/03/02 11:03:35 kls Exp $
8  */
9 
10 #ifndef __PLUGIN_H
11 #define __PLUGIN_H
12 
13 #include "i18n.h"
14 #include "menuitems.h"
15 #include "osdbase.h"
16 #include "tools.h"
17 
18 #define VDRPLUGINCREATOR(PluginClass) \
19  extern "C" void *VDRPluginCreator(void) { return new PluginClass; } \
20  extern "C" void VDRPluginDestroyer(PluginClass *p) { delete p; }
21 
22 class cPlugin {
23  friend class cDll;
24  friend class cPluginManager;
25 private:
29  const char *name;
30  bool started;
31  void SetName(const char *s);
32 public:
33  cPlugin(void);
34  virtual ~cPlugin();
35 
36  const char *Name(void) { return name; }
37  virtual const char *Version(void) = 0;
38  virtual const char *Description(void) = 0;
39  virtual const char *CommandLineHelp(void);
40 
41  virtual bool ProcessArgs(int argc, char *argv[]);
42  virtual bool Initialize(void);
43  virtual bool Start(void);
44  virtual void Stop(void);
45  virtual void Housekeeping(void);
46 #ifndef MUTE_DEPRECATED_MAINTHREADHOOK
47  [[deprecated("use proper locking instead")]]
48 #endif
49  virtual void MainThreadHook(void);
50  virtual cString Active(void);
51  virtual time_t WakeupTime(void);
52 
53  virtual const char *MainMenuEntry(void);
54  virtual cOsdObject *MainMenuAction(void);
55 
56  virtual cMenuSetupPage *SetupMenu(void);
57  virtual bool SetupParse(const char *Name, const char *Value);
58  void SetupStore(const char *Name, const char *Value = NULL);
59  void SetupStore(const char *Name, int Value);
60 
61  virtual bool Service(const char *Id, void *Data = NULL);
62  virtual const char **SVDRPHelpPages(void);
63  virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode);
64 
65  static void SetConfigDirectory(const char *Dir);
66  static const char *ConfigDirectory(const char *PluginName = NULL);
67  static void SetCacheDirectory(const char *Dir);
68  static const char *CacheDirectory(const char *PluginName = NULL);
69  static void SetResourceDirectory(const char *Dir);
70  static const char *ResourceDirectory(const char *PluginName = NULL);
71  };
72 
73 class cDll : public cListObject {
74 private:
75  char *fileName;
76  char *args;
77  void *handle;
79  typedef void destroy_t(cPlugin *);
81 public:
82  cDll(const char *FileName, const char *Args);
83  virtual ~cDll() override;
84  bool Load(bool Log = false);
85  cPlugin *Plugin(void) { return plugin; }
86  };
87 
88 class cDlls : public cList<cDll> {};
89 
91 private:
93  char *directory;
97 public:
98  cPluginManager(const char *Directory);
99  virtual ~cPluginManager();
100  void SetDirectory(const char *Directory);
101  void AddPlugin(const char *Args);
102  bool LoadPlugins(bool Log = false);
103  bool InitializePlugins(void);
104  bool StartPlugins(void);
105  void Housekeeping(void);
106  void MainThreadHook(void);
107  static bool Active(const char *Prompt = NULL);
108  static cPlugin *GetNextWakeupPlugin(void);
109  static bool HasPlugins(void);
110  static cPlugin *GetPlugin(int Index);
111  static cPlugin *GetPlugin(const char *Name);
112  static cPlugin *CallFirstService(const char *Id, void *Data = NULL);
113  static bool CallAllServices(const char *Id, void *Data = NULL);
114  void StopPlugins(void);
115  void Shutdown(bool Log = false);
116  };
117 
118 #endif //__PLUGIN_H
Definition: plugin.h:73
void * handle
Definition: plugin.h:77
cPlugin * plugin
Definition: plugin.h:78
void destroy_t(cPlugin *)
Definition: plugin.h:79
cPlugin * Plugin(void)
Definition: plugin.h:85
destroy_t * destroy
Definition: plugin.h:80
cDll(const char *FileName, const char *Args)
Definition: plugin.c:180
char * args
Definition: plugin.h:76
virtual ~cDll() override
Definition: plugin.c:189
bool Load(bool Log=false)
Definition: plugin.c:220
char * fileName
Definition: plugin.h:75
Definition: plugin.h:88
Definition: tools.h:631
static cPluginManager * pluginManager
Definition: plugin.h:92
void StopPlugins(void)
Definition: plugin.c:513
static cPlugin * GetNextWakeupPlugin(void)
Definition: plugin.c:445
void MainThreadHook(void)
Definition: plugin.c:419
bool StartPlugins(void)
Definition: plugin.c:389
cPluginManager(const char *Directory)
Definition: plugin.c:304
void SetDirectory(const char *Directory)
Definition: plugin.c:325
bool InitializePlugins(void)
Definition: plugin.c:376
void AddPlugin(const char *Args)
Definition: plugin.c:331
static bool Active(const char *Prompt=NULL)
Definition: plugin.c:428
static bool HasPlugins(void)
Definition: plugin.c:465
cDlls dlls
Definition: plugin.h:96
int nextHousekeeping
Definition: plugin.h:95
static bool CallAllServices(const char *Id, void *Data=NULL)
Definition: plugin.c:500
bool LoadPlugins(bool Log=false)
Definition: plugin.c:367
void Shutdown(bool Log=false)
Definition: plugin.c:525
static cPlugin * CallFirstService(const char *Id, void *Data=NULL)
Definition: plugin.c:488
char * directory
Definition: plugin.h:93
virtual ~cPluginManager()
Definition: plugin.c:317
void Housekeeping(void)
Definition: plugin.c:403
time_t lastHousekeeping
Definition: plugin.h:94
static cPlugin * GetPlugin(int Index)
Definition: plugin.c:470
Definition: plugin.h:22
virtual time_t WakeupTime(void)
Definition: plugin.c:86
virtual bool Initialize(void)
Definition: plugin.c:59
virtual void Stop(void)
Definition: plugin.c:69
virtual cMenuSetupPage * SetupMenu(void)
Definition: plugin.c:101
virtual const char * CommandLineHelp(void)
Definition: plugin.c:49
virtual ~cPlugin()
Definition: plugin.c:39
virtual const char * Description(void)=0
virtual bool Start(void)
Definition: plugin.c:64
const char * Name(void)
Definition: plugin.h:36
virtual void Housekeeping(void)
Definition: plugin.c:73
static cString cacheDirectory
Definition: plugin.h:27
bool started
Definition: plugin.h:30
void SetName(const char *s)
Definition: plugin.c:43
void SetupStore(const char *Name, const char *Value=NULL)
Definition: plugin.c:111
virtual const char * MainMenuEntry(void)
Definition: plugin.c:91
static cString resourceDirectory
Definition: plugin.h:28
static void SetCacheDirectory(const char *Dir)
Definition: plugin.c:150
virtual bool Service(const char *Id, void *Data=NULL)
Definition: plugin.c:121
virtual const char * Version(void)=0
const char * name
Definition: plugin.h:29
virtual cOsdObject * MainMenuAction(void)
Definition: plugin.c:96
static void SetConfigDirectory(const char *Dir)
Definition: plugin.c:136
static void SetResourceDirectory(const char *Dir)
Definition: plugin.c:164
static const char * CacheDirectory(const char *PluginName=NULL)
Definition: plugin.c:155
static const char * ResourceDirectory(const char *PluginName=NULL)
Definition: plugin.c:169
static const char * ConfigDirectory(const char *PluginName=NULL)
Definition: plugin.c:141
cPlugin(void)
Definition: plugin.c:33
virtual void MainThreadHook(void)
Definition: plugin.c:77
virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
Definition: plugin.c:131
virtual cString Active(void)
Definition: plugin.c:81
virtual const char ** SVDRPHelpPages(void)
Definition: plugin.c:126
static cString configDirectory
Definition: plugin.h:26
virtual bool SetupParse(const char *Name, const char *Value)
Definition: plugin.c:106
virtual bool ProcessArgs(int argc, char *argv[])
Definition: plugin.c:54
Definition: tools.h:178