diff options
author | Martin Prochnow <nordlicht@martins-kabuff.de> | 2006-05-29 16:02:12 +0200 |
---|---|---|
committer | Andreas Mair <andreas@vdr-developer.org> | 2006-05-29 16:02:12 +0200 |
commit | 40d2369b12da350f684f5364a00c3501a6c038e6 (patch) | |
tree | 26355fcd63be09e46416bd903d2d6b7936791a1a /tools.c | |
parent | 47a981960f1d0b6d0d8cbe3bdc15f2b9e8665731 (diff) | |
download | vdr-plugin-extrecmenu-40d2369b12da350f684f5364a00c3501a6c038e6.tar.gz vdr-plugin-extrecmenu-40d2369b12da350f684f5364a00c3501a6c038e6.tar.bz2 |
Version 0.11v0.11
- added czech translation; thanks to Vladimír Bárta
- added missing dialog for video dvds
- added more meaningful error messages
- avoid empty names and names starting with . or .. while editing
- free space display in title bar is now updated immediately
- switched off editing of recordings and directories while a cut is in progress
- switched off resume by 'Play' or 'Menu'->'Blue' for archive dvd recordings
- changed back the behaviour if replay ends; plugin has to open to unmount archive dvds
- removed setup option "While opening jump to last replayed recording"; its implemention interfers with the following one
- after renaming a recording, the selection bar now stays at this renamed list entry
- the parameters 'move' and 'rename' for the '-r'-option of VDR have now the following format: move/rename oldname newname
- fixed hopefully all problems in connection with renaming and moving directories
- plugins closes if there are no recordings - fixed
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) { |