diff options
author | Jochen Dolze <vdr@dolze.de> | 2010-03-22 16:22:28 +0100 |
---|---|---|
committer | Jochen Dolze <vdr@dolze.de> | 2010-03-22 16:22:28 +0100 |
commit | 9344b4ed2f830a78679dc80c23bd44d82098ac1f (patch) | |
tree | 1daaf2dab4f56fc039339761c5e1432d57a6d71c | |
parent | ac8f47a0ece76e2abcfd096b1a02ba788e1bbeac (diff) | |
download | vdr-plugin-markad-9344b4ed2f830a78679dc80c23bd44d82098ac1f.tar.gz vdr-plugin-markad-9344b4ed2f830a78679dc80c23bd44d82098ac1f.tar.bz2 |
Revoked plugin scan
-rw-r--r-- | markad.cpp | 57 | ||||
-rw-r--r-- | markad.h | 63 | ||||
-rw-r--r-- | status.cpp | 28 | ||||
-rw-r--r-- | status.h | 3 |
4 files changed, 108 insertions, 43 deletions
@@ -15,23 +15,74 @@ cPluginMarkAd::cPluginMarkAd(void) // DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL // VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT! statusMonitor=NULL; + bindir=strdup(DEF_BINDIR); + logodir=strdup(DEF_LOGODIR); } cPluginMarkAd::~cPluginMarkAd() { // Clean up after yourself! if (statusMonitor) delete statusMonitor; + if (bindir) free(bindir); + if (logodir) free(logodir); } const char *cPluginMarkAd::CommandLineHelp(void) { // Return a string that describes all known command line options. - return NULL; + return " -b DIR, --bindir=DIR use DIR as location for markad executable\n" + " (default: /usr/bin)\n" + " -l DIR --logocachedir=DIR use DIR as location for markad logos\n" + " (default: /var/lib/markad)\n"; } bool cPluginMarkAd::ProcessArgs(int argc, char *argv[]) { - // Implement command line argument processing here if applicable. + // Command line argument processing + static struct option long_options[] = + { + { "bindir", required_argument, NULL, 'b' + }, + { "logocachedir", required_argument, NULL, 'l'}, + { NULL } + }; + + int c; + while ((c = getopt_long(argc, argv, "b:l:", long_options, NULL)) != -1) + { + switch (c) + { + case 'b': + if ((access(optarg,R_OK | X_OK))!=-1) + { + if (bindir) free(bindir); + bindir=strdup(optarg); + } + else + { + fprintf(stderr,"markad: can't access bin directory: %s\n", + optarg); + return false; + } + break; + + case 'l': + if ((access(optarg,R_OK))!=-1) + { + if (logodir) free(logodir); + logodir=strdup(optarg); + } + else + { + fprintf(stderr,"markad: can't access logo directory: %s\n", + optarg); + return false; + } + break; + default: + return false; + } + } return true; } @@ -44,7 +95,7 @@ bool cPluginMarkAd::Initialize(void) bool cPluginMarkAd::Start(void) { // Start any background activities the plugin shall perform. - statusMonitor = new cStatusMarkAd(); + statusMonitor = new cStatusMarkAd(bindir,logodir); return true; } @@ -8,37 +8,52 @@ #ifndef __markad_h_ #define __markad_h_ +#include <unistd.h> +#include <getopt.h> + #include "version.h" #include "status.h" +#define DEF_BINDIR "/usr/bin" +#define DEF_LOGODIR "/var/lib/markad" + extern const char *VERSION; static const char *DESCRIPTION = trNOOP("Mark advertisements"); -class cPluginMarkAd : public cPlugin { +class cPluginMarkAd : public cPlugin +{ private: - // Add any member variables or functions you may need here. - cStatusMarkAd *statusMonitor; + // Add any member variables or functions you may need here. + cStatusMarkAd *statusMonitor; + char *bindir; + char *logodir; public: - cPluginMarkAd(void); - virtual ~cPluginMarkAd(); - virtual const char *Version(void) { return VERSION; } - virtual const char *Description(void) { return tr(DESCRIPTION); } - virtual const char *CommandLineHelp(void); - virtual bool ProcessArgs(int argc, char *argv[]); - virtual bool Initialize(void); - virtual bool Start(void); - virtual void Stop(void); - virtual void Housekeeping(void); - virtual void MainThreadHook(void); - virtual cString Active(void); - virtual time_t WakeupTime(void); - virtual const char *MainMenuEntry(void); - virtual cOsdObject *MainMenuAction(void); - virtual cMenuSetupPage *SetupMenu(void); - virtual bool SetupParse(const char *Name, const char *Value); - virtual bool Service(const char *Id, void *Data = NULL); - virtual const char **SVDRPHelpPages(void); - virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode); - }; + cPluginMarkAd(void); + virtual ~cPluginMarkAd(); + virtual const char *Version(void) + { + return VERSION; + } + virtual const char *Description(void) + { + return tr(DESCRIPTION); + } + virtual const char *CommandLineHelp(void); + virtual bool ProcessArgs(int argc, char *argv[]); + virtual bool Initialize(void); + virtual bool Start(void); + virtual void Stop(void); + virtual void Housekeeping(void); + virtual void MainThreadHook(void); + virtual cString Active(void); + virtual time_t WakeupTime(void); + virtual const char *MainMenuEntry(void); + virtual cOsdObject *MainMenuAction(void); + virtual cMenuSetupPage *SetupMenu(void); + virtual bool SetupParse(const char *Name, const char *Value); + virtual bool Service(const char *Id, void *Data = NULL); + virtual const char **SVDRPHelpPages(void); + virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode); +}; #endif @@ -11,25 +11,15 @@ void cStatusMarkAd::Recording(const cDevice *Device, const char *Name, const cha { if (!Device) return; // just to be safe if (!FileName) return; // we cannot operate without a filename + if (!bindir) return; // we cannot operate without bindir + if (!logodir) return; // we dont want to operate without logodir if (On) { - if (!Name) return; // we cannot operate without name ;) - - cTimer *timer=NULL; - - for (cTimer *Timer = Timers.First(); Timer; Timer=Timers.Next(Timer)) - { - if (Timer->Recording() && (!strcmp(Timer->File(),Name))) - { - timer=Timer; - break; - } - } - - if (!timer) return; - - // TODO: Start the standalone version ;) + // Start the standalone version + cString cmd = cString::sprintf("\"%s\"/markad --online=2 -l \"%s\" before \"%s\"",bindir, + logodir,FileName); + SystemExec(cmd); } else { @@ -37,3 +27,9 @@ void cStatusMarkAd::Recording(const cDevice *Device, const char *Name, const cha } } + +cStatusMarkAd::cStatusMarkAd(const char *BinDir, const char *LogoDir) +{ + bindir=BinDir; + logodir=LogoDir; +} @@ -13,9 +13,12 @@ class cStatusMarkAd : public cStatus { private: + const char *bindir; + const char *logodir; protected: virtual void Recording(const cDevice *Device, const char *Name, const char *FileName, bool On); public: + cStatusMarkAd(const char *BinDir,const char *LogoDir); }; #endif |