X-Git-Url: http://code.vuplus.com/gitweb/?a=blobdiff_plain;f=lib%2Fnav%2Fcore.cpp;h=062a7d00046a48d7736eb0fd9dae146bf55fcc73;hb=10e7e45ae92d4fe06f70126ed256b87896dbc432;hp=9bb43615697bf983f068534c96b57a2d20f5dbfc;hpb=cc273e51a15dfbfd0f79f58cdb6fc1e115ceee81;p=vuplus_dvbapp diff --git a/lib/nav/core.cpp b/lib/nav/core.cpp index 9bb4361..062a7d0 100644 --- a/lib/nav/core.cpp +++ b/lib/nav/core.cpp @@ -1,34 +1,25 @@ #include #include +#include void eNavigation::serviceEvent(iPlayableService* service, int event) { - if (service != m_runningService) + if (m_runningService && service != m_runningService) { - eDebug("nav: event for other service"); + eDebug("nav: event %d for other service", event); return; } + m_event(event); +} - switch (event) - { - case iPlayableService::evEnd: - m_event(this, evEnd); - break; - case iPlayableService::evStart: - m_event(this, evNewService); - break; - case iPlayableService::evUpdatedEventInfo: - m_event(this, evUpdatedEventInfo); - break; - case iPlayableService::evUpdatedInfo: - m_event(this, evUpdatedInfo); - break; - case iPlayableService::evSeekableStatusChanged: - m_event(this, evSeekableStatusChanged); - break; - default: - break; +void eNavigation::recordEvent(iRecordableService* service, int event) +{ + if (m_recordings.find(service) == m_recordings.end()) + { + eDebug("nav: event for non registered recording service"); + return; } + m_record_event(service, event); } RESULT eNavigation::playService(const eServiceReference &service) @@ -45,12 +36,18 @@ RESULT eNavigation::playService(const eServiceReference &service) return res; } -RESULT eNavigation::connectEvent(const Slot2 &event, ePtr &connection) +RESULT eNavigation::connectEvent(const Slot1 &event, ePtr &connection) { connection = new eConnection(this, m_event.connect(event)); return 0; } +RESULT eNavigation::connectRecordEvent(const Slot2,int> &event, ePtr &connection) +{ + connection = new eConnection(this, m_record_event.connect(event)); + return 0; +} + RESULT eNavigation::getCurrentService(ePtr &service) { service = m_runningService; @@ -62,11 +59,15 @@ RESULT eNavigation::stopService(void) /* check if there is a running service... */ if (!m_runningService) return 1; - /* send stop event */ - m_event(this, evStopService); + + ePtr tmp = m_runningService; + m_runningService=0; + tmp->stop(); + + /* send stop event */ + m_event(iPlayableService::evEnd); /* kill service. */ - m_runningService = 0; m_service_event_conn = 0; return 0; } @@ -78,9 +79,41 @@ RESULT eNavigation::recordService(const eServiceReference &ref, ePtr conn; + service->connectEvent(slot(*this, &eNavigation::recordEvent), conn); + m_recordings[service]=conn; + } return res; } +RESULT eNavigation::stopRecordService(ePtr &service) +{ + service->stop(); + std::map, ePtr >::iterator it = + m_recordings.find(service); + if (it != m_recordings.end()) + { + m_recordings.erase(it); + /* send stop event */ + m_record_event(service, iRecordableService::evEnd); + return 0; + } + + eDebug("try to stop non running recording!!"); // this should not happen + return -1; +} + +PyObject *eNavigation::getRecordings(void) +{ + ePyObject result = PyList_New(m_recordings.size()); + int pos=0; + for (std::map, ePtr >::iterator it(m_recordings.begin()); it != m_recordings.end(); ++it) + PyList_SET_ITEM(result, pos++, NEW_iRecordableServicePtr(it->first)); + return result; +} + RESULT eNavigation::pause(int dop) { if (!m_runningService) @@ -102,6 +135,7 @@ eNavigation::eNavigation(iServiceHandler *serviceHandler) eNavigation::~eNavigation() { + stopService(); } DEFINE_REF(eNavigation);