summaryrefslogtreecommitdiff
path: root/mymenurecordings.c
diff options
context:
space:
mode:
authorAndreas Mair <amair.sob@googlemail.com>2013-05-03 12:13:12 +0200
committerAndreas Mair <amair.sob@googlemail.com>2013-05-03 12:13:12 +0200
commit21314770e74d4d33d811b9a48097ff8d41ef8ae7 (patch)
treefc9a330f5035cc4daadbb8835e774ceb2ed87ed8 /mymenurecordings.c
parent4c7bca8672c0249d3eb69d505747497b1d88e0e9 (diff)
downloadvdr-plugin-extrecmenu-21314770e74d4d33d811b9a48097ff8d41ef8ae7.tar.gz
vdr-plugin-extrecmenu-21314770e74d4d33d811b9a48097ff8d41ef8ae7.tar.bz2
Fix recording list problems with some recording names.
Diffstat (limited to 'mymenurecordings.c')
-rw-r--r--mymenurecordings.c75
1 files changed, 36 insertions, 39 deletions
diff --git a/mymenurecordings.c b/mymenurecordings.c
index ef1dda5..99e735f 100644
--- a/mymenurecordings.c
+++ b/mymenurecordings.c
@@ -201,8 +201,6 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
title=MALLOC(char,s-p+1);
strn0cpy(title,p,s-p+1);
name=strdup(title);
-
- uniqid=name;
}
else
{
@@ -221,13 +219,6 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
#endif
struct tm *t=localtime_r(&start,&tm_r);
- const char *c = strrchr(filename, '/');
- if (c)
- idbuffer << (c + 1);
- else
- idbuffer << filename;
-
-
// display symbol
buffer=filename;
if (isPesRecording)
@@ -441,16 +432,13 @@ myMenuRecordingsItem::myMenuRecordingsItem(cRecording *Recording,int Level)
if(i!=string::npos)
{
titlebuffer << _s.substr(i+1,_s.length()-i);
- idbuffer << _s.substr(i+1,_s.length()-i);
}
else
{
titlebuffer << _s;
- idbuffer << _s;
}
title=strdup(titlebuffer.str().c_str());
- uniqid=idbuffer.str();
}
else
{
@@ -512,7 +500,6 @@ void myMenuRecordingsItem::SetMenuItem(cSkinDisplayMenu *displaymenu,int index,b
// --- myMenuRecordings -------------------------------------------------------
#define MB_PER_MINUTE 25.75 // this is just an estimate! (taken over from VDR)
-bool myMenuRecordings::golastreplayed=false;
bool myMenuRecordings::wasdvd;
bool myMenuRecordings::washdd;
dev_t myMenuRecordings::fsid=0;
@@ -598,7 +585,7 @@ myMenuRecordings::myMenuRecordings(const char *Base,int Level):cOsdMenu("")
Set();
- if(myReplayControl::LastReplayed())
+ if(mysetup.GoLastReplayed && myReplayControl::LastReplayed())
Open();
Display();
@@ -772,12 +759,12 @@ void myMenuRecordings::SetHelpKeys()
}
// create the menu list
-void myMenuRecordings::Set(bool Refresh,char *_current)
+void myMenuRecordings::Set(bool Refresh)
{
- const char *lastreplayed=_current?_current:myReplayControl::LastReplayed();
+ const char *lastreplayed=myReplayControl::LastReplayed();
cThreadLock RecordingsLock(&Recordings);
- if(Refresh && !_current)
+ if(Refresh)
{
fsid=0;
myMenuRecordingsItem *item=(myMenuRecordingsItem*)Get(Current());
@@ -809,7 +796,6 @@ void myMenuRecordings::Set(bool Refresh,char *_current)
hidepinprotectedrecs=pinplugin->SetupParse("hideProtectedRecordings","1");
#endif
- char *lastitemtext=NULL;
myMenuRecordingsItem *lastitem=NULL;
for(myRecListItem *listitem=list->First();listitem;listitem=list->Next(listitem))
{
@@ -817,47 +803,59 @@ void myMenuRecordings::Set(bool Refresh,char *_current)
if(!base||(strstr(recording->Name(),base)==recording->Name()&&recording->Name()[strlen(base)]=='~'))
{
myMenuRecordingsItem *recitem=new myMenuRecordingsItem(recording,level);
- if(*recitem->UniqID() && (!lastitem || strcmp(recitem->UniqID(),lastitemtext)))
+ myMenuRecordingsItem *lastdir=NULL;
+ if(recitem->IsDirectory())
+ {
+ // Sorting may ignore non-alphanumeric characters, so we need to explicitly handle directories in case they only differ in such characters:
+ for(myMenuRecordingsItem *p=lastitem;p;p=dynamic_cast<myMenuRecordingsItem *>(p->Prev()))
+ {
+ if(p->Name()&&strcmp(p->Name(),recitem->Name())==0)
+ {
+ lastdir=p;
+ break;
+ }
+ }
+ }
+ if(*recitem->Text()&&!lastdir)
{
#ifdef USE_PINPLUGIN
if(!(hidepinprotectedrecs && cStatus::MsgReplayProtected(recording,recitem->Name(),base,recitem->IsDirectory(),true)))
- {
+ {
#endif
Add(recitem);
lastitem=recitem;
- free(lastitemtext);
- lastitemtext=strdup(lastitem->UniqID());
+ if(recitem->IsDirectory())
+ lastdir=recitem;
#ifdef USE_PINPLUGIN
- }
- else
- lastitem=NULL;
+ }
+ else
+ lastitem=NULL;
#endif
}
else
delete recitem;
- if(lastitem)
+ if(lastitem||lastdir)
{
- if(!MoveCutterThread->IsMoving(recording->FileName()))
- lastitem->SetDirIsMoving(false);
+ if(lastitem)
+ {
+ if(!MoveCutterThread->IsMoving(recording->FileName()))
+ lastitem->SetDirIsMoving(false);
+ }
- if(lastitem->IsDirectory())
- lastitem->IncrementCounter(recording->IsNew());
- if(lastreplayed && !strcmp(lastreplayed,recording->FileName()))
+ if(lastreplayed&&strcmp(lastreplayed,recording->FileName())==0)
{
- if(golastreplayed||Refresh)
- {
- SetCurrent(lastitem);
- if(recitem && !recitem->IsDirectory() && !cControl::Control() && !mysetup.GoLastReplayed)
- golastreplayed=false;
- }
+ SetCurrent(lastdir?lastdir:lastitem);
if(recitem&&!recitem->IsDirectory()&&(recitem->IsDVD()||recitem->IsHDD())&&!cControl::Control())
cReplayControl::ClearLastReplayed(cReplayControl::LastReplayed());
}
+
+ if(lastdir){
+ lastdir->IncrementCounter(recording->IsNew());
+ }
}
}
}
- free(lastitemtext);
delete list;
ForceFreeMbUpdate();
@@ -1080,7 +1078,6 @@ eOSState myMenuRecordings::Play()
}
buffer=NULL;
}
- golastreplayed=true;
#if VDRVERSNUM >= 10728
myReplayControl::SetRecording(recording->FileName());
#else