summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY5
-rw-r--r--menu.c24
3 files changed, 22 insertions, 9 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 2a122d57..c457b196 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -1006,6 +1006,8 @@ Andreas Mair <amair.sob@googlemail.com>
for fixing the type of MBperMinute in cVideoDiskUsage::HasChanged()
for reporting a bug in sorting recordings in case two folders have the same name,
but one of them ends in an additional digit, as in "abc" and "abc2"
+ for reporting multiple occurrences of the same directory in the recordings list ini
+ case there are directories that only differ in non-alphanumeric characters
Olivier Jacques <jacquesolivier@hotmail.com>)
for translating OSD texts to the French language
diff --git a/HISTORY b/HISTORY
index 05469c6e..4213ccdf 100644
--- a/HISTORY
+++ b/HISTORY
@@ -7494,7 +7494,7 @@ Video Disk Recorder Revision History
use it.
- Added maximum SNR value for PCTV Systems PCTV 73ESE (thanks to Cedric Dewijs).
-2013-01-15: Version 1.7.36
+2013-01-16: Version 1.7.36
- Added maximum SNR value for PCTV Systems nanoStick T2 290e (thanks to Antti
Hartikainen).
@@ -7520,3 +7520,6 @@ Video Disk Recorder Revision History
- The SVDRP command LSTR now knows the additional parameter "path", which can be
given to get the actual file name of a recording's directory (suggested by
Stefan Stolz).
+- Fixed multiple occurrences of the same directory in the recordings list in case there
+ are directories that only differ in non-alphanumeric characters (reported by Andreas
+ Mair).
diff --git a/menu.c b/menu.c
index 6c278b55..b42aa4da 100644
--- a/menu.c
+++ b/menu.c
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.c 2.72 2012/12/21 11:11:14 kls Exp $
+ * $Id: menu.c 2.73 2013/01/16 15:58:58 kls Exp $
*/
#include "menu.h"
@@ -2273,7 +2273,6 @@ void cMenuRecordings::Set(bool Refresh)
{
const char *CurrentRecording = cReplayControl::LastReplayed();
cMenuRecordingItem *LastItem = NULL;
- char *LastItemText = NULL;
cThreadLock RecordingsLock(&Recordings);
if (Refresh) {
if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current()))
@@ -2285,23 +2284,32 @@ void cMenuRecordings::Set(bool Refresh)
for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
if (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == FOLDERDELIMCHAR)) {
cMenuRecordingItem *Item = new cMenuRecordingItem(recording, level);
- if (*Item->Text() && (!Item->IsDirectory() || (!LastItem || !LastItem->IsDirectory() || strcmp(Item->Text(), LastItemText) != 0))) {
+ cMenuRecordingItem *LastDir = NULL;
+ if (Item->IsDirectory()) {
+ // Sorting may ignore non-alphanumeric characters, so we need to explicitly handle directories in case they only differ in such characters:
+ for (cMenuRecordingItem *p = LastItem; p; p = dynamic_cast<cMenuRecordingItem *>(p->Prev())) {
+ if (p->Name() && strcmp(p->Name(), Item->Name()) == 0) {
+ LastDir = p;
+ break;
+ }
+ }
+ }
+ if (*Item->Text() && !LastDir) {
Add(Item);
LastItem = Item;
- free(LastItemText);
- LastItemText = strdup(LastItem->Text()); // must use a copy because of the counters!
+ if (Item->IsDirectory())
+ LastDir = Item;
}
else
delete Item;
if (LastItem) {
if (CurrentRecording && strcmp(CurrentRecording, recording->FileName()) == 0)
SetCurrent(LastItem);
- if (LastItem->IsDirectory())
- LastItem->IncrementCounter(recording->IsNew());
}
+ if (LastDir)
+ LastDir->IncrementCounter(recording->IsNew());
}
}
- free(LastItemText);
if (Refresh)
Display();
}