return err;
}
- const eBouquet *bouquet=0;
+ eBouquet *bouquet=0;
if ((err = db->getBouquet(ref, bouquet)) != 0)
{
eDebug("eStaticServiceDVBBouquetInformation::getName failed.. getBouquet failed!");
{
res.clear();
res.push_back(m_ref.path);
+ res.push_back(m_ref.path + ".meta");
return 0;
}
-
-
DEFINE_REF(eServiceFactoryDVB)
eServiceFactoryDVB::eServiceFactoryDVB()
ePtr<eDVBChannelQuery> q;
- if (m_parent.path.size())
+ if (!m_parent.path.empty())
{
eDVBChannelQuery::compile(q, m_parent.path);
if (!q)
return m_query->compareLessEqual((const eServiceReferenceDVB&)a, (const eServiceReferenceDVB&)b);
}
+RESULT eDVBServiceList::startEdit(ePtr<iMutableServiceList> &res)
+{
+ if (m_parent.flags & eServiceReference::flagDirectory) // bouquet
+ {
+ ePtr<iDVBChannelList> db;
+ ePtr<eDVBResourceManager> resm;
+
+ if (eDVBResourceManager::getInstance(resm) || resm->getChannelList(db))
+ return -1;
+
+ if (db->getBouquet(m_parent, m_bouquet) != 0)
+ return -1;
+
+ res = this;
+
+ return 0;
+ }
+ res = 0;
+ return -1;
+}
+
+RESULT eDVBServiceList::addService(eServiceReference &ref)
+{
+ if (!m_bouquet)
+ return -1;
+ return m_bouquet->addService(ref);
+}
+
+RESULT eDVBServiceList::removeService(eServiceReference &ref)
+{
+ if (!m_bouquet)
+ return -1;
+ return m_bouquet->removeService(ref);
+}
+
+RESULT eDVBServiceList::moveService(eServiceReference &ref, int pos)
+{
+ if (!m_bouquet)
+ return -1;
+ return m_bouquet->moveService(ref, pos);
+}
+
RESULT eServiceFactoryDVB::play(const eServiceReference &ref, ePtr<iPlayableService> &ptr)
{
ePtr<eDVBService> service;
RESULT eServiceFactoryDVB::record(const eServiceReference &ref, ePtr<iRecordableService> &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<iListableService> &ptr)
ptr = new eStaticServiceDVBBouquetInformation;
return 0;
}
- else if (ref.path.size())
+ else if (!ref.path.empty())
{
ptr = new eStaticServiceDVBPVRInformation(ref);
return 0;
}
}
-RESULT eServiceFactoryDVB::offlineOperations(const eServiceReference &, ePtr<iServiceOfflineOperations> &ptr)
+RESULT eServiceFactoryDVB::offlineOperations(const eServiceReference &ref, ePtr<iServiceOfflineOperations> &ptr)
{
- ptr = 0;
- return -1;
+ if (ref.path.empty())
+ {
+ ptr = 0;
+ return -1;
+ } else
+ {
+ ptr = new eDVBPVRServiceOfflineOperations(ref);
+ return 0;
+ }
}
RESULT eServiceFactoryDVB::lookupService(ePtr<eDVBService> &service, const eServiceReference &ref)
}
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();
RESULT eDVBServicePlay::pause(ePtr<iPauseableService> &ptr)
{
- // not yet possible, maybe later...
+ if (m_is_pvr)
+ {
+ ptr = this;
+ return 0;
+ }
+
ptr = 0;
return -1;
}
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<iDVBPVRChannel> 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<iDVBPVRChannel> pvr_channel;