void LookerUpper::CopyRuleInetrefsToRecordings() { QMap< QString, ProgramInfo* > recMap; QMap< QString, uint32_t > inUseMap = ProgramInfo::QueryInUseMap(); QMap< QString, bool > isJobRunning = ProgramInfo::QueryJobsRunning(JOB_COMMFLAG); ProgramList progList; LoadFromRecorded( progList, false, inUseMap, isJobRunning, recMap, -1 ); for( int n = 0; n < (int)progList.size(); n++) { ProgramInfo *pginfo = new ProgramInfo(*(progList[n])); if (pginfo && pginfo->GetInetRef().isEmpty()) { RecordingRule *rule = new RecordingRule(); rule->m_recordID = pginfo->GetRecordingRuleID(); rule->Load(); if (!rule->m_inetref.isEmpty()) { QString msg = QString("%1").arg(pginfo->GetTitle()); if (!pginfo->GetSubtitle().isEmpty()) msg += QString(": %1").arg(pginfo->GetSubtitle()); msg += " has no inetref, but its recording rule does. Copying..."; LOG(VB_GENERAL, LOG_INFO, msg); pginfo->SaveInetRef(rule->m_inetref); } delete rule; } delete pginfo; } }
void LookerUpper::HandleAllRecordings(bool updaterules) { QMap< QString, ProgramInfo* > recMap; QMap< QString, uint32_t > inUseMap = ProgramInfo::QueryInUseMap(); QMap< QString, bool > isJobRunning = ProgramInfo::QueryJobsRunning(JOB_COMMFLAG); m_updaterules = updaterules; ProgramList progList; LoadFromRecorded( progList, false, inUseMap, isJobRunning, recMap, -1 ); for( int n = 0; n < (int)progList.size(); n++) { ProgramInfo *pginfo = new ProgramInfo(*(progList[n])); if ((pginfo->GetRecordingGroup() != "Deleted") && (pginfo->GetRecordingGroup() != "LiveTV") && (pginfo->GetInetRef().isEmpty() || (!pginfo->GetSubtitle().isEmpty() && (pginfo->GetSeason() == 0) && (pginfo->GetEpisode() == 0)))) { QString msg = QString("Looking up: %1 %2").arg(pginfo->GetTitle()) .arg(pginfo->GetSubtitle()); LOG(VB_GENERAL, LOG_INFO, msg); m_busyRecList.append(pginfo); m_metadataFactory->Lookup(pginfo, true, false, false); } else delete pginfo; } }
void LookerUpper::HandleAllRecordings() { QMap< QString, ProgramInfo* > recMap; QMap< QString, uint32_t > inUseMap = ProgramInfo::QueryInUseMap(); QMap< QString, bool > isJobRunning = ProgramInfo::QueryJobsRunning(JOB_COMMFLAG); ProgramList progList; LoadFromRecorded( progList, false, inUseMap, isJobRunning, recMap, -1 ); for( int n = 0; n < (int)progList.size(); n++) { ProgramInfo *pginfo = new ProgramInfo(*(progList[n])); if (pginfo->GetInetRef().isEmpty() || (!pginfo->GetSubtitle().isEmpty() && (pginfo->GetSeason() == 0) && (pginfo->GetEpisode() == 0))) { QString msg = QString("Looking up: %1 %2").arg(pginfo->GetTitle()) .arg(pginfo->GetSubtitle()); VERBOSE(VB_IMPORTANT, msg); m_busyRecList.append(pginfo); m_metadataFactory->Lookup(pginfo, false, false); } } }
DTC::ArtworkInfoList* Content::GetRecordingArtworkList( int nChanId, const QDateTime &dStartTime ) { if (nChanId <= 0 || !dStartTime.isValid()) throw( QString("Channel ID or StartTime appears invalid.")); ProgramInfo pInfo = ProgramInfo(nChanId, dStartTime); return GetProgramArtworkList(pInfo.GetInetRef(), pInfo.GetSeason()); }
DTC::ArtworkInfoList* Content::GetRecordingArtworkList( int RecordedId, int chanid, const QDateTime &recstarttsRaw) { if ((RecordedId <= 0) && (chanid <= 0 || !recstarttsRaw.isValid())) throw QString("Recorded ID or Channel ID and StartTime appears invalid."); // TODO Should use RecordingInfo ProgramInfo pginfo; if (RecordedId > 0) pginfo = ProgramInfo(RecordedId); else pginfo = ProgramInfo(chanid, recstarttsRaw.toUTC()); return GetProgramArtworkList(pginfo.GetInetRef(), pginfo.GetSeason()); }
void LookerUpper::HandleAllRecordingRules() { m_updaterules = true; vector<ProgramInfo *> recordingList; RemoteGetAllScheduledRecordings(recordingList); for( int n = 0; n < (int)recordingList.size(); n++) { ProgramInfo *pginfo = new ProgramInfo(*(recordingList[n])); if (pginfo->GetInetRef().isEmpty()) { QString msg = QString("Looking up: %1 %2").arg(pginfo->GetTitle()) .arg(pginfo->GetSubtitle()); LOG(VB_GENERAL, LOG_INFO, msg); m_busyRecList.append(pginfo); m_metadataFactory->Lookup(pginfo, false, false); } } }
void LookerUpper::HandleAllArtwork(bool aggressive) { m_updateartwork = true; if (aggressive) m_updaterules = true; // First, handle all recording rules w/ inetrefs vector<ProgramInfo *> recordingList; RemoteGetAllScheduledRecordings(recordingList); int maxartnum = 3; for( int n = 0; n < (int)recordingList.size(); n++) { ProgramInfo *pginfo = new ProgramInfo(*(recordingList[n])); bool dolookup = true; if (pginfo->GetInetRef().isEmpty()) dolookup = false; if (dolookup || aggressive) { ArtworkMap map = GetArtwork(pginfo->GetInetRef(), pginfo->GetSeason(), true); if (map.isEmpty() || (aggressive && map.count() < maxartnum)) { QString msg = QString("Looking up artwork for recording rule: %1 %2") .arg(pginfo->GetTitle()) .arg(pginfo->GetSubtitle()); LOG(VB_GENERAL, LOG_INFO, msg); m_busyRecList.append(pginfo); m_metadataFactory->Lookup(pginfo, true, true, true); continue; } } delete pginfo; } // Now, Attempt to fill in the gaps for recordings QMap< QString, ProgramInfo* > recMap; QMap< QString, uint32_t > inUseMap = ProgramInfo::QueryInUseMap(); QMap< QString, bool > isJobRunning = ProgramInfo::QueryJobsRunning(JOB_COMMFLAG); ProgramList progList; LoadFromRecorded( progList, false, inUseMap, isJobRunning, recMap, -1 ); for( int n = 0; n < (int)progList.size(); n++) { ProgramInfo *pginfo = new ProgramInfo(*(progList[n])); bool dolookup = true; LookupType type = GuessLookupType(pginfo); if (type == kProbableMovie) maxartnum = 2; if ((!aggressive && type == kProbableGenericTelevision) || pginfo->GetRecordingGroup() == "Deleted" || pginfo->GetRecordingGroup() == "LiveTV") dolookup = false; if (dolookup || aggressive) { ArtworkMap map = GetArtwork(pginfo->GetInetRef(), pginfo->GetSeason(), true); if (map.isEmpty() || (aggressive && map.count() < maxartnum)) { QString msg = QString("Looking up artwork for recording: %1 %2") .arg(pginfo->GetTitle()) .arg(pginfo->GetSubtitle()); LOG(VB_GENERAL, LOG_INFO, msg); m_busyRecList.append(pginfo); m_metadataFactory->Lookup(pginfo, true, true, aggressive); continue; } } delete pginfo; } }