aboutsummaryrefslogtreecommitdiff
path: root/lib/nav/core.cpp
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2009-02-11 12:52:48 +0100
committerFelix Domke <tmbinc@elitedvb.net>2009-02-11 12:52:48 +0100
commitbbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b (patch)
treec5945c791698c14723e989449e6b4bfcc275c05d /lib/nav/core.cpp
parent4f7990ff2a55874b9eb65e3c9cd47dacb9f76deb (diff)
parent5e6f814d005a01caa437a532e61f4b338617ff67 (diff)
downloadenigma2-bbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b.tar.gz
enigma2-bbfcb7ea1f040d030277e2b6f2efa9ea0967bf2b.zip
Merge branch 'master' of /home/tmbinc/enigma2-git into tmbinc/FixTimingBugs
Conflicts: lib/dvb/decoder.cpp
Diffstat (limited to 'lib/nav/core.cpp')
-rw-r--r--lib/nav/core.cpp47
1 files changed, 33 insertions, 14 deletions
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;
}