From d5e22a275d2ecdf3205bfefa927be6e125ac27b8 Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Fri, 29 Jul 2005 01:09:09 +0000 Subject: - add movie selector --- lib/service/iservice.h | 4 ++++ lib/service/servicedvb.cpp | 6 ++++++ lib/service/servicedvb.h | 1 + lib/service/servicefs.cpp | 19 +++++++++++++++++++ lib/service/servicefs.h | 4 ++++ 5 files changed, 34 insertions(+) (limited to 'lib/service') diff --git a/lib/service/iservice.h b/lib/service/iservice.h index 4592a971..7e24f9c1 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -208,7 +208,11 @@ TEMPLATE_TYPEDEF(ePtr, iRecordableServicePtr); class iListableService: public iObject { public: + /* legacy interface: get a list */ virtual RESULT getContent(std::list &list)=0; + + /* new, shiny interface: streaming. */ + virtual RESULT getNext(eServiceReference &ptr)=0; }; TEMPLATE_TYPEDEF(ePtr, iListableServicePtr); diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index a32ce326..5bd25f67 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -78,6 +78,12 @@ RESULT eDVBServiceList::getContent(std::list &list) return 0; } +RESULT eDVBServiceList::getNext(eServiceReference &) +{ + /* implement me */ + return -1; +} + RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr &ptr) { ePtr service; diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index e9489cd5..5c750430 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -34,6 +34,7 @@ private: public: virtual ~eDVBServiceList(); RESULT getContent(std::list &list); + RESULT getNext(eServiceReference &ptr); }; class eDVBServicePlay: public iPlayableService, public Object, public iServiceInformation diff --git a/lib/service/servicefs.cpp b/lib/service/servicefs.cpp index 9db85028..739dd0a6 100644 --- a/lib/service/servicefs.cpp +++ b/lib/service/servicefs.cpp @@ -81,6 +81,7 @@ DEFINE_REF(eServiceFS); eServiceFS::eServiceFS(const char *path): path(path) { + m_list_valid = 0; } eServiceFS::~eServiceFS() @@ -132,4 +133,22 @@ RESULT eServiceFS::getContent(std::list &list) return 0; } +RESULT eServiceFS::getNext(eServiceReference &ptr) +{ + if (!m_list_valid) + { + m_list_valid = 1; + int res = getContent(m_list); + if (res) + return res; + } + + if (!m_list.size()) + return -ERANGE; + + ptr = m_list.front(); + m_list.pop_front(); + return 0; +} + eAutoInitPtr init_eServiceFactoryFS(eAutoInitNumbers::service+1, "eServiceFactoryFS"); diff --git a/lib/service/servicefs.h b/lib/service/servicefs.h index 61fcb4a9..e87b53a2 100644 --- a/lib/service/servicefs.h +++ b/lib/service/servicefs.h @@ -27,10 +27,14 @@ private: std::string path; friend class eServiceFactoryFS; eServiceFS(const char *path); + + int m_list_valid; + std::list m_list; public: virtual ~eServiceFS(); RESULT getContent(std::list &list); + RESULT getNext(eServiceReference &ptr); }; #endif -- cgit v1.2.3