void MetadataFactory::Lookup(ProgramInfo *pginfo, bool automatic, bool getimages, bool allowgeneric) { if (!pginfo) return; MetadataLookup *lookup = new MetadataLookup(); lookup->SetStep(kLookupSearch); lookup->SetType(kMetadataRecording); lookup->SetSubtype(GuessLookupType(pginfo)); lookup->SetData(qVariantFromValue(pginfo)); lookup->SetAutomatic(automatic); lookup->SetHandleImages(getimages); lookup->SetAllowGeneric(allowgeneric); lookup->SetHost(gCoreContext->GetMasterHostName()); lookup->SetTitle(pginfo->GetTitle()); lookup->SetSubtitle(pginfo->GetSubtitle()); lookup->SetSeason(pginfo->GetSeason()); lookup->SetEpisode(pginfo->GetEpisode()); lookup->SetInetref(pginfo->GetInetRef()); if (m_lookupthread->isRunning()) m_lookupthread->prependLookup(lookup); else m_lookupthread->addLookup(lookup); }
META_PUBLIC MetadataLookupList MetadataFactory::SynchronousLookup(QString title, QString subtitle, QString inetref, int season, int episode, QString grabber, bool allowgeneric) { MetadataLookup *lookup = new MetadataLookup(); lookup->SetStep(kLookupSearch); lookup->SetType(kMetadataRecording); lookup->SetAutomatic(false); lookup->SetHandleImages(false); lookup->SetAllowGeneric(allowgeneric); lookup->SetTitle(title); lookup->SetSubtitle(subtitle); lookup->SetSeason(season); lookup->SetEpisode(episode); lookup->SetInetref(inetref); if (grabber.toLower() == "movie") lookup->SetSubtype(kProbableMovie); else if (grabber.toLower() == "tv" || grabber.toLower() == "television") lookup->SetSubtype(kProbableTelevision); else lookup->SetSubtype(GuessLookupType(lookup)); return SynchronousLookup(lookup); }
void MetadataFactory::Lookup(RecordingRule *recrule, bool automatic, bool getimages, bool allowgeneric) { if (!recrule) return; MetadataLookup *lookup = new MetadataLookup(); lookup->SetStep(kLookupSearch); lookup->SetType(kMetadataRecording); lookup->SetSubtype(GuessLookupType(recrule)); lookup->SetData(qVariantFromValue(recrule)); lookup->SetAutomatic(automatic); lookup->SetHandleImages(getimages); lookup->SetAllowGeneric(allowgeneric); lookup->SetHost(gCoreContext->GetMasterHostName()); lookup->SetTitle(recrule->m_title); lookup->SetSubtitle(recrule->m_subtitle); lookup->SetInetref(recrule->m_inetref); lookup->SetSeason(recrule->m_season); lookup->SetEpisode(recrule->m_episode); if (m_lookupthread->isRunning()) m_lookupthread->prependLookup(lookup); else m_lookupthread->addLookup(lookup); }
void MetadataFactory::Lookup(VideoMetadata *metadata, bool automatic, bool getimages, bool allowgeneric) { if (!metadata) return; MetadataLookup *lookup = new MetadataLookup(); lookup->SetStep(kLookupSearch); lookup->SetType(kMetadataVideo); lookup->SetSubtype(GuessLookupType(metadata)); lookup->SetData(qVariantFromValue(metadata)); lookup->SetAutomatic(automatic); lookup->SetHandleImages(getimages); lookup->SetAllowGeneric(allowgeneric); lookup->SetHost(metadata->GetHost()); lookup->SetTitle(metadata->GetTitle()); lookup->SetSubtitle(metadata->GetSubtitle()); lookup->SetSeason(metadata->GetSeason()); lookup->SetEpisode(metadata->GetEpisode()); lookup->SetInetref(metadata->GetInetRef()); lookup->SetFilename(generate_file_url("Videos", metadata->GetHost(), metadata->GetFilename())); if (m_lookupthread->isRunning()) m_lookupthread->prependLookup(lookup); else m_lookupthread->addLookup(lookup); }
void EditMetadataDialog::FindNetArt(VideoArtworkType type) { QString msg = tr("Searching for available artwork..."); createBusyDialog(msg); MetadataLookup *lookup = new MetadataLookup(); lookup->SetStep(kLookupSearch); lookup->SetType(kMetadataVideo); lookup->SetAutomatic(true); if (m_workingMetadata->GetSeason() > 0 || m_workingMetadata->GetEpisode() > 0) lookup->SetSubtype(kProbableTelevision); else if (m_workingMetadata->GetSubtitle().isEmpty()) lookup->SetSubtype(kProbableMovie); else lookup->SetSubtype(kUnknownVideo); lookup->SetData(qVariantFromValue<VideoArtworkType>(type)); lookup->SetTitle(m_workingMetadata->GetTitle()); lookup->SetSubtitle(m_workingMetadata->GetSubtitle()); lookup->SetSeason(m_workingMetadata->GetSeason()); lookup->SetEpisode(m_workingMetadata->GetEpisode()); lookup->SetInetref(m_workingMetadata->GetInetRef()); m_query->addLookup(lookup); }
bool MetadataDownload::findBestMatch(MetadataLookupList list, QString originaltitle) { QStringList titles; // Build a list of all the titles for (MetadataLookupList::const_iterator i = list.begin(); i != list.end(); ++i) { titles.append((*i)->GetTitle()); } // Apply Levenshtein distance algorithm to determine closest match QString bestTitle = nearestName(originaltitle, titles); // If no "best" was chosen, give up. if (bestTitle.isEmpty()) { LOG(VB_GENERAL, LOG_ERR, QString("No adequate match or multiple " "matches found for %1. Update manually.") .arg(originaltitle)); return false; } LOG(VB_GENERAL, LOG_INFO, QString("Best Title Match For %1: %2") .arg(originaltitle).arg(bestTitle)); // Grab the one item that matches the besttitle (IMPERFECT) for (MetadataLookupList::const_iterator i = list.begin(); i != list.end(); ++i) { if ((*i)->GetTitle() == bestTitle) { MetadataLookup *newlookup = (*i); newlookup->SetStep(kLookupData); prependLookup(newlookup); return true; } } return false; }
void GameUI::gameSearch(MythGenericTree *node, bool automode) { if (!node) node = m_gameUITree->GetCurrentNode(); if (!node) return; RomInfo *metadata = qVariantValue<RomInfo *>(node->GetData()); if (!metadata) return; MetadataLookup *lookup = new MetadataLookup(); lookup->SetStep(kLookupSearch); lookup->SetType(kMetadataGame); lookup->SetData(qVariantFromValue(node)); if (automode) { lookup->SetAutomatic(true); } lookup->SetTitle(metadata->Gamename()); lookup->SetInetref(metadata->Inetref()); if (m_query->isRunning()) m_query->prependLookup(lookup); else m_query->addLookup(lookup); if (!automode) { //: %1 is the game name QString msg = tr("Fetching details for %1") .arg(metadata->Gamename()); createBusyDialog(msg); } }
void MetadataFactory::Lookup(VideoMetadata *metadata, bool automatic, bool getimages, bool allowgeneric) { if (!metadata) return; MetadataLookup *lookup = new MetadataLookup(); lookup->SetStep(kLookupSearch); lookup->SetType(kMetadataVideo); if (metadata->GetSeason() > 0 || metadata->GetEpisode() > 0) lookup->SetSubtype(kProbableTelevision); else if (metadata->GetSubtitle().isEmpty()) lookup->SetSubtype(kProbableMovie); else lookup->SetSubtype(kUnknownVideo); lookup->SetData(qVariantFromValue(metadata)); lookup->SetAutomatic(automatic); lookup->SetHandleImages(getimages); lookup->SetAllowGeneric(allowgeneric); lookup->SetHost(metadata->GetHost()); lookup->SetTitle(metadata->GetTitle()); lookup->SetSubtitle(metadata->GetSubtitle()); lookup->SetSeason(metadata->GetSeason()); lookup->SetEpisode(metadata->GetEpisode()); lookup->SetInetref(metadata->GetInetRef()); QString fntmp; if (metadata->GetHost().isEmpty()) fntmp = metadata->GetFilename(); else fntmp = generate_file_url("Videos", metadata->GetHost(), metadata->GetFilename()); lookup->SetFilename(fntmp); if (m_lookupthread->isRunning()) m_lookupthread->prependLookup(lookup); else m_lookupthread->addLookup(lookup); }
void MetadataDownload::run() { RunProlog(); MetadataLookup* lookup; while ((lookup = moreWork()) != NULL) { MetadataLookupList list; // Go go gadget Metadata Lookup if (lookup->GetType() == kMetadataVideo) { if (lookup->GetSubtype() == kProbableTelevision) list = handleTelevision(lookup); else if (lookup->GetSubtype() == kProbableMovie) list = handleMovie(lookup); else list = handleVideoUndetermined(lookup); if (!list.size() && lookup->GetSubtype() == kUnknownVideo) { list = handleMovie(lookup); } } else if (lookup->GetType() == kMetadataRecording) { if (lookup->GetSubtype() == kProbableTelevision) { if (lookup->GetSeason() > 0 || lookup->GetEpisode() > 0) list = handleTelevision(lookup); else if (!lookup->GetSubtitle().isEmpty()) list = handleVideoUndetermined(lookup); if (!list.size()) list = handleRecordingGeneric(lookup); } else if (lookup->GetSubtype() == kProbableMovie) { list = handleMovie(lookup); if (lookup->GetInetref().isEmpty()) list.append(handleRecordingGeneric(lookup)); } else { list = handleRecordingGeneric(lookup); if (lookup->GetInetref().isEmpty()) list.append(handleMovie(lookup)); } } else if (lookup->GetType() == kMetadataGame) list = handleGame(lookup); // inform parent we have lookup ready for it if (m_parent && list.count() >= 1) { // If there's only one result, don't bother asking // our parent about it, just add it to the back of // the queue in kLookupData mode. if (list.count() == 1 && list.at(0)->GetStep() == kLookupSearch) { MetadataLookup *newlookup = list.takeFirst(); newlookup->SetStep(kLookupData); prependLookup(newlookup); continue; } // If we're in automatic mode, we need to make // these decisions on our own. Pass to title match. if (list.at(0)->GetAutomatic() && list.count() > 1) { if (!findBestMatch(list, lookup->GetTitle())) QCoreApplication::postEvent(m_parent, new MetadataLookupFailure(MetadataLookupList() << lookup)); continue; } LOG(VB_GENERAL, LOG_INFO, QString("Returning Metadata Results: %1 %2 %3") .arg(lookup->GetTitle()).arg(lookup->GetSeason()) .arg(lookup->GetEpisode())); QCoreApplication::postEvent(m_parent, new MetadataLookupEvent(list)); } else { list.append(lookup); QCoreApplication::postEvent(m_parent, new MetadataLookupFailure(list)); } } RunEpilog(); }
void MetadataDownload::run() { MetadataLookup* lookup; threadRegister("MetadataDownload"); while ((lookup = moreWork()) != NULL) { MetadataLookupList list; // Go go gadget Metadata Lookup if (lookup->GetType() == VID) { if (lookup->GetSeason() > 0 || lookup->GetEpisode() > 0) list = handleTelevision(lookup); else if (!lookup->GetSubtitle().isEmpty()) list = handleVideoUndetermined(lookup); else list = handleMovie(lookup); } // else if (lookup->GetType() == MUSIC) // list = handleMusic(lookup); else if (lookup->GetType() == GAME) list = handleGame(lookup); // inform parent we have lookup ready for it if (m_parent && list.count() >= 1) { // If there's only one result, don't bother asking // our parent about it, just add it to the back of // the queue in GETDATA mode. if (list.count() == 1 && list.at(0)->GetStep() == SEARCH) { MetadataLookup *newlookup = list.takeFirst(); newlookup->SetStep(GETDATA); prependLookup(newlookup); continue; } // If we're in automatic mode, we need to make // these decisions on our own. Pass to title match. if (list.at(0)->GetAutomatic() && list.count() > 1) { if (!findBestMatch(list, lookup->GetTitle())) QCoreApplication::postEvent(m_parent, new MetadataLookupFailure(MetadataLookupList() << lookup)); continue; } VERBOSE(VB_GENERAL, QString("Returning Metadata Results: %1 %2 %3") .arg(lookup->GetTitle()).arg(lookup->GetSeason()) .arg(lookup->GetEpisode())); QCoreApplication::postEvent(m_parent, new MetadataLookupEvent(list)); } else { list.append(lookup); QCoreApplication::postEvent(m_parent, new MetadataLookupFailure(list)); } } threadDeregister(); }