summaryrefslogtreecommitdiff
path: root/tools.c
diff options
context:
space:
mode:
Diffstat (limited to 'tools.c')
-rw-r--r--tools.c116
1 files changed, 116 insertions, 0 deletions
diff --git a/tools.c b/tools.c
index f027a8f..4334ab2 100644
--- a/tools.c
+++ b/tools.c
@@ -27,3 +27,119 @@ cDirList::cDirList(cImageList &ImageList)
delete(token);
}
+cFileDelThread::cFileDelThread(const char *file)
+{
+ File = NULL;
+ Ok = false;
+
+ errno = 0;
+ if(!RightCheck(file))
+ OSDErrorNumMsg(errno,tr("No rights to delete image"));
+ else
+ {
+ if(file)
+ {
+ if(0 < asprintf(&File, "%s.sdel", file)) {
+ dsyslog("dvdswitch: Prepare delete (rename %s to %s)",file, File);
+ if(cFileCMD::Rn(file, File))
+ Ok = true;
+ else
+ OSDErrorNumMsg(errno,tr("Operation failed"));
+ }
+ }
+ }
+}
+
+cFileDelThread::~cFileDelThread(void)
+{
+ free(File);
+}
+
+bool cFileDelThread::RightCheck(const char *value)
+{
+ bool ret = false;
+ if(value)
+ {
+ cFileInfo *info = new cFileInfo(value);
+ ret = info->isWriteable();
+ DELETENULL(info);
+ }
+ return ret;
+}
+
+void cFileDelThread::Action(void)
+{
+ if(File) {
+ dsyslog("dvdswitch: Execute remove %s",File);
+ errno = 0;
+ if(!cFileCMD::Del(File))
+ SysLogErrorNumMsg(errno,"Operation file remove failed");
+ }
+ delete(this);
+};
+
+cFileMoveThread::cFileMoveThread(const char *file, char *dest)
+{
+ FileName = NULL;
+ File = NULL;
+ Dest = NULL;
+ Ok = false;
+
+ errno = 0;
+ if(!RightCheck(file) || !RightCheck(dest))
+ OSDErrorNumMsg(errno,tr("No rights to move image"));
+ else
+ {
+ if(file)
+ {
+ cFileInfo *info = new cFileInfo(file);
+ FileName = strdup(info->FileName());
+ DELETENULL(info);
+ if(0 < asprintf(&File, "%s.smove", file)) {
+ dsyslog("dvdswitch: Prepare move %s to %s",file, File);
+ if(cFileCMD::Rn(file, File))
+ Ok = true;
+ else
+ OSDErrorNumMsg(errno,tr("Operation failed"));
+ }
+ }
+ Dest = dest ? strdup(dest) : NULL;
+ }
+}
+
+cFileMoveThread::~cFileMoveThread(void)
+{
+ free(FileName);
+ free(File);
+ free(Dest);
+}
+
+bool cFileMoveThread::RightCheck(const char *value)
+{
+ bool ret = false;
+ if(value)
+ {
+ cFileInfo *info = new cFileInfo(value);
+ ret = info->isWriteable();
+ DELETENULL(info);
+ }
+ return ret;
+}
+
+void cFileMoveThread::Action(void)
+{
+ if(FileName && File && Dest)
+ {
+ char *buffer = NULL;
+ if(0 < asprintf(&buffer, "%s/%s", Dest, FileName)) {
+ dsyslog("dvdswitch: Execute move %s to %s",File, buffer);
+ errno = 0;
+ if(!cFileCMD::Rn(File, buffer))
+ SysLogErrorNumMsg(errno,"Operation file remove failed");
+ free(buffer);
+ }
+ }
+ delete(this);
+}
+
+