diff options
| author | Felix Domke <tmbinc@elitedvb.net> | 2004-05-23 10:39:21 +0000 |
|---|---|---|
| committer | Felix Domke <tmbinc@elitedvb.net> | 2004-05-23 10:39:21 +0000 |
| commit | c0f5089ea04bd04fe25148e712fa62cd49dc17da (patch) | |
| tree | 4459439ba4fd730d69fd0216b43f41b6ebf010c3 /lib/nav | |
| parent | 676c3e4b7ba3a01f5d69bed1b5b2c861e84a6211 (diff) | |
| download | enigma2-c0f5089ea04bd04fe25148e712fa62cd49dc17da.tar.gz enigma2-c0f5089ea04bd04fe25148e712fa62cd49dc17da.zip | |
added nav core
Diffstat (limited to 'lib/nav')
| -rw-r--r-- | lib/nav/Makefile.am | 8 | ||||
| -rw-r--r-- | lib/nav/core.cpp | 88 | ||||
| -rw-r--r-- | lib/nav/core.h | 37 |
3 files changed, 133 insertions, 0 deletions
diff --git a/lib/nav/Makefile.am b/lib/nav/Makefile.am new file mode 100644 index 00000000..a180e0bc --- /dev/null +++ b/lib/nav/Makefile.am @@ -0,0 +1,8 @@ +INCLUDES = \ + -I$(top_srcdir)/include + +noinst_LIBRARIES = libenigma_nav.a + +libenigma_nav_a_SOURCES = \ + 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 <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); diff --git a/lib/nav/core.h b/lib/nav/core.h new file mode 100644 index 00000000..056c150b --- /dev/null +++ b/lib/nav/core.h @@ -0,0 +1,37 @@ +#ifndef __nav_core_h +#define __nav_core_h + +#include <lib/base/object.h> +#include <lib/service/iservice.h> +#include <connection.h> + +class eNavigation: public iObject, public Object +{ + DECLARE_REF; +private: + ePtr<iPlayableService> m_runningService; + ePtr<iServiceHandler> m_servicehandler; + Signal2<void,eNavigation*,int> m_event; + ePtr<eConnection> m_service_event_conn; + void serviceEvent(iPlayableService* service, int event); + + std::list<eServiceReference> m_playlist; +public: + enum + { + evNewService, + evPlayFailed, + evPlaylistDone + }; + RESULT playService(const eServiceReference &service); + RESULT enqueueService(const eServiceReference &service); + RESULT connectEvent(const Slot2<void,eNavigation*,int> &event, ePtr<eConnection> &connection); +/* int connectServiceEvent(const Slot1<void,iPlayableService*,int> &event, ePtr<eConnection> &connection); */ + RESULT getCurrentService(ePtr<iPlayableService> &service); + + RESULT pause(int p); + eNavigation(iServiceHandler *serviceHandler); + virtual ~eNavigation(); +}; + +#endif |
