Index: programs/mythfrontend/playbackbox.cpp
===================================================================
--- programs/mythfrontend/playbackbox.cpp	(revision 19614)
+++ programs/mythfrontend/playbackbox.cpp	(working copy)
@@ -605,10 +605,27 @@
     SetTextFromMap(this, infoMap);
     m_currentMap = infoMap;
 
+    static const char *disp_flags[] =
+    {
+        "transcoding",
+        "commflagging",
+    };
+    const bool disp_flag_stat[] =
+    {
+        !JobQueue::IsJobQueuedOrRunning(
+            JOB_TRANSCODE, pginfo->chanid, pginfo->recstartts),
+        !JobQueue::IsJobQueuedOrRunning(
+            JOB_COMMFLAG, pginfo->chanid, pginfo->recstartts),
+    };
+
+    for (uint i = 0; i < sizeof(disp_flags) / sizeof(char*); i++)
+        item->DisplayState(disp_flag_stat[i]?"yes":"no", disp_flags[i]);
+
     if (m_previewImage)
     {
         m_previewImage->SetVisible(true);
         QString imagefile = getPreviewImage(pginfo);
+        item->SetImage(imagefile, "preview");
         m_previewImage->SetFilename(imagefile);
         m_previewImage->Load();
     }
@@ -818,20 +835,17 @@
     }
 }
 
-void PlaybackBox::updateRecList(MythUIButtonListItem *item)
+void PlaybackBox::updateRecList(MythUIButtonListItem *sel_item)
 {
-    if (!item)
+    if (!sel_item)
         return;
 
-    QString groupname = item->GetData().toString();
+    QString groupname = sel_item->GetData().toString();
 
     updateGroupInfo(groupname);
 
-    if (m_currentGroup == groupname)
-    {
-        if (!m_needUpdate)
-            return;
-    }
+    if ((m_currentGroup == groupname) && !m_needUpdate)
+        return;
 
     m_needUpdate = false;
 
@@ -843,146 +857,117 @@
     if (groupname == "default")
         groupname = "";
 
-    ProgramList *progList = NULL;
-    progList = &m_progLists[groupname];
-
-    if (!progList)
+    ProgramMap::iterator pmit = m_progLists.find(groupname);
+    if (pmit == m_progLists.end())
         return;
 
-    QString tempSubTitle;
-    QString tempShortDate;
-    QString tempLongDate;
-    QString tempTime;
-    QString tempSize;
+    ProgramList &progList = *pmit;
 
-    QString match;
+    LCD    *lcddev   = LCD::Get();
+    QString lcdTitle = "Recordings";
+    if (lcddev && GetFocusWidget() != m_groupList)
+        lcdTitle = " <<" + groupname;
 
-    LCD *lcddev = LCD::Get();
-    QString lcdTitle;
     QList<LCDMenuItem> lcdItems;
 
-    if (lcddev)
+    static const char *disp_flags[] =
     {
-        if (GetFocusWidget() == m_groupList)
-            lcdTitle = "Recordings";
-        else
-            lcdTitle = " <<" + groupname;
-    }
+        "playlist",
+        "watched",
+    };
+    bool disp_flag_stat[sizeof(disp_flags)/sizeof(char*)];
 
-    if (!progList->isEmpty())
+    ProgramList::iterator it = progList.begin();
+    for (; it != progList.end(); it++)
     {
-        ProgramInfo *progInfo;
-        ProgramList::iterator it;
-        for (it = progList->begin(); it != progList->end(); it++)
-        {
-            progInfo = *it;
+        MythUIButtonListItem *item = new MythUIButtonListItem(
+            m_recordingList, "", qVariantFromValue(*it));
 
-            item = new MythUIButtonListItem(m_recordingList, "",
-                                                qVariantFromValue(progInfo));
-
-            if (groupname != progInfo->title)
+        QString tempSubTitle;
+        if (groupname != (*it)->title)
+        {
+            tempSubTitle = (*it)->title;
+            if (!(*it)->subtitle.trimmed().isEmpty())
             {
-                tempSubTitle = progInfo->title;
-                if (!progInfo->subtitle.trimmed().isEmpty())
-                    tempSubTitle = QString("%1 - \"%2\"")
-                                    .arg(tempSubTitle).arg(progInfo->subtitle);
+                tempSubTitle = QString("%1 - \"%2\"")
+                    .arg(tempSubTitle).arg((*it)->subtitle);
             }
-            else
-            {
-                tempSubTitle = progInfo->subtitle;
-                if (tempSubTitle.trimmed().isEmpty())
-                    tempSubTitle = progInfo->title;
-            }
+        }
+        else
+        {
+            tempSubTitle = (*it)->subtitle;
+            if (tempSubTitle.trimmed().isEmpty())
+                tempSubTitle = (*it)->title;
+        }
 
-            tempShortDate = (progInfo->recstartts).toString(m_formatShortDate);
-            tempLongDate = (progInfo->recstartts).toString(m_formatLongDate);
-            tempTime = (progInfo->recstartts).toString(m_formatTime);
+        QString tempShortDate = ((*it)->recstartts).toString(m_formatShortDate);
+        QString tempLongDate  = ((*it)->recstartts).toString(m_formatLongDate);
+        QString tempTime      = ((*it)->recstartts).toString(m_formatTime);
+        QString tempSize      = tr("%1 GB")
+            .arg((*it)->filesize * (1.0/(1024.0*1024.0*1024.0)), 0, 'f', 2);
 
-            long long size = progInfo->filesize;
-            tempSize.sprintf("%0.2f GB", size / 1024.0 / 1024.0 / 1024.0);
+        QString state = ((*it)->recstatus == rsRecording) ?
+            QString("running") : QString::null;
 
-            QString state;
+        if ((((*it)->recstatus != rsRecording) &&
+             ((*it)->availableStatus != asAvailable) &&
+             ((*it)->availableStatus != asNotYetAvailable)) ||
+            (m_player && m_player->IsSameProgram(0, *it)))
+        {
+            state = "disabled";
+        }
 
-            if (progInfo->recstatus == rsRecording)
-                state = "running";
+        if (lcddev && !(GetFocusWidget() == m_groupList))
+        {
+            QString lcdSubTitle = tempSubTitle;
+            QString lcdStr = QString("%1 %2")
+                .arg(lcdSubTitle.replace('"', "'")).arg(tempShortDate);
+            LCDMenuItem lcdItem(m_currentItem == *it, NOTCHECKABLE, lcdStr);
+            lcdItems.push_back(lcdItem);
+        }
 
-            if (((progInfo->recstatus != rsRecording) &&
-                    (progInfo->availableStatus != asAvailable) &&
-                    (progInfo->availableStatus != asNotYetAvailable)) ||
-                (m_player && m_player->IsSameProgram(0, progInfo)))
-                state = "disabled";
+        item->SetText(tempSubTitle,       "titlesubtitle", state);
+        item->SetText((*it)->title,       "title",         state);
+        item->SetText((*it)->subtitle,    "subtitle",      state);
+        item->SetText((*it)->description, "description",   state);
+        item->SetText(tempLongDate,       "longdate",      state);
+        item->SetText(tempShortDate,      "shortdate",     state);
+        item->SetText(tempTime,           "time",          state);
+        item->SetText(tempSize,           "size",          state);
 
-            if (lcddev && !(GetFocusWidget() == m_groupList))
-            {
-                QString lcdSubTitle = tempSubTitle;
-                lcdItems.append(LCDMenuItem(m_currentItem == progInfo,
-                                NOTCHECKABLE, QString("%1 %2")
-                                            .arg(lcdSubTitle.replace('"', "'"))
-                                            .arg(tempShortDate)));
-            }
+        item->DisplayState(state, "status");
 
-            QString imagefile = getPreviewImage(progInfo);
-            item->SetImage(imagefile, "preview");
+        disp_flag_stat[0] = !m_playList.filter((*it)->MakeUniqueKey()).empty();
+        disp_flag_stat[1] = (*it)->programflags & FL_WATCHED;
 
-            item->SetText(tempSubTitle, "titlesubtitle", state);
-            item->SetText(progInfo->title, "title", state);
-            item->SetText(progInfo->subtitle, "subtitle", state);
-            item->SetText(progInfo->description, "description", state);
-            item->SetText(tempLongDate, "longdate", state);
-            item->SetText(tempShortDate, "shortdate", state);
-            item->SetText(tempTime, "time", state);
-            item->SetText(tempSize, "size", state);
+        for (uint i = 0; i < sizeof(disp_flags) / sizeof(char*); i++)
+            item->DisplayState(disp_flag_stat[i]?"yes":"no", disp_flags[i]);
 
-            item->DisplayState(state, "status");
-
-            if (m_playList.filter(progInfo->MakeUniqueKey()).size())
-                item->DisplayState("yes", "playlist");
-            else
-                item->DisplayState("no", "playlist");
-
-            if (progInfo->programflags & FL_WATCHED)
-                item->DisplayState("yes", "watched");
-            else
-                item->DisplayState("no", "watched");
-
-            if (!JobQueue::IsJobQueuedOrRunning(JOB_TRANSCODE,
-                                       progInfo->chanid, progInfo->recstartts))
-                item->DisplayState("yes", "transcoding");
-            else
-                item->DisplayState("no", "transcoding");
-
-            if (!JobQueue::IsJobQueuedOrRunning(JOB_COMMFLAG,
-                                       progInfo->chanid, progInfo->recstartts))
-                item->DisplayState("yes", "commflagging");
-            else
-                item->DisplayState("no", "commflagging");
-
-
-             //item->DisplayState("", "expiry");
-
-            if (m_currentItem &&
-                (m_currentItem->chanid == progInfo->chanid) &&
-                (m_currentItem->recstartts == progInfo->recstartts))
-                    m_recordingList->SetItemCurrent(item);
+        if (m_currentItem &&
+            (m_currentItem->chanid     == (*it)->chanid) &&
+            (m_currentItem->recstartts == (*it)->recstartts))
+        {
+            m_recordingList->SetItemCurrent(item);
         }
     }
 
     if (lcddev && !lcdItems.isEmpty())
         lcddev->switchToMenu(lcdItems, lcdTitle);
 
-    if (m_noRecordingsText && !progList->isEmpty())
+    if (m_noRecordingsText)
     {
-        m_progCacheLock.lock();
-        if (m_progCache && !m_progCache->empty())
-            m_noRecordingsText->SetText(tr(
-                "There are no recordings in your current view"));
+        if (!progList.isEmpty())
+            m_noRecordingsText->SetVisible(false);
         else
-            m_noRecordingsText->SetText(tr(
-                "There are no recordings available"));
-        m_progCacheLock.unlock();
+        {
+            QMutexLocker locker(&m_progCacheLock);
+            QString txt = (m_progCache && !m_progCache->empty()) ?
+                tr("There are no recordings in your current view") :
+                tr("There are no recordings available");
+            m_noRecordingsText->SetText(txt);
+            m_noRecordingsText->SetVisible(true);
+        }
     }
-
-    m_noRecordingsText->SetVisible(progList->isEmpty());
 }
 
 void PlaybackBox::listChanged(void)
