summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--markad.cpp57
-rw-r--r--markad.h63
-rw-r--r--status.cpp28
-rw-r--r--status.h3
4 files changed, 108 insertions, 43 deletions
diff --git a/markad.cpp b/markad.cpp
index db134e3..6142131 100644
--- a/markad.cpp
+++ b/markad.cpp
@@ -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;
}
diff --git a/markad.h b/markad.h
index b45d49a..4c45abd 100644
--- a/markad.h
+++ b/markad.h
@@ -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
diff --git a/status.cpp b/status.cpp
index b08fd94..6394fa8 100644
--- a/status.cpp
+++ b/status.cpp
@@ -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;
+}
diff --git a/status.h b/status.h
index 70782fa..3ac4b9c 100644
--- a/status.h
+++ b/status.h
@@ -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