summaryrefslogtreecommitdiff
path: root/menu_favorites.c
diff options
context:
space:
mode:
authorChristian Wieninger <winni@debian.(none)>2007-11-11 15:40:28 +0100
committerChristian Wieninger <winni@debian.(none)>2007-11-11 15:40:28 +0100
commit8d4f8607dc1558ce73eb4c376bdbf78ddb65da83 (patch)
treed0c5dde81a36ab2e8a2edc7c1e6922556518b312 /menu_favorites.c
downloadvdr-plugin-epgsearch-8d4f8607dc1558ce73eb4c376bdbf78ddb65da83.tar.gz
vdr-plugin-epgsearch-8d4f8607dc1558ce73eb4c376bdbf78ddb65da83.tar.bz2
Initial commit
Diffstat (limited to 'menu_favorites.c')
-rw-r--r--menu_favorites.c191
1 files changed, 191 insertions, 0 deletions
diff --git a/menu_favorites.c b/menu_favorites.c
new file mode 100644
index 0000000..a5c201a
--- /dev/null
+++ b/menu_favorites.c
@@ -0,0 +1,191 @@
+/*
+Copyright (C) 2004-2007 Christian Wieninger
+
+This program is free software; you can redistribute it and/or
+modify it under the terms of the GNU General Public License
+as published by the Free Software Foundation; either version 2
+of the License, or (at your option) any later version.
+
+This program is distributed in the hope that it will be useful,
+but WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+GNU General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with this program; if not, write to the Free Software
+Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
+Or, point your browser to http://www.gnu.org/licenses/old-licenses/gpl-2.0.html
+
+The author can be reached at cwieninger@gmx.de
+
+The project's page is at http://winni.vdr-developer.org/epgsearch
+*/
+
+#include <set>
+#include "menu_favorites.h"
+#include "menu_whatson.h"
+#include "menu_commands.h"
+
+using std::set;
+
+extern const char* ButtonBlue[3];
+extern int exitToMainMenu;
+
+cMenuFavorites::cMenuFavorites()
+ : cMenuSearchResults(cTemplFile::GetTemplateByName("MenuFavorites"))
+{
+ BuildList();
+}
+
+bool cMenuFavorites::BuildList()
+{
+ Clear();
+ eventObjects.Clear();
+
+ cSearchResults* pCompleteSearchResults = NULL;
+ cMutexLock SearchExtsLock(&SearchExts);
+ cSearchExt *SearchExt = SearchExts.First();
+ int timespan = EPGSearchConfig.FavoritesMenuTimespan*60;
+
+ while (SearchExt)
+ {
+ if (SearchExt->useInFavorites)
+ pCompleteSearchResults = SearchExt->Run(modeBlue == showNoPayTV?1:0, false, timespan, pCompleteSearchResults, true);
+ SearchExt = SearchExts.Next(SearchExt);
+ }
+
+ if (pCompleteSearchResults)
+ {
+ set<const cEvent*> foundEvents;
+ pCompleteSearchResults->SortBy(CompareEventTime);
+
+ for (cSearchResult* pResultObj = pCompleteSearchResults->First();
+ pResultObj;
+ pResultObj = pCompleteSearchResults->Next(pResultObj))
+ {
+ if (foundEvents.find(pResultObj->event) == foundEvents.end())
+ {
+ foundEvents.insert(pResultObj->event);
+ Add(new cMenuSearchResultsItem(pResultObj->event, modeYellow == showEpisode, false, menuTemplate));
+ eventObjects.Add(pResultObj->event);
+ }
+ }
+ delete pCompleteSearchResults;
+ }
+ SetHelpKeys();
+ char* szTitle = NULL;
+ asprintf(&szTitle, "%s: %d %s", tr("Favorites"), Count(), tr("Search results"));
+ SetTitle(szTitle);
+ free(szTitle);
+ Display();
+
+ return true;
+}
+
+eOSState cMenuFavorites::OnGreen()
+{
+ eOSState state = osUnknown;
+ if(!HasSubMenu())
+ {
+ toggleKeys = 0;
+ cMenuWhatsOnSearch::currentShowMode = cMenuWhatsOnSearch::GetNextMode();
+ return osUnknown;
+ }
+ return state;
+}
+
+eOSState cMenuFavorites::OnYellow()
+{
+ eOSState state = osUnknown;
+ if(!HasSubMenu())
+ {
+ cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
+ if (item && item->event)
+ {
+ cChannel *channel = Channels.GetByChannelID(item->event->ChannelID(), true, true);
+ cMenuWhatsOnSearch::scheduleChannel = channel;
+ cMenuWhatsOnSearch::currentShowMode = showNow;
+ }
+ toggleKeys = 0;
+ return osBack;
+ }
+ return state;
+}
+
+eOSState cMenuFavorites::ProcessKey(eKeys Key)
+{
+ exitToMainMenu = 0;
+ if (!HasSubMenu() && Key == kBack)
+ {
+ exitToMainMenu = 1;
+ return osBack;
+ }
+
+ eOSState state = cMenuSearchResults::ProcessKey(Key);
+ if (state == osUnknown)
+ {
+ switch (Key) {
+ case kRecord:
+ case kRed:
+ state = OnRed();
+ break;
+ case k0:
+ if(!HasSubMenu())
+ {
+ toggleKeys = 1 - toggleKeys;
+ SetHelpKeys(true);
+ }
+ state = osContinue;
+ break;
+ case k1...k9:
+ state = HasSubMenu()?osContinue:Commands(Key);
+ break;
+ case kBlue:
+ return EPGSearchConfig.useOkForSwitch?ShowSummary():Switch();
+ break;
+ case kOk:
+ if(HasSubMenu())
+ {
+ state = cOsdMenu::ProcessKey(Key);
+ break;
+ }
+ if (Count())
+ state = EPGSearchConfig.useOkForSwitch?Switch():ShowSummary();
+ else
+ state = osBack;
+ break;
+ default:
+ break;
+ }
+ }
+ return state;
+}
+
+void cMenuFavorites::SetHelpKeys(bool Force)
+{
+ cMenuSearchResultsItem *item = (cMenuSearchResultsItem *)Get(Current());
+ int NewHelpKeys = 0;
+ if (item) {
+ if (item->Selectable() && item->timerMatch == tmFull)
+ NewHelpKeys = 2;
+ else
+ NewHelpKeys = 1;
+ }
+
+ bool hasTimer = (NewHelpKeys == 2);
+ if (NewHelpKeys != helpKeys || Force)
+ {
+ showMode nextShowMode = cMenuWhatsOnSearch::GetNextMode();
+ cShowMode* mode = cMenuWhatsOnSearch::GetShowMode(nextShowMode);
+ char* szButtonGreen = NULL;
+ if (mode)
+ szButtonGreen = mode->GetDescription();
+
+ if (toggleKeys==0)
+ SetHelp((EPGSearchConfig.redkeymode==0?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), szButtonGreen,trVDR("Button$Schedule"), EPGSearchConfig.useOkForSwitch?trVDR("Button$Info"):trVDR("Button$Switch"));
+ else
+ SetHelp((EPGSearchConfig.redkeymode==1?(hasTimer?trVDR("Button$Timer"):trVDR("Button$Record")):tr("Button$Commands")), szButtonGreen,trVDR("Button$Schedule"), EPGSearchConfig.useOkForSwitch?trVDR("Button$Info"):trVDR("Button$Switch"));
+ helpKeys = NewHelpKeys;
+ }
+}
+