#include <sys/stat.h>
#include <unistd.h>
-
class eStaticServiceFSInformation: public iStaticServiceInformation
{
DECLARE_REF(eStaticServiceFSInformation);
public:
RESULT getName(const eServiceReference &ref, std::string &name);
+ int getLength(const eServiceReference &ref) { return -1; }
};
DEFINE_REF(eStaticServiceFSInformation);
RESULT eStaticServiceFSInformation::getName(const eServiceReference &ref, std::string &name)
{
name = ref.path;
+ return 0;
}
// eServiceFactoryFS
{
ePtr<eServiceCenter> sc;
- eServiceCenter::getInstance(sc);
+ eServiceCenter::getPrivInstance(sc);
if (sc)
sc->addServiceFactory(eServiceFactoryFS::id, this);
{
ePtr<eServiceCenter> sc;
- eServiceCenter::getInstance(sc);
+ eServiceCenter::getPrivInstance(sc);
if (sc)
sc->removeServiceFactory(eServiceFactoryFS::id);
}
return 0;
}
+RESULT eServiceFactoryFS::offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr)
+{
+ ptr = 0;
+ return -1;
+}
+
// eServiceFS
DEFINE_REF(eServiceFS);
{
}
-RESULT eServiceFS::getContent(std::list<eServiceReference> &list)
+RESULT eServiceFS::getContent(std::list<eServiceReference> &list, bool sorted)
{
DIR *d=opendir(path.c_str());
if (!d)
list.push_back(service);
} else
{
- /* FIIIIIX ME */
- if (filename.substr(filename.size()-3) == ".ts")
+ size_t e = filename.rfind('.');
+ std::string extension = (e != std::string::npos) ? filename.substr(e) : "";
+ int type = -1;
+
+ if (extension == ".ts")
+ type = eServiceFactoryDVB::id;
+ else if (extension == ".mp3")
+ type = 4097;
+ else if (extension == ".ogg")
+ type = 4097;
+ else if (extension == ".mpg")
+ type = 4097;
+ else if (extension == ".vob")
+ type = 4097;
+ else if (extension == ".wav" || extension == ".wave")
+ type = 4097;
+
+ if (type != -1)
{
- eServiceReference service(eServiceFactoryDVB::id,
+ eServiceReference service(type,
0,
filename);
service.data[0] = 0;
}
}
}
+ closedir(d);
+
+ if (sorted)
+ list.sort(iListableServiceCompare(this));
+
+ return 0;
+}
+
+RESULT eServiceFS::getContent(PyObject *list, bool sorted)
+{
+ if (!list || !PyList_Check(list))
+ return -1;
+
+ std::list<eServiceReference> tmplist;
+
+ getContent(tmplist, sorted);
+
+ if (sorted)
+ tmplist.sort(iListableServiceCompare(this));
+
+ for (std::list<eServiceReference>::iterator it(tmplist.begin());
+ it != tmplist.end(); ++it)
+ {
+ PyObject *refobj = New_eServiceReference(*it);
+ PyList_Append(list, refobj);
+ Py_DECREF(refobj);
+ }
+
return 0;
}
}
if (!m_list.size())
+ {
+ ptr = eServiceReference();
return -ERANGE;
+ }
ptr = m_list.front();
m_list.pop_front();
return 0;
}
+int eServiceFS::compareLessEqual(const eServiceReference &a, const eServiceReference &b)
+{
+ /* directories first */
+ if ((a.flags & ~b.flags) & eServiceReference::isDirectory)
+ return 1;
+ else if ((~a.flags & b.flags) & eServiceReference::isDirectory)
+ return 0;
+ /* sort by filename */
+ else
+ return a.path < b.path;
+}
+
+RESULT eServiceFS::startEdit(ePtr<iMutableServiceList> &res)
+{
+ res = 0;
+ return -1;
+}
+
eAutoInitPtr<eServiceFactoryFS> init_eServiceFactoryFS(eAutoInitNumbers::service+1, "eServiceFactoryFS");