[experimental] timerd: adjust recording timers to epg

Origin commit data
------------------
Commit: fe2d351750
Author: martii <m4rtii@gmx.de>
Date: 2016-09-15 (Thu, 15 Sep 2016)
This commit is contained in:
martii
2016-09-15 00:48:06 +02:00
committed by vanhofen
parent 23f523a8d0
commit 1390156250
9 changed files with 74 additions and 7 deletions

View File

@@ -330,6 +330,7 @@ int CTimerdClient::addTimerEvent( CTimerd::CTimerEventTypes evType, void* data,
tri.epg_starttime = ri->epg_starttime;
tri.epgID = ri->epgID;
tri.recordingSafety = ri->recordingSafety;
tri.autoAdjustToEPG = ri->autoAdjustToEPG;
tri.channel_ci = ri->channel_ci; //NI
strncpy(tri.recordingDir, ri->recordingDir, RECORD_DIR_MAXLEN-1);
length = sizeof( CTimerd::TransferRecordingInfo);

View File

@@ -111,7 +111,7 @@ class CTimerdClient:private CBasicClient
// adds new record timer event
int addRecordTimerEvent(const t_channel_id channel_id, time_t alarmtime, time_t stoptime,
uint64_t epgID=0, time_t epg_starttime=0, time_t announcetime = 0,
unsigned char apids=TIMERD_APIDS_STD, bool safety=false,std::string recDir="", bool forceAdd=true, bool channel_ci=false) //NI
unsigned char apids=TIMERD_APIDS_STD, bool safety=false,bool autoAdjust=false, std::string recDir="", bool forceAdd=true, bool channel_ci=false) //NI
{
CTimerd::RecordingInfo eventInfo;
eventInfo.channel_id = channel_id;
@@ -119,6 +119,7 @@ class CTimerdClient:private CBasicClient
eventInfo.epg_starttime = epg_starttime;
eventInfo.apids = apids;
eventInfo.recordingSafety = safety;
eventInfo.autoAdjustToEPG = autoAdjust;
eventInfo.channel_ci = channel_ci; //NI
strncpy(eventInfo.recordingDir, recDir.c_str(), RECORD_DIR_MAXLEN);
return addTimerEvent(CTimerd::TIMER_RECORD, &eventInfo, announcetime, alarmtime, stoptime,CTimerd::TIMERREPEAT_ONCE, 0,forceAdd);
@@ -133,6 +134,7 @@ class CTimerdClient:private CBasicClient
eventInfo.epg_starttime = epg_starttime;
eventInfo.apids = apids;
eventInfo.recordingSafety = false;
eventInfo.autoAdjustToEPG = false;
return addTimerEvent(CTimerd::TIMER_IMMEDIATE_RECORD, &eventInfo, 0, alarmtime, stoptime);
};

View File

@@ -87,6 +87,7 @@ class CTimerd
t_channel_id channel_id;
unsigned char apids;
bool recordingSafety;
bool autoAdjustToEPG;
bool channel_ci; //NI - channel is member of CI bouquet?
};
@@ -97,6 +98,7 @@ class CTimerd
t_channel_id channel_id;
unsigned char apids;
bool recordingSafety;
bool autoAdjustToEPG;
bool channel_ci; //NI - channel is member of CI bouquet?
};
@@ -118,6 +120,7 @@ class CTimerd
epgID = e.epgID;
epg_starttime = e.epg_starttime;
recordingSafety = e.recordingSafety;
autoAdjustToEPG = e.autoAdjustToEPG;
channel_ci = e.channel_ci; //NI
};
RecordingInfo& operator = (EventInfo& e)
@@ -127,6 +130,7 @@ class CTimerd
epgID = e.epgID;
epg_starttime = e.epg_starttime;
recordingSafety = e.recordingSafety;
autoAdjustToEPG = e.autoAdjustToEPG;
channel_ci = e.channel_ci; //NI
return *this;
}

View File

@@ -1170,7 +1170,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start
epgData.epg_times.startzeit + epgData.epg_times.dauer,
epgData.eventID, epgData.epg_times.startzeit,
epgData.epg_times.startzeit - (ANNOUNCETIME + 120 ),
TIMERD_APIDS_CONF, true, recDir,false) == -1)
TIMERD_APIDS_CONF, true, true, recDir, false) == -1)
{
if (askUserOnTimerConflict(epgData.epg_times.startzeit - (ANNOUNCETIME + 120),
epgData.epg_times.startzeit + epgData.epg_times.dauer))
@@ -1180,7 +1180,7 @@ int CEpgData::show(const t_channel_id channel_id, uint64_t a_id, time_t* a_start
epgData.epg_times.startzeit + epgData.epg_times.dauer,
epgData.eventID, epgData.epg_times.startzeit,
epgData.epg_times.startzeit - (ANNOUNCETIME + 120 ),
TIMERD_APIDS_CONF, true, recDir,true);
TIMERD_APIDS_CONF, true, true, recDir, true);
ShowMsg(LOCALE_TIMER_EVENTRECORD_TITLE, LOCALE_TIMER_EVENTRECORD_MSG, CMessageBox::mbrBack, CMessageBox::mbBack, NEUTRINO_ICON_INFO);
timeoutEnd = CRCInput::calcTimeoutEnd(g_settings.timing[SNeutrinoSettings::TIMING_EPG]);
}

View File

@@ -111,7 +111,7 @@ int CFollowScreenings::exec(CMenuTarget* /*parent*/, const std::string & actionK
CZapitChannel * ch = CServiceManager::getInstance()->FindChannel(channel_id);
if (g_Timerd->addRecordTimerEvent(channel_id, e->startTime, e->startTime + e->duration, e->eventID,
e->startTime, e->startTime - (ANNOUNCETIME + 120 ), apids, true, recDir, true, ch->bUseCI) == -1) { //NI
e->startTime, e->startTime - (ANNOUNCETIME + 120 ), apids, true, true, recDir, true, ch->bUseCI) == -1) { //NI
//FIXME -- no error handling, but this shouldn't happen ...
} else {
#if 0

View File

@@ -316,6 +316,7 @@ int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey)
eventinfo.channel_id=timerNew.channel_id;
eventinfo.apids = TIMERD_APIDS_CONF;
eventinfo.recordingSafety = false;
eventinfo.autoAdjustToEPG = true;
timerNew.standby_on = (timerNew_standby_on == 1);
void *data=NULL;
if (timerNew.eventType == CTimerd::TIMER_STANDBY)
@@ -333,6 +334,7 @@ int CTimerList::exec(CMenuTarget* parent, const std::string & actionKey)
recinfo.channel_id=timerNew.channel_id;
recinfo.apids=TIMERD_APIDS_CONF;
recinfo.recordingSafety = false;
recinfo.autoAdjustToEPG = true; // FIXME -- add GUI option?
timerNew.announceTime-= 120; // 2 more mins for rec timer
strncpy(recinfo.recordingDir,timerNew.recordingDir,sizeof(recinfo.recordingDir)-1);

View File

@@ -324,6 +324,8 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd)
msgAddTimer.eventRepeat,
msgAddTimer.repeatCount,
recInfo.recordingDir,
recInfo.recordingSafety,
recInfo.autoAdjustToEPG,
recInfo.channel_ci); //NI
rspAddTimer.eventID = CTimerManager::getInstance()->addEvent(event);

View File

@@ -1134,7 +1134,9 @@ CTimerEvent_Record::CTimerEvent_Record(time_t announce_Time, time_t alarm_Time,
event_id_t epgID,
time_t epg_starttime, unsigned char apids,
CTimerd::CTimerEventRepeat evrepeat,
uint32_t repeatcount, const std::string &recDir, bool channel_ci) : //NI
uint32_t repeatcount, const std::string &recDir,
bool _recordingSafety, bool _autoAdjustToEPG,
bool channel_ci) : //NI
CTimerEvent(getEventType(), announce_Time, alarm_Time, stop_Time, evrepeat, repeatcount)
{
eventInfo.epgID = epgID;
@@ -1144,6 +1146,8 @@ CTimerEvent_Record::CTimerEvent_Record(time_t announce_Time, time_t alarm_Time,
eventInfo.channel_ci = channel_ci; //NI
recordingDir = recDir;
epgTitle="";
autoAdjustToEPG = _autoAdjustToEPG;
recordingSafety = _recordingSafety;
CShortEPGData epgdata;
if (CEitManager::getInstance()->getEPGidShort(epgID, &epgdata))
epgTitle=epgdata.title;
@@ -1173,6 +1177,13 @@ CTimerEvent_Record::CTimerEvent_Record(CConfigFile *config, int iId):
epgTitle = config->getString("EPG_TITLE_"+id);
dprintf("read EPG_TITLE_%s %s (%p)\n",id.c_str(),epgTitle.c_str(),&epgTitle);
recordingSafety = config->getInt32("RECORDING_SAFETY_"+id, true);
dprintf("read RECORDING_SAFETY_%s %d\n",id.c_str(), recordingSafety);
autoAdjustToEPG = config->getInt32("EPG_AUTO_ADJUST_"+id, true);
dprintf("read EPG_AUTO_ADJUST_TO_EPG_%s %d\n",id.c_str(), autoAdjustToEPG);
//NI
eventInfo.channel_ci = config->getBool("EVENT_INFO_CHANNEL_CI_"+id);
dprintf("read EVENT_INFO_CHANNEL_CI_%s %i\n",id.c_str(),eventInfo.channel_ci);
@@ -1180,6 +1191,8 @@ CTimerEvent_Record::CTimerEvent_Record(CConfigFile *config, int iId):
//------------------------------------------------------------
void CTimerEvent_Record::fireEvent()
{
if (adjustToCurrentEPG())
return;
Refresh();
CTimerd::RecordingInfo ri=eventInfo;
ri.eventID=eventID;
@@ -1194,6 +1207,8 @@ void CTimerEvent_Record::fireEvent()
//------------------------------------------------------------
void CTimerEvent_Record::announceEvent()
{
if (adjustToCurrentEPG())
return;
Refresh();
CTimerd::RecordingInfo ri=eventInfo;
ri.eventID=eventID;
@@ -1242,6 +1257,13 @@ void CTimerEvent_Record::saveToConfig(CConfigFile *config)
config->setString("EPG_TITLE_"+id,epgTitle);
dprintf("set EPG_TITLE_%s to %s (%p)\n",id.c_str(),epgTitle.c_str(), &epgTitle);
config->setInt32("RECORDING_SAFETY_"+id, recordingSafety);
dprintf("set RECORDING_SAFETY_%s to %d\n",id.c_str(), recordingSafety);
config->setInt32("EPG_AUTO_ADJUST_"+id, autoAdjustToEPG);
dprintf("set EPG_AUTO_ADJUST_TO_EPG_%s to %d\n",id.c_str(), autoAdjustToEPG);
//NI
config->setBool("EVENT_INFO_CHANNEL_CI_"+id, eventInfo.channel_ci);
dprintf("set EVENT_INFO_CHANNEL_CI_%s to %i\n",id.c_str(),eventInfo.channel_ci);
@@ -1286,6 +1308,35 @@ void CTimerEvent_Record::Refresh()
if (eventInfo.epgID == 0)
getEpgId();
}
//------------------------------------------------------------
bool CTimerEvent_Record::adjustToCurrentEPG()
{
CChannelEventList evtlist;
CEitManager::getInstance()->getEventsServiceKey(eventInfo.channel_id, evtlist);
time_t now = time(NULL);
CChannelEventList::iterator first = evtlist.end();
for (CChannelEventList::iterator e = evtlist.begin(); e != evtlist.end(); ++e)
{
if (e->startTime < now)
continue;
if (first == evtlist.end() || first->startTime > e->startTime)
first = e;
if (alarmTime <= e->startTime && e->startTime + (int)e->duration <= stopTime)
return false;
}
if (first == evtlist.end())
return false;
CTimerEvent_Record *event= new CTimerEvent_Record(first->startTime - (alarmTime - announceTime), first->startTime, first->startTime + first->duration,
eventInfo.channel_id, eventInfo.epgID, first->startTime, eventInfo.apids,
CTimerd::TIMERREPEAT_ONCE, 1, recordingDir, recordingSafety, autoAdjustToEPG,
eventInfo.channel_ci); //NI
CTimerManager::getInstance()->addEvent(event,false);
setState(CTimerd::TIMERSTATE_HASFINISHED);
return true;
}
//=============================================================
// Zapto Event
//=============================================================

View File

@@ -117,13 +117,17 @@ class CTimerEvent_Record : public CTimerEvent
CTimerd::EventInfo eventInfo;
std::string recordingDir;
std::string epgTitle;
bool recordingSafety;
bool autoAdjustToEPG;
CTimerEvent_Record(time_t announceTime, time_t alarmTime, time_t stopTime,
t_channel_id channel_id,
event_id_t epgID = 0,
time_t epg_starttime = 0,
unsigned char apids = TIMERD_APIDS_STD,
CTimerd::CTimerEventRepeat evrepeat = CTimerd::TIMERREPEAT_ONCE,
uint32_t repeatcount = 1, const std::string &recDir = "", bool channel_ci=false); //NI
uint32_t repeatcount = 1, const std::string &recDir = "",
bool _recordingSafety = true, bool _autoAdjustToEPG = true,
bool channel_ci=false); //NI
CTimerEvent_Record(CConfigFile *config, int iId);
virtual ~CTimerEvent_Record(){};
virtual CTimerd::CTimerEventTypes getEventType(void) const { return CTimerd::TIMER_RECORD; };
@@ -134,6 +138,7 @@ class CTimerEvent_Record : public CTimerEvent
virtual void Reschedule();
virtual void getEpgId();
virtual void Refresh();
virtual bool adjustToCurrentEPG();
};
class CTimerEvent_Zapto : public CTimerEvent_Record