fix satellite order in channellist
[enigma2.git] / lib / dvb / db.cpp
index 38a062a2a5cd1dc562462996bc575e2c911c1193..d40b4b101bf571ed15dcd9dc181242e424ddd544 100644 (file)
@@ -1,5 +1,6 @@
 #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>
@@ -148,10 +149,24 @@ RESULT eDVBService::getName(const eServiceReference &ref, std::string &name)
        return 0;
 }
 
-RESULT eDVBService::getEvent(const eServiceReference &ref, ePtr<eServiceEvent> &ptr)
+RESULT eDVBService::getEvent(const eServiceReference &ref, ePtr<eServiceEvent> &ptr, time_t start_time)
 {
-       time_t t=-1;
-       return eEPGCache::getInstance()->lookupEventTime(ref, t, ptr);
+       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)
@@ -264,7 +279,8 @@ void eDVBDB::load()
                                sat.symbol_rate = symbol_rate;
                                sat.polarisation = polarisation;
                                sat.fec = fec;
-                               sat.orbital_position = orbital_position;
+                               sat.orbital_position =
+                                       orbital_position < 0 ? orbital_position + 3600 : orbital_position;
                                sat.inversion = inversion;
                                feparm->setDVBS(sat);
                        } else if (line[1]=='t')
@@ -403,7 +419,8 @@ void eDVBDB::save()
                {
                        fprintf(f, "\ts %d:%d:%d:%d:%d:%d\n",
                                sat.frequency, sat.symbol_rate,
-                               sat.polarisation, sat.fec, sat.orbital_position,
+                               sat.polarisation, sat.fec,
+                               sat.orbital_position > 1800 ? sat.orbital_position - 3600 : sat.orbital_position,
                                sat.inversion);
                }
                if (!ch.m_frontendParameters->getDVBT(ter))
@@ -814,7 +831,15 @@ RESULT eDVBDBListQuery::getNextResult(eServiceReferenceDVB &ref)
 int eDVBDBListQuery::compareLessEqual(const eServiceReferenceDVB &a, const eServiceReferenceDVB &b)
 {
        if ( m_query->m_sort == eDVBChannelQuery::tSatellitePosition )
-               return (a.getDVBNamespace().get() >> 16) < (b.getDVBNamespace().get() >> 16);
+       {
+               int x = (a.getDVBNamespace().get() >> 16);
+               int y = (b.getDVBNamespace().get() >> 16);
+               if ( x > 1800 )
+                       x -= 3600;
+               if ( y > 1800 )
+                       y -= 3600;
+               return x < y;
+       }
        return a.name < b.name;
 }
 
@@ -839,15 +864,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());
@@ -858,8 +880,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);
                        }
                }