more pid cache stuff
[enigma2.git] / lib / service / servicefs.cpp
index de75cc6..b0d5392 100644 (file)
@@ -4,6 +4,7 @@
 #include <errno.h>
 #include <lib/service/servicefs.h>
 #include <lib/service/service.h>
+#include <lib/service/servicedvb.h>
 #include <lib/base/init_num.h>
 #include <lib/base/init.h>
 #include <dirent.h>
 #include <unistd.h>
 
 
-class eServiceFSInformation: public iServiceInformation
+class eStaticServiceFSInformation: public iStaticServiceInformation
 {
-       DECLARE_REF;
+       DECLARE_REF(eStaticServiceFSInformation);
 public:
        RESULT getName(const eServiceReference &ref, std::string &name);
 };
 
-DEFINE_REF(eServiceFSInformation);
+DEFINE_REF(eStaticServiceFSInformation);
 
-RESULT eServiceFSInformation::getName(const eServiceReference &ref, std::string &name)
+RESULT eStaticServiceFSInformation::getName(const eServiceReference &ref, std::string &name)
 {
        name = ref.path;
 }
@@ -36,7 +37,7 @@ eServiceFactoryFS::eServiceFactoryFS()
        if (sc)
                sc->addServiceFactory(eServiceFactoryFS::id, this);
        
-       m_service_information = new eServiceFSInformation();
+       m_service_information = new eStaticServiceFSInformation();
 }
 
 eServiceFactoryFS::~eServiceFactoryFS()
@@ -69,7 +70,7 @@ RESULT eServiceFactoryFS::list(const eServiceReference &ref, ePtr<iListableServi
        return 0;
 }
 
-RESULT eServiceFactoryFS::info(const eServiceReference &ref, ePtr<iServiceInformation> &ptr)
+RESULT eServiceFactoryFS::info(const eServiceReference &ref, ePtr<iStaticServiceInformation> &ptr)
 {
        ptr = m_service_information;
        return 0;
@@ -81,6 +82,7 @@ DEFINE_REF(eServiceFS);
 
 eServiceFS::eServiceFS(const char *path): path(path)
 {
+       m_list_valid = 0;
 }
 
 eServiceFS::~eServiceFS()
@@ -120,16 +122,36 @@ RESULT eServiceFS::getContent(std::list<eServiceReference> &list)
                        list.push_back(service);
                } else
                {
-                       eServiceReference service(eServiceFactoryFS::id, 
-                               eServiceReference::isDirectory|
-                               eServiceReference::canDescent|eServiceReference::mustDescent|
-                               eServiceReference::shouldSort|eServiceReference::sort1,
-                               filename);
-                       service.data[0] = 0;
-                       list.push_back(service);
+                               /* FIIIIIX ME */
+                       if (filename.substr(filename.size()-3) == ".ts")
+                       {
+                               eServiceReference service(eServiceFactoryDVB::id,
+                                       0,
+                                       filename);
+                               service.data[0] = 0;
+                               list.push_back(service);
+                       }
                }
        }
        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");