From: Felix Domke Date: Thu, 29 Sep 2005 22:12:32 +0000 (+0000) Subject: add offline operations to services X-Git-Tag: 2.6.0~5544 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/d0899514fa9495013cb73c8ead8c5a5baaf49111 add offline operations to services --- diff --git a/lib/service/service.cpp b/lib/service/service.cpp index 0a4a8012..3a59d444 100644 --- a/lib/service/service.cpp +++ b/lib/service/service.cpp @@ -101,6 +101,17 @@ RESULT eServiceCenter::info(const eServiceReference &ref, ePtrsecond->info(ref, ptr); } +RESULT eServiceCenter::offlineOperations(const eServiceReference &ref, ePtr &ptr) +{ + std::map >::iterator i = handler.find(ref.type); + if (i == handler.end()) + { + ptr = 0; + return -1; + } + return i->second->offlineOperations(ref, ptr); +} + RESULT eServiceCenter::addServiceFactory(int id, iServiceHandler *hnd) { handler.insert(std::pair >(id, hnd)); diff --git a/lib/service/service.h b/lib/service/service.h index 2dd01acc..e08c2ada 100644 --- a/lib/service/service.h +++ b/lib/service/service.h @@ -24,6 +24,7 @@ public: RESULT record(const eServiceReference &, iRecordableServicePtr &ptr); RESULT list(const eServiceReference &, iListableServicePtr &ptr); RESULT info(const eServiceReference &, ePtr &ptr); + RESULT offlineOperations(const eServiceReference &, ePtr &ptr); // eServiceCenter static RESULT getInstance(eServiceCenterPtr &ptr) { ptr = instance; return 0; } diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index cb5b4b72..64e62cac 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -54,6 +54,55 @@ int eStaticServiceDVBPVRInformation::getLength(const eServiceReference &ref) return len / 90000; } + + +class eDVBPVRServiceOfflineOperations: public iServiceOfflineOperations +{ + DECLARE_REF(eDVBPVRServiceOfflineOperations); + eServiceReferenceDVB m_ref; +public: + eDVBPVRServiceOfflineOperations(const eServiceReference &ref); + + RESULT deleteFromDisk(int simulate); + RESULT getListOfFilenames(std::list &); +}; + +DEFINE_REF(eDVBPVRServiceOfflineOperations); + +eDVBPVRServiceOfflineOperations::eDVBPVRServiceOfflineOperations(const eServiceReference &ref): m_ref((const eServiceReferenceDVB&)ref) +{ +} + +RESULT eDVBPVRServiceOfflineOperations::deleteFromDisk(int simulate) +{ + if (simulate) + return 0; + else + { + std::list res; + if (getListOfFilenames(res)) + return -1; + + /* TODO: deferred removing.. */ + for (std::list::iterator i(res.begin()); i != res.end(); ++i) + { + eDebug("Removing %s...", i->c_str()); + ::unlink(i->c_str()); + } + + return 0; + } +} + +RESULT eDVBPVRServiceOfflineOperations::getListOfFilenames(std::list &res) +{ + res.clear(); + res.push_back(m_ref.path); + return 0; +} + + + DEFINE_REF(eServiceFactoryDVB) eServiceFactoryDVB::eServiceFactoryDVB() @@ -169,6 +218,12 @@ RESULT eServiceFactoryDVB::info(const eServiceReference &ref, ePtr &ptr) +{ + ptr = 0; + return -1; +} + RESULT eServiceFactoryDVB::lookupService(ePtr &service, const eServiceReference &ref) { // TODO: handle the listing itself diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index 1dd66e40..accdd20d 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -20,6 +20,7 @@ public: RESULT record(const eServiceReference &, ePtr &ptr); RESULT list(const eServiceReference &, ePtr &ptr); RESULT info(const eServiceReference &, ePtr &ptr); + RESULT offlineOperations(const eServiceReference &, ePtr &ptr); private: RESULT lookupService(ePtr &ptr, const eServiceReference &ref); }; diff --git a/lib/service/servicefs.cpp b/lib/service/servicefs.cpp index 67b99c08..5b5957eb 100644 --- a/lib/service/servicefs.cpp +++ b/lib/service/servicefs.cpp @@ -12,7 +12,6 @@ #include #include - class eStaticServiceFSInformation: public iStaticServiceInformation { DECLARE_REF(eStaticServiceFSInformation); @@ -77,6 +76,12 @@ RESULT eServiceFactoryFS::info(const eServiceReference &ref, ePtr &ptr) +{ + ptr = 0; + return -1; +} + // eServiceFS DEFINE_REF(eServiceFS); @@ -148,7 +153,10 @@ RESULT eServiceFS::getNext(eServiceReference &ptr) } if (!m_list.size()) + { + ptr = eServiceReference(); return -ERANGE; + } ptr = m_list.front(); m_list.pop_front(); diff --git a/lib/service/servicefs.h b/lib/service/servicefs.h index e87b53a2..73bfd985 100644 --- a/lib/service/servicefs.h +++ b/lib/service/servicefs.h @@ -16,6 +16,7 @@ public: RESULT record(const eServiceReference &, ePtr &ptr); RESULT list(const eServiceReference &, ePtr &ptr); RESULT info(const eServiceReference &, ePtr &ptr); + RESULT offlineOperations(const eServiceReference &, ePtr &ptr); private: ePtr m_service_information; }; diff --git a/lib/service/servicemp3.cpp b/lib/service/servicemp3.cpp index 549a288a..b0e30f7a 100644 --- a/lib/service/servicemp3.cpp +++ b/lib/service/servicemp3.cpp @@ -57,6 +57,13 @@ RESULT eServiceFactoryMP3::info(const eServiceReference &ref, ePtr &ptr) +{ + ptr = 0; + return -1; +} + + // eStaticServiceMP3Info diff --git a/lib/service/servicemp3.h b/lib/service/servicemp3.h index 92117857..558fd818 100644 --- a/lib/service/servicemp3.h +++ b/lib/service/servicemp3.h @@ -18,6 +18,7 @@ public: RESULT record(const eServiceReference &, ePtr &ptr); RESULT list(const eServiceReference &, ePtr &ptr); RESULT info(const eServiceReference &, ePtr &ptr); + RESULT offlineOperations(const eServiceReference &, ePtr &ptr); private: ePtr m_service_info; };