summaryrefslogtreecommitdiff
path: root/mymenumoverecording.c
diff options
context:
space:
mode:
authorMartin Prochnow <nordlicht@martins-kabuff.de>2006-03-26 12:18:12 +0200
committerAndreas Mair <andreas@vdr-developer.org>2006-03-26 12:18:12 +0200
commit54d5f6870a7351584fcb1c3e861a4fc9224badf3 (patch)
treefb51954380f42e8827a0a8fa757ef12e17e4e0f9 /mymenumoverecording.c
parent20683b994128131bcb22f89f00282cefdc54fc04 (diff)
downloadvdr-plugin-extrecmenu-54d5f6870a7351584fcb1c3e861a4fc9224badf3.tar.gz
vdr-plugin-extrecmenu-54d5f6870a7351584fcb1c3e861a4fc9224badf3.tar.bz2
Version 0.7v0.7
- added frensh translation; thanks to Patrice Staudt - added finnish translation; thanks to Rolf Ahrenberg - several bugfixes: * if there are more then one recording with the same name, only one of it is shown if the recording details are hidden; thanks to Monroe from vdr-portal.de for reporting * recording list entry (not the recording itselfs!) is deleted, if it is moved to the same place; thanks to Monroe from vdr-portal.de for reporting * if a recording was deleted, the selection bar jumps to the first list entry * some people reported problems with wrong recording dates using LinVDR - revised rename-recording-menu; thanks to Monroe from vdr-portal.de for suggesting - revised move-recording-menu - it is now more obvious; thanks to Monroe from vdr-portal.de for suggesting - added option to show an alternative new marker - it's only useful for german speaking users because this icon shows 'NEU'; suggestions for an international version are welcome, you has 22x22 pixels for it - added the functionality of the DvdArchive- and the DVDShowArchive-patch for VDR - thanks fpr vejoun from vdr-portal.de for the script 'dvdarchive.sh'
Diffstat (limited to 'mymenumoverecording.c')
-rw-r--r--mymenumoverecording.c152
1 files changed, 88 insertions, 64 deletions
diff --git a/mymenumoverecording.c b/mymenumoverecording.c
index 5f41b61..c4abe69 100644
--- a/mymenumoverecording.c
+++ b/mymenumoverecording.c
@@ -5,7 +5,9 @@
#include <vdr/videodir.h>
#include <vdr/menu.h>
+#include <vdr/remote.h>
#include "mymenurecordings.h"
+#include "tools.h"
bool clearall;
char newname[128];
@@ -24,19 +26,22 @@ myMenuNewName::myMenuNewName():cOsdMenu(tr("New folder"),12)
{
strn0cpy(name,tr("New folder"),sizeof(name));
Add(new cMenuEditStrItem(tr("Name"),name,sizeof(name),tr(FileNameChars)));
+ cRemote::Put(kRight);
}
eOSState myMenuNewName::ProcessKey(eKeys Key)
{
eOSState state=cOsdMenu::ProcessKey(Key);
- if(state==osUnknown)
+ if(state==osContinue)
{
if(Key==kOk)
{
strn0cpy(newname,name,sizeof(newname));
state=osBack;
}
+ if(Key==kBack)
+ state=osBack;
}
return state;
@@ -49,34 +54,31 @@ class myMenuMoveRecordingItem:public cOsdItem
int level;
char *title;
public:
+ myMenuMoveRecordingItem(const char *Title,int Level);
myMenuMoveRecordingItem(cRecording *Recording,int Level);
+ int Level(){return level;}
+ void SetLevel(int Level){level=Level;}
};
+myMenuMoveRecordingItem::myMenuMoveRecordingItem(const char *Title,int Level)
+{
+ level=Level;
+ title=strdup(Title);
+ SetText(title);
+}
+
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);
-*/
s=Recording->Name();
const char *p=s;
while(*++s)
@@ -106,7 +108,7 @@ myMenuMoveRecording::myMenuMoveRecording(cRecording *Recording,myMenuRecordings
base=Base?strdup(Base):NULL;
level=Level;
Set();
- SetHelp(tr("Button$Cancel"),NULL,tr("Button$Create"),tr("Button$Select"));
+ SetHelp(tr("Button$Cancel"),NULL,tr("Button$Create"),tr("Button$Move"));
}
myMenuMoveRecording::~myMenuMoveRecording()
@@ -116,17 +118,33 @@ myMenuMoveRecording::~myMenuMoveRecording()
void myMenuMoveRecording::Set()
{
+ if(level==0)
+ Add(new myMenuMoveRecordingItem(tr("[base dir]"),0));
+
char *lastitemtext=NULL;
+ myMenuMoveRecordingItem *lastitem=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())))
+ if(*item->Text())
{
- Add(item);
- free(lastitemtext);
- lastitemtext=strdup(item->Text());
+ if(lastitemtext&&!strcmp(lastitemtext,item->Text())) // same text
+ {
+ if(lastitem&&lastitem->Level()<item->Level()) // if level of the previous item is lower, set it to the new value
+ {
+ lastitem->SetLevel(item->Level());
+ }
+ delete item;
+ }
+ else
+ {
+ Add(item); // different text means a new item to add
+ lastitem=item;
+ free(lastitemtext);
+ lastitemtext=strdup(lastitem->Text());
+ }
}
else
delete item;
@@ -137,21 +155,10 @@ void myMenuMoveRecording::Set()
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)
{
- myMenuMoveRecordingItem *item=(myMenuMoveRecordingItem*)Get(Current());
- if(item)
+ if(item->Level()>level)
{
const char *t=item->Text();
char buffer[MaxFileName];
@@ -168,48 +175,61 @@ eOSState myMenuMoveRecording::Open()
eOSState myMenuMoveRecording::MoveRec()
{
- char *name;
+ char *dir=NULL,*p=NULL,*name,*newfilename;
+ eOSState state=osContinue;
- char *p=strrchr(recording->Name(),'~');
- if(p)
+ myMenuMoveRecordingItem *item=(myMenuMoveRecordingItem*)Get(Current());
+ if(item)
{
- if(base)
- asprintf(&name,"%s~%s",base,++p);
+
+ if(!strcmp(tr("[base dir]"),item->Text()))
+ dir="";
else
- asprintf(&name,"%s",++p);
+ asprintf(&dir,"%s~",item->Text());
+
+ p=strrchr(recording->Name(),'~');
+ if(p)
+ {
+ if(base)
+ asprintf(&name,"%s~%s%s",base,dir,++p);
+ else
+ asprintf(&name,"%s%s",dir,++p);
+ }
+ else
+ {
+ if(base)
+ asprintf(&name,"%s~%s%s",base,dir,recording->Name());
+ else
+ asprintf(&name,"%s%s",dir,recording->Name());
+ }
+
+ asprintf(&newfilename,"%s/%s/%s",VideoDirectory,ExchangeChars(name,true),strrchr(recording->FileName(),'/')+1);
}
else
{
- if(base)
- asprintf(&name,"%s~%s",base,recording->Name());
+ p=strrchr(recording->Name(),'~');
+ if(p)
+ asprintf(&name,"%s~%s",base,++p);
else
- asprintf(&name,"%s",recording->Name());
+ asprintf(&name,"%s~%s",base,recording->Name());
+
+ asprintf(&newfilename,"%s/%s/%s",VideoDirectory,ExchangeChars(name,true),strrchr(recording->FileName(),'/')+1);
}
- char *newfilename;
- asprintf(&newfilename,"%s/%s/%s",VideoDirectory,ExchangeChars(name,true),strrchr(recording->FileName(),'/')+1);
-
- int result=MakeDirs(newfilename,true);
- if(result)
+ if(MoveVideoFile(recording,newfilename))
{
- result=RenameVideoFile(recording->FileName(),newfilename);
- if(result)
- {
- // update recordings list
- Recordings.AddByName(newfilename);
- Recordings.Del(recording,false);
- // update menu
- menurecordings->Set(true);
- // close move-recordings-menu
- clearall=true;
- }
- else
- Skins.Message(mtError,tr("Error while accessing recording!"));
+ menurecordings->Set(true);
+ clearall=true; // close move recording menu
+ state=osBack;
}
else
Skins.Message(mtError,tr("Error while accessing recording!"));
-
- return osContinue;
+
+ if(dir!="")
+ free(dir);
+ free(name);
+ free(newfilename);
+ return state;
}
eOSState myMenuMoveRecording::Create()
@@ -234,7 +254,11 @@ eOSState myMenuMoveRecording::ProcessKey(eKeys Key)
}
if(newname[0]!=0)
- return Open();
+ {
+ Add(new myMenuMoveRecordingItem(newname,level+2));
+ Display();
+ strn0cpy(newname,"",sizeof(newname));
+ }
if(clearall)
return osBack;