diff options
author | Chris \"Koying\" Browet <cbro@semperpax.com> | 2012-07-21 17:43:27 +0200 |
---|---|---|
committer | Chris "Koying" Browet <cbro@semperpax.com> | 2013-04-01 11:25:11 +0200 |
commit | 5527a6bbc966e4b36863a6521f2058b85fc0afd6 (patch) | |
tree | 9100e9afa8a3d9a426e5baebac870cd75efacda7 | |
parent | 84b61eed3d1115650bfd60d3b67b23f4b39093f0 (diff) |
ADD: No-Op scraper support to allow nfo based only library
-rwxr-xr-x | addons/metadata.local/addon.xml | 29 | ||||
-rwxr-xr-x | addons/metadata.local/local.xml | 3 | ||||
-rw-r--r-- | xbmc/NfoFile.cpp | 5 | ||||
-rw-r--r-- | xbmc/addons/Scraper.cpp | 32 | ||||
-rw-r--r-- | xbmc/addons/Scraper.h | 1 | ||||
-rw-r--r-- | xbmc/utils/ScraperParser.cpp | 5 | ||||
-rw-r--r-- | xbmc/utils/ScraperParser.h | 2 | ||||
-rw-r--r-- | xbmc/video/windows/GUIWindowVideoBase.cpp | 2 |
8 files changed, 72 insertions, 7 deletions
diff --git a/addons/metadata.local/addon.xml b/addons/metadata.local/addon.xml new file mode 100755 index 0000000000..908656d8ff --- /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 0000000000..9882f464fe --- /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"> +</scraper> diff --git a/xbmc/NfoFile.cpp b/xbmc/NfoFile.cpp index 953fd8500d..128b07411d 100644 --- a/xbmc/NfoFile.cpp +++ b/xbmc/NfoFile.cpp @@ -131,6 +131,11 @@ CNfoFile::NFOResult CNfoFile::Create(const CStdString& strPath, const ScraperPtr // return value: 0 - success; 1 - no result; skip; 2 - error int CNfoFile::Scrape(ScraperPtr& scraper) { + if (scraper->IsNoop()) + { + m_scurl = CScraperUrl(); + return 0; + } if (scraper->Type() != m_type) return 1; scraper->ClearCache(); diff --git a/xbmc/addons/Scraper.cpp b/xbmc/addons/Scraper.cpp index a7c373ed3b..75d185a79f 100644 --- a/xbmc/addons/Scraper.cpp +++ b/xbmc/addons/Scraper.cpp @@ -412,12 +412,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); @@ -490,14 +501,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); @@ -509,7 +524,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__); @@ -616,6 +630,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); @@ -628,7 +646,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]); @@ -710,6 +727,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); @@ -718,7 +739,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 562a9b20d5..0d542870b4 100644 --- a/xbmc/addons/Scraper.h +++ b/xbmc/addons/Scraper.h @@ -116,6 +116,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 5b4e7d60bd..1b83c6cdbc 100644 --- a/xbmc/utils/ScraperParser.cpp +++ b/xbmc/utils/ScraperParser.cpp @@ -42,6 +42,7 @@ CScraperParser::CScraperParser() m_document = NULL; m_SearchStringEncoding = "UTF-8"; m_scraper = NULL; + m_isNoop = true; } CScraperParser::CScraperParser(const CScraperParser& parser) @@ -50,6 +51,7 @@ CScraperParser::CScraperParser(const CScraperParser& parser) m_document = NULL; m_SearchStringEncoding = "UTF-8"; m_scraper = NULL; + m_isNoop = true; *this = parser; } @@ -115,6 +117,7 @@ bool CScraperParser::LoadFromXML() TiXmlElement* pChildElement = m_pRootElement->FirstChildElement("CreateSearchUrl"); if (pChildElement) { + m_isNoop = false; if (!(m_SearchStringEncoding = pChildElement->Attribute("SearchStringEncoding"))) m_SearchStringEncoding = "UTF-8"; } @@ -122,12 +125,14 @@ bool CScraperParser::LoadFromXML() pChildElement = m_pRootElement->FirstChildElement("CreateArtistSearchUrl"); if (pChildElement) { + m_isNoop = false; if (!(m_SearchStringEncoding = pChildElement->Attribute("SearchStringEncoding"))) m_SearchStringEncoding = "UTF-8"; } pChildElement = m_pRootElement->FirstChildElement("CreateAlbumSearchUrl"); if (pChildElement) { + m_isNoop = false; if (!(m_SearchStringEncoding = pChildElement->Attribute("SearchStringEncoding"))) m_SearchStringEncoding = "UTF-8"; } diff --git a/xbmc/utils/ScraperParser.h b/xbmc/utils/ScraperParser.h index 92241bed5c..06c775a65a 100644 --- a/xbmc/utils/ScraperParser.h +++ b/xbmc/utils/ScraperParser.h @@ -45,6 +45,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; } @@ -76,6 +77,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 a2f69566d0..b1376612e1 100644 --- a/xbmc/video/windows/GUIWindowVideoBase.cpp +++ b/xbmc/video/windows/GUIWindowVideoBase.cpp @@ -511,7 +511,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)) { |