use video stc for display. make skipping look a bit better.
[enigma2.git] / lib / dvb / db.cpp
index 8892e4e186a5974108de543db7b727a931da5a83..33a422f8182dea26af3417cd578d7fffcfd266e0 100644 (file)
@@ -1,6 +1,8 @@
 #include <errno.h>
 #include <lib/dvb/db.h>
+#include <lib/dvb/dvb.h>
 #include <lib/dvb/frontend.h>
+#include <lib/dvb/epgcache.h>
 #include <lib/base/eerror.h>
 #include <lib/base/estring.h>
 #include <dvbsi++/service_description_section.h>
@@ -138,8 +140,8 @@ void eDVBService::genSortName()
 
 RESULT eDVBService::getName(const eServiceReference &ref, std::string &name)
 {
-       if (!ref.name.empty())
-               name = ref.name;
+       if (!ref.name.empty())  
+               name = ref.name; // use renamed service name..
        else if (!m_service_name.empty())
                name = m_service_name;
        else
@@ -147,9 +149,24 @@ RESULT eDVBService::getName(const eServiceReference &ref, std::string &name)
        return 0;
 }
 
-int eDVBService::getLength(const eServiceReference &ref)
+RESULT eDVBService::getEvent(const eServiceReference &ref, ePtr<eServiceEvent> &ptr, time_t start_time)
 {
-       return -1;
+       return eEPGCache::getInstance()->lookupEventTime(ref, start_time, ptr);
+}
+
+bool eDVBService::isPlayable(const eServiceReference &ref, const eServiceReference &ignore)
+{
+       ePtr<eDVBResourceManager> res_mgr;
+       if ( eDVBResourceManager::getInstance( res_mgr ) )
+               eDebug("isPlayble... no res manager!!");
+       else
+       {
+               eDVBChannelID chid, chid_ignore;
+               ((const eServiceReferenceDVB&)ref).getChannelID(chid);
+               ((const eServiceReferenceDVB&)ignore).getChannelID(chid_ignore);
+               return res_mgr->canAllocateChannel(chid, chid_ignore);
+       }
+       return false;
 }
 
 int eDVBService::checkFilter(const eServiceReferenceDVB &ref, const eDVBChannelQuery &query)
@@ -837,15 +854,12 @@ eDVBDBSatellitesQuery::eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference
                        {
                                eServiceReferenceDVB ref;
                                ref.setDVBNamespace(dvbnamespace);
+                               ref.flags=eServiceReference::flagDirectory;
                                char buf[64];
-// TODO get real satellite name..
-// but i dont like to parse the satellites.xml here.. and in the python part
-                               snprintf(buf, 64, "Services - %d", dvbnamespace>>16);
-                               ref.name=buf;
                                snprintf(buf, 64, "(satellitePosition == %d) && ", dvbnamespace>>16);
+
                                ref.path=buf+source.path;
                                unsigned int pos=ref.path.find("FROM");
-                               ref.flags=eServiceReference::flagDirectory;
                                ref.path.erase(pos);
                                ref.path+="ORDER BY name";
 //                             eDebug("ref.path now %s", ref.path.c_str());
@@ -856,8 +870,6 @@ eDVBDBSatellitesQuery::eDVBDBSatellitesQuery(eDVBDB *db, const eServiceReference
                                ref.path.erase(pos+5);
                                ref.path+="PROVIDERS ORDER BY name";
 //                             eDebug("ref.path now %s", ref.path.c_str());
-                               snprintf(buf, 64, "Providers - %d", dvbnamespace>>16);
-                               ref.name=buf;
                                m_list.push_back(ref);
                        }
                }