blob: b5c229c79665d5617d5f1d6ecb0f6778783cecdc (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
|
#include <lib/nav/core.h>
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<void,eNavigation*,int> &event, ePtr<eConnection> &connection)
{
connection = new eConnection(m_event.connect(event));
return 0;
}
RESULT eNavigation::getCurrentService(ePtr<iPlayableService> &service)
{
service = m_runningService;
return 0;
}
RESULT eNavigation::pause(int dop)
{
if (!m_runningService)
return -1;
ePtr<iPauseableService> 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);
|