void RecordingSelector::titleChanged(MythUIButtonListItem *item) { ProgramInfo *p; p = qVariantValue<ProgramInfo *>(item->GetData()); if (!p) return; if (m_titleText) m_titleText->SetText(p->GetTitle()); if (m_datetimeText) m_datetimeText->SetText(p->GetScheduledStartTime() .toString("dd MMM yy (hh:mm)")); if (m_descriptionText) { m_descriptionText->SetText( ((!p->GetSubtitle().isEmpty()) ? p->GetSubtitle() + "\n" : "") + p->GetDescription()); } if (m_filesizeText) { m_filesizeText->SetText(formatSize(p->GetFilesize() / 1024)); } if (m_cutlistImage) { if (p->HasCutlist()) m_cutlistImage->Show(); else m_cutlistImage->Hide(); } if (m_previewImage) { // try to locate a preview image if (QFile::exists(p->GetPathname() + ".png")) { m_previewImage->SetFilename(p->GetPathname() + ".png"); m_previewImage->Load(); } else { m_previewImage->SetFilename("blank.png"); m_previewImage->Load(); } } }
void RecordingSelector::OKPressed() { // loop though selected recordings and add them to the list ProgramInfo *p; ArchiveItem *a; // remove any items that have been removed from the list QList<ArchiveItem *> tempAList; for (int x = 0; x < m_archiveList->size(); x++) { a = m_archiveList->at(x); bool found = false; for (int y = 0; y < m_selectedList.size(); y++) { p = m_selectedList.at(y); if (a->type != "Recording" || a->filename == p->GetPlaybackURL(false, true)) { found = true; break; } } if (!found) tempAList.append(a); } for (int x = 0; x < tempAList.size(); x++) m_archiveList->removeAll(tempAList.at(x)); // remove any items that are already in the list QList<ProgramInfo *> tempSList; for (int x = 0; x < m_selectedList.size(); x++) { p = m_selectedList.at(x); for (int y = 0; y < m_archiveList->size(); y++) { a = m_archiveList->at(y); if (a->filename == p->GetPlaybackURL(false, true)) { tempSList.append(p); break; } } } for (int x = 0; x < tempSList.size(); x++) m_selectedList.removeAll(tempSList.at(x)); // add all that are left for (int x = 0; x < m_selectedList.size(); x++) { p = m_selectedList.at(x); a = new ArchiveItem; a->type = "Recording"; a->title = p->GetTitle(); a->subtitle = p->GetSubtitle(); a->description = p->GetDescription(); a->startDate = p->GetScheduledStartTime().toString("dd MMM yy"); a->startTime = p->GetScheduledStartTime().toString("(hh:mm)"); a->size = p->GetFilesize(); a->filename = p->GetPlaybackURL(false, true); a->hasCutlist = p->HasCutlist(); a->useCutlist = false; a->duration = 0; a->cutDuration = 0; a->videoWidth = 0; a->videoHeight = 0; a->fileCodec = ""; a->videoCodec = ""; a->encoderProfile = NULL; a->editedDetails = false; m_archiveList->append(a); } emit haveResult(true); Close(); }
/** \fn StatusBox::doAutoExpireList() * \brief Show list of recordings which may AutoExpire */ void StatusBox::doAutoExpireList(bool updateExpList) { if (m_iconState) m_iconState->DisplayState("autoexpire"); m_logList->Reset(); QString helpmsg(tr("The AutoExpire List shows all recordings " "which may be expired and the order of " "their expiration. Recordings at the top " "of the list will be expired first.")); if (m_helpText) m_helpText->SetText(helpmsg); if (m_justHelpText) m_justHelpText->SetText(helpmsg); ProgramInfo* pginfo; QString contentLine; QString detailInfo; QString staticInfo; long long totalSize(0); long long liveTVSize(0); int liveTVCount(0); long long deletedGroupSize(0); int deletedGroupCount(0); vector<ProgramInfo *>::iterator it; if (updateExpList) { for (it = m_expList.begin(); it != m_expList.end(); ++it) delete *it; m_expList.clear(); RemoteGetAllExpiringRecordings(m_expList); } for (it = m_expList.begin(); it != m_expList.end(); ++it) { pginfo = *it; totalSize += pginfo->GetFilesize(); if (pginfo->GetRecordingGroup() == "LiveTV") { liveTVSize += pginfo->GetFilesize(); liveTVCount++; } else if (pginfo->GetRecordingGroup() == "Deleted") { deletedGroupSize += pginfo->GetFilesize(); deletedGroupCount++; } } staticInfo = tr("%n recording(s) consuming %1 (is) allowed to expire\n", "", m_expList.size()).arg(sm_str(totalSize / 1024)); if (liveTVCount) staticInfo += tr("%n (is) LiveTV and consume(s) %1\n", "", liveTVCount) .arg(sm_str(liveTVSize / 1024)); if (deletedGroupCount) staticInfo += tr("%n (is) Deleted and consume(s) %1\n", "", deletedGroupCount) .arg(sm_str(deletedGroupSize / 1024)); for (it = m_expList.begin(); it != m_expList.end(); ++it) { pginfo = *it; QDateTime starttime = pginfo->GetRecordingStartTime(); QDateTime endtime = pginfo->GetRecordingEndTime(); contentLine = MythDateTimeToString(starttime, kDateFull | kSimplify) + " - "; contentLine += "(" + ProgramInfo::i18n(pginfo->GetRecordingGroup()) + ") "; contentLine += pginfo->GetTitle() + " (" + sm_str(pginfo->GetFilesize() / 1024) + ")"; detailInfo = MythDateTimeToString(starttime, kDateTimeFull | kSimplify) + " - " + MythDateTimeToString(endtime, kDateTimeFull | kSimplify); detailInfo += " (" + sm_str(pginfo->GetFilesize() / 1024) + ")"; detailInfo += " (" + ProgramInfo::i18n(pginfo->GetRecordingGroup()) + ")"; detailInfo += "\n" + pginfo->toString(ProgramInfo::kTitleSubtitle, " - "); AddLogLine(contentLine, staticInfo, detailInfo, staticInfo + detailInfo); } }
/** * \brief Returns the recording we should switch to * * This returns a ProgramInfo* and tells us if this is a discontiuous * switch and whether the recording type is changing. * * This also clears the NeedsToSwitch()/NeedsToJump() state. * * NOTE: The caller is resposible for deleting the ProgramInfo */ ProgramInfo *LiveTVChain::GetSwitchProgram(bool &discont, bool &newtype, int &newid) { ReloadAll(); QMutexLocker lock(&m_lock); if (m_switchid < 0 || m_curpos == m_switchid) { ClearSwitch(); return NULL; } LiveTVChainEntry oldentry, entry; GetEntryAt(m_curpos, oldentry); ProgramInfo *pginfo = NULL; while (!pginfo && m_switchid < (int)m_chain.count() && m_switchid >= 0) { GetEntryAt(m_switchid, entry); bool at_last_entry = ((m_switchid > m_curpos) && (m_switchid == (int)(m_chain.count()-1))) || ((m_switchid <= m_curpos) && (m_switchid == 0)); // Skip dummy recordings, if possible. if (at_last_entry || (entry.cardtype != "DUMMY")) pginfo = EntryToProgram(entry); // Skip empty recordings, if possible if (pginfo && (0 == pginfo->GetFilesize()) && m_switchid < (int)(m_chain.count()-1)) { LOG(VB_GENERAL, LOG_WARNING, QString("Skipping empty program %1") .arg(pginfo->MakeUniqueKey())); delete pginfo; pginfo = NULL; } if (!pginfo) { if (m_switchid > m_curpos) m_switchid++; else m_switchid--; } } if (!pginfo) { ClearSwitch(); return NULL; } discont = true; if (m_curpos == m_switchid - 1) discont = entry.discontinuity; newtype = (oldentry.cardtype != entry.cardtype); // Some cards can change their streams dramatically on a channel change... if (discont) newtype |= CardUtil::IsChannelChangeDiscontinuous(entry.cardtype); newid = m_switchid; ClearSwitch(); return pginfo; }
void RecordingSelector::updateRecordingList(void) { if (!m_recordingList || m_recordingList->empty()) return; m_recordingButtonList->Reset(); if (m_categorySelector) { ProgramInfo *p; vector<ProgramInfo *>::iterator i = m_recordingList->begin(); for ( ; i != m_recordingList->end(); ++i) { p = *i; if (p->GetTitle() == m_categorySelector->GetValue() || m_categorySelector->GetValue() == tr("All Recordings")) { MythUIButtonListItem* item = new MythUIButtonListItem( m_recordingButtonList, p->GetTitle() + " ~ " + p->GetScheduledStartTime().toLocalTime() .toString("dd MMM yy (hh:mm)")); item->setCheckable(true); if (m_selectedList.indexOf((ProgramInfo *) p) != -1) { item->setChecked(MythUIButtonListItem::FullChecked); } else { item->setChecked(MythUIButtonListItem::NotChecked); } QString title = p->GetTitle(); QString subtitle = p->GetSubtitle(); QDateTime recstartts = p->GetScheduledStartTime(); QDateTime recendts = p->GetScheduledEndTime(); QString timedate = QString("%1 - %2") .arg(MythDate::toString(recstartts,MythDate::kDateTimeFull)) .arg(MythDate::toString(recendts, MythDate::kTime)); uint season = p->GetSeason(); uint episode = p->GetEpisode(); QString seasone, seasonx; if (season && episode) { seasone = QString("s%1e%2") .arg(format_season_and_episode(season, 2)) .arg(format_season_and_episode(episode, 2)); seasonx = QString("%1x%2") .arg(format_season_and_episode(season, 1)) .arg(format_season_and_episode(episode, 2)); } item->SetText(title, "title"); item->SetText(subtitle, "subtitle"); if (subtitle.isEmpty()) item->SetText(title, "titlesubtitle"); else item->SetText(title + " - \"" + subtitle + '"', "titlesubtitle"); item->SetText(timedate, "timedate"); item->SetText(p->GetDescription(), "description"); item->SetText(formatSize(p->GetFilesize() / 1024), "filesize_str"); item->SetText(QString::number(season), "season"); item->SetText(QString::number(episode), "episode"); item->SetText(seasonx, "00x00"); item->SetText(seasone, "s00e00"); item->DisplayState(p->HasCutlist() ? "yes" : "no", "cutlist"); item->SetData(qVariantFromValue(p)); } qApp->processEvents(); } } m_recordingButtonList->SetItemCurrent(m_recordingButtonList->GetItemFirst()); titleChanged(m_recordingButtonList->GetItemCurrent()); }