X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/02da1f586ef7945fef385e6d4743ef53441bc2fa..defa1a765f48ec880b36b14a247b89649553c2ec:/lib/service/servicefs.cpp diff --git a/lib/service/servicefs.cpp b/lib/service/servicefs.cpp index 91ae44e3..b0d53922 100644 --- a/lib/service/servicefs.cpp +++ b/lib/service/servicefs.cpp @@ -4,6 +4,7 @@ #include #include #include +#include #include #include #include @@ -11,15 +12,32 @@ #include #include + +class eStaticServiceFSInformation: public iStaticServiceInformation +{ + DECLARE_REF(eStaticServiceFSInformation); +public: + RESULT getName(const eServiceReference &ref, std::string &name); +}; + +DEFINE_REF(eStaticServiceFSInformation); + +RESULT eStaticServiceFSInformation::getName(const eServiceReference &ref, std::string &name) +{ + name = ref.path; +} + // eServiceFactoryFS -eServiceFactoryFS::eServiceFactoryFS(): ref(0) +eServiceFactoryFS::eServiceFactoryFS() { ePtr sc; eServiceCenter::getInstance(sc); if (sc) sc->addServiceFactory(eServiceFactoryFS::id, this); + + m_service_information = new eStaticServiceFSInformation(); } eServiceFactoryFS::~eServiceFactoryFS() @@ -52,12 +70,19 @@ RESULT eServiceFactoryFS::list(const eServiceReference &ref, ePtr &ptr) +{ + ptr = m_service_information; + return 0; +} + // eServiceFS DEFINE_REF(eServiceFS); -eServiceFS::eServiceFS(const char *path): ref(0), path(path) +eServiceFS::eServiceFS(const char *path): path(path) { + m_list_valid = 0; } eServiceFS::~eServiceFS() @@ -74,7 +99,7 @@ RESULT eServiceFS::getContent(std::list &list) if (!(strcmp(e->d_name, ".") && strcmp(e->d_name, ".."))) continue; - eString filename; + std::string filename; filename = path; filename += e->d_name; @@ -97,16 +122,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");