summaryrefslogtreecommitdiff
path: root/tools.c
diff options
context:
space:
mode:
authorMartin Prochnow <nordlicht@martins-kabuff.de>2006-05-29 16:02:12 +0200
committerAndreas Mair <andreas@vdr-developer.org>2006-05-29 16:02:12 +0200
commit40d2369b12da350f684f5364a00c3501a6c038e6 (patch)
tree26355fcd63be09e46416bd903d2d6b7936791a1a /tools.c
parent47a981960f1d0b6d0d8cbe3bdc15f2b9e8665731 (diff)
downloadvdr-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.c79
1 files changed, 79 insertions, 0 deletions
diff --git a/tools.c b/tools.c
index bc9c658..a1dacec 100644
--- a/tools.c
+++ b/tools.c
@@ -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)
{