diff --git a/lib/timerdclient/timerdclient.cpp b/lib/timerdclient/timerdclient.cpp index 44429ed6b..63aed7d6e 100644 --- a/lib/timerdclient/timerdclient.cpp +++ b/lib/timerdclient/timerdclient.cpp @@ -28,7 +28,7 @@ #include #include - +int CTimerdClient::adzap_eventID = 0; unsigned char CTimerdClient::getVersion () const { return CTimerdMsg::ACTVERSION; @@ -253,7 +253,11 @@ int CTimerdClient::addTimerEvent( CTimerd::CTimerEventTypes evType, void* data, return -1; } } - + bool adzaptimer = false; + if(evType == CTimerd::TIMER_ADZAP){ + evType = CTimerd::TIMER_ZAPTO; + adzaptimer = true; + } CTimerd::TransferEventInfo tei; CTimerd::TransferRecordingInfo tri; CTimerdMsg::commandAddTimer msgAddTimer; @@ -270,7 +274,8 @@ int CTimerdClient::addTimerEvent( CTimerd::CTimerEventTypes evType, void* data, } /* else if(evType == CTimerd::TIMER_NEXTPROGRAM || evType == CTimerd::TIMER_ZAPTO || */ else if (evType == CTimerd::TIMER_ZAPTO || - evType == CTimerd::TIMER_IMMEDIATE_RECORD ) + evType == CTimerd::TIMER_IMMEDIATE_RECORD || + evType == CTimerd::TIMER_ADZAP) { CTimerd::EventInfo *ei=static_cast(data); tei.apids = ei->apids; @@ -318,15 +323,20 @@ int CTimerdClient::addTimerEvent( CTimerd::CTimerEventTypes evType, void* data, CTimerdMsg::responseAddTimer response; receive_data((char*)&response, sizeof(response)); close_connection(); - + + if(adzaptimer){ + adzap_eventID = response.eventID;//set adzap flag + } return( response.eventID); } //------------------------------------------------------------------------- void CTimerdClient::removeTimerEvent( int evId) { - CTimerdMsg::commandRemoveTimer msgRemoveTimer; + if(evId == adzap_eventID) + adzap_eventID = 0;//reset adzap flag + CTimerdMsg::commandRemoveTimer msgRemoveTimer; msgRemoveTimer.eventID = evId; send(CTimerdMsg::CMD_REMOVETIMER, (char*) &msgRemoveTimer, sizeof(msgRemoveTimer)); diff --git a/lib/timerdclient/timerdclient.h b/lib/timerdclient/timerdclient.h index 16bdcad77..59a41b260 100644 --- a/lib/timerdclient/timerdclient.h +++ b/lib/timerdclient/timerdclient.h @@ -61,6 +61,7 @@ class CTimerdClient:private CBasicClient void registerEvent(unsigned int eventID, unsigned int clientID, const char * const udsName); void unRegisterEvent(unsigned int eventID, unsigned int clientID); + static int adzap_eventID; bool isTimerdAvailable(); // check if timerd is running @@ -151,6 +152,18 @@ class CTimerdClient:private CBasicClient eventInfo.recordingSafety = false; return addTimerEvent(CTimerd::TIMER_ZAPTO, &eventInfo, announcetime, alarmtime, stoptime); }; + // adds new adzap timer event //pseudo TIMER_ADZAP + int addAdZaptoTimerEvent(const t_channel_id channel_id, time_t alarmtime) + { + CTimerd::EventInfo eventInfo; + eventInfo.channel_id = channel_id; + eventInfo.epgID = 1; + eventInfo.epg_starttime = 0; + eventInfo.apids = 0; + eventInfo.recordingSafety = false; + return addTimerEvent(CTimerd::TIMER_ADZAP, &eventInfo, 0, alarmtime, 0); + }; + #if 0 int addNextProgramTimerEvent(CTimerd::EventInfo eventInfo,time_t alarmtime, time_t announcetime = 0, time_t stoptime = 0) diff --git a/lib/timerdclient/timerdtypes.h b/lib/timerdclient/timerdtypes.h index 9ec69b56c..a741318d6 100644 --- a/lib/timerdclient/timerdtypes.h +++ b/lib/timerdclient/timerdtypes.h @@ -68,7 +68,8 @@ class CTimerd TIMER_REMIND, TIMER_SLEEPTIMER, TIMER_EXEC_PLUGIN, - TIMER_IMMEDIATE_RECORD + TIMER_IMMEDIATE_RECORD, + TIMER_ADZAP }; enum CTimerEventStates diff --git a/src/gui/epgview.cpp b/src/gui/epgview.cpp index 4cadb4fd5..a3223abf8 100644 --- a/src/gui/epgview.cpp +++ b/src/gui/epgview.cpp @@ -784,17 +784,24 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start break; case CRCInput::RC_page_up: if(isCurrentEPG(channel_id)){ - g_settings.wzap_time++; - if(g_settings.wzap_time>9) - g_settings.wzap_time = 9; + if(g_settings.wzap_time> 14) + g_settings.wzap_time+=5; + else + g_settings.wzap_time++; + if(g_settings.wzap_time>60) + g_settings.wzap_time = 0; showTimerEventBar(true, true); } break; case CRCInput::RC_page_down: if(isCurrentEPG(channel_id)){ - g_settings.wzap_time--; + if(g_settings.wzap_time> 19) + g_settings.wzap_time-=5; + else + g_settings.wzap_time--; + if(g_settings.wzap_time<0) - g_settings.wzap_time = 0; + g_settings.wzap_time = 60; showTimerEventBar(true, true); } break; @@ -886,11 +893,10 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start //CTimerdClient timerdclient; if (g_Timerd->isTimerdAvailable()) { - if(g_settings.wzap_time && isCurrentEPG(channel_id)){ - g_Timerd->addZaptoTimerEvent(channel_id, - time (NULL) + (g_settings.wzap_time * 60), - 0, 0, - 0, 0, 0); + if(!g_Timerd->adzap_eventID && g_settings.wzap_time && isCurrentEPG(channel_id)){ + g_Timerd->addAdZaptoTimerEvent(channel_id, + time (NULL) + (g_settings.wzap_time * 60)); + loop = false; }else{ g_Timerd->addZaptoTimerEvent(channel_id, epgData.epg_times.startzeit - (g_settings.zapto_pre_time * 60), @@ -1183,7 +1189,7 @@ void CEpgData::showTimerEventBar (bool pshow, bool webzap) /* 2 * ICON_LARGE_WIDTH for potential 16:9 and DD icons */ int aw = ox - 20 - 2 * (ICON_LARGE_WIDTH + 2); std::string tmp_but_name; - if(g_settings.wzap_time && webzap){ + if(g_settings.wzap_time && webzap && !g_Timerd->adzap_eventID){ tmp_but_name = g_Locale->getText(LOCALE_ADZAP); tmp_but_name += " "+ to_string(g_settings.wzap_time) + " "; tmp_but_name += g_Locale->getText(LOCALE_UNIT_SHORT_MINUTE); diff --git a/src/timerd/timermanager.cpp b/src/timerd/timermanager.cpp index 5493f126d..6d08e8391 100644 --- a/src/timerd/timermanager.cpp +++ b/src/timerd/timermanager.cpp @@ -1286,6 +1286,9 @@ void CTimerEvent_Zapto::announceEvent() //------------------------------------------------------------ void CTimerEvent_Zapto::fireEvent() { + if(CTimerdClient::adzap_eventID == eventID) + CTimerdClient::adzap_eventID = 0;//reset adzap flag + CTimerManager::getInstance()->getEventServer()->sendEvent(CTimerdClient::EVT_ZAPTO, CEventServer::INITID_TIMERD, &eventInfo,