From c0f5089ea04bd04fe25148e712fa62cd49dc17da Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Sun, 23 May 2004 10:39:21 +0000 Subject: added nav core --- lib/nav/core.cpp | 88 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100644 lib/nav/core.cpp (limited to 'lib/nav/core.cpp') diff --git a/lib/nav/core.cpp b/lib/nav/core.cpp new file mode 100644 index 00000000..b5c229c7 --- /dev/null +++ b/lib/nav/core.cpp @@ -0,0 +1,88 @@ +#include + +void eNavigation::serviceEvent(iPlayableService* service, int event) +{ + if (service != m_runningService) + { + eDebug("nav: event for other service"); + 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; + } +} + +RESULT eNavigation::playService(const eServiceReference &service) +{ + RESULT res = m_servicehandler->play(service, m_runningService); + if (m_runningService) + { + m_runningService->connectEvent(slot(*this, &eNavigation::serviceEvent), m_service_event_conn); + res = m_runningService->start(); + } + return res; +} + +RESULT eNavigation::enqueueService(const eServiceReference &service) +{ + int doplay = m_playlist.empty(); + m_playlist.push_back(service); + if (doplay) + return playService(m_playlist.front()); + return 0; +} + +RESULT eNavigation::connectEvent(const Slot2 &event, ePtr &connection) +{ + connection = new eConnection(m_event.connect(event)); + return 0; +} + +RESULT eNavigation::getCurrentService(ePtr &service) +{ + service = m_runningService; + return 0; +} + +RESULT eNavigation::pause(int dop) +{ + if (!m_runningService) + return -1; + ePtr p; + if (m_runningService->getIPausableService(p)) + return -2; + if (dop) + return p->pause(); + else + return p->unpause(); +} + +eNavigation::eNavigation(iServiceHandler *serviceHandler) +{ + m_servicehandler = serviceHandler; +} + +eNavigation::~eNavigation() +{ +} + +DEFINE_REF(eNavigation); -- cgit v1.2.3