aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorghost <andreas.monzner@multimedia-labs.de>2009-01-27 21:01:47 +0100
committerghost <andreas.monzner@multimedia-labs.de>2009-01-27 21:01:47 +0100
commit80059ab78691323ff8bb30ba4db8577a5185fc6d (patch)
treef55a44e97fe3640b3911c54d2ab488d1bb86a049
parentfdb6f80a93867b9172223f7949d78b385aaf424a (diff)
downloadenigma2-80059ab78691323ff8bb30ba4db8577a5185fc6d.tar.gz
enigma2-80059ab78691323ff8bb30ba4db8577a5185fc6d.zip
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)
-rw-r--r--Navigation.py6
-rw-r--r--lib/nav/core.cpp47
-rw-r--r--lib/nav/core.h7
-rw-r--r--lib/nav/pcore.cpp8
-rw-r--r--lib/nav/pcore.h4
5 files changed, 47 insertions, 25 deletions
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<iRecordableService> &service)
+RESULT eNavigation::recordService(const eServiceReference &ref, ePtr<iRecordableService> &service, bool simulate)
{
assert(m_servicehandler);
RESULT res = m_servicehandler->record(ref, service);
@@ -81,9 +81,14 @@ RESULT eNavigation::recordService(const eServiceReference &ref, ePtr<iRecordable
service = 0;
else
{
- ePtr<eConnection> conn;
- service->connectEvent(slot(*this, &eNavigation::recordEvent), conn);
- m_recordings[service]=conn;
+ if (simulate)
+ m_simulate_recordings.insert(service);
+ else
+ {
+ ePtr<eConnection> 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<iRecordable
RESULT eNavigation::stopRecordService(ePtr<iRecordableService> &service)
{
service->stop();
- std::map<ePtr<iRecordableService>, ePtr<eConnection> >::iterator it =
- m_recordings.find(service);
- if (it != m_recordings.end())
+ std::set<ePtr<iRecordableService> >::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<iRecordableService>, ePtr<eConnection> >::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<iRecordableService>, ePtr<eConnection> >::iterator it(m_recordings.begin()); it != m_recordings.end(); ++it)
- PyList_SET_ITEM(result, pos++, NEW_iRecordableServicePtr(it->first));
+ if (simulate)
+ for (std::set<ePtr<iRecordableService> >::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<iRecordableService>, ePtr<eConnection> >::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 <lib/service/iservice.h>
#include <connection.h>
#include <map>
+#include <set>
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<iRecordableService>, ePtr<eConnection>, std::less<iRecordableService*> > m_recordings;
+ std::set<ePtr<iRecordableService>, std::less<iRecordableService*> > m_simulate_recordings;
+
Signal2<void,ePtr<iRecordableService>,int> m_record_event;
void recordEvent(iRecordableService* service, int event);
public:
@@ -28,9 +31,9 @@ public:
RESULT getCurrentService(ePtr<iPlayableService> &service);
RESULT stopService(void);
- RESULT recordService(const eServiceReference &ref, ePtr<iRecordableService> &service);
+ RESULT recordService(const eServiceReference &ref, ePtr<iRecordableService> &service, bool simulate=false);
RESULT stopRecordService(ePtr<iRecordableService> &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<iRecordableService> &service)
+RESULT pNavigation::recordService(const eServiceReference &ref, ePtr<iRecordableService> &service, bool simulate)
{
- return m_core->recordService(ref, service);
+ return m_core->recordService(ref, service, simulate);
}
RESULT pNavigation::stopRecordService(ePtr<iRecordableService> &service)
@@ -47,9 +47,9 @@ RESULT pNavigation::stopRecordService(ePtr<iRecordableService> &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<iPlayableService> &SWIG_OUTPUT);
- SWIG_VOID(RESULT) recordService(const eServiceReference &ref, ePtr<iRecordableService> &SWIG_OUTPUT);
+ SWIG_VOID(RESULT) recordService(const eServiceReference &ref, ePtr<iRecordableService> &SWIG_OUTPUT, bool simulate);
RESULT stopRecordService(ePtr<iRecordableService> &service);
- PyObject *getRecordings(void);
+ PyObject *getRecordings(bool simulate=false);
private:
ePtr<eNavigation> m_core;