1 #include <lib/base/eerror.h>
2 #include <lib/base/object.h>
5 #include <lib/service/servicefs.h>
6 #include <lib/service/service.h>
7 #include <lib/base/init_num.h>
8 #include <lib/base/init.h>
10 #include <sys/types.h>
16 eServiceFactoryFS::eServiceFactoryFS()
18 ePtr<eServiceCenter> sc;
20 eServiceCenter::getInstance(sc);
22 sc->addServiceFactory(eServiceFactoryFS::id, this);
25 eServiceFactoryFS::~eServiceFactoryFS()
27 ePtr<eServiceCenter> sc;
29 eServiceCenter::getInstance(sc);
31 sc->removeServiceFactory(eServiceFactoryFS::id);
34 DEFINE_REF(eServiceFactoryFS)
37 RESULT eServiceFactoryFS::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
43 RESULT eServiceFactoryFS::record(const eServiceReference &ref, ePtr<iRecordableService> &ptr)
49 RESULT eServiceFactoryFS::list(const eServiceReference &ref, ePtr<iListableService> &ptr)
51 ptr = new eServiceFS(ref.path.c_str());
57 DEFINE_REF(eServiceFS);
59 eServiceFS::eServiceFS(const char *path): path(path)
63 eServiceFS::~eServiceFS()
67 RESULT eServiceFS::getContent(std::list<eServiceReference> &list)
69 DIR *d=opendir(path.c_str());
72 while (dirent *e=readdir(d))
74 if (!(strcmp(e->d_name, ".") && strcmp(e->d_name, "..")))
80 filename += e->d_name;
83 if (::stat(filename.c_str(), &s) < 0)
86 if (S_ISDIR(s.st_mode))
89 if (S_ISDIR(s.st_mode))
91 eServiceReference service(eServiceFactoryFS::id,
92 eServiceReference::isDirectory|
93 eServiceReference::canDescent|eServiceReference::mustDescent|
94 eServiceReference::shouldSort|eServiceReference::sort1,
97 list.push_back(service);
100 eServiceReference service(eServiceFactoryFS::id,
101 eServiceReference::isDirectory|
102 eServiceReference::canDescent|eServiceReference::mustDescent|
103 eServiceReference::shouldSort|eServiceReference::sort1,
106 list.push_back(service);
112 eAutoInitPtr<eServiceFactoryFS> init_eServiceFactoryFS(eAutoInitNumbers::service+1, "eServiceFactoryFS");