mirror of
https://github.com/tuxbox-neutrino/neutrino.git
synced 2025-08-26 23:13:13 +02:00
timerd: adjust recording timers to epg
This commit is contained in:
@@ -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;
|
||||
strncpy(tri.recordingDir, ri->recordingDir, RECORD_DIR_MAXLEN-1);
|
||||
length = sizeof( CTimerd::TransferRecordingInfo);
|
||||
data = &tri;
|
||||
|
@@ -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)
|
||||
unsigned char apids=TIMERD_APIDS_STD, bool safety=false,bool autoAdjust=false, std::string recDir="", bool forceAdd=true)
|
||||
{
|
||||
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;
|
||||
strncpy(eventInfo.recordingDir, recDir.c_str(), RECORD_DIR_MAXLEN);
|
||||
return addTimerEvent(CTimerd::TIMER_RECORD, &eventInfo, announcetime, alarmtime, stoptime,CTimerd::TIMERREPEAT_ONCE, 0,forceAdd);
|
||||
};
|
||||
@@ -132,6 +133,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);
|
||||
};
|
||||
|
||||
|
@@ -87,6 +87,7 @@ class CTimerd
|
||||
t_channel_id channel_id;
|
||||
unsigned char apids;
|
||||
bool recordingSafety;
|
||||
bool autoAdjustToEPG;
|
||||
};
|
||||
|
||||
struct TransferEventInfo
|
||||
@@ -96,6 +97,7 @@ class CTimerd
|
||||
t_channel_id channel_id;
|
||||
unsigned char apids;
|
||||
bool recordingSafety;
|
||||
bool autoAdjustToEPG;
|
||||
};
|
||||
|
||||
struct TransferRecordingInfo : TransferEventInfo
|
||||
@@ -116,6 +118,7 @@ class CTimerd
|
||||
epgID = e.epgID;
|
||||
epg_starttime = e.epg_starttime;
|
||||
recordingSafety = e.recordingSafety;
|
||||
autoAdjustToEPG = e.autoAdjustToEPG;
|
||||
};
|
||||
RecordingInfo& operator = (EventInfo& e)
|
||||
{
|
||||
@@ -124,6 +127,7 @@ class CTimerd
|
||||
epgID = e.epgID;
|
||||
epg_starttime = e.epg_starttime;
|
||||
recordingSafety = e.recordingSafety;
|
||||
autoAdjustToEPG = e.autoAdjustToEPG;
|
||||
return *this;
|
||||
}
|
||||
unsigned char apids;
|
||||
|
@@ -1121,7 +1121,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))
|
||||
@@ -1131,7 +1131,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]);
|
||||
}
|
||||
|
@@ -105,7 +105,7 @@ int CFollowScreenings::exec(CMenuTarget* /*parent*/, const std::string & actionK
|
||||
}
|
||||
|
||||
if (g_Timerd->addRecordTimerEvent(channel_id, e->startTime, e->startTime + e->duration, e->eventID,
|
||||
e->startTime, e->startTime - (ANNOUNCETIME + 120 ), apids, true, recDir, true) == -1) {
|
||||
e->startTime, e->startTime - (ANNOUNCETIME + 120 ), apids, true, true, recDir, true) == -1) {
|
||||
//FIXME -- no error handling, but this shouldn't happen ...
|
||||
} else {
|
||||
#if 0
|
||||
|
@@ -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);
|
||||
|
@@ -303,7 +303,7 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd)
|
||||
|
||||
CTimerd::TransferRecordingInfo recInfo;
|
||||
CBasicServer::receive_data(connfd, &recInfo, sizeof(CTimerd::TransferRecordingInfo));
|
||||
if(recInfo.recordingSafety)
|
||||
if(recInfo.recordingSafety)
|
||||
{
|
||||
int pre,post;
|
||||
CTimerManager::getInstance()->getRecordingSafety(pre,post);
|
||||
@@ -321,7 +321,9 @@ bool timerd_parse_command(CBasicMessage::Header &rmsg, int connfd)
|
||||
recInfo.apids,
|
||||
msgAddTimer.eventRepeat,
|
||||
msgAddTimer.repeatCount,
|
||||
recInfo.recordingDir);
|
||||
recInfo.recordingDir,
|
||||
recInfo.recordingSafety,
|
||||
recInfo.autoAdjustToEPG);
|
||||
rspAddTimer.eventID = CTimerManager::getInstance()->addEvent(event);
|
||||
|
||||
break;
|
||||
|
@@ -1132,7 +1132,8 @@ 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) :
|
||||
uint32_t repeatcount, const std::string &recDir,
|
||||
bool _recordingSafety, bool _autoAdjustToEPG) :
|
||||
CTimerEvent(getEventType(), announce_Time, alarm_Time, stop_Time, evrepeat, repeatcount)
|
||||
{
|
||||
eventInfo.epgID = epgID;
|
||||
@@ -1141,6 +1142,8 @@ CTimerEvent_Record::CTimerEvent_Record(time_t announce_Time, time_t alarm_Time,
|
||||
eventInfo.apids = apids;
|
||||
recordingDir = recDir;
|
||||
epgTitle="";
|
||||
autoAdjustToEPG = _autoAdjustToEPG;
|
||||
recordingSafety = _recordingSafety;
|
||||
CShortEPGData epgdata;
|
||||
if (CEitManager::getInstance()->getEPGidShort(epgID, &epgdata))
|
||||
epgTitle=epgdata.title;
|
||||
@@ -1170,10 +1173,18 @@ 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);
|
||||
}
|
||||
//------------------------------------------------------------
|
||||
void CTimerEvent_Record::fireEvent()
|
||||
{
|
||||
if (adjustToCurrentEPG())
|
||||
return;
|
||||
Refresh();
|
||||
CTimerd::RecordingInfo ri=eventInfo;
|
||||
ri.eventID=eventID;
|
||||
@@ -1188,6 +1199,8 @@ void CTimerEvent_Record::fireEvent()
|
||||
//------------------------------------------------------------
|
||||
void CTimerEvent_Record::announceEvent()
|
||||
{
|
||||
if (adjustToCurrentEPG())
|
||||
return;
|
||||
Refresh();
|
||||
CTimerd::RecordingInfo ri=eventInfo;
|
||||
ri.eventID=eventID;
|
||||
@@ -1236,6 +1249,12 @@ 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);
|
||||
}
|
||||
//------------------------------------------------------------
|
||||
void CTimerEvent_Record::Reschedule()
|
||||
@@ -1277,6 +1296,34 @@ 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);
|
||||
CTimerManager::getInstance()->addEvent(event,false);
|
||||
setState(CTimerd::TIMERSTATE_HASFINISHED);
|
||||
|
||||
return true;
|
||||
}
|
||||
//=============================================================
|
||||
// Zapto Event
|
||||
//=============================================================
|
||||
|
@@ -117,13 +117,16 @@ 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 = "");
|
||||
uint32_t repeatcount = 1, const std::string &recDir = "",
|
||||
bool _recordingSafety = true, bool _autoAdjustToEPG = true);
|
||||
CTimerEvent_Record(CConfigFile *config, int iId);
|
||||
virtual ~CTimerEvent_Record(){};
|
||||
virtual CTimerd::CTimerEventTypes getEventType(void) const { return CTimerd::TIMER_RECORD; };
|
||||
@@ -134,6 +137,7 @@ class CTimerEvent_Record : public CTimerEvent
|
||||
virtual void Reschedule();
|
||||
virtual void getEpgId();
|
||||
virtual void Refresh();
|
||||
virtual bool adjustToCurrentEPG();
|
||||
};
|
||||
|
||||
class CTimerEvent_Zapto : public CTimerEvent_Record
|
||||
|
Reference in New Issue
Block a user