aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorFelix Domke <tmbinc@elitedvb.net>2005-09-29 22:12:32 +0000
committerFelix Domke <tmbinc@elitedvb.net>2005-09-29 22:12:32 +0000
commitd0899514fa9495013cb73c8ead8c5a5baaf49111 (patch)
tree85967f5ac0aa005cea828373fba8e429ae41e69b /lib
parent2ee3a3e99c59ec6441cb26f083124726f12e1fa5 (diff)
downloadenigma2-d0899514fa9495013cb73c8ead8c5a5baaf49111.tar.gz
enigma2-d0899514fa9495013cb73c8ead8c5a5baaf49111.zip
add offline operations to services
Diffstat (limited to 'lib')
-rw-r--r--lib/service/service.cpp11
-rw-r--r--lib/service/service.h1
-rw-r--r--lib/service/servicedvb.cpp55
-rw-r--r--lib/service/servicedvb.h1
-rw-r--r--lib/service/servicefs.cpp10
-rw-r--r--lib/service/servicefs.h1
-rw-r--r--lib/service/servicemp3.cpp7
-rw-r--r--lib/service/servicemp3.h1
8 files changed, 86 insertions, 1 deletions
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, ePtr<iStaticServiceInf
return i->second->info(ref, ptr);
}
+RESULT eServiceCenter::offlineOperations(const eServiceReference &ref, ePtr<iServiceOfflineOperations> &ptr)
+{
+ std::map<int,ePtr<iServiceHandler> >::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<int,ePtr<iServiceHandler> >(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<iStaticServiceInformation> &ptr);
+ RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &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<std::string> &);
+};
+
+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<std::string> res;
+ if (getListOfFilenames(res))
+ return -1;
+
+ /* TODO: deferred removing.. */
+ for (std::list<std::string>::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<std::string> &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<iStaticServic
}
}
+RESULT eServiceFactoryDVB::offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr)
+{
+ ptr = 0;
+ return -1;
+}
+
RESULT eServiceFactoryDVB::lookupService(ePtr<eDVBService> &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<iRecordableService> &ptr);
RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
+ RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr);
private:
RESULT lookupService(ePtr<eDVBService> &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 <sys/stat.h>
#include <unistd.h>
-
class eStaticServiceFSInformation: public iStaticServiceInformation
{
DECLARE_REF(eStaticServiceFSInformation);
@@ -77,6 +76,12 @@ RESULT eServiceFactoryFS::info(const eServiceReference &ref, ePtr<iStaticService
return 0;
}
+RESULT eServiceFactoryFS::offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &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<iRecordableService> &ptr);
RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
+ RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr);
private:
ePtr<iStaticServiceInformation> 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<iStaticServic
return 0;
}
+RESULT eServiceFactoryMP3::offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &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<iRecordableService> &ptr);
RESULT list(const eServiceReference &, ePtr<iListableService> &ptr);
RESULT info(const eServiceReference &, ePtr<iStaticServiceInformation> &ptr);
+ RESULT offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr);
private:
ePtr<eStaticServiceMP3Info> m_service_info;
};