X-Git-Url: https://git.cweiske.de/enigma2.git/blobdiff_plain/ff84dc4ee5f57e24a0777930d5482ee4ff53da0e..2e2cf81de863a180f7d27dca89e5122e1eb0acaa:/lib/service/servicedvb.cpp diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index 51061c37..94833f44 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) @@ -271,6 +270,50 @@ int eDVBServiceList::compareLessEqual(const eServiceReference &a, const eService return m_query->compareLessEqual((const eServiceReferenceDVB&)a, (const eServiceReferenceDVB&)b); } +RESULT eDVBServiceList::startEdit(ePtr &res) +{ + if (m_parent.flags & eServiceReference::flagDirectory) // bouquet + { + ePtr db; + ePtr resm; + + if (eDVBResourceManager::getInstance(resm) || resm->getChannelList(db)) + return -1; + + // FIXME! + if (db->getBouquet(m_parent, (const eBouquet*&)m_bouquet) != 0) + return -1; + + res = this; + + return 0; + } + res = 0; + return -1; +} + +RESULT eDVBServiceList::addService(eServiceReference &ref) +{ + ASSERT(m_bouquet); +// return m_bouquet->addService(ref); + return -1; +} + +RESULT eDVBServiceList::removeService(eServiceReference &ref) +{ + ASSERT(m_bouquet); +// return m_bouquet->removeService(ref); + return -1; +} + +RESULT eDVBServiceList::moveService(eServiceReference &ref, int pos) +{ + ASSERT(m_bouquet); + +// return m_bouquet->moveService(ref, pos); + return -1; +} + RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr &ptr) { ePtr service; @@ -284,8 +327,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 +359,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) @@ -365,18 +422,16 @@ RESULT eServiceFactoryDVB::lookupService(ePtr &service, const eServ } eDVBServicePlay::eDVBServicePlay(const eServiceReference &ref, eDVBService *service): - m_reference(ref), m_dvb_service(service), m_service_handler(0) + m_reference(ref), m_dvb_service(service), m_service_handler(0), m_is_paused(0) { m_is_pvr = !ref.path.empty(); CONNECT(m_service_handler.serviceEvent, eDVBServicePlay::serviceEvent); CONNECT(m_event_handler.m_eit_changed, eDVBServicePlay::gotNewEvent); - eDebug("DVB start (play)"); } eDVBServicePlay::~eDVBServicePlay() { - eDebug("DVB stop (play)"); } void eDVBServicePlay::gotNewEvent() @@ -397,7 +452,6 @@ void eDVBServicePlay::gotNewEvent() void eDVBServicePlay::serviceEvent(int event) { - eDebug("service event %d", event); switch (event) { case eDVBServicePMTHandler::eventTuned: @@ -407,11 +461,16 @@ void eDVBServicePlay::serviceEvent(int event) { // eventStartedEventAcquisition m_event_handler.start(m_demux, ((eServiceReferenceDVB&)m_reference).getServiceID().get()); - } else - eDebug("no event data available :( "); + } // eventNoEvent break; } + case eDVBServicePMTHandler::eventTuneFailed: + { + eDebug("DVB service failed to tune"); + m_event((iPlayableService*)this, evTuneFailed); + break; + } case eDVBServicePMTHandler::eventNewProgramInfo: { int vpid = -1, apid = -1, pcrpid = -1; @@ -497,6 +556,7 @@ RESULT eDVBServicePlay::start() int r; eDebug("starting DVB service"); r = m_service_handler.tune((eServiceReferenceDVB&)m_reference); + eDebug("tune result: %d", r); m_event(this, evStart); return 0; } @@ -515,7 +575,12 @@ RESULT eDVBServicePlay::connectEvent(const Slot2 &ev RESULT eDVBServicePlay::pause(ePtr &ptr) { - // not yet possible, maybe later... + if (m_is_pvr) + { + ptr = this; + return 0; + } + ptr = 0; return -1; } @@ -545,11 +610,43 @@ RESULT eDVBServicePlay::getLength(pts_t &len) return pvr_channel->getLength(len); } +RESULT eDVBServicePlay::pause() +{ + if (!m_is_paused && m_decoder) + { + m_is_paused = 1; + return m_decoder->freeze(0); + } else + return -1; +} + +RESULT eDVBServicePlay::unpause() +{ + if (m_is_paused && m_decoder) + { + m_is_paused = 0; + return m_decoder->unfreeze(); + } else + return -1; +} + 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;