From 32e4324b9b5e615a84885b9132505e4706ededfe Mon Sep 17 00:00:00 2001 From: Felix Domke Date: Sun, 9 Oct 2005 03:32:46 +0000 Subject: service: add sort of servicelist including all required layers --- lib/service/servicedvb.cpp | 54 ++++++++++++++++++++++++++++++++++++---------- 1 file changed, 43 insertions(+), 11 deletions(-) (limited to 'lib/service/servicedvb.cpp') diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index ca08d481..a29b77ce 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -36,6 +36,7 @@ RESULT eStaticServiceDVBPVRInformation::getName(const eServiceReference &ref, st { ASSERT(ref == m_ref); name = m_parser.m_name.size() ? m_parser.m_name : ref.path; + return 0; } int eStaticServiceDVBPVRInformation::getLength(const eServiceReference &ref) @@ -133,7 +134,7 @@ eDVBServiceList::~eDVBServiceList() { } -RESULT eDVBServiceList::getContent(std::list &list) +RESULT eDVBServiceList::startQuery() { ePtr db; ePtr res; @@ -150,30 +151,50 @@ RESULT eDVBServiceList::getContent(std::list &list) return err; } - ePtr query; - ePtr q; if (m_parent.path.size()) + { eDVBChannelQuery::compile(q, m_parent.path); + if (!q) + { + eDebug("compile query failed"); + return err; + } + } - if ((err = db->startQuery(query, q)) != 0) + if ((err = db->startQuery(m_query, q)) != 0) { eDebug("startQuery failed"); return err; } - + + return 0; +} + +RESULT eDVBServiceList::getContent(std::list &list) +{ eServiceReferenceDVB ref; - while (!query->getNextResult(ref)) + if (!m_query) + return -1; + + while (!m_query->getNextResult(ref)) list.push_back(ref); return 0; } -RESULT eDVBServiceList::getNext(eServiceReference &) +RESULT eDVBServiceList::getNext(eServiceReference &ref) { - /* implement me */ - return -1; + if (!m_query) + return -1; + + return m_query->getNextResult((eServiceReferenceDVB&)ref); +} + +int eDVBServiceList::compareLessEqual(const eServiceReference &a, const eServiceReference &b) +{ + return m_query->compareLessEqual((const eServiceReferenceDVB&)a, (const eServiceReferenceDVB&)b); } RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr &ptr) @@ -195,7 +216,14 @@ RESULT eServiceFactoryDVB::record(const eServiceReference &ref, ePtr &ptr) { - ptr = new eDVBServiceList(ref); + ePtr list = new eDVBServiceList(ref); + if (list->startQuery()) + { + ptr = 0; + return -1; + } + + ptr = list; return 0; } @@ -389,6 +417,7 @@ RESULT eDVBServicePlay::start() eDebug("starting DVB service"); r = m_service_handler.tune((eServiceReferenceDVB&)m_reference); m_event(this, evStart); + return 0; } RESULT eDVBServicePlay::stop() @@ -459,8 +488,11 @@ RESULT eDVBServicePlay::info(ePtr &ptr) RESULT eDVBServicePlay::getName(std::string &name) { if (m_dvb_service) + { m_dvb_service->getName(m_reference, name); - else + if (name.empty()) + name = "(...)"; + } else name = "DVB service"; return 0; } -- cgit v1.2.3