summaryrefslogtreecommitdiff
path: root/commands.h
diff options
context:
space:
mode:
Diffstat (limited to 'commands.h')
-rw-r--r--commands.h261
1 files changed, 261 insertions, 0 deletions
diff --git a/commands.h b/commands.h
new file mode 100644
index 0000000..3d53f1a
--- /dev/null
+++ b/commands.h
@@ -0,0 +1,261 @@
+#ifndef __COMMANDS_DVDSWITCH_H
+#define __COMMANDS_DVDSWITCH_H
+
+#include <vdr/plugin.h>
+#include "menu.h"
+#include "imagelist.h"
+#include "setup.h"
+#include <stdlib.h>
+
+enum eCMDs
+{
+ cmdNone,
+ cmdDirManage,
+ cmdDVDopen,
+ cmdDVDclose,
+ cmdImgPlay,
+ cmdImgRename,
+ cmdImgMove,
+ cmdImgDelete,
+ cmdImgBurn,
+ cmdImgRead,
+ cmdCommands
+};
+
+enum eCMDState
+{
+ csNone,
+ csDirNew,
+ csDirEdit,
+ csDirMove,
+ csDirDel
+};
+
+
+class cCMD
+{
+ public:
+ static eOSState Play(cMainMenuItem *item = NULL);
+ static eOSState Eject(bool close = false);
+};
+
+
+class cCMDMenu : public cOsdMenu
+{
+ private:
+ cMainMenuItem *iItem;
+ cMainMenu *OsdObject;
+ public:
+ cCMDMenu(cMainMenuItem *item, cMainMenu *osdobject);
+ virtual eOSState ProcessKey(eKeys Key);
+};
+
+class cCMDDir : public cOsdMenu, private cDirHandlingOpt
+{
+ private:
+ eCMDState State;
+ char Dir[MaxFileName];
+ cMainMenu *OsdObject;
+ bool Select;
+ char *Buffer;
+
+ void Build(char *dir = NULL);
+ void SetDir(char *value = NULL)
+ {
+ if(value)
+ strn0cpy(Dir, value, MaxFileName);
+ else
+ strcpy(Dir, "\0");
+ }
+
+ eOSState New(void);
+ eOSState New(eKeys Key);
+ eOSState Edit(cMainMenuItem *mItem);
+ eOSState Edit(eKeys Key);
+ public:
+ cCMDDir(cMainMenu *osdobject = NULL, bool select = false, char *buffer = NULL);
+
+ virtual eOSState ProcessKey(eKeys Key);
+ void SetHelp(void);
+};
+
+class cCMDMove : public cOsdMenu, private cDirHandlingOpt
+{
+ private:
+ char *File;
+ cMainMenu *OsdObject;
+ bool Dir;
+ bool Direct;
+
+ void Build(char *dir = NULL);
+ public:
+ cCMDMove(char *file, cMainMenu *osdobject, bool dir = true, bool direct = false);
+ ~cCMDMove(void) { free(File); }
+
+ virtual eOSState ProcessKey(eKeys Key);
+ void SetHelp(void);
+};
+
+class cCMDImage
+{
+ private:
+ char *File;
+ cMainMenu *OsdObject;
+ public:
+ char NewFile[MaxFileName];
+ int tmpHideTypeCol;
+ //int tmpHideImgSize
+
+ cCMDImage(cMainMenu *osdobject = NULL);
+ ~cCMDImage(void);
+
+ char* Rename(char *file = NULL);
+ eOSState Delete(char *file = NULL);
+ eOSState Burn(char *file);
+};
+
+class cCMDImageRead : public cOsdMenu
+{
+ private:
+ char File[MaxFileName];
+ char Dir[MaxFileName];
+ char ImgTypeTxt[MaxFileName];
+ int ImgType;
+ public:
+ cCMDImageRead(void);
+ ~cCMDImageRead(void);
+
+ void SetHelp(void);
+ virtual eOSState ProcessKey(eKeys Key);
+};
+
+class cCMDImageReadThread : public cThread
+{
+ private:
+ char *File;
+ char *Dir;
+ eFileInfo FileType;
+ protected:
+ virtual void Action(void)
+ {
+ DEBUG("ReadThread gestartet");
+ if(File && Dir && FileType != tNone)
+ {
+ DEBUG("Aktion wird ausgeführt");
+ char *cmd = NULL;
+ char *output = NULL;
+ char *mountpoint = NULL;
+ int step = 0;
+ cTokenizer *token = NULL;
+ char buffer[MaxFileName];
+ realpath(DVDSwitchSetup.DVDLinkOrg, buffer);
+
+ while(!mountpoint && step < 2)
+ {
+ step++;
+ asprintf(&cmd,
+ "cat /etc/fstab | grep -e \"%s\" | grep -e \"^[^#]\"",
+ step == 1 ? DVDSwitchSetup.DVDLinkOrg : buffer);
+ DEBUG("Commando: %s", cmd);
+
+ FILE *p = popen(cmd, "r");
+ if(p)
+ {
+#if VDRVERSNUM >= 10318
+ cReadLine rl;
+ output = rl.Read(p);
+#else
+ output = readline(p);
+#endif
+ pclose(p);
+ }
+ token = new cTokenizer(output, " ");
+ if(token->Count() > 1)
+ mountpoint = strdup(stripspace(token->GetToken(2)));
+ DELETENULL(token);
+ }
+ FREENULL(cmd);
+ asprintf(&cmd,
+ "'%s' '%s' '%s' '%s' '%s' '%s'",
+ DVDSwitchSetup.DVDReadScript,
+ Dir,
+ File,
+ buffer,
+ mountpoint,
+ (FileType == tFile) ? "IMAGE" : "DIR");
+ DEBUG("Aufruf: %s", cmd);
+ int rc = system(cmd);
+ DEBUG("Rückgabe Aufruf: %i", rc);
+ FREENULL(cmd);
+ FREENULL(mountpoint);
+ }
+ delete(this);
+ };
+ public:
+ cCMDImageReadThread(char *file, char *dir, int imgtype)
+ {
+ DEBUG("ReadThread created");
+ File = NULL;
+ Dir = NULL;
+ FileType = tNone;
+
+ cImageListItem *item = ImageList.Get(imgtype);
+ if(imgtype >= 0 && file && dir)
+ {
+ if(item->GetFType() == tFile)
+ asprintf(&File, "%s%s", file, item->GetValue());
+ else
+ File = strdup(file);
+ Dir = strdup(dir);
+ FileType = item->GetFType();
+ }
+ }
+ ~cCMDImageReadThread(void)
+ {
+ free(File);
+ free(Dir);
+ }
+};
+
+class cCMDImageBurnThread : public cThread
+{
+ private:
+ char *File;
+ eFileInfo FileType;
+ protected:
+ virtual void Action(void)
+ {
+ DEBUG("BurnThread gestartet");
+ if(File && FileType != tNone)
+ {
+ DEBUG("Aktion wird ausgeführt");
+ char *cmd;
+ asprintf(&cmd,
+ "'%s' '%s' '%s'",
+ DVDSwitchSetup.DVDWriteScript,
+ File,
+ FileType == tFile ? "IMAGE" : "DIR");
+ DEBUG("Aufruf: %s", &cmd);
+ int rc = system(cmd);
+ DEBUG("Rückgabe Aufruf: %i", rc);
+ FREENULL(cmd);
+ }
+ delete(this);
+ };
+ public:
+ cCMDImageBurnThread(char *file, eFileInfo type)
+ {
+ DEBUG("BurnThread created");
+ File = NULL;
+ FileType = tNone;
+
+ if(file && type != tNone)
+ {
+ File = strdup(file);
+ FileType = type;
+ }
+ }
+ ~cCMDImageBurnThread(void) { free(File); }
+};
+
+#endif // __COMMANDS_DVDSWITCH_H