diff options
author | Martin Prochnow <nordlicht@martins-kabuff.de> | 2006-03-09 15:01:38 +0100 |
---|---|---|
committer | Andreas Mair <andreas@vdr-developer.org> | 2006-03-09 15:01:38 +0100 |
commit | 93372f4ecc69a079c0e5c5af9169f39222983667 (patch) | |
tree | f341ea604e6fd1a8e175ee78a70cab88a6006623 /mymenumoverecording.c | |
download | vdr-plugin-extrecmenu-93372f4ecc69a079c0e5c5af9169f39222983667.tar.gz vdr-plugin-extrecmenu-93372f4ecc69a079c0e5c5af9169f39222983667.tar.bz2 |
Version 0.1 (Initial revision).v0.1
Diffstat (limited to 'mymenumoverecording.c')
-rw-r--r-- | mymenumoverecording.c | 218 |
1 files changed, 218 insertions, 0 deletions
diff --git a/mymenumoverecording.c b/mymenumoverecording.c new file mode 100644 index 0000000..f0a64d1 --- /dev/null +++ b/mymenumoverecording.c @@ -0,0 +1,218 @@ +#include "extrecmenu.h" + +bool clearall; +char newname[128]; + +// --- myMenuNewName ---------------------------------------------------------- +class myMenuNewName:public cOsdMenu +{ + private: + char name[128]; + public: + myMenuNewName(); + virtual eOSState ProcessKey(eKeys Key); +}; + +myMenuNewName::myMenuNewName():cOsdMenu(tr("New folder"),12) +{ + strn0cpy(name,tr("New folder"),sizeof(name)); + Add(new cMenuEditStrItem(tr("Name"),name,sizeof(name),tr(FileNameChars))); +} + +eOSState myMenuNewName::ProcessKey(eKeys Key) +{ + eOSState state=cOsdMenu::ProcessKey(Key); + + if(state==osUnknown) + { + if(Key==kOk) + { + strn0cpy(newname,name,sizeof(newname)); + state=osBack; + } + } + + return state; +} + +// --- myMenuMoveRecordingItem ------------------------------------------------ +class myMenuMoveRecordingItem:public cOsdItem +{ + private: + int level; + char *title; + public: + myMenuMoveRecordingItem(cRecording *Recording,int Level); +}; + +myMenuMoveRecordingItem::myMenuMoveRecordingItem(cRecording *Recording,int Level) +{ + level=0; + const char *s=Recording->Name(); + while(*++s) + { + if(*s=='~') + level++; + } + + if(Level<level) + { + s=Recording->Name(); + while(Level) + { + s=strchr(Recording->Name(),'~')+1; + Level--; + } + title=strdup(s); + char *p=strchr(title,'~'); + if(p) + *p=0; + SetText(title); + } + else + SetText(""); +} + +// --- myMenuMoveRecording ---------------------------------------------------- +myMenuMoveRecording::myMenuMoveRecording(cRecording *Recording,myMenuRecordings *MenuRecordings,const char *Base,int Level):cOsdMenu(Base?Base:"") +{ + strn0cpy(newname,"",sizeof(newname)); + recording=Recording; + menurecordings=MenuRecordings; + base=Base?strdup(Base):NULL; + level=Level; + Set(); + SetHelp(tr("Button$Cancel"),NULL,tr("Button$Create"),tr("Button$Select")); +} + +myMenuMoveRecording::~myMenuMoveRecording() +{ + free(base); +} + +void myMenuMoveRecording::Set() +{ + char *lastitemtext=NULL; + for(cRecording *recording=Recordings.First();recording;recording=Recordings.Next(recording)) + { + if(!base||(strstr(recording->Name(),base)==recording->Name()&&recording->Name()[strlen(base)]=='~')) + { + myMenuMoveRecordingItem *item=new myMenuMoveRecordingItem(recording,level); + if(*item->Text()&&(!lastitemtext||strcmp(lastitemtext,item->Text()))) + { + Add(item); + free(lastitemtext); + lastitemtext=strdup(item->Text()); + } + else + delete item; + } + } + free(lastitemtext); +} + +eOSState myMenuMoveRecording::Open() +{ + if(newname[0]!=0) + { + const char *t; + char buffer[MaxFileName]; + if(base) + snprintf(buffer,sizeof(buffer),"%s~%s",base,newname); + else + snprintf(buffer,sizeof(buffer),"%s",newname); + t=buffer; + return AddSubMenu(new myMenuMoveRecording(recording,menurecordings,t,level+1)); + } + else + { + myMenuMoveRecordingItem *item=(myMenuMoveRecordingItem*)Get(Current()); + if(item) + { + const char *t=item->Text(); + char buffer[MaxFileName]; + if(base) + { + snprintf(buffer,sizeof(buffer),"%s~%s",base,t); + t=buffer; + } + return AddSubMenu(new myMenuMoveRecording(recording,menurecordings,t,level+1)); + } + } + return osContinue; +} + +eOSState myMenuMoveRecording::MoveRec() +{ + char *name; + + char *p=strrchr(recording->Name(),'~'); + if(p) + { + if(base) + asprintf(&name,"%s~%s",base,++p); + else + asprintf(&name,"%s",++p); + } + else + { + if(base) + asprintf(&name,"%s~%s",base,recording->Name()); + else + asprintf(&name,"%s",recording->Name()); + } + + char *newfilename; + asprintf(&newfilename,"%s/%s/%s",VideoDirectory,ExchangeChars(name,true),strrchr(recording->FileName(),'/')+1); + + int result=MakeDirs(newfilename,true); + if(result) + { + result=RenameVideoFile(recording->FileName(),newfilename); + if(result) + { + // update recordings list + Recordings.Update(true); + // update menu + menurecordings->Set(); + // close move-recordings-menu + clearall=true; + } + else + Skins.Message(mtError,tr("Error while accessing recording!")); + } + else + Skins.Message(mtError,tr("Error while accessing recording!")); + + return osContinue; +} + +eOSState myMenuMoveRecording::Create() +{ + return AddSubMenu(new myMenuNewName); +} + +eOSState myMenuMoveRecording::ProcessKey(eKeys Key) +{ + eOSState state=cOsdMenu::ProcessKey(Key); + + if(state==osUnknown) + { + switch(Key) + { + case kRed: clearall=true;break; + case kYellow: return Create(); + case kBlue: return MoveRec(); + case kOk: return Open(); + default: break; + } + } + + if(newname[0]!=0) + return Open(); + + if(clearall) + return osBack; + + return state; +} |