All pastes #1658496 Raw Edit

Stuff

public text v1 · immutable
#1658496 ·published 2009-11-05 16:17 UTC
rendered paste body
Index: libs/libmythtv/tvosdmenuentry.h
===================================================================
--- libs/libmythtv/tvosdmenuentry.h	(revision 22742)
+++ libs/libmythtv/tvosdmenuentry.h	(working copy)
@@ -63,7 +63,7 @@
         TVOSDMenuEntry* FindEntry(QString category);
 
     private:
-        void GetEntriesFromDB(void);
+        int GetEntriesFromDB(void);
         void InitDefaultEntries(void);
 
         QList<TVOSDMenuEntry*> curMenuEntries;
Index: libs/libmythtv/tvosdmenuentry.cpp
===================================================================
--- libs/libmythtv/tvosdmenuentry.cpp	(revision 22742)
+++ libs/libmythtv/tvosdmenuentry.cpp	(working copy)
@@ -238,54 +238,67 @@
     curMenuEntries.append(new TVOSDMenuEntry(
         "SLEEP",              1,  1,  1,  1, "Sleep"));
 
-    GetEntriesFromDB();
-    if (GetCount() != curMenuEntries.count())
+    int preload_cnt = curMenuEntries.size();
+    int loaded_cnt  = GetEntriesFromDB();
+    if (preload_cnt != loaded_cnt)
         UpdateDB();
 }
 
 int TVOSDMenuEntryList::GetCount(void)
 {
-    MSqlQuery query(MSqlQuery::InitCon());
-    if (!query.isConnected())
-        return curMenuEntries.count();
+    return (int) curMenuEntries.size();
+}
 
-    query.prepare ("SELECT COUNT(osdcategory) FROM tvosdmenu;");
-    if (query.exec() && query.isActive() && query.size() > 0)
+// Returns the number of entries intialized from database.
+int TVOSDMenuEntryList::GetEntriesFromDB(void)
+{
+    typedef QList<TVOSDMenuEntry*>::iterator Lit;
+    QMap<QString,Lit> catmap;
+    Lit it = curMenuEntries.begin();
+    QString catlist("");
+    for (; it != curMenuEntries.end(); ++it)
     {
-        query.next();
-        return query.value(0).toUInt();
+        QString cat = (*it)->GetCategory();
+        catlist += QString("'%1',").arg(cat);
+        catmap[cat] = it;
     }
 
-    MythDB::DBError(LOC + "GetCount()", query);
-    return 0;
-}
+    if (catlist.isEmpty())
+        return 0;
 
-void TVOSDMenuEntryList::GetEntriesFromDB(void)
-{
+    catlist = catlist.left(catlist.length() - 1);
     MSqlQuery query(MSqlQuery::InitCon());
-    if (!query.isConnected())
-        return;
+    query.prepare(
+        QString(
+            "SELECT osdcategory, livetv, recorded, video, dvd "
+            "FROM tvosdmenu "
+            "WHERE osdcategory IN (%1)").arg(catlist));
 
-    TVOSDMenuEntry *entry = NULL;
-    QString osdcategory;
-    QListIterator<TVOSDMenuEntry *> cm = GetIterator();
-    while (cm.hasNext())
+    if (!query.exec())
     {
-        entry = cm.next();
-        osdcategory = entry->GetCategory();
-        query.prepare("SELECT livetv, recorded, video, dvd "
-                    "FROM tvosdmenu WHERE osdcategory = :OSDCATEGORY;");
-        query.bindValue(":OSDCATEGORY", osdcategory);
+        MythDB::DBError("TVOSDMenuEntryList::GetEntriesFromDB()", query);
+        return 0;
+    }
 
-        if (query.exec() && query.isActive() && query.size() == 1)
+    int cnt = 0;
+    while (query.next())
+    {
+        QString cat = query.value(0).toString();
+        QMap<QString,Lit>::iterator mit = catmap.find(cat);
+        if (mit == catmap.end())
         {
-            query.next();
-            entry->UpdateEntry(query.value(0).toInt(),
-                               query.value(1).toInt(),
-                               query.value(2).toInt(),
-                               query.value(3).toInt());
+            VERBOSE(VB_IMPORTANT, QString("TVOSDMenuEntryList, Error: ") +
+                    QString("Unable to find category '%1'").arg(cat));
+            continue;
         }
+
+        (**mit)->UpdateEntry(query.value(1).toInt(),
+                             query.value(2).toInt(),
+                             query.value(3).toInt(),
+                             query.value(4).toInt());
+        cnt++;
     }
+    return cnt;
 }
 
 void TVOSDMenuEntryList::UpdateDB(void)