aboutsummaryrefslogtreecommitdiff
path: root/lib/service
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-07-29 01:09:09 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-07-29 01:09:09 +0000
commitd5e22a275d2ecdf3205bfefa927be6e125ac27b8 (patch)
tree91b5fda2f2dacce923ec56ea52fecad6f94de873 /lib/service
parent1d9b83e416ec6471e53844c80626dbf22a411e90 (diff)
downloadenigma2-d5e22a275d2ecdf3205bfefa927be6e125ac27b8.tar.gz
enigma2-d5e22a275d2ecdf3205bfefa927be6e125ac27b8.zip
- add movie selector
Diffstat (limited to 'lib/service')
-rw-r--r--lib/service/iservice.h4
-rw-r--r--lib/service/servicedvb.cpp6
-rw-r--r--lib/service/servicedvb.h1
-rw-r--r--lib/service/servicefs.cpp19
-rw-r--r--lib/service/servicefs.h4
5 files changed, 34 insertions, 0 deletions
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<iRecordableService>, iRecordableServicePtr);
class iListableService: public iObject
{
public:
+ /* legacy interface: get a list */
virtual RESULT getContent(std::list<eServiceReference> &list)=0;
+
+ /* new, shiny interface: streaming. */
+ virtual RESULT getNext(eServiceReference &ptr)=0;
};
TEMPLATE_TYPEDEF(ePtr<iListableService>, 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<eServiceReference> &list)
return 0;
}
+RESULT eDVBServiceList::getNext(eServiceReference &)
+{
+ /* implement me */
+ return -1;
+}
+
RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
{
ePtr<eDVBService> 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<eServiceReference> &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<eServiceReference> &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<eServiceFactoryFS> 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<eServiceReference> m_list;
public:
virtual ~eServiceFS();
RESULT getContent(std::list<eServiceReference> &list);
+ RESULT getNext(eServiceReference &ptr);
};
#endif