int CFollowScreenings::exec(CMenuTarget* /*parent*/, const std::string & actionKey) { unsigned long a; if (1 == sscanf(actionKey.c_str(), "%lu", &a)) { int ix = 0; CChannelEventList::iterator e; for (e = followlist.begin(); e != followlist.end(); e++, ix++) if ((time_t)a == e->startTime) { time_t start = e->startTime - (ANNOUNCETIME + 120); time_t stop = e->startTime + e->duration; CTimerd::TimerList overlappingTimers = Timer.getOverlappingTimers(start, stop); CTimerd::TimerList::iterator i; for (i = overlappingTimers.begin(); i != overlappingTimers.end(); i++) if (i->eventType == CTimerd::TIMER_RECORD) { if (channel_id == i->channel_id && e->startTime == i->epg_starttime) { Timer.removeTimerEvent(i->eventID); if (!forwarders.empty()) forwarders[ix]->iconName_Info_right = ""; #if 0 else ShowMsg(LOCALE_TIMER_EVENTREMOVED_TITLE, LOCALE_TIMER_EVENTREMOVED_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); #endif return menu_return::RETURN_REPAINT; } if (!SAME_TRANSPONDER(channel_id, i->channel_id)) { if (!askUserOnTimerConflict(start, stop, channel_id)) return menu_return::RETURN_REPAINT; } } if (g_Timerd->addRecordTimerEvent(channel_id, e->startTime, e->startTime + e->duration, e->eventID, e->startTime, e->startTime - (ANNOUNCETIME + 120 ), apids, true, e->startTime - (ANNOUNCETIME + 120) > time(NULL), recDir, true) == -1) { //FIXME -- no error handling, but this shouldn't happen ... } else { if (!forwarders.empty()) forwarders[ix]->iconName_Info_right = NEUTRINO_ICON_REC; #if 0 else ShowMsg(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); #endif return menu_return::RETURN_REPAINT; } break; // for } return menu_return::RETURN_EXIT_ALL; } show(); return menu_return::RETURN_EXIT_ALL; }
int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey) { const char * key = actionKey.c_str(); if (strcmp(key, "modifytimer") == 0) { timerlist[selected].announceTime = timerlist[selected].alarmTime -60; if (timerlist[selected].eventRepeat >= CTimerd::TIMERREPEAT_WEEKDAYS) Timer->getWeekdaysFromStr(&timerlist[selected].eventRepeat, m_weekdaysStr); if (timerlist[selected].eventType == CTimerd::TIMER_RECORD) { timerlist[selected].announceTime -= 120; // 2 more mins for rec timer if (timer_apids_dflt) timerlist[selected].apids = TIMERD_APIDS_CONF; else timerlist[selected].apids = (unsigned char)((timer_apids_std * TIMERD_APIDS_STD) | (timer_apids_ac3 * TIMERD_APIDS_AC3) | (timer_apids_alt * TIMERD_APIDS_ALT)); Timer->modifyTimerAPid(timerlist[selected].eventID,timerlist[selected].apids); Timer->modifyRecordTimerEvent(timerlist[selected].eventID, timerlist[selected].announceTime, timerlist[selected].alarmTime, timerlist[selected].stopTime, timerlist[selected].eventRepeat, timerlist[selected].repeatCount,timerlist[selected].recordingDir); } else { Timer->modifyTimerEvent(timerlist[selected].eventID, timerlist[selected].announceTime, timerlist[selected].alarmTime, timerlist[selected].stopTime, timerlist[selected].eventRepeat, timerlist[selected].repeatCount); } return menu_return::RETURN_EXIT; } else if (strcmp(key, "newtimer") == 0) { timerNew.announceTime=timerNew.alarmTime-60; CTimerd::EventInfo eventinfo; CTimerd::RecordingInfo recinfo; eventinfo.epgID=0; eventinfo.epg_starttime=0; eventinfo.channel_id=timerNew.channel_id; eventinfo.apids = TIMERD_APIDS_CONF; eventinfo.recordingSafety = false; timerNew.standby_on = (timerNew_standby_on == 1); void *data=NULL; if (timerNew.eventType == CTimerd::TIMER_STANDBY) data=&(timerNew.standby_on); /* else if (timerNew.eventType==CTimerd::TIMER_NEXTPROGRAM || */ else if (timerNew.eventType == CTimerd::TIMER_ZAPTO || timerNew.eventType == CTimerd::TIMER_RECORD) { if (timerNew_channel_name == "---") return menu_return::RETURN_REPAINT; if (timerNew.eventType==CTimerd::TIMER_RECORD) { recinfo.epgID=0; recinfo.epg_starttime=0; recinfo.channel_id=timerNew.channel_id; recinfo.apids=TIMERD_APIDS_CONF; recinfo.recordingSafety = false; timerNew.announceTime-= 120; // 2 more mins for rec timer strncpy(recinfo.recordingDir,timerNew.recordingDir,sizeof(recinfo.recordingDir)-1); data = &recinfo; } else data= &eventinfo; } else if (timerNew.eventType==CTimerd::TIMER_REMIND) data = (void*)timerNew_message.c_str(); else if (timerNew.eventType==CTimerd::TIMER_EXEC_PLUGIN) { if (strcmp(timerNew.pluginName, "---") == 0) return menu_return::RETURN_REPAINT; data= timerNew.pluginName; } if (timerNew.eventRepeat >= CTimerd::TIMERREPEAT_WEEKDAYS) Timer->getWeekdaysFromStr(&timerNew.eventRepeat, m_weekdaysStr); if (Timer->addTimerEvent(timerNew.eventType,data,timerNew.announceTime,timerNew.alarmTime, timerNew.stopTime,timerNew.eventRepeat,timerNew.repeatCount,false) == -1) { bool forceAdd = askUserOnTimerConflict(timerNew.announceTime,timerNew.stopTime); if (forceAdd) { Timer->addTimerEvent(timerNew.eventType,data,timerNew.announceTime,timerNew.alarmTime, timerNew.stopTime, timerNew.eventRepeat,timerNew.repeatCount,true); } } return menu_return::RETURN_EXIT; } else if (strncmp(key, "SC:", 3) == 0) { int delta; sscanf(&(key[3]), SCANF_CHANNEL_ID_TYPE "%n", &timerNew.channel_id, &delta); timerNew_channel_name = std::string(key + 3 + delta + 1); g_RCInput->postMsg(CRCInput::RC_timeout, 0); // leave underlying menu also g_RCInput->postMsg(CRCInput::RC_timeout, 0); // leave underlying menu also return menu_return::RETURN_EXIT; } else if(actionKey == "rec_dir1") { parent->hide(); const char *action_str = "RecDir1"; if(chooserDir(timerlist[selected].recordingDir, true, action_str, sizeof(timerlist[selected].recordingDir)-1)) { printf("[timerlist] new %s dir %s\n", action_str, timerlist[selected].recordingDir); } return menu_return::RETURN_REPAINT; } else if(actionKey == "rec_dir2") { parent->hide(); const char *action_str = "RecDir2"; if(chooserDir(timerNew.recordingDir, true, action_str, sizeof(timerNew.recordingDir)-1)) { printf("[timerlist] new %s dir %s\n", action_str, timerNew.recordingDir); } return menu_return::RETURN_REPAINT; } if (parent) { parent->hide(); } int ret = show(); CVFD::getInstance()->setMode((CVFD::MODES)saved_dispmode); return ret; /* if( ret > -1) { return menu_return::RETURN_REPAINT; } else if( ret == -1) { // -1 bedeutet nur REPAINT return menu_return::RETURN_REPAINT; } else { // -2 bedeutet EXIT_ALL return menu_return::RETURN_EXIT_ALL; }*/ }
int EventList::exec(const t_channel_id channel_id, const std::string& channelname) // UTF-8 { neutrino_msg_t msg; neutrino_msg_data_t data; bool in_search = 0; // windows size width = w_max ( (frameBuffer->getScreenWidth() / 20 * 17), (frameBuffer->getScreenWidth() / 20 )); height = h_max ( (frameBuffer->getScreenHeight() / 20 * 16), (frameBuffer->getScreenHeight() / 20)); //iheight = 30; // FIXME: info bar height (see below, hard coded at this time) int icon_w; int icon_h; frameBuffer->getIconSize(NEUTRINO_ICON_BUTTON_RED, &icon_w, &icon_h); iheight = std::max(icon_h, g_Font[SNeutrinoSettings::FONT_TYPE_INFOBAR_SMALL]->getHeight()) + 6;; // theight = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_TITLE]->getHeight(); fheight1 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMLARGE]->getHeight(); { int h1 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMSMALL]->getHeight(); int h2 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_DATETIME]->getHeight(); fheight2 = (h1 > h2) ? h1 : h2; } fheight = fheight1 + fheight2 + 2; fwidth1 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_DATETIME]->getRenderWidth("DDD, 00:00, "); fwidth2 = g_Font[SNeutrinoSettings::FONT_TYPE_EVENTLIST_ITEMSMALL]->getRenderWidth("[999 min] "); listmaxshow = (height - theight - iheight)/fheight; // recalculate height height = theight + iheight + listmaxshow*fheight; // recalc height x = frameBuffer->getScreenX() + (frameBuffer->getScreenWidth() - width) / 2; y = frameBuffer->getScreenY() + (frameBuffer->getScreenHeight() - height) / 2; int res = menu_return::RETURN_REPAINT; if(m_search_list == SEARCH_LIST_NONE) // init globals once only { m_search_epg_item = SEARCH_EPG_TITLE; m_search_list = SEARCH_LIST_CHANNEL; m_search_bouquet_id= bouquetList->getActiveBouquetNumber(); } m_search_channel_id = channel_id; m_showChannel = false; // do not show the channel in normal mode, we just need it in search mode name = channelname; sort_mode = SORT_DESCRIPTION; paintHead(channel_id); readEvents(channel_id); paint(channel_id); showFunctionBar(true); // blit frameBuffer->blit(); int oldselected = selected; unsigned long long timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); bool loop = true; while (loop) { g_RCInput->getMsgAbsoluteTimeout(&msg, &data, &timeoutEnd); if ( msg <= CRCInput::RC_MaxRC ) timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); if (msg == CRCInput::RC_up || (int) msg == g_settings.key_channelList_pageup) { int step = 0; int prev_selected = selected; step = ((int) msg == g_settings.key_channelList_pageup) ? listmaxshow : 1; // browse or step 1 selected -= step; if((prev_selected-step) < 0) // because of uint selected = evtlist.size() - 1; paintItem(prev_selected - liststart, channel_id); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) paint(channel_id); else paintItem(selected - liststart, channel_id); } else if (msg == CRCInput::RC_down || (int) msg == g_settings.key_channelList_pagedown) { unsigned int step = 0; int prev_selected = selected; step = ((int) msg == g_settings.key_channelList_pagedown) ? listmaxshow : 1; // browse or step 1 selected += step; if(selected >= evtlist.size()) { if (((evtlist.size() / listmaxshow) + 1) * listmaxshow == evtlist.size() + listmaxshow) // last page has full entries selected = 0; else selected = ((step == listmaxshow) && (selected < (((evtlist.size() / listmaxshow) + 1) * listmaxshow))) ? (evtlist.size() - 1) : 0; } paintItem(prev_selected - liststart, channel_id); unsigned int oldliststart = liststart; liststart = (selected/listmaxshow)*listmaxshow; if(oldliststart!=liststart) paint(channel_id); else paintItem(selected - liststart, channel_id); } // sort else if (msg == (neutrino_msg_t)g_settings.key_channelList_sort) { unsigned long long selected_id = evtlist[selected].eventID; if(sort_mode == SORT_DESCRIPTION) // by description { sort_mode++; sort(evtlist.begin(), evtlist.end(), sortByDescription); } else// datetime { sort_mode = SORT_DESCRIPTION; sort(evtlist.begin(), evtlist.end(), sortByDateTime); } // find selected for ( selected = 0 ; selected < evtlist.size(); selected++ ) { if ( evtlist[selected].eventID == selected_id ) break; } oldselected = selected; if(selected <=listmaxshow) liststart=0; else liststart=(selected/listmaxshow)*listmaxshow; hide(); paintHead(channel_id); paint(channel_id); showFunctionBar(true); } // epg reload else if (msg == (neutrino_msg_t)g_settings.key_channelList_reload) { sort_mode = SORT_DESCRIPTION; hide(); paintHead(channel_id); readEvents(channel_id); paint(channel_id); showFunctionBar(true); } // add record else if ( msg == (neutrino_msg_t)g_settings.key_channelList_addrecord ) { if (recDir != NULL) { int tID = -1; CTimerd::CTimerEventTypes etype = isScheduled(channel_id, &evtlist[selected], &tID); if(etype == CTimerd::TIMER_RECORD) { g_Timerd->removeTimerEvent(tID); timerlist.clear(); g_Timerd->getTimerList(timerlist); paint(channel_id); continue; } if (recDir != NULL) { if (g_Timerd->addRecordTimerEvent(channel_id, evtlist[selected].startTime, evtlist[selected].startTime + evtlist[selected].duration, evtlist[selected].eventID, evtlist[selected].startTime, evtlist[selected].startTime - (ANNOUNCETIME + 120), TIMERD_APIDS_CONF, true, recDir,false) == -1) { if(askUserOnTimerConflict(evtlist[selected].startTime - (ANNOUNCETIME + 120), evtlist[selected].startTime + evtlist[selected].duration)) { g_Timerd->addRecordTimerEvent(channel_id, evtlist[selected].startTime, evtlist[selected].startTime + evtlist[selected].duration, evtlist[selected].eventID, evtlist[selected].startTime, evtlist[selected].startTime - (ANNOUNCETIME + 120), TIMERD_APIDS_CONF, true, recDir,true); MessageBox(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); } } else { MessageBox(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); } } timerlist.clear(); g_Timerd->getTimerList(timerlist); paint(channel_id); } } // add remind else if ( msg == (neutrino_msg_t) g_settings.key_channelList_addremind ) { int tID = -1; CTimerd::CTimerEventTypes etype = isScheduled(channel_id, &evtlist[selected], &tID); if(etype == CTimerd::TIMER_ZAPTO) { g_Timerd->removeTimerEvent(tID); timerlist.clear(); g_Timerd->getTimerList (timerlist); paint(channel_id); continue; } g_Timerd->addZaptoTimerEvent(channel_id, evtlist[selected].startTime, evtlist[selected].startTime - ANNOUNCETIME, 0, evtlist[selected].eventID, evtlist[selected].startTime, 0); MessageBox(LOCALE_TIMER_EVENTTIMED_TITLE, LOCALE_TIMER_EVENTTIMED_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO); timerlist.clear(); g_Timerd->getTimerList (timerlist); paint(channel_id); } else if (msg == CRCInput::RC_timeout) { selected = oldselected; loop = false; } else if (msg == (neutrino_msg_t)g_settings.key_channelList_cancel) { if(in_search) { in_search = false; name = channelname; paintHead(channel_id); readEvents(channel_id); paint(channel_id); showFunctionBar(true); } else { selected = oldselected; loop = false; } } else if (msg == CRCInput::RC_epg) { hide(); CEPGplusHandler eplus; eplus.exec(NULL, ""); paintHead(channel_id); readEvents(channel_id); paint(channel_id); showFunctionBar(true); } else if ( msg==CRCInput::RC_left ) { loop = false; } else if ( msg == CRCInput::RC_right || msg == CRCInput::RC_ok || msg == CRCInput::RC_info) { if ( evtlist[selected].eventID != 0 ) { hide(); res = g_EpgData->show(channel_id, evtlist[selected].eventID, &evtlist[selected].startTime); if ( res == menu_return::RETURN_EXIT_ALL ) { loop = false; } else { g_RCInput->getMsg( &msg, &data, 0 ); if ( ( msg != CRCInput::RC_red ) && ( msg != CRCInput::RC_timeout ) ) { // RC_red schlucken g_RCInput->postMsg( msg, data ); } timerlist.clear(); g_Timerd->getTimerList (timerlist); paintHead(channel_id); paint(channel_id); showFunctionBar(true); } } } else if ( msg == CRCInput::RC_green ) { in_search = findEvents(); timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_CHANLIST]); } else if (msg == CRCInput::RC_sat || msg == CRCInput::RC_favorites) { g_RCInput->postMsg (msg, 0); res = menu_return::RETURN_EXIT_ALL; loop = false; } else { if ( CNeutrinoApp::getInstance()->handleMsg( msg, data ) & messages_return::cancel_all ) { loop = false; res = menu_return::RETURN_EXIT_ALL; } } // blit frameBuffer->blit(); } hide(); return res; }