Ticket #6093: playback-box-fast-v1.patch
File playback-box-fast-v1.patch, 10.5 KB (added by , 17 years ago) |
---|
-
programs/mythfrontend/playbackbox.cpp
605 605 SetTextFromMap(this, infoMap); 606 606 m_currentMap = infoMap; 607 607 608 static const char *disp_flags[] = 609 { 610 "transcoding", 611 "commflagging", 612 }; 613 const bool disp_flag_stat[] = 614 { 615 !JobQueue::IsJobQueuedOrRunning( 616 JOB_TRANSCODE, pginfo->chanid, pginfo->recstartts), 617 !JobQueue::IsJobQueuedOrRunning( 618 JOB_COMMFLAG, pginfo->chanid, pginfo->recstartts), 619 }; 620 621 for (uint i = 0; i < sizeof(disp_flags) / sizeof(char*); i++) 622 item->DisplayState(disp_flag_stat[i]?"yes":"no", disp_flags[i]); 623 608 624 if (m_previewImage) 609 625 { 610 626 m_previewImage->SetVisible(true); 611 627 QString imagefile = getPreviewImage(pginfo); 628 item->SetImage(imagefile, "preview"); 612 629 m_previewImage->SetFilename(imagefile); 613 630 m_previewImage->Load(); 614 631 } … … 818 835 } 819 836 } 820 837 821 void PlaybackBox::updateRecList(MythUIButtonListItem * item)838 void PlaybackBox::updateRecList(MythUIButtonListItem *sel_item) 822 839 { 823 if (! item)840 if (!sel_item) 824 841 return; 825 842 826 QString groupname = item->GetData().toString();843 QString groupname = sel_item->GetData().toString(); 827 844 828 845 updateGroupInfo(groupname); 829 846 830 if (m_currentGroup == groupname) 831 { 832 if (!m_needUpdate) 833 return; 834 } 847 if ((m_currentGroup == groupname) && !m_needUpdate) 848 return; 835 849 836 850 m_needUpdate = false; 837 851 … … 843 857 if (groupname == "default") 844 858 groupname = ""; 845 859 846 ProgramList *progList = NULL; 847 progList = &m_progLists[groupname]; 848 849 if (!progList) 860 ProgramMap::iterator pmit = m_progLists.find(groupname); 861 if (pmit == m_progLists.end()) 850 862 return; 851 863 852 QString tempSubTitle; 853 QString tempShortDate; 854 QString tempLongDate; 855 QString tempTime; 856 QString tempSize; 864 ProgramList &progList = *pmit; 857 865 858 QString match; 866 LCD *lcddev = LCD::Get(); 867 QString lcdTitle = "Recordings"; 868 if (lcddev && GetFocusWidget() != m_groupList) 869 lcdTitle = " <<" + groupname; 859 870 860 LCD *lcddev = LCD::Get();861 QString lcdTitle;862 871 QList<LCDMenuItem> lcdItems; 863 872 864 if (lcddev)873 static const char *disp_flags[] = 865 874 { 866 if (GetFocusWidget() == m_groupList) 867 lcdTitle = "Recordings"; 868 else 869 lcdTitle = " <<" + groupname; 870 } 875 "playlist", 876 "watched", 877 }; 878 bool disp_flag_stat[sizeof(disp_flags)/sizeof(char*)]; 871 879 872 if (!progList->isEmpty()) 880 ProgramList::iterator it = progList.begin(); 881 for (; it != progList.end(); it++) 873 882 { 874 ProgramInfo *progInfo; 875 ProgramList::iterator it; 876 for (it = progList->begin(); it != progList->end(); it++) 877 { 878 progInfo = *it; 883 MythUIButtonListItem *item = new MythUIButtonListItem( 884 m_recordingList, "", qVariantFromValue(*it)); 879 885 880 item = new MythUIButtonListItem(m_recordingList, "", 881 qVariantFromValue(progInfo)); 882 883 if (groupname != progInfo->title) 886 QString tempSubTitle; 887 if (groupname != (*it)->title) 888 { 889 tempSubTitle = (*it)->title; 890 if (!(*it)->subtitle.trimmed().isEmpty()) 884 891 { 885 tempSubTitle = progInfo->title; 886 if (!progInfo->subtitle.trimmed().isEmpty()) 887 tempSubTitle = QString("%1 - \"%2\"") 888 .arg(tempSubTitle).arg(progInfo->subtitle); 892 tempSubTitle = QString("%1 - \"%2\"") 893 .arg(tempSubTitle).arg((*it)->subtitle); 889 894 } 890 else 891 { 892 tempSubTitle = progInfo->subtitle; 893 if (tempSubTitle.trimmed().isEmpty()) 894 tempSubTitle = progInfo->title; 895 } 895 } 896 else 897 { 898 tempSubTitle = (*it)->subtitle; 899 if (tempSubTitle.trimmed().isEmpty()) 900 tempSubTitle = (*it)->title; 901 } 896 902 897 tempShortDate = (progInfo->recstartts).toString(m_formatShortDate); 898 tempLongDate = (progInfo->recstartts).toString(m_formatLongDate); 899 tempTime = (progInfo->recstartts).toString(m_formatTime); 903 QString tempShortDate = ((*it)->recstartts).toString(m_formatShortDate); 904 QString tempLongDate = ((*it)->recstartts).toString(m_formatLongDate); 905 QString tempTime = ((*it)->recstartts).toString(m_formatTime); 906 QString tempSize = tr("%1 GB") 907 .arg((*it)->filesize * (1.0/(1024.0*1024.0*1024.0)), 0, 'f', 2); 900 908 901 long long size = progInfo->filesize;902 tempSize.sprintf("%0.2f GB", size / 1024.0 / 1024.0 / 1024.0);909 QString state = ((*it)->recstatus == rsRecording) ? 910 QString("running") : QString::null; 903 911 904 QString state; 912 if ((((*it)->recstatus != rsRecording) && 913 ((*it)->availableStatus != asAvailable) && 914 ((*it)->availableStatus != asNotYetAvailable)) || 915 (m_player && m_player->IsSameProgram(0, *it))) 916 { 917 state = "disabled"; 918 } 905 919 906 if (progInfo->recstatus == rsRecording) 907 state = "running"; 920 if (lcddev && !(GetFocusWidget() == m_groupList)) 921 { 922 QString lcdSubTitle = tempSubTitle; 923 QString lcdStr = QString("%1 %2") 924 .arg(lcdSubTitle.replace('"', "'")).arg(tempShortDate); 925 LCDMenuItem lcdItem(m_currentItem == *it, NOTCHECKABLE, lcdStr); 926 lcdItems.push_back(lcdItem); 927 } 908 928 909 if (((progInfo->recstatus != rsRecording) && 910 (progInfo->availableStatus != asAvailable) && 911 (progInfo->availableStatus != asNotYetAvailable)) || 912 (m_player && m_player->IsSameProgram(0, progInfo))) 913 state = "disabled"; 929 item->SetText(tempSubTitle, "titlesubtitle", state); 930 item->SetText((*it)->title, "title", state); 931 item->SetText((*it)->subtitle, "subtitle", state); 932 item->SetText((*it)->description, "description", state); 933 item->SetText(tempLongDate, "longdate", state); 934 item->SetText(tempShortDate, "shortdate", state); 935 item->SetText(tempTime, "time", state); 936 item->SetText(tempSize, "size", state); 914 937 915 if (lcddev && !(GetFocusWidget() == m_groupList)) 916 { 917 QString lcdSubTitle = tempSubTitle; 918 lcdItems.append(LCDMenuItem(m_currentItem == progInfo, 919 NOTCHECKABLE, QString("%1 %2") 920 .arg(lcdSubTitle.replace('"', "'")) 921 .arg(tempShortDate))); 922 } 938 item->DisplayState(state, "status"); 923 939 924 QString imagefile = getPreviewImage(progInfo);925 item->SetImage(imagefile, "preview");940 disp_flag_stat[0] = !m_playList.filter((*it)->MakeUniqueKey()).empty(); 941 disp_flag_stat[1] = (*it)->programflags & FL_WATCHED; 926 942 927 item->SetText(tempSubTitle, "titlesubtitle", state); 928 item->SetText(progInfo->title, "title", state); 929 item->SetText(progInfo->subtitle, "subtitle", state); 930 item->SetText(progInfo->description, "description", state); 931 item->SetText(tempLongDate, "longdate", state); 932 item->SetText(tempShortDate, "shortdate", state); 933 item->SetText(tempTime, "time", state); 934 item->SetText(tempSize, "size", state); 943 for (uint i = 0; i < sizeof(disp_flags) / sizeof(char*); i++) 944 item->DisplayState(disp_flag_stat[i]?"yes":"no", disp_flags[i]); 935 945 936 item->DisplayState(state, "status"); 937 938 if (m_playList.filter(progInfo->MakeUniqueKey()).size()) 939 item->DisplayState("yes", "playlist"); 940 else 941 item->DisplayState("no", "playlist"); 942 943 if (progInfo->programflags & FL_WATCHED) 944 item->DisplayState("yes", "watched"); 945 else 946 item->DisplayState("no", "watched"); 947 948 if (!JobQueue::IsJobQueuedOrRunning(JOB_TRANSCODE, 949 progInfo->chanid, progInfo->recstartts)) 950 item->DisplayState("yes", "transcoding"); 951 else 952 item->DisplayState("no", "transcoding"); 953 954 if (!JobQueue::IsJobQueuedOrRunning(JOB_COMMFLAG, 955 progInfo->chanid, progInfo->recstartts)) 956 item->DisplayState("yes", "commflagging"); 957 else 958 item->DisplayState("no", "commflagging"); 959 960 961 //item->DisplayState("", "expiry"); 962 963 if (m_currentItem && 964 (m_currentItem->chanid == progInfo->chanid) && 965 (m_currentItem->recstartts == progInfo->recstartts)) 966 m_recordingList->SetItemCurrent(item); 946 if (m_currentItem && 947 (m_currentItem->chanid == (*it)->chanid) && 948 (m_currentItem->recstartts == (*it)->recstartts)) 949 { 950 m_recordingList->SetItemCurrent(item); 967 951 } 968 952 } 969 953 970 954 if (lcddev && !lcdItems.isEmpty()) 971 955 lcddev->switchToMenu(lcdItems, lcdTitle); 972 956 973 if (m_noRecordingsText && !progList->isEmpty())957 if (m_noRecordingsText) 974 958 { 975 m_progCacheLock.lock(); 976 if (m_progCache && !m_progCache->empty()) 977 m_noRecordingsText->SetText(tr( 978 "There are no recordings in your current view")); 959 if (!progList.isEmpty()) 960 m_noRecordingsText->SetVisible(false); 979 961 else 980 m_noRecordingsText->SetText(tr( 981 "There are no recordings available")); 982 m_progCacheLock.unlock(); 962 { 963 QMutexLocker locker(&m_progCacheLock); 964 QString txt = (m_progCache && !m_progCache->empty()) ? 965 tr("There are no recordings in your current view") : 966 tr("There are no recordings available"); 967 m_noRecordingsText->SetText(txt); 968 m_noRecordingsText->SetVisible(true); 969 } 983 970 } 984 985 m_noRecordingsText->SetVisible(progList->isEmpty());986 971 } 987 972 988 973 void PlaybackBox::listChanged(void)