X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/d9ee52e4f0fbe9a1ae00d0e66f9e6f0a07fa319f..b2ec733c0227ae072b8d3b19bfb9fd98e2b6961e:/lib/nav/core.cpp diff --git a/lib/nav/core.cpp b/lib/nav/core.cpp index 10d18e32..2dfe630d 100644 --- a/lib/nav/core.cpp +++ b/lib/nav/core.cpp @@ -14,11 +14,10 @@ void eNavigation::serviceEvent(iPlayableService* service, int event) case iPlayableService::evEnd: assert(m_playlist); /* we need to have a playlist */ - /* at first, kill the running service */ - m_event(this, evStopService); - m_runningService = 0; - m_service_event_conn = 0; - /* our running main service stopped. identify what to do next. */ + /* at first, kill the running service */ + stopService(); + + /* our running main service stopped. identify what to do next. */ /* unless the playlist current position is invalid (because there was */ /* playlist, for example when the service was engaged with playService */ @@ -41,6 +40,9 @@ void eNavigation::serviceEvent(iPlayableService* service, int event) case iPlayableService::evStart: m_event(this, evNewService); break; + case iPlayableService::evUpdatedEventInfo: + m_event(this, evUpdatedEventInfo); + break; default: break; } @@ -48,6 +50,8 @@ void eNavigation::serviceEvent(iPlayableService* service, int event) RESULT eNavigation::playService(const eServiceReference &service) { + stopService(); + assert(m_servicehandler); RESULT res = m_servicehandler->play(service, m_runningService); if (m_runningService) @@ -97,6 +101,45 @@ RESULT eNavigation::getPlaylist(ePtr &playlist) return 0; } +RESULT eNavigation::stopService(void) +{ + /* check if there is a running service... */ + if (!m_runningService) + return 1; + /* send stop event */ + m_event(this, evStopService); + + /* kill service. */ + m_runningService = 0; + m_service_event_conn = 0; + return 0; +} + +RESULT eNavigation::recordService(const eServiceReference &service) +{ + if (m_recordingService) + endRecording(); + + assert(m_servicehandler); + RESULT res = m_servicehandler->record(service, m_recordingService); + if (m_recordingService) + { + res = m_recordingService->start(); + } + if (res) + m_recordingService = 0; + return res; +} + +RESULT eNavigation::endRecording() +{ + if (!m_recordingService) + return -1; + m_recordingService->stop(); + m_recordingService = 0; + return 0; +} + RESULT eNavigation::pause(int dop) { if (!m_runningService)