summaryrefslogtreecommitdiff
path: root/dvdswitch.c
diff options
context:
space:
mode:
authoranbr <vdr07@deltab.de>2010-12-21 20:36:58 +0100
committeranbr <vdr07@deltab.de>2010-12-21 20:36:58 +0100
commit10a33e14d6338ff004410413f6fe52810be43f67 (patch)
tree6f71b062e9235be1383a9e6c536fea336d400e6c /dvdswitch.c
downloadvdr-plugin-dvdswitch-10a33e14d6338ff004410413f6fe52810be43f67.tar.gz
vdr-plugin-dvdswitch-10a33e14d6338ff004410413f6fe52810be43f67.tar.bz2
release 0.1.0 from http://www.schmidtie.de/download/vdr-dvdswitch-0.1.0.tar.bz20.1.0
Diffstat (limited to 'dvdswitch.c')
-rw-r--r--dvdswitch.c210
1 files changed, 210 insertions, 0 deletions
diff --git a/dvdswitch.c b/dvdswitch.c
new file mode 100644
index 0000000..7e8f33c
--- /dev/null
+++ b/dvdswitch.c
@@ -0,0 +1,210 @@
+/*
+ * dvdswitch.c: A plugin for the Video Disk Recorder
+ *
+ * See the README file for copyright information and how to reach the author.
+ *
+ * $Id$
+ */
+
+#include <getopt.h>
+#include <unistd.h>
+#include <vdr/plugin.h>
+#include "i18n.h"
+#include "helpers.h"
+#include "setup.h"
+#include "menu.h"
+#include "dvdplugin.h"
+#include "imagelist.h"
+//#include "dvdlist.h"
+
+static const char *VERSION = "0.1.0";
+static const char *DESCRIPTION = "allowed to play DVD-Images";
+//static const char *MAINMENUENTRY = "DVDSwitch";
+
+class cPluginDvdswitch : public cPlugin {
+private:
+ // Add any member variables or functions you may need here.
+ bool CheckError(void);
+public:
+ cPluginDvdswitch(void);
+ virtual ~cPluginDvdswitch();
+ 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 const char *MainMenuEntry(void) { return tr(MAINMENUENTRY); }
+ virtual const char *MainMenuEntry(void) { return DVDSwitchSetup.MenuName; }
+ 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);
+ };
+
+cPluginDvdswitch::cPluginDvdswitch(void)
+{
+ // Initialize any member variables here.
+ // DON'T DO ANYTHING ELSE THAT MAY HAVE SIDE EFFECTS, REQUIRE GLOBAL
+ // VDR OBJECTS TO EXIST OR PRODUCE ANY OUTPUT!
+}
+
+cPluginDvdswitch::~cPluginDvdswitch()
+{
+ // Clean up after yourself!
+ cDVDPlugin::Finish();
+ DebugLog.End();
+}
+
+const char *cPluginDvdswitch::CommandLineHelp(void)
+{
+ //12345678901234567890123456789012345678901234567890123456789012345678901234567890|
+ return
+ " -D LOGFILE, --debug=LOGFILE write Debug-Info's in LOGFILE\n"
+ " -r SCRIPT, --readscript=SCRIPT SCRIPT = scriptname with path for reading"
+ " DVD as a ISO Image File"
+ " -w SCRIPT, --writescript=SCRIPT SCRIPT = scriptname with path to writing"
+ " selected DVD Image"
+ " -i PATH, --imagedir=PATH Path to DVD-Images. This Option can set"
+ " in SetupMenu optional";
+}
+
+bool cPluginDvdswitch::ProcessArgs(int argc, char *argv[])
+{
+ static struct option long_options[] = {
+ { "debug", required_argument, NULL, 'D' },
+ { "readscript", required_argument, NULL, 'r' },
+ { "writescript", required_argument, NULL, 'w' },
+ { "imagedir", required_argument, NULL, 'i' },
+ { NULL }
+ };
+
+ int c = 0;
+ optind = 1; //default for getopt
+
+ while((c = getopt_long(argc, argv, "D:r:w:", long_options, NULL)) != -1)
+ {
+ switch(c)
+ {
+ case 'D':
+ DebugLog.SetLogFile(optarg);
+ break;
+ case 'r':
+ strn0cpy(DVDSwitchSetup.DVDReadScript, optarg, MaxFileName);
+ break;
+ case 'w':
+ strn0cpy(DVDSwitchSetup.DVDWriteScript, optarg, MaxFileName);
+ break;
+ case 'i':
+ strn0cpy(DVDSwitchSetup.ImageDir, optarg, MaxFileName);
+ DVDSwitchSetup.ImageDirPerParam = true;
+ break;
+ default:
+ esyslog("DVDSwitch: unknown Parameter: %c", c);
+ break;
+ }
+ }
+
+ return true;
+}
+
+bool cPluginDvdswitch::Initialize(void)
+{
+ // Initialize any background activities the plugin shall perform.
+ DEBUG("Plugin wird initialisiert");
+ RegisterI18n(Phrases);
+
+ DVDSwitchSetup.SetConfDir((char*)ConfigDirectory(Name()));
+ cDVDPlugin::Init();
+ ImageList.Init();
+ DVDSwitchSetup.Init();
+
+ return true;
+}
+
+bool cPluginDvdswitch::Start(void)
+{
+ // Start any background activities the plugin shall perform.
+ return true;
+}
+
+void cPluginDvdswitch::Stop(void)
+{
+ // Stop any background activities the plugin shall perform.
+}
+
+void cPluginDvdswitch::Housekeeping(void)
+{
+ // Perform any cleanup or other regular tasks.
+}
+
+cOsdObject *cPluginDvdswitch::MainMenuAction(void)
+{
+ // Perform the action when selected from the main VDR menu.
+ DEBUG("MainMenuAction");
+ if (CheckError())
+ {
+ DEBUG("Fehler entdeckt. Keine OSDOBJECT Rueckgabe");
+ return NULL;
+ }
+ else
+ return new cMainMenu();
+}
+
+cMenuSetupPage *cPluginDvdswitch::SetupMenu(void)
+{
+ // Return a setup menu in case the plugin supports one.
+ return new cMenuSetupDVDSwitch();
+}
+
+bool cPluginDvdswitch::SetupParse(const char *Name, const char *Value)
+{
+ // Parse your own setup parameters and store their values.
+ return DVDSwitchSetup.SetupParse(Name, Value);
+}
+
+bool cPluginDvdswitch::Service(const char *Id, void *Data)
+{
+ // Handle custom service requests from other plugins
+ return false;
+}
+
+const char **cPluginDvdswitch::SVDRPHelpPages(void)
+{
+ // Return help text for SVDRP commands this plugin implements
+ return NULL;
+}
+
+cString cPluginDvdswitch::SVDRPCommand(const char *Command, const char *Option, int &ReplyCode)
+{
+ // Process SVDRP commands this plugin implements
+ return NULL;
+}
+
+bool cPluginDvdswitch::CheckError(void)
+{
+ DEBUG("Fehlercheck");
+ DEBUG("Check ImageDir");
+ if(!DirectoryOk(DVDSwitchSetup.ImageDir))
+ {
+ DEBUG("ImageDir '%s' ist nicht lesbar oder existiert nicht", DVDSwitchSetup.ImageDir);
+ OSD_ERRMSG(tr("Image Directory not readable or not exist"));
+ return true;
+ }
+
+ DEBUG("Check DVD Plugin");
+ if(!cPluginManager::GetPlugin("dvd"))
+ {
+ DEBUG("DVDPlugin wurde nicht gefunden!");
+ OSD_INFOMSG(tr("DVD-Plugin not found! Function deactivated!"));
+ } else
+ DVDSwitchSetup.DVDPluginExist = true;
+
+ return false;
+}
+
+VDRPLUGINCREATOR(cPluginDvdswitch); // Don't touch this!