small servicelist speedup
authorAndreas Monzner <andreas.monzner@multimedia-labs.de>
Tue, 21 Nov 2006 20:17:09 +0000 (20:17 +0000)
committerAndreas Monzner <andreas.monzner@multimedia-labs.de>
Tue, 21 Nov 2006 20:17:09 +0000 (20:17 +0000)
lib/service/listboxservice.cpp
lib/service/listboxservice.h
lib/service/servicedvb.cpp
lib/service/servicedvb.h

index 32b9007..f514507 100644 (file)
@@ -51,12 +51,10 @@ void eListboxServiceContent::setRoot(const eServiceReference &root, bool justSet
                return;
        assert(m_service_center);
        
-       ePtr<iListableService> lst;
-       if (m_service_center->list(m_root, lst))
+       if (m_service_center->list(m_root, m_lst))
                eDebug("no list available!");
-       else
-               if (lst->getContent(m_list))
-                       eDebug("getContent failed");
+       else if (m_lst->getContent(m_list))
+               eDebug("getContent failed");
 
        FillFinished();
 }
@@ -227,10 +225,11 @@ void eListboxServiceContent::setPixmap(int type, ePtr<gPixmap> &pic)
 
 void eListboxServiceContent::sort()
 {
-       ePtr<iListableService> lst;
-       if (!m_service_center->list(m_root, lst))
+       if (!m_lst)
+               m_service_center->list(m_root, m_lst);
+       if (m_lst)
        {
-               m_list.sort(iListableServiceCompare(lst));
+               m_list.sort(iListableServiceCompare(m_lst));
                        /* FIXME: is this really required or can we somehow keep the current entry? */
                cursorHome();
                if (m_listbox)
@@ -304,13 +303,12 @@ int eListboxServiceContent::setCurrentMarked(bool state)
                m_listbox->entryChanged(m_cursor_number);
                if (!state)
                {
-                       ePtr<iListableService> lst;
-                       if (m_service_center->list(m_root, lst))
-                               eDebug("no list available!");
-                       else
+                       if (!m_lst)
+                               m_service_center->list(m_root, m_lst);
+                       if (m_lst)
                        {
                                ePtr<iMutableServiceList> list;
-                               if (lst->startEdit(list))
+                               if (m_lst->startEdit(list))
                                        eDebug("no editable list");
                                else
                                {
@@ -329,6 +327,8 @@ int eListboxServiceContent::setCurrentMarked(bool state)
                                        }
                                }
                        }
+                       else
+                               eDebug("no list available!");
                }
        }
 
index 59d4d92..8623336 100644 (file)
@@ -106,6 +106,7 @@ private:
        
        eSize m_itemsize;
        ePtr<iServiceHandler> m_service_center;
+       ePtr<iListableService> m_lst;
        
        eServiceReference m_root;
 
index d516795..71c2ae6 100644 (file)
@@ -382,7 +382,7 @@ RESULT eDVBServiceList::getContent(std::list<eServiceReference> &list, bool sort
        
        if (!m_query)
                return -1;
-       
+
        while (!m_query->getNextResult(ref))
                list.push_back(ref);
 
@@ -489,11 +489,6 @@ RESULT eDVBServiceList::getNext(eServiceReference &ref)
        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 eDVBServiceList::startEdit(ePtr<iMutableServiceList> &res)
 {
        if (m_parent.flags & eServiceReference::flagDirectory) // bouquet
index 5e0cf0b..27f48b5 100644 (file)
@@ -44,7 +44,7 @@ public:
        PyObject *getContent(const char* formatstr, bool sorted=false);
        RESULT getContent(std::list<eServiceReference> &list, bool sorted=false);
        RESULT getNext(eServiceReference &ptr);
-       int compareLessEqual(const eServiceReference &a, const eServiceReference &b);
+       inline int compareLessEqual(const eServiceReference &a, const eServiceReference &b);
        
        RESULT startEdit(ePtr<iMutableServiceList> &);
        RESULT flushChanges();
@@ -63,6 +63,11 @@ private:
        eBouquet *m_bouquet;
 };
 
+inline int eDVBServiceList::compareLessEqual(const eServiceReference &a, const eServiceReference &b)
+{
+       return m_query->compareLessEqual((const eServiceReferenceDVB&)a, (const eServiceReferenceDVB&)b);
+}
+
 class eDVBServiceBase: public iFrontendInformation
 {
 protected: