added nav core
[vuplus_dvbapp] / lib / nav / core.cpp
1 #include <lib/nav/core.h>
2
3 void eNavigation::serviceEvent(iPlayableService* service, int event)
4 {
5         if (service != m_runningService)
6         {
7                 eDebug("nav: event for other service");
8                 return;
9         }
10
11         switch (event)
12         {
13         case iPlayableService::evEnd:
14                         /* our running main service stopped. */
15                 if (!m_playlist.empty())
16                         m_playlist.erase(m_playlist.begin());
17                 if (!m_playlist.empty())
18                 {
19                         RESULT res;
20                         res = playService(m_playlist.front());
21                         if (res)
22                                 m_event(this, evPlayFailed);
23                 } else
24                         m_event(this, evPlaylistDone);
25                 break;
26         case iPlayableService::evStart:
27                 m_event(this, evNewService);
28                 break;
29         default:
30                 break;
31         }
32 }
33
34 RESULT eNavigation::playService(const eServiceReference &service)
35 {
36         RESULT res = m_servicehandler->play(service, m_runningService);
37         if (m_runningService)
38         {
39                 m_runningService->connectEvent(slot(*this, &eNavigation::serviceEvent), m_service_event_conn);
40                 res = m_runningService->start();
41         }
42         return res;
43 }
44
45 RESULT eNavigation::enqueueService(const eServiceReference &service)
46 {
47         int doplay = m_playlist.empty();
48         m_playlist.push_back(service);
49         if (doplay)
50                 return playService(m_playlist.front());
51         return 0;
52 }
53
54 RESULT eNavigation::connectEvent(const Slot2<void,eNavigation*,int> &event, ePtr<eConnection> &connection)
55 {
56         connection = new eConnection(m_event.connect(event));
57         return 0;
58 }
59
60 RESULT eNavigation::getCurrentService(ePtr<iPlayableService> &service)
61 {
62         service = m_runningService;
63         return 0;
64 }
65
66 RESULT eNavigation::pause(int dop)
67 {
68         if (!m_runningService)
69                 return -1;
70         ePtr<iPauseableService> p;
71         if (m_runningService->getIPausableService(p))
72                 return -2;
73         if (dop)
74                 return p->pause();
75         else
76                 return p->unpause();
77 }
78
79 eNavigation::eNavigation(iServiceHandler *serviceHandler)
80 {
81         m_servicehandler = serviceHandler;
82 }
83
84 eNavigation::~eNavigation()
85 {
86 }
87
88 DEFINE_REF(eNavigation);