X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/4bc08995411e21f3564f09e136809be68ddf96a8..a81eab44ddc3d7faad43f8434d04f3c55b81b880:/lib/service/servicefs.cpp diff --git a/lib/service/servicefs.cpp b/lib/service/servicefs.cpp index de75cc67..67b99c08 100644 --- a/lib/service/servicefs.cpp +++ b/lib/service/servicefs.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -12,16 +13,17 @@ #include -class eServiceFSInformation: public iServiceInformation +class eStaticServiceFSInformation: public iStaticServiceInformation { - DECLARE_REF; + DECLARE_REF(eStaticServiceFSInformation); public: RESULT getName(const eServiceReference &ref, std::string &name); + int getLength(const eServiceReference &ref) { return -1; } }; -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 +38,7 @@ eServiceFactoryFS::eServiceFactoryFS() if (sc) sc->addServiceFactory(eServiceFactoryFS::id, this); - m_service_information = new eServiceFSInformation(); + m_service_information = new eStaticServiceFSInformation(); } eServiceFactoryFS::~eServiceFactoryFS() @@ -69,7 +71,7 @@ RESULT eServiceFactoryFS::list(const eServiceReference &ref, ePtr &ptr) +RESULT eServiceFactoryFS::info(const eServiceReference &ref, ePtr &ptr) { ptr = m_service_information; return 0; @@ -81,6 +83,7 @@ DEFINE_REF(eServiceFS); eServiceFS::eServiceFS(const char *path): path(path) { + m_list_valid = 0; } eServiceFS::~eServiceFS() @@ -120,16 +123,36 @@ RESULT eServiceFS::getContent(std::list &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 init_eServiceFactoryFS(eAutoInitNumbers::service+1, "eServiceFactoryFS");