rendered paste bodyIndex: 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)