Advertisement
Koying

[PATCH] ADD: No-Op scraper

Jul 29th, 2012
472
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Diff 8.62 KB | None | 0 0
  1. From f419ae1e224b683f910c6f43120766ca1ef9b3cb Mon Sep 17 00:00:00 2001
  2. From: "Chris \"Koying\" Browet" <cbro@semperpax.com>
  3. Date: Sat, 21 Jul 2012 17:43:27 +0200
  4. Subject: [PATCH] ADD: No-Op scraper support to allow nfo based only library
  5.  
  6. ---
  7. addons/metadata.local/addon.xml           |   29 ++++++++++++++++++++++++++
  8.  addons/metadata.local/local.xml           |    3 ++
  9.  xbmc/addons/Scraper.cpp                   |   32 +++++++++++++++++++++++-----
  10.  xbmc/addons/Scraper.h                     |    1 +
  11.  xbmc/utils/ScraperParser.cpp              |    9 ++++++++
  12.  xbmc/utils/ScraperParser.h                |    2 +
  13.  xbmc/video/windows/GUIWindowVideoBase.cpp |    2 +-
  14.  7 files changed, 71 insertions(+), 7 deletions(-)
  15.  create mode 100755 addons/metadata.local/addon.xml
  16.  create mode 100755 addons/metadata.local/local.xml
  17.  
  18. diff --git a/addons/metadata.local/addon.xml b/addons/metadata.local/addon.xml
  19. new file mode 100755
  20. index 0000000..908656d
  21. --- /dev/null
  22. +++ b/addons/metadata.local/addon.xml
  23. @@ -0,0 +1,29 @@
  24. +<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  25. +<addon id="metadata.local"
  26. +       name="Local information only"
  27. +       version="1.0.0"
  28. +       provider-name="Team XBMC">
  29. +  <requires>
  30. +    <import addon="xbmc.metadata" version="1.0"/>
  31. +  </requires>
  32. +  <extension point="xbmc.metadata.scraper.albums"
  33. +             language="multi"
  34. +             library="local.xml"/>
  35. +  <extension point="xbmc.metadata.scraper.artists"
  36. +             language="multi"
  37. +             library="local.xml"/>
  38. +  <extension point="xbmc.metadata.scraper.musicvideos"
  39. +             language="multi"
  40. +             library="local.xml"/>
  41. +  <extension point="xbmc.metadata.scraper.tvshows"
  42. +             language="multi"
  43. +             library="local.xml"/>
  44. +  <extension point="xbmc.metadata.scraper.movies"
  45. +             language="multi"
  46. +             library="local.xml"/>
  47. +  <extension point="xbmc.addon.metadata">
  48. +    <summary lang="en">Local Infomation only pseudo-scraper</summary>
  49. +    <description lang="en">Use local information only</description>
  50. +    <platform>all</platform>
  51. +  </extension>
  52. +</addon>
  53. diff --git a/addons/metadata.local/local.xml b/addons/metadata.local/local.xml
  54. new file mode 100755
  55. index 0000000..4d92295
  56. --- /dev/null
  57. +++ b/addons/metadata.local/local.xml
  58. @@ -0,0 +1,3 @@
  59. +<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
  60. +<scraper framework="1.1" noop="true">
  61. +</scraper>
  62. diff --git a/xbmc/addons/Scraper.cpp b/xbmc/addons/Scraper.cpp
  63. index 15f2340..b1f3377 100644
  64. --- a/xbmc/addons/Scraper.cpp
  65. +++ b/xbmc/addons/Scraper.cpp
  66. @@ -409,12 +409,23 @@ bool CScraper::IsInUse() const
  67.    return false;
  68.  }
  69.  
  70. +bool CScraper::IsNoop()
  71. +{
  72. +    if (!Load())
  73. +      throw CScraperError();
  74. +
  75. +    return m_parser.IsNoop();
  76. +}
  77. +
  78.  // pass in contents of .nfo file; returns URL (possibly empty if none found)
  79.  // and may populate strId, or throws CScraperError on error
  80.  CScraperUrl CScraper::NfoUrl(const CStdString &sNfoContent)
  81.  {
  82.    CScraperUrl scurlRet;
  83.  
  84. +  if (IsNoop())
  85. +    return scurlRet;
  86. +
  87.    // scraper function takes contents of .nfo file, returns XML (see below)
  88.    vector<CStdString> vcsIn;
  89.    vcsIn.push_back(sNfoContent);
  90. @@ -487,14 +498,18 @@ std::vector<CScraperUrl> CScraper::FindMovie(XFILE::CCurlFile &fcurl, const CStd
  91.    CStdString sTitle, sTitleYear, sYear;
  92.    CUtil::CleanString(sMovie, sTitle, sTitleYear, sYear, true/*fRemoveExt*/, fFirst);
  93.  
  94. -  if (!fFirst || Content() == CONTENT_MUSICVIDEOS)
  95. -    sTitle.Replace("-"," ");
  96. -
  97.    CLog::Log(LOGDEBUG, "%s: Searching for '%s' using %s scraper "
  98.      "(path: '%s', content: '%s', version: '%s')", __FUNCTION__, sTitle.c_str(),
  99.      Name().c_str(), Path().c_str(),
  100.      ADDON::TranslateContent(Content()).c_str(), Version().c_str());
  101.  
  102. +  std::vector<CScraperUrl> vcscurl;
  103. +  if (IsNoop())
  104. +    return vcscurl;
  105. +
  106. +  if (!fFirst || Content() == CONTENT_MUSICVIDEOS)
  107. +    sTitle.Replace("-"," ");
  108. +
  109.    sTitle.ToLower();
  110.  
  111.    vector<CStdString> vcsIn(1);
  112. @@ -506,7 +521,6 @@ std::vector<CScraperUrl> CScraper::FindMovie(XFILE::CCurlFile &fcurl, const CStd
  113.    // request a search URL from the title/filename/etc.
  114.    CScraperUrl scurl;
  115.    vector<CStdString> vcsOut = Run("CreateSearchUrl", scurl, fcurl, &vcsIn);
  116. -  std::vector<CScraperUrl> vcscurl;
  117.    if (vcsOut.empty())
  118.    {
  119.      CLog::Log(LOGDEBUG, "%s: CreateSearchUrl failed", __FUNCTION__);
  120. @@ -613,6 +627,10 @@ std::vector<CMusicAlbumInfo> CScraper::FindAlbum(CCurlFile &fcurl, const CStdStr
  121.      sAlbum.c_str(), Name().c_str(), Path().c_str(),
  122.      ADDON::TranslateContent(Content()).c_str(), Version().c_str());
  123.  
  124. +  std::vector<CMusicAlbumInfo> vcali;
  125. +  if (IsNoop())
  126. +    return vcali;
  127. +
  128.    // scraper function is given the album and artist as parameters and
  129.    // returns an XML <url> element parseable by CScraperUrl
  130.    std::vector<CStdString> extras(2);
  131. @@ -625,7 +643,6 @@ std::vector<CMusicAlbumInfo> CScraper::FindAlbum(CCurlFile &fcurl, const CStdStr
  132.    if (vcsOut.size() > 1)
  133.      CLog::Log(LOGWARNING, "%s: scraper returned multiple results; using first", __FUNCTION__);
  134.  
  135. -  std::vector<CMusicAlbumInfo> vcali;
  136.    if (vcsOut.empty() || vcsOut[0].empty())
  137.      return vcali;
  138.    scurl.ParseString(vcsOut[0]);
  139. @@ -707,6 +724,10 @@ std::vector<CMusicArtistInfo> CScraper::FindArtist(CCurlFile &fcurl,
  140.      Name().c_str(), Path().c_str(),
  141.      ADDON::TranslateContent(Content()).c_str(), Version().c_str());
  142.  
  143. +  std::vector<CMusicArtistInfo> vcari;
  144. +  if (IsNoop())
  145. +    return vcari;
  146. +
  147.    // scraper function is given the artist as parameter and
  148.    // returns an XML <url> element parseable by CScraperUrl
  149.    std::vector<CStdString> extras(1);
  150. @@ -715,7 +736,6 @@ std::vector<CMusicArtistInfo> CScraper::FindArtist(CCurlFile &fcurl,
  151.    CScraperUrl scurl;
  152.    vector<CStdString> vcsOut = RunNoThrow("CreateArtistSearchUrl", scurl, fcurl, &extras);
  153.  
  154. -  std::vector<CMusicArtistInfo> vcari;
  155.    if (vcsOut.empty() || vcsOut[0].empty())
  156.      return vcari;
  157.    scurl.ParseString(vcsOut[0]);
  158. diff --git a/xbmc/addons/Scraper.h b/xbmc/addons/Scraper.h
  159. index 7f26974..db35fa1 100644
  160. --- a/xbmc/addons/Scraper.h
  161. +++ b/xbmc/addons/Scraper.h
  162. @@ -117,6 +117,7 @@ public:
  163.    bool Supports(const CONTENT_TYPE &content) const;
  164.  
  165.    bool IsInUse() const;
  166. +  bool IsNoop();
  167.  
  168.    // scraper media functions
  169.    CScraperUrl NfoUrl(const CStdString &sNfoContent);
  170. diff --git a/xbmc/utils/ScraperParser.cpp b/xbmc/utils/ScraperParser.cpp
  171. index 1624cea..b63c420 100644
  172. --- a/xbmc/utils/ScraperParser.cpp
  173. +++ b/xbmc/utils/ScraperParser.cpp
  174. @@ -42,12 +42,14 @@ CScraperParser::CScraperParser()
  175.    m_pRootElement = NULL;
  176.    m_document = NULL;
  177.    m_SearchStringEncoding = "UTF-8";
  178. +  m_isNoop = false;
  179.  }
  180.  
  181.  CScraperParser::CScraperParser(const CScraperParser& parser)
  182.  {
  183.    m_document = NULL;
  184.    m_SearchStringEncoding = "UTF-8";
  185. +  m_isNoop = false;
  186.    *this = parser;
  187.  }
  188.  
  189. @@ -108,6 +110,13 @@ bool CScraperParser::LoadFromXML()
  190.    CStdString strValue = m_pRootElement->Value();
  191.    if (strValue == "scraper")
  192.    {
  193. +    bool isNoop;
  194. +    if (m_pRootElement->QueryBoolAttribute("noop", &isNoop) == TIXML_SUCCESS)
  195. +    {
  196. +      m_isNoop = isNoop;
  197. +      return true;
  198. +    }
  199. +
  200.      TiXmlElement* pChildElement = m_pRootElement->FirstChildElement("CreateSearchUrl");
  201.      if (pChildElement)
  202.      {
  203. diff --git a/xbmc/utils/ScraperParser.h b/xbmc/utils/ScraperParser.h
  204. index 12a1ff0..136f41d 100644
  205. --- a/xbmc/utils/ScraperParser.h
  206. +++ b/xbmc/utils/ScraperParser.h
  207. @@ -46,6 +46,7 @@ public:
  208.    ~CScraperParser();
  209.    CScraperParser& operator= (const CScraperParser& parser);
  210.    bool Load(const CStdString& strXMLFile);
  211. +  bool IsNoop() { return m_isNoop; };
  212.  
  213.    void Clear();
  214.    const CStdString GetFilename() { return m_strFile; }
  215. @@ -77,6 +78,7 @@ private:
  216.    TiXmlElement* m_pRootElement;
  217.  
  218.    const char* m_SearchStringEncoding;
  219. +  bool m_isNoop;
  220.  
  221.    CStdString m_strFile;
  222.    ADDON::CScraper* m_scraper;
  223. diff --git a/xbmc/video/windows/GUIWindowVideoBase.cpp b/xbmc/video/windows/GUIWindowVideoBase.cpp
  224. index 1bfa29a..be25187 100644
  225. --- a/xbmc/video/windows/GUIWindowVideoBase.cpp
  226. +++ b/xbmc/video/windows/GUIWindowVideoBase.cpp
  227. @@ -482,7 +482,7 @@ bool CGUIWindowVideoBase::ShowIMDB(CFileItem *item, const ScraperPtr &info2)
  228.        if (needsRefresh)
  229.        {
  230.          bHasInfo = true;
  231. -        if (nfoResult == CNfoFile::URL_NFO || nfoResult == CNfoFile::COMBINED_NFO || nfoResult == CNfoFile::FULL_NFO)
  232. +        if (!info->IsNoop() && (nfoResult == CNfoFile::URL_NFO || nfoResult == CNfoFile::COMBINED_NFO || nfoResult == CNfoFile::FULL_NFO))
  233.          {
  234.            if (CGUIDialogYesNo::ShowAndGetInput(13346,20446,20447,20022))
  235.            {
  236. --
  237. 1.7.9
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement