1 #include <lib/nav/core.h>
2 #include <lib/base/eerror.h>
3 #include <lib/python/python.h>
5 void eNavigation::serviceEvent(iPlayableService* service, int event)
7 if (m_runningService && service != m_runningService)
9 eDebug("nav: event %d for other service", event);
15 void eNavigation::recordEvent(iRecordableService* service, int event)
17 if (m_recordings.find(service) == m_recordings.end())
19 eDebug("nav: event for non registered recording service");
22 m_record_event(service, event);
25 RESULT eNavigation::playService(const eServiceReference &service)
29 assert(m_servicehandler);
30 RESULT res = m_servicehandler->play(service, m_runningService);
33 m_runningService->connectEvent(slot(*this, &eNavigation::serviceEvent), m_service_event_conn);
34 res = m_runningService->start();
39 RESULT eNavigation::connectEvent(const Slot1<void,int> &event, ePtr<eConnection> &connection)
41 connection = new eConnection(this, m_event.connect(event));
45 RESULT eNavigation::connectRecordEvent(const Slot2<void,ePtr<iRecordableService>,int> &event, ePtr<eConnection> &connection)
47 connection = new eConnection(this, m_record_event.connect(event));
51 RESULT eNavigation::getCurrentService(ePtr<iPlayableService> &service)
53 service = m_runningService;
57 RESULT eNavigation::stopService(void)
59 /* check if there is a running service... */
60 if (!m_runningService)
63 ePtr<iPlayableService> tmp = m_runningService;
68 m_event(iPlayableService::evEnd);
71 m_service_event_conn = 0;
75 RESULT eNavigation::recordService(const eServiceReference &ref, ePtr<iRecordableService> &service)
77 assert(m_servicehandler);
78 RESULT res = m_servicehandler->record(ref, service);
79 eDebug("record: %d", res);
84 ePtr<eConnection> conn;
85 service->connectEvent(slot(*this, &eNavigation::recordEvent), conn);
86 m_recordings[service]=conn;
91 RESULT eNavigation::stopRecordService(ePtr<iRecordableService> &service)
94 std::map<ePtr<iRecordableService>, ePtr<eConnection> >::iterator it =
95 m_recordings.find(service);
96 if (it != m_recordings.end())
98 m_recordings.erase(it);
100 m_record_event(service, iRecordableService::evEnd);
104 eDebug("try to stop non running recording!!"); // this should not happen
108 PyObject *eNavigation::getRecordings(void)
110 ePyObject result = PyList_New(m_recordings.size());
112 for (std::map<ePtr<iRecordableService>, ePtr<eConnection> >::iterator it(m_recordings.begin()); it != m_recordings.end(); ++it)
113 PyList_SET_ITEM(result, pos++, NEW_iRecordableServicePtr(it->first));
117 RESULT eNavigation::pause(int dop)
119 if (!m_runningService)
121 ePtr<iPauseableService> p;
122 if (m_runningService->pause(p))
130 eNavigation::eNavigation(iServiceHandler *serviceHandler)
132 assert(serviceHandler);
133 m_servicehandler = serviceHandler;
136 eNavigation::~eNavigation()
141 DEFINE_REF(eNavigation);