From 6e8378743714df291cd421e6764145fc3bf00cbc Mon Sep 17 00:00:00 2001 From: kamel5 Date: Tue, 9 Apr 2019 18:25:58 +0200 Subject: [PATCH] Channelgroup in cRecMenuSearchTimerEdit --- po/ca_ES.po | 11 ++++++++- po/de_DE.po | 11 ++++++++- po/it_IT.po | 11 ++++++++- po/ru_RU.po | 11 ++++++++- po/sk_SK.po | 11 ++++++++- recmanager.c | 16 +++++++++++++ recmanager.h | 1 + recmenuitem.c | 14 ++++++++--- recmenuitem.h | 4 +++- recmenumanager.c | 10 +++++--- recmenus.c | 60 +++++++++++++++++++++++++++++++++++++++++------- recmenus.h | 10 ++++++-- searchtimer.c | 8 ++++++- searchtimer.h | 7 ++++-- 14 files changed, 160 insertions(+), 25 deletions(-) diff --git a/po/ca_ES.po b/po/ca_ES.po index 1ba91bd..e9ec0ba 100644 --- a/po/ca_ES.po +++ b/po/ca_ES.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: vdr-tvguide 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-07 14:23+0200\n" +"POT-Creation-Date: 2019-04-12 14:35+0200\n" "PO-Revision-Date: 2013-09-21 17:49+0200\n" "Last-Translator: My friend Thanks David \n" "Language-Team: \n" @@ -366,6 +366,9 @@ msgstr "Inicia canal" msgid "Stop Channel" msgstr "Atura canal" +msgid "Channel Group" +msgstr "" + msgid "Start after" msgstr "Comença després" @@ -525,6 +528,12 @@ msgstr "coincidència exacta" msgid "regular expression" msgstr "expressió regular" +msgid "Interval" +msgstr "" + +msgid "only FTA" +msgstr "" + msgid "General Settings" msgstr "Preferències" diff --git a/po/de_DE.po b/po/de_DE.po index c653a27..8df1478 100644 --- a/po/de_DE.po +++ b/po/de_DE.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: vdr-tvguide 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-07 14:23+0200\n" +"POT-Creation-Date: 2019-04-12 14:35+0200\n" "PO-Revision-Date: 2012-08-25 17:49+0200\n" "Last-Translator: Horst\n" "Language-Team: \n" @@ -363,6 +363,9 @@ msgstr "Startkanal" msgid "Stop Channel" msgstr "Stopkanal" +msgid "Channel Group" +msgstr "Kanalgruppe" + msgid "Start after" msgstr "Beginn nach" @@ -522,6 +525,12 @@ msgstr "exakt" msgid "regular expression" msgstr "Regulärer Ausdruck" +msgid "Interval" +msgstr "Bereich" + +msgid "only FTA" +msgstr "ohne PayTV" + msgid "General Settings" msgstr "Allgemeine Einstellungen" diff --git a/po/it_IT.po b/po/it_IT.po index 6be0fdf..ef06ddf 100644 --- a/po/it_IT.po +++ b/po/it_IT.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: vdr-tvguide 0.0.1\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-07 14:23+0200\n" +"POT-Creation-Date: 2019-04-12 14:35+0200\n" "PO-Revision-Date: 2012-08-25 17:49+0200\n" "Last-Translator: fiveten_59\n" "Language-Team: \n" @@ -363,6 +363,9 @@ msgstr "Avvia il Canale" msgid "Stop Channel" msgstr "Ferma il Canale" +msgid "Channel Group" +msgstr "" + msgid "Start after" msgstr "Avvia dopo" @@ -522,6 +525,12 @@ msgstr "exakt" msgid "regular expression" msgstr "Regulärer Ausdruck" +msgid "Interval" +msgstr "" + +msgid "only FTA" +msgstr "" + msgid "General Settings" msgstr "Allgemeine Einstellungen" diff --git a/po/ru_RU.po b/po/ru_RU.po index b28db28..8a08654 100644 --- a/po/ru_RU.po +++ b/po/ru_RU.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: vdr-tvguide 1.0.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-07 14:23+0200\n" +"POT-Creation-Date: 2019-04-12 14:35+0200\n" "PO-Revision-Date: 2013-09-25 17:49+0400\n" "Last-Translator: AmiD, ilya\n" "Language-Team: Russia-Cherepovets(wm.amid@gmail.com)\n" @@ -363,6 +363,9 @@ msgstr "С канала" msgid "Stop Channel" msgstr "По канал" +msgid "Channel Group" +msgstr "" + msgid "Start after" msgstr "С" @@ -522,6 +525,12 @@ msgstr "точное совпадение" msgid "regular expression" msgstr "регулярные выражения" +msgid "Interval" +msgstr "" + +msgid "only FTA" +msgstr "" + msgid "General Settings" msgstr "Основные настройки" diff --git a/po/sk_SK.po b/po/sk_SK.po index 3296c13..796db07 100644 --- a/po/sk_SK.po +++ b/po/sk_SK.po @@ -3,7 +3,7 @@ msgid "" msgstr "" "Project-Id-Version: vdr-tvguide 1.1.0\n" "Report-Msgid-Bugs-To: \n" -"POT-Creation-Date: 2019-04-07 14:23+0200\n" +"POT-Creation-Date: 2019-04-12 14:35+0200\n" "PO-Revision-Date: 2013-09-15 00:12+0100\n" "Last-Translator: Milan Hrala \n" "Language-Team: \n" @@ -363,6 +363,9 @@ msgstr "Od kan msgid "Stop Channel" msgstr "Po kanl" +msgid "Channel Group" +msgstr "" + msgid "Start after" msgstr "Zaiatok po" @@ -522,6 +525,12 @@ msgstr "presn msgid "regular expression" msgstr "regulrny vraz" +msgid "Interval" +msgstr "" + +msgid "only FTA" +msgstr "" + msgid "General Settings" msgstr "Veobecn nastavenia" diff --git a/recmanager.c b/recmanager.c index 015b654..b409c5c 100644 --- a/recmanager.c +++ b/recmanager.c @@ -495,6 +495,22 @@ void cRecManager::GetSearchTimers(std::vector *searchTimer) std::sort(searchTimer->begin(), searchTimer->end()); } +void cRecManager::GetChannelGroups(std::vector *channelGroups) { + if (!epgSearchAvailable) { + return; + } + Epgsearch_services_v1_1 *epgSearch = new Epgsearch_services_v1_1; + if (epgSearchPlugin->Service("Epgsearch-services-v1.1", epgSearch)) { + std::list channelGroupList; + channelGroupList = epgSearch->handler->ChanGrpList(); + + for (std::list::iterator it = channelGroupList.begin(); it != channelGroupList.end(); it++) { + channelGroups->push_back(*it); + } + } + std::sort(channelGroups->begin(), channelGroups->end()); +} + int cRecManager::CreateSearchTimer(std::string epgSearchString) { int timerID = -1; if (!epgSearchAvailable) diff --git a/recmanager.h b/recmanager.h index a7061a7..b29ef1c 100644 --- a/recmanager.h +++ b/recmanager.h @@ -46,6 +46,7 @@ public: const cEvent **PerformSearch(Epgsearch_searchresults_v1_0 data, int &numResults); void ReadEPGSearchTemplates(std::vector *epgTemplates); void GetSearchTimers(std::vector *timers); + void GetChannelGroups(std::vector *channelGroups); int CreateSearchTimer(std::string epgSearchString); bool SaveSearchTimer(cTVGuideSearchTimer *searchTimer); void DeleteSearchTimer(cTVGuideSearchTimer *searchTimer, bool delTimers); diff --git a/recmenuitem.c b/recmenuitem.c index 927618d..c34fb82 100644 --- a/recmenuitem.c +++ b/recmenuitem.c @@ -493,7 +493,8 @@ cRecMenuItemSelect::cRecMenuItemSelect(cString text, int initialVal, bool active, int *callback, - eRecMenuState action) { + eRecMenuState action, + bool refresh) { selectable = true; this->text = text; strings = Strings; @@ -504,6 +505,7 @@ cRecMenuItemSelect::cRecMenuItemSelect(cString text, this->currentVal = initialVal; this->active = active; this->callback = callback; + this->refresh = refresh; this->action = action; height = 3 * font->Height() / 2; pixmapVal = NULL; @@ -571,14 +573,20 @@ eRecMenuState cRecMenuItemSelect::ProcessKey(eKeys Key) { if (callback) *callback = currentVal; DrawValue(); - return rmsConsumed; + if (refresh) + return rmsRefresh; + else + return rmsConsumed; break; case kRight: currentVal = (currentVal+1)%numValues; if (callback) *callback = currentVal; DrawValue(); - return rmsConsumed; + if (refresh) + return rmsRefresh; + else + return rmsConsumed; break; case kOk: return action; diff --git a/recmenuitem.h b/recmenuitem.h index 8d9a967..f468553 100644 --- a/recmenuitem.h +++ b/recmenuitem.h @@ -247,6 +247,7 @@ private: cString text; int currentVal; int *callback; + bool refresh; std::vector strings; int numValues; cPixmap *pixmapVal; @@ -257,7 +258,8 @@ public: int initialVal, bool active = false, int *callback = NULL, - eRecMenuState action = rmsNotConsumed); + eRecMenuState action = rmsNotConsumed, + bool refresh = false); virtual ~cRecMenuItemSelect(void); void SetPixmaps(void); void Hide(void); diff --git a/recmenumanager.c b/recmenumanager.c index 38381a4..bb5546a 100644 --- a/recmenumanager.c +++ b/recmenumanager.c @@ -311,7 +311,9 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) { if (epgSearchTemplates.size() > 0) { activeMenu = new cRecMenuSearchTimerTemplates(searchTimer, epgSearchTemplates); } else { - activeMenu = new cRecMenuSearchTimerEdit(searchTimer, false); + std::vector channelGroups; + recManager->GetChannelGroups(&channelGroups); + activeMenu = new cRecMenuSearchTimerEdit(searchTimer, false, channelGroups); } } activeMenu->Display(); @@ -329,12 +331,14 @@ eOSState cRecMenuManager::StateMachine(eRecMenuState nextState) { searchTimer = menu->GetSearchTimer(); } else if (cRecMenuSearchTimerEdit *menu = dynamic_cast(activeMenu)) { searchTimer = menu->GetSearchTimer(); - advancedOptions = (nextState == rmsSearchTimerEditAdvanced)?true:false; + advancedOptions = (nextState == rmsSearchTimerEditAdvanced) ? true : false; } else if (cRecMenuSearchTimerTemplates *menu = dynamic_cast(activeMenu)) { searchTimer = menu->GetSearchTimer(); } else break; delete activeMenu; - activeMenu = new cRecMenuSearchTimerEdit(searchTimer, advancedOptions); + std::vector channelGroups; + recManager->GetChannelGroups(&channelGroups); + activeMenu = new cRecMenuSearchTimerEdit(searchTimer, advancedOptions, channelGroups); activeMenu->Display(); break; } case rmsSearchTimerTest: { diff --git a/recmenus.c b/recmenus.c index b650515..d99e3f6 100644 --- a/recmenus.c +++ b/recmenus.c @@ -722,10 +722,11 @@ int cRecMenuSearchTimers::GetTotalNumMenuItems(void) { } // --- cRecMenuSearchTimerEdit --------------------------------------------------------- -cRecMenuSearchTimerEdit::cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer, bool advancedOptions) { +cRecMenuSearchTimerEdit::cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer, bool advancedOptions, std::vector channelGroups) { deleteMenuItems = false; this->advancedOptions = advancedOptions; this->searchTimer = searchTimer; + this->channelGroups = channelGroups; strncpy(searchString, searchTimer.SearchString().c_str(), TEXTINPUTLENGTH); timerActive = searchTimer.Active(); mode = searchTimer.SearchMode(); @@ -735,6 +736,8 @@ cRecMenuSearchTimerEdit::cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer useChannel = searchTimer.UseChannel(); startChannel = searchTimer.StartChannel(); stopChannel = searchTimer.StopChannel(); + channelGroup = searchTimer.ChannelGroup(); + channelgroupIndex = -1; useTime = searchTimer.UseTime(); startTime = searchTimer.StartTime(); stopTime = searchTimer.StopTime(); @@ -780,6 +783,10 @@ cRecMenuSearchTimerEdit::~cRecMenuSearchTimerEdit(void) { delete *it; } useChannelSubMenu.clear(); + for (std::vector::iterator it = useGroupSubMenu.begin(); it != useGroupSubMenu.end(); it++) { + delete *it; + } + useGroupSubMenu.clear(); for (std::vector::iterator it = useTimeSubMenu.begin(); it != useTimeSubMenu.end(); it++) { delete *it; } @@ -795,22 +802,45 @@ cRecMenuSearchTimerEdit::~cRecMenuSearchTimerEdit(void) { currentMenuItems.clear(); } +int cRecMenuSearchTimerEdit::SplitChannelGroups(std::vector *channelGroups, std::vector *channelgroups) { + int i = 0; + int j = 0; + for (std::vector::iterator it = channelGroups->begin(); it != channelGroups->end(); it++) { + std::string a = *it; + splitstring s(a.c_str()); + std::vector value = s.split('|', 0); + dsyslog ("%s %s %d %s\n", __FILE__, __func__, __LINE__, s.c_str()); + std::vector::iterator ito = value.begin(); + channelgroups->push_back(*ito); + std::string b = *ito; + if (b.compare(channelGroup) == 0) + j = i; + i++; + } + return j; +} + void cRecMenuSearchTimerEdit::InitMenuItems(void) { + dsyslog ("%s %s %d\n", __FILE__, __func__, __LINE__); useChannelPos = 6; useTimePos = 7; useDayOfWeekPos = 8; avoidRepeatsPos = 14; - mainMenuItems.push_back(new cRecMenuItemText(tr("Search String"), searchString, TEXTINPUTLENGTH, false, searchString)); - mainMenuItems.push_back(new cRecMenuItemBool(tr("Active"), timerActive, false, false, &timerActive, rmsSearchTimerSave)); std::vector searchModes; searchTimer.GetSearchModes(&searchModes); + std::vector useChannelModes; + searchTimer.GetUseChannelModes(&useChannelModes); + channelgroupIndex = SplitChannelGroups(&channelGroups, &channelgroups); + + mainMenuItems.push_back(new cRecMenuItemText(tr("Search String"), searchString, TEXTINPUTLENGTH, false, searchString)); + mainMenuItems.push_back(new cRecMenuItemBool(tr("Active"), timerActive, false, false, &timerActive, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemSelect(tr("Search Mode"), searchModes, mode, false, &mode, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use Title"), useTitle, false, false, &useTitle, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use Subtitle"), useSubtitle, false, false, &useSubtitle, rmsSearchTimerSave)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use Description"), useDescription, false, false, &useDescription, rmsSearchTimerSave)); - mainMenuItems.push_back(new cRecMenuItemBool(tr("Limit Channels"), useChannel, true, false, &useChannel, rmsSearchTimerSave)); + mainMenuItems.push_back(new cRecMenuItemSelect(tr("Limit Channels"), useChannelModes, useChannel, false, &useChannel, rmsSearchTimerSave, true)); mainMenuItems.push_back(new cRecMenuItemBool(tr("Use Time"), useTime, true, false, &useTime, rmsSearchTimerSave)); if (!advancedOptions) { mainMenuItems.push_back(new cRecMenuItemButton(tr("Display advanced Options"), rmsSearchTimerEditAdvanced, false)); @@ -842,6 +872,8 @@ void cRecMenuSearchTimerEdit::InitMenuItems(void) { useChannelSubMenu.push_back(new cRecMenuItemChannelChooser(tr("Stop Channel"), Channels.GetByNumber(stopChannel), false, &stopChannel, rmsSearchTimerSave)); #endif + useGroupSubMenu.push_back(new cRecMenuItemSelect(tr("Channel Group"), channelgroups, channelgroupIndex, false, &channelgroupIndex, rmsSearchTimerSave)); + useTimeSubMenu.push_back(new cRecMenuItemTime(tr("Start after"), startTime, false, &startTime, rmsSearchTimerSave)); useTimeSubMenu.push_back(new cRecMenuItemTime(tr("Start before"), stopTime, false, &stopTime, rmsSearchTimerSave)); @@ -856,6 +888,7 @@ void cRecMenuSearchTimerEdit::InitMenuItems(void) { void cRecMenuSearchTimerEdit::CreateMenuItems(void) { + dsyslog ("%s %s %d\n", __FILE__, __func__, __LINE__); bool reDraw = false; if (GetCurrentNumMenuItems() > 0) { InitMenu(false); @@ -867,15 +900,17 @@ void cRecMenuSearchTimerEdit::CreateMenuItems(void) { for (int i = 0; i < numMainMenuItems; i++) { currentMenuItems.push_back(mainMenuItems[i]); - if ((i == useChannelPos) && useChannel) + if ((i == useChannelPos) && (useChannel == 1)) AddSubMenu(&useChannelSubMenu); + else if ((i == useChannelPos) && (useChannel == 2) && (channelgroups.size() > 0)) + AddSubMenu(&useGroupSubMenu); else if ((i == useTimePos) && useTime) AddSubMenu(&useTimeSubMenu); else if (advancedOptions && (i == useDayOfWeekPos) && useDayOfWeek) AddSubMenu(&useDayOfWeekSubMenu); else if (advancedOptions && (i == avoidRepeatsPos) && avoidRepeats) AddSubMenu(&avoidRepeatSubMenu); - } + } int numMenuItemsAll = currentMenuItems.size(); int start = GetStartIndex(); @@ -901,17 +936,26 @@ void cRecMenuSearchTimerEdit::AddSubMenu(std::vector *subMenu) { cTVGuideSearchTimer cRecMenuSearchTimerEdit::GetSearchTimer(void) { + dsyslog ("%s %s %d\n", __FILE__, __func__, __LINE__); searchTimer.SetSearchString(searchString); searchTimer.SetActive(timerActive); searchTimer.SetSearchMode(mode); searchTimer.SetUseTitle(useTitle); searchTimer.SetUseSubtitle(useSubtitle); searchTimer.SetUseDesription(useDescription); - searchTimer.SetUseChannel(useChannel); - if (useChannel) { + if (useChannel == 1) { searchTimer.SetStartChannel(startChannel); searchTimer.SetStopChannel(stopChannel); } + if (useChannel == 2) { + if (channelgroups.size() > 0) { + std::string & channelGroup = channelgroups[channelgroupIndex]; + searchTimer.SetChannelGroup(channelGroup); + } else { + useChannel = 0; + } + } + searchTimer.SetUseChannel(useChannel); searchTimer.SetUseTime(useTime); if (useTime) { searchTimer.SetStartTime(startTime); diff --git a/recmenus.h b/recmenus.h index 16f0488..24bb5c5 100644 --- a/recmenus.h +++ b/recmenus.h @@ -209,8 +209,10 @@ class cRecMenuSearchTimerEdit: public cRecMenu { private: bool advancedOptions; cTVGuideSearchTimer searchTimer; + std::vector channelGroups; std::vector mainMenuItems; std::vector useChannelSubMenu; + std::vector useGroupSubMenu; std::vector useTimeSubMenu; std::vector useDayOfWeekSubMenu; std::vector avoidRepeatSubMenu; @@ -226,9 +228,12 @@ private: bool useTitle; bool useSubtitle; bool useDescription; - bool useChannel; + int useChannel; int startChannel; int stopChannel; + std::string channelGroup; + std::vector channelgroups; + int channelgroupIndex; bool useTime; int startTime; int stopTime; @@ -249,8 +254,9 @@ private: bool useInFavorites; void InitMenuItems(void); void AddSubMenu(std::vector *subMenu); + int SplitChannelGroups(std::vector *channelGroups, std::vector *channelgroups); public: - cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer, bool advancedOptions); + cRecMenuSearchTimerEdit(cTVGuideSearchTimer searchTimer, bool advancedOptions, std::vector channelGroups); void CreateMenuItems(void); virtual ~cRecMenuSearchTimerEdit(void); cTVGuideSearchTimer GetSearchTimer(void); diff --git a/searchtimer.c b/searchtimer.c index 6f191f4..a7b7141 100644 --- a/searchtimer.c +++ b/searchtimer.c @@ -577,7 +577,6 @@ void cTVGuideSearchTimer::GetSearchModes(std::vector *searchModes) searchModes->push_back(tr("regular expression")); } - void cTVGuideSearchTimer::Dump(void) { esyslog("tvguide searchtimer: strTimer: %s", strTimer.c_str()); esyslog("tvguide searchtimer: ID: %d", ID); @@ -617,3 +616,10 @@ void cTVGuideSearchTimer::SetStopChannel(int stopChannel) channelMax = Channels.GetByNumber(stopChannel); #endif }; + +void cTVGuideSearchTimer::GetUseChannelModes(std::vector *useChannelModes) { + useChannelModes->push_back(tr("No")); + useChannelModes->push_back(tr("Interval")); + useChannelModes->push_back(tr("Channel Group")); + useChannelModes->push_back(tr("only FTA")); +} diff --git a/searchtimer.h b/searchtimer.h index f83e6fe..5a1373f 100644 --- a/searchtimer.h +++ b/searchtimer.h @@ -82,9 +82,10 @@ public: bool UseSubtitle(void) { return useSubtitle; }; bool UseDescription(void) { return useDescription; }; int SearchMode(void) { return mode; }; - bool UseChannel(void) { return useChannel; }; + int UseChannel(void) { return useChannel; }; int StartChannel(void) { return (channelMin)?channelMin->Number():0; }; int StopChannel(void) { return (channelMax)?channelMax->Number():0; }; + std::string ChannelGroup(void) { return channelGroup; }; bool UseTime(void) { return useTime; }; int StartTime(void) { return startTime; }; int StopTime(void) { return stopTime; }; @@ -110,9 +111,10 @@ public: void SetUseTitle(bool useTitle) { this->useTitle = useTitle; }; void SetUseSubtitle(bool useSubtitle) { this->useSubtitle = useSubtitle; }; void SetUseDesription(bool useDescription) { this->useDescription = useDescription; }; - void SetUseChannel(bool useChannel) { this->useChannel = useChannel; }; + void SetUseChannel(int useChannel) { this->useChannel = useChannel; }; void SetStartChannel(int startChannel); void SetStopChannel(int stopChannel); + void SetChannelGroup(std::string channelGroup) { this->channelGroup = channelGroup; }; void SetUseTime(bool useTime) { this->useTime = useTime; }; void SetStartTime(int startTime) { this->startTime = startTime; }; void SetStopTime(int stopTime) { this->stopTime = stopTime; }; @@ -135,6 +137,7 @@ public: int GetNumTimers(void); int GetNumRecordings(void); void GetSearchModes(std::vector *searchModes); + void GetUseChannelModes(std::vector *useChannelModes); void Dump(void); };