From: Andreas Monzner Date: Tue, 21 Nov 2006 20:17:09 +0000 (+0000) Subject: small servicelist speedup X-Git-Url: http://code.vuplus.com/gitweb/?p=vuplus_dvbapp;a=commitdiff_plain;h=265fb595e8767536096985bcfca7d0c36e61b5a0 small servicelist speedup --- diff --git a/lib/service/listboxservice.cpp b/lib/service/listboxservice.cpp index 32b9007..f514507 100644 --- a/lib/service/listboxservice.cpp +++ b/lib/service/listboxservice.cpp @@ -51,12 +51,10 @@ void eListboxServiceContent::setRoot(const eServiceReference &root, bool justSet return; assert(m_service_center); - ePtr 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 &pic) void eListboxServiceContent::sort() { - ePtr 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 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 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!"); } } diff --git a/lib/service/listboxservice.h b/lib/service/listboxservice.h index 59d4d92..8623336 100644 --- a/lib/service/listboxservice.h +++ b/lib/service/listboxservice.h @@ -106,6 +106,7 @@ private: eSize m_itemsize; ePtr m_service_center; + ePtr m_lst; eServiceReference m_root; diff --git a/lib/service/servicedvb.cpp b/lib/service/servicedvb.cpp index d516795..71c2ae6 100644 --- a/lib/service/servicedvb.cpp +++ b/lib/service/servicedvb.cpp @@ -382,7 +382,7 @@ RESULT eDVBServiceList::getContent(std::list &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 &res) { if (m_parent.flags & eServiceReference::flagDirectory) // bouquet diff --git a/lib/service/servicedvb.h b/lib/service/servicedvb.h index 5e0cf0b..27f48b5 100644 --- a/lib/service/servicedvb.h +++ b/lib/service/servicedvb.h @@ -44,7 +44,7 @@ public: PyObject *getContent(const char* formatstr, bool sorted=false); RESULT getContent(std::list &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 &); 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: