bool SetArtwork(const QString &inetref, uint season, const QString &host, const QString &coverart, const QString &fanart, const QString &banner) { bool ret = false; ArtworkMap map; if (!coverart.isEmpty()) { ArtworkInfo coverartinfo; coverartinfo.url = generate_myth_url("Coverart", host, coverart); map.insert(kArtworkCoverart, coverartinfo); } if (!fanart.isEmpty()) { ArtworkInfo fanartinfo; fanartinfo.url = generate_myth_url("Fanart", host, fanart); map.insert(kArtworkFanart, fanartinfo); } if (!banner.isEmpty()) { ArtworkInfo bannerinfo; bannerinfo.url = generate_myth_url("Banners", host, banner); map.insert(kArtworkBanner, bannerinfo); } ret = SetArtwork(inetref, season, host, map); return ret; }
void LookerUpper::customEvent(QEvent *levent) { if (levent->type() == MetadataFactoryMultiResult::kEventType) { MetadataFactoryMultiResult *mfmr = dynamic_cast<MetadataFactoryMultiResult*>(levent); if (!mfmr) return; MetadataLookupList list = mfmr->results; if (list.count() > 1) { int yearindex = -1; for (int p = 0; p != list.size(); ++p) { ProgramInfo *pginfo = list[p]->GetData().value<ProgramInfo *>(); if (pginfo && !pginfo->GetSeriesID().isEmpty() && pginfo->GetSeriesID() == (list[p])->GetTMSref()) { MetadataLookup *lookup = list[p]; if (lookup->GetSubtype() != kProbableGenericTelevision) pginfo->SaveSeasonEpisode(lookup->GetSeason(), lookup->GetEpisode()); pginfo->SaveInetRef(lookup->GetInetref()); m_busyRecList.removeAll(pginfo); return; } else if (pginfo && pginfo->GetYearOfInitialRelease() != 0 && (list[p])->GetYear() != 0 && pginfo->GetYearOfInitialRelease() == (list[p])->GetYear()) { if (yearindex != -1) { LOG(VB_GENERAL, LOG_INFO, "Multiple results matched on year. No definite " "match could be found."); m_busyRecList.removeAll(pginfo); return; } else { LOG(VB_GENERAL, LOG_INFO, "Matched from multiple results based on year. "); yearindex = p; } } } if (yearindex > -1) { MetadataLookup *lookup = list[yearindex]; ProgramInfo *pginfo = lookup->GetData().value<ProgramInfo *>(); if (lookup->GetSubtype() != kProbableGenericTelevision) pginfo->SaveSeasonEpisode(lookup->GetSeason(), lookup->GetEpisode()); pginfo->SaveInetRef(lookup->GetInetref()); m_busyRecList.removeAll(pginfo); return; } LOG(VB_GENERAL, LOG_INFO, "Unable to match this title, too many possible matches. " "You may wish to manually set the season, episode, and " "inetref in the 'Watch Recordings' screen."); ProgramInfo *pginfo = list[0]->GetData().value<ProgramInfo *>(); if (pginfo) { m_busyRecList.removeAll(pginfo); } } } else if (levent->type() == MetadataFactorySingleResult::kEventType) { MetadataFactorySingleResult *mfsr = dynamic_cast<MetadataFactorySingleResult*>(levent); if (!mfsr) return; MetadataLookup *lookup = mfsr->result; if (!lookup) return; ProgramInfo *pginfo = lookup->GetData().value<ProgramInfo *>(); // This null check could hang us as this pginfo would then never be // removed if (!pginfo) return; LOG(VB_GENERAL, LOG_DEBUG, "I found the following data:"); LOG(VB_GENERAL, LOG_DEBUG, QString(" Input Title: %1").arg(pginfo->GetTitle())); LOG(VB_GENERAL, LOG_DEBUG, QString(" Input Sub: %1").arg(pginfo->GetSubtitle())); LOG(VB_GENERAL, LOG_DEBUG, QString(" Title: %1").arg(lookup->GetTitle())); LOG(VB_GENERAL, LOG_DEBUG, QString(" Subtitle: %1").arg(lookup->GetSubtitle())); LOG(VB_GENERAL, LOG_DEBUG, QString(" Season: %1").arg(lookup->GetSeason())); LOG(VB_GENERAL, LOG_DEBUG, QString(" Episode: %1").arg(lookup->GetEpisode())); LOG(VB_GENERAL, LOG_DEBUG, QString(" Inetref: %1").arg(lookup->GetInetref())); LOG(VB_GENERAL, LOG_DEBUG, QString(" User Rating: %1").arg(lookup->GetUserRating())); if (lookup->GetSubtype() != kProbableGenericTelevision) pginfo->SaveSeasonEpisode(lookup->GetSeason(), lookup->GetEpisode()); pginfo->SaveInetRef(lookup->GetInetref()); if (m_updaterules) { RecordingRule *rule = new RecordingRule(); if (rule) { rule->LoadByProgram(pginfo); if (rule->m_inetref.isEmpty() && (rule->m_searchType == kNoSearch)) { rule->m_inetref = lookup->GetInetref(); } rule->m_season = lookup->GetSeason(); rule->m_episode = lookup->GetEpisode(); rule->Save(); delete rule; } } if (m_updateartwork) { ArtworkMap map = lookup->GetDownloads(); SetArtwork(lookup->GetInetref(), lookup->GetIsCollection() ? 0 : lookup->GetSeason(), gCoreContext->GetMasterHostName(), map); } m_busyRecList.removeAll(pginfo); } else if (levent->type() == MetadataFactoryNoResult::kEventType) { MetadataFactoryNoResult *mfnr = dynamic_cast<MetadataFactoryNoResult*>(levent); if (!mfnr) return; MetadataLookup *lookup = mfnr->result; if (!lookup) return; ProgramInfo *pginfo = lookup->GetData().value<ProgramInfo *>(); // This null check could hang us as this pginfo would then never be removed if (!pginfo) return; m_busyRecList.removeAll(pginfo); } }