1 #include <lib/nav/core.h>
3 void eNavigation::serviceEvent(iPlayableService* service, int event)
5 if (service != m_runningService)
7 eDebug("nav: event for other service");
13 case iPlayableService::evEnd:
14 /* at first, kill the running service */
15 m_event(this, evStopService);
17 m_service_event_conn = 0;
18 /* our running main service stopped. remove it from playlist */
19 if (!m_playlist.empty())
20 m_playlist.erase(m_playlist.begin());
21 if (!m_playlist.empty())
24 res = playService(m_playlist.front());
26 m_event(this, evPlayFailed);
28 m_event(this, evPlaylistDone);
30 case iPlayableService::evStart:
31 m_event(this, evNewService);
38 RESULT eNavigation::playService(const eServiceReference &service)
40 assert(m_servicehandler);
41 RESULT res = m_servicehandler->play(service, m_runningService);
44 m_runningService->connectEvent(slot(*this, &eNavigation::serviceEvent), m_service_event_conn);
45 res = m_runningService->start();
50 RESULT eNavigation::enqueueService(const eServiceReference &service)
52 int doplay = m_playlist.empty();
53 m_playlist.push_back(service);
55 return playService(m_playlist.front());
59 RESULT eNavigation::connectEvent(const Slot2<void,eNavigation*,int> &event, ePtr<eConnection> &connection)
61 connection = new eConnection(this, m_event.connect(event));
65 RESULT eNavigation::getCurrentService(ePtr<iPlayableService> &service)
67 service = m_runningService;
71 RESULT eNavigation::pause(int dop)
73 if (!m_runningService)
75 ePtr<iPauseableService> p;
76 if (m_runningService->getIPausableService(p))
84 eNavigation::eNavigation(iServiceHandler *serviceHandler): ref(0)
86 assert(serviceHandler);
87 m_servicehandler = serviceHandler;
90 eNavigation::~eNavigation()
94 DEFINE_REF(eNavigation);