summaryrefslogtreecommitdiff
path: root/uactivity.c
diff options
context:
space:
mode:
authorKeine_Ahnung <no@mail.com>2013-01-24 23:18:06 +0100
committerKeine_Ahnung <no@mail.com>2013-01-24 23:18:06 +0100
commit10c1a2a05d65a8e89c4e5c1da9452fef24280f77 (patch)
tree1b3ffffdb7795938f15ab91b93a23bf092bcbbd0 /uactivity.c
downloadvdr-plugin-uactivity-0.0.1.tar.gz
vdr-plugin-uactivity-0.0.1.tar.bz2
Initial import, just startetv0.0.1
Diffstat (limited to 'uactivity.c')
-rw-r--r--uactivity.c194
1 files changed, 194 insertions, 0 deletions
diff --git a/uactivity.c b/uactivity.c
new file mode 100644
index 0000000..a49d981
--- /dev/null
+++ b/uactivity.c
@@ -0,0 +1,194 @@
+/*
+ * uactivity.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 <vdr/plugin.h>
+#include <vdr/osdbase.h>
+#include <vdr/keys.h>
+#include <vdr/shutdown.h>
+
+#define STRINGIFYX(x) #x
+#define STRINGIFY(x) STRINGIFYX(x)
+#define WATCHDOG 0
+
+static const char *VERSION = "0.0.1";
+static const char *DESCRIPTION = trNOOP("running shellscipts based upton user aktivity changes");
+
+enum eOrgin {oStartUp, oShutDown, oRunning};
+
+class cPluginUactivity : public cPlugin {
+private:
+ // Add any member variables or functions you may need here.
+ void Call(eOrgin Orgin, bool Active=false);
+ void Call();
+ bool LastActivity;
+ bool WatchdogTimer;
+ char *myConfigDirectory;
+ char *myCacheDirectory;
+ char *myResourceDirectory;
+public:
+ cPluginUactivity(void);
+ virtual ~cPluginUactivity();
+ 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) { return true; };
+ virtual bool Start(void);
+ virtual void Stop(void);
+ virtual void Housekeeping(void) { };
+ virtual void MainThreadHook(void);
+ virtual cString Active(void) { return NULL; };
+ virtual time_t WakeupTime(void) { return 0; };
+ virtual const char *MainMenuEntry(void) { return NULL; }
+ virtual cOsdObject *MainMenuAction(void);
+ virtual cMenuSetupPage *SetupMenu(void) { return NULL; };
+ virtual bool SetupParse(const char *Name, const char *Value) { return false; };
+ virtual bool Service(const char *Id, void *Data = NULL) { return false; };
+ virtual const char **SVDRPHelpPages(void) { return NULL; };
+ virtual cString SVDRPCommand(const char *Command, const char *Option, int &ReplyCode) { return NULL; };
+ };
+
+class cPluginUactivityMenu : public cOsdMenu {
+private:
+ cKey myKey;
+ void Call(eKeys Key) {
+ esyslog("%s: Key -> %s", PLUGIN_NAME_I18N, myKey.ToString(Key));
+ }
+
+protected:
+ virtual eOSState ProcessKey(eKeys Key) {
+ eOSState state = cOsdMenu::ProcessKey(Key);
+ if (state == osUnknown)
+ if ((Key >= kUp) && (Key < kNone)) {
+ Call(Key);
+ return osEnd;
+ }
+ return osContinue;
+ }
+public:
+ cPluginUactivityMenu() : cOsdMenu(PLUGIN_NAME_I18N) { }
+};
+
+cPluginUactivity::cPluginUactivity(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!
+ LastActivity = false;
+ WatchdogTimer = WATCHDOG;
+}
+
+cPluginUactivity::~cPluginUactivity()
+{
+ // Clean up after yourself!
+ if (myConfigDirectory) free(myConfigDirectory);
+ if (myCacheDirectory) free(myCacheDirectory);
+ if (myResourceDirectory) free(myResourceDirectory);
+}
+
+void cPluginUactivity::Call(eOrgin Orgin, bool Active)
+{
+ char *OrginStr = NULL;
+ if (Orgin == oStartUp) OrginStr = strdup("startup");
+ else if (Orgin == oShutDown) OrginStr = strdup("shutdown");
+ else if (Orgin == oRunning) OrginStr = strdup("running");
+
+ char *ActivityStatusStr = NULL;
+ if (Active)
+ ActivityStatusStr = strdup("true");
+ else
+ ActivityStatusStr = strdup("false");
+
+ esyslog("%s: Orgin -> %s Activity -> %s", PLUGIN_NAME_I18N, OrginStr, ActivityStatusStr);
+
+ if (ActivityStatusStr) free(ActivityStatusStr);
+ if (OrginStr) free(OrginStr);
+}
+
+void cPluginUactivity::Call()
+{
+ esyslog("%s: Watchdog", PLUGIN_NAME_I18N);
+}
+
+const char *cPluginUactivity::CommandLineHelp(void)
+{
+ // Return a string that describes all known command line options.
+ return " -w <Seconds>, --watchdog=<Seconds>"
+ " Call the watchdog script every <Seconds> seconds (default: '" STRINGIFY(WATCHDOG) "')\n"
+ " "
+ " '0' disables the call of the watchdog script\n";
+}
+
+bool cPluginUactivity::ProcessArgs(int argc, char *argv[])
+{
+ // Implement command line argument processing here if applicable.
+ static struct option long_options[] = {
+ {"watchdog-timer", required_argument, NULL, 'w'},
+ { NULL }
+ };
+
+ int c;
+ while ((c = getopt_long(argc, argv, "w:", long_options, NULL)) != -1) {
+ switch (c) {
+ case 'w': if (isnumber(optarg))
+ if (atoi(optarg) > 0)
+ WatchdogTimer = atoi(optarg);
+ else
+ return false;
+ else
+ return false;
+ break;
+ default: return false;
+ }
+ }
+ return true;
+}
+
+bool cPluginUactivity::Start(void)
+{
+ // Start any background activities the plugin shall perform.
+ myConfigDirectory = strdup(ConfigDirectory(PLUGIN_NAME_I18N));
+#if VDRVERSNUM >= 10729
+ myCacheDirectory = strdup(CacheDirectory(PLUGIN_NAME_I18N));
+ myResourceDirectory = strdup(ResourceDirectory(PLUGIN_NAME_I18N));
+#else
+ myCacheDirectory = strdup(myConfigDirectory);
+ myResourceDirectory = strdup(myConfigDirectory);
+#endif
+
+ bool ActivityStatus = !ShutdownHandler.IsUserInactive();
+ Call(oStartUp, ActivityStatus);
+ LastActivity = ActivityStatus;
+ return true;
+}
+
+void cPluginUactivity::Stop(void)
+{
+ // Stop any background activities the plugin is performing.
+ Call(oShutDown);
+}
+
+void cPluginUactivity::MainThreadHook(void)
+{
+ // Perform actions in the context of the main program thread.
+ // WARNING: Use with great care - see PLUGINS.html!
+ bool ActivityStatus = !ShutdownHandler.IsUserInactive();
+ if (ActivityStatus != LastActivity) {
+ Call(oRunning, ActivityStatus);
+ LastActivity = ActivityStatus;
+ }
+}
+
+cOsdObject *cPluginUactivity::MainMenuAction(void)
+{
+ // Perform the action when selected from the main VDR menu.
+ return new cPluginUactivityMenu();
+}
+
+VDRPLUGINCREATOR(cPluginUactivity); // Don't touch this!