summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CONTRIBUTORS2
-rw-r--r--HISTORY3
-rw-r--r--menu.c7
-rw-r--r--menu.h12
4 files changed, 19 insertions, 5 deletions
diff --git a/CONTRIBUTORS b/CONTRIBUTORS
index 96b94eb0..359ee572 100644
--- a/CONTRIBUTORS
+++ b/CONTRIBUTORS
@@ -2868,6 +2868,8 @@ Lars Hanisch <dvb@flensrocker.de>
for reporting a possible crash if the recordings list is updated externally while the
Recordings menu is open
for reporting a missing closing ')' in the help entry of the --vfat option
+ for making the Recordings menu able to be called with a cRecordingFilter, which allows
+ the caller to have it display only a certain subset of the recordings
Alex Lasnier <alex@fepg.org>
for adding tuning support for ATSC devices
diff --git a/HISTORY b/HISTORY
index 8876406b..cb7c72b7 100644
--- a/HISTORY
+++ b/HISTORY
@@ -8072,3 +8072,6 @@ Video Disk Recorder Revision History
- Fixed setting the name of the video directory to avoid a crash when using --genindex,
and also to use the correct directory with --edit (the latter reported by Marko
Mäkelä).
+- The Recordings menu can now be called with a cRecordingFilter, which allows the
+ caller to have it display only a certain subset of the recordings (thanks to Lars
+ Hanisch).
diff --git a/menu.c b/menu.c
index 287ba3fc..3fbde6d6 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 3.13 2013/11/03 14:08:35 kls Exp $
+ * $Id: menu.c 3.14 2013/12/25 12:03:32 kls Exp $
*/
#include "menu.h"
@@ -2571,12 +2571,13 @@ void cMenuRecordingItem::SetMenuItem(cSkinDisplayMenu *DisplayMenu, int Index, b
cString cMenuRecordings::path;
cString cMenuRecordings::fileName;
-cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus)
+cMenuRecordings::cMenuRecordings(const char *Base, int Level, bool OpenSubMenus, const cRecordingFilter *Filter)
:cOsdMenu(Base ? Base : tr("Recordings"), 9, 6, 6)
{
SetMenuCategory(mcRecording);
base = Base ? strdup(Base) : NULL;
level = Setup.RecordingDirs ? Level : -1;
+ filter = Filter;
Recordings.StateChanged(recordingsState); // just to get the current state
helpKeys = -1;
Display(); // this keeps the higher level menus from showing up briefly when pressing 'Back' during replay
@@ -2633,7 +2634,7 @@ void cMenuRecordings::Set(bool Refresh)
GetRecordingsSortMode(DirectoryName());
Recordings.Sort();
for (cRecording *recording = Recordings.First(); recording; recording = Recordings.Next(recording)) {
- if (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == FOLDERDELIMCHAR)) {
+ if ((!filter || filter->Filter(recording)) && (!base || (strstr(recording->Name(), base) == recording->Name() && recording->Name()[strlen(base)] == FOLDERDELIMCHAR))) {
cMenuRecordingItem *Item = new cMenuRecordingItem(recording, level);
cMenuRecordingItem *LastDir = NULL;
if (Item->IsDirectory()) {
diff --git a/menu.h b/menu.h
index a75e8e0b..24516c36 100644
--- a/menu.h
+++ b/menu.h
@@ -4,7 +4,7 @@
* See the main source file 'vdr.c' for copyright information and
* how to reach the author.
*
- * $Id: menu.h 3.4 2013/10/30 14:32:13 kls Exp $
+ * $Id: menu.h 3.5 2013/12/25 12:06:03 kls Exp $
*/
#ifndef __MENU_H
@@ -191,6 +191,13 @@ public:
cOsdObject *CamControl(void);
bool CamMenuActive(void);
+class cRecordingFilter {
+public:
+ virtual ~cRecordingFilter(void) {};
+ virtual bool Filter(const cRecording *Recording) const = 0;
+ ///< Returns true if the given Recording shall be displayed in the Recordings menu.
+ };
+
class cMenuRecordingItem;
class cMenuRecordings : public cOsdMenu {
@@ -199,6 +206,7 @@ private:
int level;
int recordingsState;
int helpKeys;
+ const cRecordingFilter *filter;
static cString path;
static cString fileName;
void SetHelpKeys(void);
@@ -213,7 +221,7 @@ private:
protected:
cString DirectoryName(void);
public:
- cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false);
+ cMenuRecordings(const char *Base = NULL, int Level = 0, bool OpenSubMenus = false, const cRecordingFilter *Filter = NULL);
~cMenuRecordings();
virtual eOSState ProcessKey(eKeys Key);
static void SetPath(const char *Path);