MetadataLookupList MetadataDownload::handleRecordingGeneric( MetadataLookup* lookup) { // We only enter this mode if we are pretty darn sure this is a TV show, // but we're for some reason looking up a generic, or the title didn't // exactly match in one of the earlier lookups. This is a total // hail mary to try to get at least *series* level info and art/inetref. MetadataLookupList list; QString cmd = GetTelevisionGrabber(); QStringList args; args.append(QString("-l")); // Language Flag args.append(gCoreContext->GetLanguage()); // UI Language args.append(QString("-a")); args.append(gCoreContext->GetLocale()->GetCountryCode()); args.append("-M"); QString title = lookup->GetTitle(); args.append(title); LookupType origtype = lookup->GetSubtype(); int origseason = lookup->GetSeason(); int origepisode = lookup->GetEpisode(); lookup->SetSubtype(kProbableGenericTelevision); if (origseason == 0 && origepisode == 0) { lookup->SetSeason(1); lookup->SetEpisode(1); } list = runGrabber(cmd, args, lookup, true); if (list.count() == 1) { lookup->SetInetref(list.at(0)->GetInetref()); lookup->SetCollectionref(list.at(0)->GetCollectionref()); list = handleTelevision(lookup); } lookup->SetSeason(origseason); lookup->SetEpisode(origepisode); lookup->SetSubtype(origtype); return list; }
MetadataLookupList MetadataDownload::handleVideoUndetermined( MetadataLookup* lookup) { MetadataLookupList list; QString cmd = GetTelevisionGrabber(); // Can't trust the inetref with so little information. QStringList args; args.append(QString("-l")); // Language Flag args.append(gCoreContext->GetLanguage()); // UI Language args.append(QString("-N")); if (!lookup->GetInetref().isEmpty()) { QString inetref = lookup->GetInetref(); args.append(inetref); } else { QString title = lookup->GetTitle(); args.append(title); } QString subtitle = lookup->GetSubtitle(); args.append(subtitle); // Try to do a title/subtitle lookup list = runGrabber(cmd, args, lookup, false); if (list.count() == 1) list.at(0)->SetStep(kLookupData); return list; }
MetadataLookupList MetadataDownload::handleVideoUndetermined( MetadataLookup* lookup) { MetadataLookupList list; QString def_cmd = QDir::cleanPath(QString("%1/%2") .arg(GetShareDir()) .arg("metadata/Television/ttvdb.py")); QString cmd = gCoreContext->GetSetting("TelevisionGrabber", def_cmd); // Can't trust the inetref with so little information. QStringList args; args.append(QString("-l")); // Language Flag args.append(gCoreContext->GetLanguage()); // UI Language args.append(QString("-N")); QString title = lookup->GetTitle(); args.append(ShellEscape(title)); QString subtitle = lookup->GetSubtitle(); args.append(ShellEscape(subtitle)); // Try to do a title/subtitle lookup list = runGrabber(cmd, args, lookup, false); // If there were no results for that, fall back to a movie lookup. if (!list.size()) list = handleMovie(lookup); if (list.count() == 1) list.at(0)->SetStep(GETDATA); return list; }
MetadataLookupList MetadataDownload::handleRecordingGeneric( MetadataLookup* lookup) { // We only enter this mode if we are pretty darn sure this is a TV show, // but we're for some reason looking up a generic, or the title didn't // exactly match in one of the earlier lookups. This is a total // hail mary to try to get at least *series* level info and art/inetref. MetadataLookupList list; QString def_cmd = QDir::cleanPath(QString("%1/%2") .arg(GetShareDir()) .arg("metadata/Television/ttvdb.py")); QString cmd = gCoreContext->GetSetting("TelevisionGrabber", def_cmd); QStringList args; args.append(QString("-l")); // Language Flag args.append(gCoreContext->GetLanguage()); // UI Language args.append("-M"); QString title = lookup->GetTitle(); args.append(title); lookup->SetSubtype(kProbableGenericTelevision); int origseason = lookup->GetSeason(); int origepisode = lookup->GetEpisode(); if (origseason == 0 && origepisode == 0) { lookup->SetSeason(1); lookup->SetEpisode(1); } list = runGrabber(cmd, args, lookup, true); if (list.count() == 1) list.at(0)->SetStep(kLookupData); lookup->SetSeason(origseason); lookup->SetEpisode(origepisode); return list; }
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(); }