From f419ae1e224b683f910c6f43120766ca1ef9b3cb Mon Sep 17 00:00:00 2001
From: "Chris \"Koying\" Browet" <cbro@semperpax.com>
Date: Sat, 21 Jul 2012 17:43:27 +0200
Subject: [PATCH] ADD: No-Op scraper support to allow nfo based only library
---
addons/metadata.local/addon.xml | 29 ++++++++++++++++++++++++++
addons/metadata.local/local.xml | 3 ++
xbmc/addons/Scraper.cpp | 32 +++++++++++++++++++++++-----
xbmc/addons/Scraper.h | 1 +
xbmc/utils/ScraperParser.cpp | 9 ++++++++
xbmc/utils/ScraperParser.h | 2 +
xbmc/video/windows/GUIWindowVideoBase.cpp | 2 +-
7 files changed, 71 insertions(+), 7 deletions(-)
create mode 100755 addons/metadata.local/addon.xml
create mode 100755 addons/metadata.local/local.xml
diff --git a/addons/metadata.local/addon.xml b/addons/metadata.local/addon.xml
new file mode 100755
index 0000000..908656d
--- /dev/null
+++ b/addons/metadata.local/addon.xml
@@ -0,0 +1,29 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<addon id="metadata.local"
+ name="Local information only"
+ version="1.0.0"
+ provider-name="Team XBMC">
+ <requires>
+ <import addon="xbmc.metadata" version="1.0"/>
+ </requires>
+ <extension point="xbmc.metadata.scraper.albums"
+ language="multi"
+ library="local.xml"/>
+ <extension point="xbmc.metadata.scraper.artists"
+ language="multi"
+ library="local.xml"/>
+ <extension point="xbmc.metadata.scraper.musicvideos"
+ language="multi"
+ library="local.xml"/>
+ <extension point="xbmc.metadata.scraper.tvshows"
+ language="multi"
+ library="local.xml"/>
+ <extension point="xbmc.metadata.scraper.movies"
+ language="multi"
+ library="local.xml"/>
+ <extension point="xbmc.addon.metadata">
+ <summary lang="en">Local Infomation only pseudo-scraper</summary>
+ <description lang="en">Use local information only</description>
+ <platform>all</platform>
+ </extension>
+</addon>
diff --git a/addons/metadata.local/local.xml b/addons/metadata.local/local.xml
new file mode 100755
index 0000000..4d92295
--- /dev/null
+++ b/addons/metadata.local/local.xml
@@ -0,0 +1,3 @@
+<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
+<scraper framework="1.1" noop="true">
+</scraper>
diff --git a/xbmc/addons/Scraper.cpp b/xbmc/addons/Scraper.cpp
index 15f2340..b1f3377 100644
--- a/xbmc/addons/Scraper.cpp
+++ b/xbmc/addons/Scraper.cpp
@@ -409,12 +409,23 @@ bool CScraper::IsInUse() const
return false;
}
+bool CScraper::IsNoop()
+{
+ if (!Load())
+ throw CScraperError();
+
+ return m_parser.IsNoop();
+}
+
// pass in contents of .nfo file; returns URL (possibly empty if none found)
// and may populate strId, or throws CScraperError on error
CScraperUrl CScraper::NfoUrl(const CStdString &sNfoContent)
{
CScraperUrl scurlRet;
+ if (IsNoop())
+ return scurlRet;
+
// scraper function takes contents of .nfo file, returns XML (see below)
vector<CStdString> vcsIn;
vcsIn.push_back(sNfoContent);
@@ -487,14 +498,18 @@ std::vector<CScraperUrl> CScraper::FindMovie(XFILE::CCurlFile &fcurl, const CStd
CStdString sTitle, sTitleYear, sYear;
CUtil::CleanString(sMovie, sTitle, sTitleYear, sYear, true/*fRemoveExt*/, fFirst);
- if (!fFirst || Content() == CONTENT_MUSICVIDEOS)
- sTitle.Replace("-"," ");
-
CLog::Log(LOGDEBUG, "%s: Searching for '%s' using %s scraper "
"(path: '%s', content: '%s', version: '%s')", __FUNCTION__, sTitle.c_str(),
Name().c_str(), Path().c_str(),
ADDON::TranslateContent(Content()).c_str(), Version().c_str());
+ std::vector<CScraperUrl> vcscurl;
+ if (IsNoop())
+ return vcscurl;
+
+ if (!fFirst || Content() == CONTENT_MUSICVIDEOS)
+ sTitle.Replace("-"," ");
+
sTitle.ToLower();
vector<CStdString> vcsIn(1);
@@ -506,7 +521,6 @@ std::vector<CScraperUrl> CScraper::FindMovie(XFILE::CCurlFile &fcurl, const CStd
// request a search URL from the title/filename/etc.
CScraperUrl scurl;
vector<CStdString> vcsOut = Run("CreateSearchUrl", scurl, fcurl, &vcsIn);
- std::vector<CScraperUrl> vcscurl;
if (vcsOut.empty())
{
CLog::Log(LOGDEBUG, "%s: CreateSearchUrl failed", __FUNCTION__);
@@ -613,6 +627,10 @@ std::vector<CMusicAlbumInfo> CScraper::FindAlbum(CCurlFile &fcurl, const CStdStr
sAlbum.c_str(), Name().c_str(), Path().c_str(),
ADDON::TranslateContent(Content()).c_str(), Version().c_str());
+ std::vector<CMusicAlbumInfo> vcali;
+ if (IsNoop())
+ return vcali;
+
// scraper function is given the album and artist as parameters and
// returns an XML <url> element parseable by CScraperUrl
std::vector<CStdString> extras(2);
@@ -625,7 +643,6 @@ std::vector<CMusicAlbumInfo> CScraper::FindAlbum(CCurlFile &fcurl, const CStdStr
if (vcsOut.size() > 1)
CLog::Log(LOGWARNING, "%s: scraper returned multiple results; using first", __FUNCTION__);
- std::vector<CMusicAlbumInfo> vcali;
if (vcsOut.empty() || vcsOut[0].empty())
return vcali;
scurl.ParseString(vcsOut[0]);
@@ -707,6 +724,10 @@ std::vector<CMusicArtistInfo> CScraper::FindArtist(CCurlFile &fcurl,
Name().c_str(), Path().c_str(),
ADDON::TranslateContent(Content()).c_str(), Version().c_str());
+ std::vector<CMusicArtistInfo> vcari;
+ if (IsNoop())
+ return vcari;
+
// scraper function is given the artist as parameter and
// returns an XML <url> element parseable by CScraperUrl
std::vector<CStdString> extras(1);
@@ -715,7 +736,6 @@ std::vector<CMusicArtistInfo> CScraper::FindArtist(CCurlFile &fcurl,
CScraperUrl scurl;
vector<CStdString> vcsOut = RunNoThrow("CreateArtistSearchUrl", scurl, fcurl, &extras);
- std::vector<CMusicArtistInfo> vcari;
if (vcsOut.empty() || vcsOut[0].empty())
return vcari;
scurl.ParseString(vcsOut[0]);
diff --git a/xbmc/addons/Scraper.h b/xbmc/addons/Scraper.h
index 7f26974..db35fa1 100644
--- a/xbmc/addons/Scraper.h
+++ b/xbmc/addons/Scraper.h
@@ -117,6 +117,7 @@ public:
bool Supports(const CONTENT_TYPE &content) const;
bool IsInUse() const;
+ bool IsNoop();
// scraper media functions
CScraperUrl NfoUrl(const CStdString &sNfoContent);
diff --git a/xbmc/utils/ScraperParser.cpp b/xbmc/utils/ScraperParser.cpp
index 1624cea..b63c420 100644
--- a/xbmc/utils/ScraperParser.cpp
+++ b/xbmc/utils/ScraperParser.cpp
@@ -42,12 +42,14 @@ CScraperParser::CScraperParser()
m_pRootElement = NULL;
m_document = NULL;
m_SearchStringEncoding = "UTF-8";
+ m_isNoop = false;
}
CScraperParser::CScraperParser(const CScraperParser& parser)
{
m_document = NULL;
m_SearchStringEncoding = "UTF-8";
+ m_isNoop = false;
*this = parser;
}
@@ -108,6 +110,13 @@ bool CScraperParser::LoadFromXML()
CStdString strValue = m_pRootElement->Value();
if (strValue == "scraper")
{
+ bool isNoop;
+ if (m_pRootElement->QueryBoolAttribute("noop", &isNoop) == TIXML_SUCCESS)
+ {
+ m_isNoop = isNoop;
+ return true;
+ }
+
TiXmlElement* pChildElement = m_pRootElement->FirstChildElement("CreateSearchUrl");
if (pChildElement)
{
diff --git a/xbmc/utils/ScraperParser.h b/xbmc/utils/ScraperParser.h
index 12a1ff0..136f41d 100644
--- a/xbmc/utils/ScraperParser.h
+++ b/xbmc/utils/ScraperParser.h
@@ -46,6 +46,7 @@ public:
~CScraperParser();
CScraperParser& operator= (const CScraperParser& parser);
bool Load(const CStdString& strXMLFile);
+ bool IsNoop() { return m_isNoop; };
void Clear();
const CStdString GetFilename() { return m_strFile; }
@@ -77,6 +78,7 @@ private:
TiXmlElement* m_pRootElement;
const char* m_SearchStringEncoding;
+ bool m_isNoop;
CStdString m_strFile;
ADDON::CScraper* m_scraper;
diff --git a/xbmc/video/windows/GUIWindowVideoBase.cpp b/xbmc/video/windows/GUIWindowVideoBase.cpp
index 1bfa29a..be25187 100644
--- a/xbmc/video/windows/GUIWindowVideoBase.cpp
+++ b/xbmc/video/windows/GUIWindowVideoBase.cpp
@@ -482,7 +482,7 @@ bool CGUIWindowVideoBase::ShowIMDB(CFileItem *item, const ScraperPtr &info2)
if (needsRefresh)
{
bHasInfo = true;
- if (nfoResult == CNfoFile::URL_NFO || nfoResult == CNfoFile::COMBINED_NFO || nfoResult == CNfoFile::FULL_NFO)
+ if (!info->IsNoop() && (nfoResult == CNfoFile::URL_NFO || nfoResult == CNfoFile::COMBINED_NFO || nfoResult == CNfoFile::FULL_NFO))
{
if (CGUIDialogYesNo::ShowAndGetInput(13346,20446,20447,20022))
{
--
1.7.9