diff options
Diffstat (limited to 'tools.c')
-rw-r--r-- | tools.c | 79 |
1 files changed, 79 insertions, 0 deletions
@@ -7,6 +7,85 @@ #include "tools.h" #include "mymenusetup.h" +// creates the necassery directories and renames the given old name to the new name +bool MoveRename(const char *OldName,const char *NewName,cRecording *Recording,bool Move) +{ + char *buf=NULL; + + // is OldName different to NewName + if(!strcmp(OldName,NewName)) + return true; + + // move/rename a recording + if(Recording) + { + if(!MakeDirs(NewName,true)) + { + Skins.Message(mtError,tr("Creating directories failed!")); + return false; + } + isyslog("[extrecmenu] moving %s to %s",OldName,NewName); + + if(rename(OldName,NewName)==-1) + { + Skins.Message(mtError,tr("Rename/Move failed!")); + return false; + } + + // set user command for '-r'-option of VDR + asprintf(&buf,"%s \"%s\"",Move?"move":"rename",*strescape(OldName,"'\\\"$")); + cRecordingUserCommand::InvokeCommand(buf,NewName); + free(buf); + + // update recordings list + Recordings.AddByName(NewName); + Recordings.Del(Recording); + } + // move/rename a directory + else + { + // is the new path within the old? + asprintf(&buf,"%s/",OldName); // we have to append a / to make sure that we search for a directory + printf("%s\n%s\n",buf,NewName); + if(!strncmp(buf,NewName,strlen(buf))) + { + Skins.Message(mtError,tr("Moving into own sub-directory not allowed!")); + free(buf); + return false; + } + free(buf); + + // build my own recordings list + myRecList *list=new myRecList(); + for(cRecording *recording=Recordings.First();recording;recording=Recordings.Next(recording)) + list->Add(new myRecListItem(recording)); + + myRecListItem *item=list->First(); + while(item) + { + // find recordings within the path of OldName + if(!strncmp(OldName,item->recording->FileName(),strlen(OldName))) + { + buf=strdup(OldName+strlen(VideoDirectory)+1); + ExchangeChars(buf,false); + + // exclude recordings with the same name as OldName + if(strcmp(item->recording->Name(),buf)) + { + free(buf); + asprintf(&buf,"%s%s",NewName,item->recording->FileName()+strlen(OldName)); + // move/rename the recording + MoveRename(item->recording->FileName(),buf,item->recording,Move); + } + free(buf); + } + item=list->Next(item); + } + delete list; + } + return true; +} + // --- myRecListItem ---------------------------------------------------------- myRecListItem::myRecListItem(cRecording *Recording) { |