diff options
Diffstat (limited to 'tools.c')
-rw-r--r-- | tools.c | 116 |
1 files changed, 116 insertions, 0 deletions
@@ -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); +} + + |