update event info on service start
[enigma2.git] / lib / dvb / db.cpp
index a9f58c0f26cc6e84064904f37a7d96a6ec185f54..eb62f1fb73484aeb389fb73d2692a97bbc182d1a 100644 (file)
 
 DEFINE_REF(eDVBService);
 
-RESULT eBouquet::addService(const eServiceReference &ref)
+RESULT eBouquet::addService(const eServiceReference &ref, eServiceReference before)
 {
        list::iterator it =
                std::find(m_services.begin(), m_services.end(), ref);
        if ( it != m_services.end() )
                return -1;
-       m_services.push_back(ref);
+       if (before.valid())
+       {
+               it = std::find(m_services.begin(), m_services.end(), before);
+               m_services.insert(it, ref);
+       }
+       else
+               m_services.push_back(ref);
        return 0;
 }
 
@@ -450,7 +456,7 @@ void eDVBDB::reloadServicelist()
                                {
                                        int cid, val;
                                        sscanf(v.c_str(), "%02d%04x", &cid, &val);
-                                       s->setCacheEntry(cid,val);
+                                       s->setCacheEntry((eDVBService::cacheID)cid,val);
                                } else if (p == 'C')
                                {
                                        int val;
@@ -542,7 +548,7 @@ void eDVBDB::saveServicelist()
                // write cached pids
                for (int x=0; x < eDVBService::cacheMax; ++x)
                {
-                       int entry = i->second->getCacheEntry(x);
+                       int entry = i->second->getCacheEntry((eDVBService::cacheID)x);
                        if (entry != -1)
                                fprintf(f, ",c:%02d%04x", x, entry);
                }