From: ghost Date: Tue, 27 Jan 2009 20:01:47 +0000 (+0100) Subject: differenciate between normal and simulate recordings X-Git-Tag: 2.6.0~483 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/80059ab78691323ff8bb30ba4db8577a5185fc6d?hp=fdb6f80a93867b9172223f7949d78b385aaf424a differenciate between normal and simulate recordings simulate recordings now no more returned in normal nav.getRecordings() call.. to get a list of running simulate recordings you can use nav.getRecordings(True) --- diff --git a/Navigation.py b/Navigation.py index 715e886b..2ca87f6f 100644 --- a/Navigation.py +++ b/Navigation.py @@ -87,7 +87,7 @@ class Navigation: if ref: if ref.flags & eServiceReference.isGroup: ref = getBestPlayableServiceReference(ref, eServiceReference(), simulate) - service = ref and self.pnav and self.pnav.recordService(ref) + service = ref and self.pnav and self.pnav.recordService(ref, simulate) if service is None: print "record returned non-zero" return service @@ -96,8 +96,8 @@ class Navigation: ret = self.pnav and self.pnav.stopRecordService(service) return ret - def getRecordings(self): - return self.pnav and self.pnav.getRecordings() + def getRecordings(self, simulate=False): + return self.pnav and self.pnav.getRecordings(simulate) def getCurrentService(self): if not self.currentlyPlayingService: diff --git a/lib/nav/core.cpp b/lib/nav/core.cpp index 062a7d00..90650f68 100644 --- a/lib/nav/core.cpp +++ b/lib/nav/core.cpp @@ -72,7 +72,7 @@ RESULT eNavigation::stopService(void) return 0; } -RESULT eNavigation::recordService(const eServiceReference &ref, ePtr &service) +RESULT eNavigation::recordService(const eServiceReference &ref, ePtr &service, bool simulate) { assert(m_servicehandler); RESULT res = m_servicehandler->record(ref, service); @@ -81,9 +81,14 @@ RESULT eNavigation::recordService(const eServiceReference &ref, ePtr conn; - service->connectEvent(slot(*this, &eNavigation::recordEvent), conn); - m_recordings[service]=conn; + if (simulate) + m_simulate_recordings.insert(service); + else + { + ePtr conn; + service->connectEvent(slot(*this, &eNavigation::recordEvent), conn); + m_recordings[service]=conn; + } } return res; } @@ -91,26 +96,40 @@ RESULT eNavigation::recordService(const eServiceReference &ref, ePtr &service) { service->stop(); - std::map, ePtr >::iterator it = - m_recordings.find(service); - if (it != m_recordings.end()) + std::set >::iterator it = + m_simulate_recordings.find(service); + if (it != m_simulate_recordings.end()) { - m_recordings.erase(it); - /* send stop event */ - m_record_event(service, iRecordableService::evEnd); + m_simulate_recordings.erase(it); return 0; } + else + { + 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) +PyObject *eNavigation::getRecordings(bool simulate) { - ePyObject result = PyList_New(m_recordings.size()); + ePyObject result = PyList_New(simulate ? m_simulate_recordings.size() : 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)); + if (simulate) + for (std::set >::iterator it(m_simulate_recordings.begin()); it != m_simulate_recordings.end(); ++it) + PyList_SET_ITEM(result, pos++, NEW_iRecordableServicePtr(*it)); + else + 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; } diff --git a/lib/nav/core.h b/lib/nav/core.h index 01efe9af..9f7be884 100644 --- a/lib/nav/core.h +++ b/lib/nav/core.h @@ -5,6 +5,7 @@ #include #include #include +#include class eNavigation: public iObject, public Object { @@ -17,6 +18,8 @@ class eNavigation: public iObject, public Object void serviceEvent(iPlayableService* service, int event); std::map, ePtr, std::less > m_recordings; + std::set, std::less > m_simulate_recordings; + Signal2,int> m_record_event; void recordEvent(iRecordableService* service, int event); public: @@ -28,9 +31,9 @@ public: RESULT getCurrentService(ePtr &service); RESULT stopService(void); - RESULT recordService(const eServiceReference &ref, ePtr &service); + RESULT recordService(const eServiceReference &ref, ePtr &service, bool simulate=false); RESULT stopRecordService(ePtr &service); - PyObject *getRecordings(void); + PyObject *getRecordings(bool simulate=false); RESULT pause(int p); eNavigation(iServiceHandler *serviceHandler); diff --git a/lib/nav/pcore.cpp b/lib/nav/pcore.cpp index a6ed35f6..b38e5597 100644 --- a/lib/nav/pcore.cpp +++ b/lib/nav/pcore.cpp @@ -37,9 +37,9 @@ RESULT pNavigation::stopService() return m_core->stopService(); } -RESULT pNavigation::recordService(const eServiceReference &ref, ePtr &service) +RESULT pNavigation::recordService(const eServiceReference &ref, ePtr &service, bool simulate) { - return m_core->recordService(ref, service); + return m_core->recordService(ref, service, simulate); } RESULT pNavigation::stopRecordService(ePtr &service) @@ -47,9 +47,9 @@ RESULT pNavigation::stopRecordService(ePtr &service) return m_core->stopRecordService(service); } -PyObject *pNavigation::getRecordings(void) +PyObject *pNavigation::getRecordings(bool simulate) { - return m_core->getRecordings(); + return m_core->getRecordings(simulate); } void pNavigation::navEvent(int event) diff --git a/lib/nav/pcore.h b/lib/nav/pcore.h index 1d314b19..c157e0dc 100644 --- a/lib/nav/pcore.h +++ b/lib/nav/pcore.h @@ -20,9 +20,9 @@ public: RESULT pause(int p); SWIG_VOID(RESULT) getCurrentService(ePtr &SWIG_OUTPUT); - SWIG_VOID(RESULT) recordService(const eServiceReference &ref, ePtr &SWIG_OUTPUT); + SWIG_VOID(RESULT) recordService(const eServiceReference &ref, ePtr &SWIG_OUTPUT, bool simulate); RESULT stopRecordService(ePtr &service); - PyObject *getRecordings(void); + PyObject *getRecordings(bool simulate=false); private: ePtr m_core;