diff --git a/HISTORY b/HISTORY index a06e8910..77185d2d 100644 --- a/HISTORY +++ b/HISTORY @@ -8828,7 +8828,7 @@ Video Disk Recorder Revision History - Empty adaptation field TS packets are now skipped when recording (thanks to Christopher Reimer, based on the "AFFcleaner" by Stefan Pöschel). -2016-12-08: Version 2.3.2 +2016-12-09: Version 2.3.2 - Fixed a crash when deleting a recording (reported by Oliver Endriss). - Fixed an overflow of PIDs in a receiver (thanks to Robert Hannebauer). @@ -8844,3 +8844,5 @@ Video Disk Recorder Revision History the menu or through SVDRP (as well as other operations that try to acquire a read lock within a write lock). - Fixed a crash when trying to delete a channel that is being used by a timer. +- Fixed setting the current item and counter values in the Recordings menu after + deleting the last recording in a subfolder. diff --git a/menu.c b/menu.c index 1d72d886..f157a549 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 4.15 2016/12/08 10:48:16 kls Exp $ + * $Id: menu.c 4.16 2016/12/09 14:54:24 kls Exp $ */ #include "menu.h" @@ -2954,10 +2954,9 @@ void cMenuRecordings::Set(bool Refresh) const char *CurrentRecording = *fileName ? *fileName : cReplayControl::LastReplayed(); cRecordings *Recordings = cRecordings::GetRecordingsWrite(recordingsStateKey); // write access is necessary for sorting! cMenuRecordingItem *LastItem = NULL; - if (Refresh) { - if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current())) - CurrentRecording = ri->Recording()->FileName(); - } + if (cMenuRecordingItem *ri = (cMenuRecordingItem *)Get(Current())) + CurrentRecording = ri->Recording()->FileName(); + int current = Current(); Clear(); GetRecordingsSortMode(DirectoryName()); Recordings->Sort(); @@ -2994,11 +2993,13 @@ void cMenuRecordings::Set(bool Refresh) LastDir->IncrementCounter(Recording->IsNew()); } } + if (Current() < 0) + SetCurrent(Get(current)); // last resort, in case the recording was deleted SetMenuSortMode(RecordingsSortMode == rsmName ? msmName : msmTime); recordingsStateKey.Remove(false); // sorting doesn't count as a real modification + if (Refresh) + Display(); } - if (Refresh) - Display(); } void cMenuRecordings::SetPath(const char *Path) @@ -3172,8 +3173,6 @@ eOSState cMenuRecordings::Sort(void) eOSState cMenuRecordings::ProcessKey(eKeys Key) { - if (!HasSubMenu()) - Set(); // react on any changes to the recordings list bool HadSubMenu = HasSubMenu(); eOSState state = cOsdMenu::ProcessKey(Key); @@ -3199,7 +3198,8 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key) return state; // closes all recording menus except for the top one Set(); // this is the top level menu, so we refresh it... Open(true); // ...and open any necessary submenus to show the new name - Display(); + if (!HasSubMenu()) + Display(); path = NULL; fileName = NULL; } @@ -3211,14 +3211,16 @@ eOSState cMenuRecordings::ProcessKey(eKeys Key) ri->SetRecording(riSub->Recording()); } } - if (Key == kYellow && HadSubMenu && !HasSubMenu()) { - // the last recording in a subdirectory was deleted, so let's go back up - cOsdMenu::Del(Current()); - if (!Count()) - return osBack; - Display(); - } if (!HasSubMenu()) { + if (HadSubMenu) { + if (Key == kYellow) { + // the last recording in a subdirectory was deleted, so let's go back up + cOsdMenu::Del(Current()); + if (!Count()) + return osBack; + } + } + Set(true); if (Key != kNone) SetHelpKeys(); }