From: Felix Domke Date: Sun, 13 Nov 2005 04:31:21 +0000 (+0000) Subject: add SeekRelative stuff X-Git-Tag: 2.6.0~5272 X-Git-Url: https://git.cweiske.de/enigma2.git/commitdiff_plain/4cd594ce7621755ce7a81a3f2bd6a31e5323e2a3 add SeekRelative stuff --- diff --git a/lib/service/iservice.h b/lib/service/iservice.h index f9a26722..15631fda 100644 --- a/lib/service/iservice.h +++ b/lib/service/iservice.h @@ -207,6 +207,8 @@ class iSeekableService: public iObject public: virtual RESULT getLength(pts_t &SWIG_OUTPUT)=0; virtual RESULT seekTo(pts_t to)=0; + enum { dirForward = +1, dirBackward = -1 }; + virtual RESULT seekRelative(int direction, pts_t to)=0; virtual RESULT getPlayPosition(pts_t &SWIG_OUTPUT)=0; }; @@ -290,6 +292,8 @@ public: // TODO: additional stuff, like a conversion interface? }; +TEMPLATE_TYPEDEF(ePtr, iServiceOfflineOperationsPtr); + class iServiceHandler: public iObject { public: diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index f3215d82..76b0089c 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -173,11 +173,10 @@ RESULT eDVBPVRServiceOfflineOperations::getListOfFilenames(std::list q; - if (m_parent.path.size()) + if (!m_parent.path.empty()) { eDVBChannelQuery::compile(q, m_parent.path); if (!q) @@ -284,8 +283,15 @@ RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr &ptr) { - ptr = new eDVBServiceRecord((eServiceReferenceDVB&)ref); - return 0; + if (ref.path.empty()) + { + ptr = new eDVBServiceRecord((eServiceReferenceDVB&)ref); + return 0; + } else + { + ptr = 0; + return -1; + } } RESULT eServiceFactoryDVB::list(const eServiceReference &ref, ePtr &ptr) @@ -309,7 +315,7 @@ RESULT eServiceFactoryDVB::info(const eServiceReference &ref, ePtr &ptr) +RESULT eServiceFactoryDVB::offlineOperations(const eServiceReference &ref, ePtr &ptr) { - ptr = 0; - return -1; + if (ref.path.empty()) + { + ptr = 0; + return -1; + } else + { + ptr = new eDVBPVRServiceOfflineOperations(ref); + return 0; + } } RESULT eServiceFactoryDVB::lookupService(ePtr &service, const eServiceReference &ref) @@ -578,6 +591,18 @@ RESULT eDVBServicePlay::seekTo(pts_t to) return -1; } +RESULT eDVBServicePlay::seekRelative(int direction, pts_t to) +{ + eDebug("eDVBServicePlay::seekRelative: jump %d, %lld", direction, to); + + ePtr pvr_channel; + + if (m_service_handler.getPVRChannel(pvr_channel)) + return -1; + + return pvr_channel->seekToPosition(SEEK_CUR, to); +} + RESULT eDVBServicePlay::getPlayPosition(pts_t &pos) { ePtr pvr_channel; diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index f47c3906..9ebd2773 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -62,6 +62,7 @@ public: // iSeekableService RESULT getLength(pts_t &len); RESULT seekTo(pts_t to); + RESULT seekRelative(int direction, pts_t to); RESULT getPlayPosition(pts_t &pos); // iServiceInformation