aboutsummaryrefslogtreecommitdiff
path: root/lib/nav
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2004-05-23 10:39:21 +0000
committerFelix Domke <tmbinc@elitedvb.net>2004-05-23 10:39:21 +0000
commitc0f5089ea04bd04fe25148e712fa62cd49dc17da (patch)
tree4459439ba4fd730d69fd0216b43f41b6ebf010c3 /lib/nav
parent676c3e4b7ba3a01f5d69bed1b5b2c861e84a6211 (diff)
downloadenigma2-c0f5089ea04bd04fe25148e712fa62cd49dc17da.tar.gz
enigma2-c0f5089ea04bd04fe25148e712fa62cd49dc17da.zip
added nav core
Diffstat (limited to 'lib/nav')
-rw-r--r--lib/nav/Makefile.am8
-rw-r--r--lib/nav/core.cpp88
-rw-r--r--lib/nav/core.h37
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