X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/c0f5089ea04bd04fe25148e712fa62cd49dc17da..e78b5b9f8180bbad1808926b2c35dd691709281d:/lib/nav/core.cpp diff --git a/lib/nav/core.cpp b/lib/nav/core.cpp index b5c229c7..edc63c18 100644 --- a/lib/nav/core.cpp +++ b/lib/nav/core.cpp @@ -1,4 +1,5 @@ #include +#include void eNavigation::serviceEvent(iPlayableService* service, int event) { @@ -8,31 +9,14 @@ void eNavigation::serviceEvent(iPlayableService* service, int event) return; } - switch (event) - { - case iPlayableService::evEnd: - /* our running main service stopped. */ - if (!m_playlist.empty()) - m_playlist.erase(m_playlist.begin()); - if (!m_playlist.empty()) - { - RESULT res; - res = playService(m_playlist.front()); - if (res) - m_event(this, evPlayFailed); - } else - m_event(this, evPlaylistDone); - break; - case iPlayableService::evStart: - m_event(this, evNewService); - break; - default: - break; - } + m_event(this, event); } RESULT eNavigation::playService(const eServiceReference &service) { + stopService(); + + assert(m_servicehandler); RESULT res = m_servicehandler->play(service, m_runningService); if (m_runningService) { @@ -42,33 +26,49 @@ RESULT eNavigation::playService(const eServiceReference &service) return res; } -RESULT eNavigation::enqueueService(const eServiceReference &service) +RESULT eNavigation::connectEvent(const Slot2 &event, ePtr &connection) { - int doplay = m_playlist.empty(); - m_playlist.push_back(service); - if (doplay) - return playService(m_playlist.front()); + connection = new eConnection(this, m_event.connect(event)); return 0; } -RESULT eNavigation::connectEvent(const Slot2 &event, ePtr &connection) +RESULT eNavigation::getCurrentService(ePtr &service) { - connection = new eConnection(m_event.connect(event)); + service = m_runningService; return 0; } -RESULT eNavigation::getCurrentService(ePtr &service) +RESULT eNavigation::stopService(void) { - service = m_runningService; + /* check if there is a running service... */ + if (!m_runningService) + return 1; + /* send stop event */ + m_event(this, iPlayableService::evEnd); + + m_runningService->stop(); + /* kill service. */ + m_runningService = 0; + m_service_event_conn = 0; return 0; } +RESULT eNavigation::recordService(const eServiceReference &ref, ePtr &service) +{ + assert(m_servicehandler); + RESULT res = m_servicehandler->record(ref, service); + eDebug("record: %d", res); + if (res) + service = 0; + return res; +} + RESULT eNavigation::pause(int dop) { if (!m_runningService) return -1; ePtr p; - if (m_runningService->getIPausableService(p)) + if (m_runningService->pause(p)) return -2; if (dop) return p->pause(); @@ -78,11 +78,13 @@ RESULT eNavigation::pause(int dop) eNavigation::eNavigation(iServiceHandler *serviceHandler) { + assert(serviceHandler); m_servicehandler = serviceHandler; } eNavigation::~eNavigation() { + stopService(); } DEFINE_REF(eNavigation);