diff options
-rw-r--r-- | HISTORY | 3 | ||||
-rw-r--r-- | menu.c | 16 | ||||
-rw-r--r-- | recording.c | 19 |
3 files changed, 23 insertions, 15 deletions
@@ -1,7 +1,7 @@ VDR Plugin 'duplicates' Revision History ---------------------------------------- -2018-09-05: Version 0.2.2 +2018-09-06: Version 0.2.2 - Updated kNone handling in main menu. - Improved duplicate recording copy constructor. @@ -9,6 +9,7 @@ VDR Plugin 'duplicates' Revision History - Simplified toggle hidden. - Fixed recordings locking sequence. - Check for vanished recorgins in info menu. +- Added checks for empty lists. 2018-08-30: Version 0.2.1 @@ -197,12 +197,16 @@ void cMenuDuplicates::Set(bool Refresh) { Clear(); cMutexLock MutexLock(&DuplicateRecordings.mutex); for (cDuplicateRecording *Duplicates = DuplicateRecordings.First(); Duplicates; Duplicates = DuplicateRecordings.Next(Duplicates)) { - Add(SeparatorItem(Duplicates->Text())); - for (cDuplicateRecording *Duplicate = Duplicates->Duplicates()->First(); Duplicate; Duplicate = Duplicates->Duplicates()->Next(Duplicate)) { - cMenuDuplicateItem *Item = new cMenuDuplicateItem(Duplicate); - Add(Item); - if (CurrentRecording && strcmp(CurrentRecording, Item->FileName()) == 0) - SetCurrent(Item); + if (Duplicates) { + Add(SeparatorItem(Duplicates->Text())); + for (cDuplicateRecording *Duplicate = Duplicates->Duplicates()->First(); Duplicate; Duplicate = Duplicates->Duplicates()->Next(Duplicate)) { + if (Duplicate) { + cMenuDuplicateItem *Item = new cMenuDuplicateItem(Duplicate); + Add(Item); + if (CurrentRecording && strcmp(CurrentRecording, Item->FileName()) == 0) + SetCurrent(Item); + } + } } } if (Count() == 0) diff --git a/recording.c b/recording.c index da1b624..934217d 100644 --- a/recording.c +++ b/recording.c @@ -60,7 +60,8 @@ cDuplicateRecording::cDuplicateRecording(const cDuplicateRecording &DuplicateRec if (DuplicateRecording.duplicates != NULL) { duplicates = new cList<cDuplicateRecording>; for (const cDuplicateRecording *duplicate = DuplicateRecording.duplicates->First(); duplicate; duplicate = DuplicateRecording.duplicates->Next(duplicate)) { - duplicates->Add(new cDuplicateRecording(*duplicate)); + if (duplicate) + duplicates->Add(new cDuplicateRecording(*duplicate)); } } else duplicates = NULL; @@ -116,23 +117,25 @@ void cDuplicateRecordings::Update(void) { Recordings.Sort(); for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) { #endif - cDuplicateRecording *Item = new cDuplicateRecording(recording); - if (Item->HasDescription()) - recordings.Add(Item); - else if (dc.hidden || Item->Visibility().Read() != HIDDEN) - descriptionless->Duplicates()->Add(Item); + if (recording) { + cDuplicateRecording *Item = new cDuplicateRecording(recording); + if (Item->HasDescription()) + recordings.Add(Item); + else if (dc.hidden || Item->Visibility().Read() != HIDDEN) + descriptionless->Duplicates()->Add(Item); + } } #if VDRVERSNUM >= 20301 recordingsStateKey.Remove(false); // sorting doesn't count as a real modification #endif } for (cDuplicateRecording *recording = recordings.First(); recording; recording = recordings.Next(recording)) { - if (!recording->Checked()) { + if (recording && !recording->Checked()) { recording->SetChecked(); cDuplicateRecording *duplicates = new cDuplicateRecording(); duplicates->Duplicates()->Add(new cDuplicateRecording(*recording)); for (cDuplicateRecording *compare = recordings.First(); compare; compare = recordings.Next(compare)) { - if (!compare->Checked()) { + if (compare && !compare->Checked()) { #ifdef DEBUG_VISIBILITY isDuplicateCount++; #endif |