projects/RPi/patches/kodi: update RPi support patch

Signed-off-by: Stephan Raue <stephan@openelec.tv>
This commit is contained in:
Stephan Raue 2014-11-22 16:09:52 +01:00
parent ebcb3e8d10
commit 60c0006307

View File

@ -114,451 +114,6 @@ index 0000000..4ac5636
+ }
+ }
From 5116901918bb718694906bbe731df901a33e356b Mon Sep 17 00:00:00 2001
From: Jonathan Marshall <jmarshall@xbmc.org>
Date: Sat, 2 Nov 2013 23:49:17 +1300
Subject: [PATCH 03/96] adds GetTvShowSeasons
---
xbmc/video/VideoDatabase.cpp | 30 ++++++++++++++++++++++++------
xbmc/video/VideoDatabase.h | 1 +
2 files changed, 25 insertions(+), 6 deletions(-)
diff --git a/xbmc/video/VideoDatabase.cpp b/xbmc/video/VideoDatabase.cpp
index 21391dd..0249ed6 100644
--- a/xbmc/video/VideoDatabase.cpp
+++ b/xbmc/video/VideoDatabase.cpp
@@ -4213,7 +4213,7 @@ bool CVideoDatabase::RemoveArtForItem(int mediaId, const MediaType &mediaType, c
return result;
}
-bool CVideoDatabase::GetTvShowSeasonArt(int showId, map<int, map<string, string> > &seasonArt)
+bool CVideoDatabase::GetTvShowSeasons(int showId, map<int, int> &seasons)
{
try
{
@@ -4224,19 +4224,37 @@ bool CVideoDatabase::GetTvShowSeasonArt(int showId, map<int, map<string, string>
CStdString sql = PrepareSQL("select idSeason,season from seasons where idShow=%i", showId);
m_pDS2->query(sql.c_str());
- vector< pair<int, int> > seasons;
+ seasons.clear();
while (!m_pDS2->eof())
{
- seasons.push_back(make_pair(m_pDS2->fv(0).get_asInt(), m_pDS2->fv(1).get_asInt()));
+ seasons.insert(make_pair(m_pDS2->fv(1).get_asInt(), m_pDS2->fv(0).get_asInt()));
m_pDS2->next();
}
m_pDS2->close();
+ return true;
+ }
+ catch (...)
+ {
+ CLog::Log(LOGERROR, "%s(%d) failed", __FUNCTION__, showId);
+ }
+ return false;
+}
+
+bool CVideoDatabase::GetTvShowSeasonArt(int showId, map<int, map<string, string> > &seasonArt)
+{
+ try
+ {
+ if (NULL == m_pDB.get()) return false;
+ if (NULL == m_pDS2.get()) return false; // using dataset 2 as we're likely called in loops on dataset 1
+
+ map<int, int> seasons;
+ GetTvShowSeasons(showId, seasons);
- for (vector< pair<int,int> >::const_iterator i = seasons.begin(); i != seasons.end(); ++i)
+ for (map<int, int>::const_iterator i = seasons.begin(); i != seasons.end(); ++i)
{
map<string, string> art;
- GetArtForItem(i->first, MediaTypeSeason, art);
- seasonArt.insert(make_pair(i->second,art));
+ GetArtForItem(i->second, MediaTypeSeason, art);
+ seasonArt.insert(make_pair(i->first,art));
}
return true;
}
diff --git a/xbmc/video/VideoDatabase.h b/xbmc/video/VideoDatabase.h
index 78259ed..cbb26b7 100644
--- a/xbmc/video/VideoDatabase.h
+++ b/xbmc/video/VideoDatabase.h
@@ -746,6 +746,7 @@ class CVideoDatabase : public CDatabase
std::string GetArtForItem(int mediaId, const MediaType &mediaType, const std::string &artType);
bool RemoveArtForItem(int mediaId, const MediaType &mediaType, const std::string &artType);
bool RemoveArtForItem(int mediaId, const MediaType &mediaType, const std::set<std::string> &artTypes);
+ bool GetTvShowSeasons(int showId, std::map<int, int> &seasons);
bool GetTvShowSeasonArt(int mediaId, std::map<int, std::map<std::string, std::string> > &seasonArt);
bool GetArtTypes(const MediaType &mediaType, std::vector<std::string> &artTypes);
From eb300fcaab79f877d913e2d38fb15cdd97858fc6 Mon Sep 17 00:00:00 2001
From: Jonathan Marshall <jmarshall@xbmc.org>
Date: Sat, 2 Nov 2013 23:50:10 +1300
Subject: [PATCH 04/96] move AddSeason() public.
---
xbmc/video/VideoDatabase.h | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/xbmc/video/VideoDatabase.h b/xbmc/video/VideoDatabase.h
index cbb26b7..1a79c00 100644
--- a/xbmc/video/VideoDatabase.h
+++ b/xbmc/video/VideoDatabase.h
@@ -757,6 +757,7 @@ class CVideoDatabase : public CDatabase
virtual bool GetFilter(CDbUrl &videoUrl, Filter &filter, SortDescription &sorting);
+ int AddSeason(int showID, int season);
int AddSet(const CStdString& strSet);
void ClearMovieSet(int idMovie);
void SetMovieSet(int idMovie, int idSet);
@@ -787,7 +788,6 @@ class CVideoDatabase : public CDatabase
int AddTvShow();
int AddMusicVideo(const CStdString& strFilenameAndPath);
- int AddSeason(int showID, int season);
/*! \brief Adds a path to the tvshow link table.
\param idShow the id of the show.
From 69ed0c95572c3371d2f6d45cfc27610656e6002f Mon Sep 17 00:00:00 2001
From: Jonathan Marshall <jmarshall@xbmc.org>
Date: Sat, 2 Nov 2013 23:48:24 +1300
Subject: [PATCH 05/96] adds GetArt function to (video) scraper, allowing art
to be fetched given the video identifier.
---
xbmc/addons/Scraper.cpp | 38 ++++++++++++++++++++++++++++++++++++++
xbmc/addons/Scraper.h | 3 +++
xbmc/video/VideoInfoDownloader.cpp | 5 +++++
xbmc/video/VideoInfoDownloader.h | 7 +++++++
4 files changed, 53 insertions(+)
diff --git a/xbmc/addons/Scraper.cpp b/xbmc/addons/Scraper.cpp
index 4d22ce7..36865ac 100644
--- a/xbmc/addons/Scraper.cpp
+++ b/xbmc/addons/Scraper.cpp
@@ -924,6 +924,44 @@ EPISODELIST CScraper::GetEpisodeList(XFILE::CCurlFile &fcurl, const CScraperUrl
return vcep;
}
+// takes URL; returns true and populates art XML details on success, false otherwise
+bool CScraper::GetArt(XFILE::CCurlFile &fcurl, const std::string &id, CVideoInfoTag &video)
+{
+ CLog::Log(LOGDEBUG, "%s: Reading art for '%s' using %s scraper "
+ "(file: '%s', content: '%s', version: '%s')", __FUNCTION__, id.c_str(), Name().c_str(), Path().c_str(),
+ ADDON::TranslateContent(Content()).c_str(), Version().asString().c_str());
+
+ video.Reset();
+ vector<string> vcsIn;
+ CScraperUrl scurl;
+ vcsIn.push_back(id);
+ vector<string> vcsOut = RunNoThrow("GetArt", scurl, fcurl, &vcsIn);
+
+ // parse XML output
+ bool fRet(false);
+ for (vector<string>::const_iterator i = vcsOut.begin(); i != vcsOut.end(); ++i)
+ {
+ CXBMCTinyXML doc;
+ doc.Parse(*i, TIXML_ENCODING_UTF8);
+ if (!doc.RootElement())
+ {
+ CLog::Log(LOGERROR, "%s: Unable to parse XML", __FUNCTION__);
+ continue;
+ }
+
+ TiXmlHandle xhDoc(&doc);
+ TiXmlElement *pxeDetails = xhDoc.FirstChild("details").Element();
+ if (!pxeDetails)
+ {
+ CLog::Log(LOGERROR, "%s: Invalid XML file (want <details>)", __FUNCTION__);
+ continue;
+ }
+ video.Load(pxeDetails, true/*fChain*/);
+ fRet = true; // but don't exit in case of chaining
+ }
+ return fRet;
+}
+
// takes URL; returns true and populates video details on success, false otherwise
bool CScraper::GetVideoDetails(XFILE::CCurlFile &fcurl, const CScraperUrl &scurl,
bool fMovie/*else episode*/, CVideoInfoTag &video)
diff --git a/xbmc/addons/Scraper.h b/xbmc/addons/Scraper.h
index c7274f2..5df5296 100644
--- a/xbmc/addons/Scraper.h
+++ b/xbmc/addons/Scraper.h
@@ -18,6 +18,8 @@
* <http://www.gnu.org/licenses/>.
*
*/
+
+#include <string>
#include "addons/Addon.h"
#include "XBDateTime.h"
#include "utils/ScraperUrl.h"
@@ -146,6 +148,7 @@ class CScraper : public CAddon
CAlbum &album);
bool GetArtistDetails(XFILE::CCurlFile &fcurl, const CScraperUrl &scurl,
const std::string &sSearch, CArtist &artist);
+ bool GetArt(XFILE::CCurlFile &fcurl, const std::string &id, CVideoInfoTag &video);
private:
CScraper(const CScraper &rhs);
diff --git a/xbmc/video/VideoInfoDownloader.cpp b/xbmc/video/VideoInfoDownloader.cpp
index f33ac8a..5d84734 100644
--- a/xbmc/video/VideoInfoDownloader.cpp
+++ b/xbmc/video/VideoInfoDownloader.cpp
@@ -191,6 +191,11 @@ bool CVideoInfoDownloader::GetDetails(const CScraperUrl &url,
return m_info->GetVideoDetails(*m_http, url, true/*fMovie*/, movieDetails);
}
+bool CVideoInfoDownloader::GetArt(const std::string &id, CVideoInfoTag &details)
+{
+ return m_info->GetArt(*m_http, id, details);
+}
+
bool CVideoInfoDownloader::GetEpisodeDetails(const CScraperUrl &url,
CVideoInfoTag &movieDetails,
CGUIDialogProgress *pProgress /* = NULL */)
diff --git a/xbmc/video/VideoInfoDownloader.h b/xbmc/video/VideoInfoDownloader.h
index 22ac229..75bc341 100644
--- a/xbmc/video/VideoInfoDownloader.h
+++ b/xbmc/video/VideoInfoDownloader.h
@@ -59,6 +59,13 @@ class CVideoInfoDownloader : public CThread
static void ShowErrorDialog(const ADDON::CScraperError &sce);
+ /*! \brief Grab art URLs for an item with the scraper
+ \param id the unique identifier used by the scraper to describe the item.
+ \param details [out] the video info tag structure to fill with art.
+ \return true on success, false on failure.
+ */
+ bool GetArt(const std::string &id, CVideoInfoTag &details);
+
protected:
enum LOOKUP_STATE { DO_NOTHING = 0,
FIND_MOVIE = 1,
From e56fe6d246ef40dca634d78f393279e361c90e9f Mon Sep 17 00:00:00 2001
From: Jonathan Marshall <jmarshall@xbmc.org>
Date: Sat, 2 Nov 2013 23:53:14 +1300
Subject: [PATCH 06/96] refresh season art if a new season is found that isn't
recorded in the database yet. Fixes #14339
---
xbmc/video/VideoInfoScanner.cpp | 33 ++++++++++++++++++++++++++++++++-
xbmc/video/VideoInfoScanner.h | 2 ++
2 files changed, 34 insertions(+), 1 deletion(-)
diff --git a/xbmc/video/VideoInfoScanner.cpp b/xbmc/video/VideoInfoScanner.cpp
index cb6a4fe..fe1355c 100644
--- a/xbmc/video/VideoInfoScanner.cpp
+++ b/xbmc/video/VideoInfoScanner.cpp
@@ -1405,6 +1405,10 @@ namespace VIDEO
pDlgProgress->Progress();
}
+ bool updateSeasons = false;
+ map<int, int> seasons;
+ m_database.GetTvShowSeasons(showInfo.m_iDbId, seasons);
+
EPISODELIST episodes;
bool hasEpisodeGuide = false;
@@ -1453,6 +1457,8 @@ namespace VIDEO
}
if (AddVideo(&item, CONTENT_TVSHOWS, file->isFolder, true, &showInfo) < 0)
return INFO_ERROR;
+ if (seasons.find(item.GetVideoInfoTag()->m_iSeason) == seasons.end())
+ updateSeasons = true;
continue;
}
@@ -1582,6 +1588,8 @@ namespace VIDEO
if (AddVideo(&item, CONTENT_TVSHOWS, file->isFolder, useLocal, &showInfo) < 0)
return INFO_ERROR;
+ if (seasons.find(item.GetVideoInfoTag()->m_iSeason) == seasons.end())
+ updateSeasons = true;
}
else
{
@@ -1590,9 +1598,27 @@ namespace VIDEO
file->cDate.GetAsLocalizedDate().c_str(), file->strTitle.c_str());
}
}
+ if (updateSeasons)
+ UpdateSeasons(showInfo, scraper, useLocal);
return INFO_ADDED;
}
+ void CVideoInfoScanner::UpdateSeasons(const CVideoInfoTag &showInfo, const ADDON::ScraperPtr &scraper, bool useLocal)
+ {
+ map<int, map<string, string> > seasonArt;
+ m_database.GetTvShowSeasonArt(showInfo.m_iDbId, seasonArt);
+ CVideoInfoTag details;
+ CVideoInfoDownloader loader(scraper);
+ loader.GetArt(showInfo.m_strIMDBNumber, details);
+ details.m_strPath = showInfo.m_strPath;
+ GetSeasonThumbs(details, seasonArt, CVideoThumbLoader::GetArtTypes("season"), useLocal);
+ for (map<int, map<string, string> >::iterator i = seasonArt.begin(); i != seasonArt.end(); ++i)
+ {
+ int seasonID = m_database.AddSeason(showInfo.m_iDbId, i->first);
+ m_database.SetArtForItem(seasonID, "season", i->second);
+ }
+ }
+
CStdString CVideoInfoScanner::GetnfoFile(CFileItem *item, bool bGrabAny) const
{
CStdString nfoFile;
@@ -1857,6 +1883,11 @@ namespace VIDEO
}
for (int season = -1; season <= maxSeasons; season++)
{
+ // skip if we already have some art
+ map<int, map<string, string> >::const_iterator i = seasonArt.find(season);
+ if (i != seasonArt.end() && !i->second.empty())
+ continue;
+
map<string, string> art;
if (useLocal)
{
@@ -1910,7 +1941,7 @@ namespace VIDEO
art.insert(make_pair(artTypes.front(), image));
}
- seasonArt.insert(make_pair(season, art));
+ seasonArt[season] = art;
}
}
diff --git a/xbmc/video/VideoInfoScanner.h b/xbmc/video/VideoInfoScanner.h
index 28bd2bf..a0f9d53 100644
--- a/xbmc/video/VideoInfoScanner.h
+++ b/xbmc/video/VideoInfoScanner.h
@@ -232,6 +232,8 @@ namespace VIDEO
*/
INFO_RET OnProcessSeriesFolder(EPISODELIST& files, const ADDON::ScraperPtr &scraper, bool useLocal, const CVideoInfoTag& showInfo, CGUIDialogProgress* pDlgProgress = NULL);
+ void UpdateSeasons(const CVideoInfoTag &showInfo, const ADDON::ScraperPtr &scraper, bool useLocal);
+
bool EnumerateSeriesFolder(CFileItem* item, EPISODELIST& episodeList);
bool ProcessItemByVideoInfoTag(const CFileItem *item, EPISODELIST &episodeList);
From 1b57e14b00d8fc755c66f646e4bfaebf9beb927d Mon Sep 17 00:00:00 2001
From: Jonathan Marshall <jmarshall@xbmc.org>
Date: Sat, 2 Nov 2013 23:53:34 +1300
Subject: [PATCH 07/96] REMOVEME: updated thetvdb.com scraper to support art
updates
---
addons/metadata.tvdb.com/tvdb.xml | 59 +++++++++++++++++++++++++--------------
1 file changed, 38 insertions(+), 21 deletions(-)
diff --git a/addons/metadata.tvdb.com/tvdb.xml b/addons/metadata.tvdb.com/tvdb.xml
index f27e4fc..bdf329f 100644
--- a/addons/metadata.tvdb.com/tvdb.xml
+++ b/addons/metadata.tvdb.com/tvdb.xml
@@ -102,57 +102,74 @@
<RegExp input="$$5" output="&lt;actor&gt;&lt;name&gt;\2&lt;/name&gt;&lt;role&gt;\3&lt;/role&gt;&lt;/actor&gt;" dest="4+">
<expression repeat="yes" noclean="1,2,3">&lt;Actor&gt;.*?&lt;Image&gt;([^&lt;]*)&lt;/Image&gt;.*?&lt;Name&gt;([^&lt;]*)&lt;/Name&gt;.*?&lt;Role&gt;([^&lt;]*)</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$2" output="&lt;chain function=&quot;GetArt&quot;&gt;\1&lt;/chain&gt;" dest="4+">
+ <expression/>
+ </RegExp>
+ <RegExp input="$$3" output="\1" dest="6">
+ <expression>.*/(.*).zip</expression>
+ </RegExp>
+ <RegExp input="$$3" output="&lt;episodeguide&gt;&lt;url cache=&quot;$$2-$$6.xml&quot;&gt;\1&lt;/url&gt;&lt;/episodeguide&gt;" dest="4+">
+ <expression/>
+ </RegExp>
+ <expression noclean="1"/>
+ </RegExp>
+ </GetDetails>
+
+ <GetArt dest="3">
+ <RegExp input="$$4" output="&lt;details&gt;\1&lt;/details&gt;" dest="3">
+ <RegExp input="$$1" output="&lt;url function=&quot;ParseArt&quot; cache=&quot;\1-banners.xml&quot;&gt;http://thetvdb.com/api/1D62F2F90030C444/series/\1/banners.xml&lt;/url&gt;" dest="4">
+ <expression/>
+ </RegExp>
+ <expression noclean="1"/>
+ </RegExp>
+ </GetArt>
+ <ParseArt dest="3">
+ <RegExp input="$$4" output="&lt;details&gt;\1&lt;/details&gt;" dest="3">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;series&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;graphical&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;$INFO[language]&lt;/Language&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;series&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;graphical&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;((?!$INFO[language])[a-z])*&lt;/Language&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;series&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;text&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;$INFO[language]&lt;/Language&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;series&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;text&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;((?!$INFO[language])[a-z])*&lt;/Language&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;banner&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;series&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;blank&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;&lt;/Language&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;poster&quot; type=&quot;season&quot; season=&quot;\2&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;poster&quot; type=&quot;season&quot; season=&quot;\2&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;season&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;season&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;$INFO[language]&lt;/Language&gt;[^&lt;]*[^S]*Season&gt;([0-9]+)&lt;/Season&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;poster&quot; type=&quot;season&quot; season=&quot;\3&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;poster&quot; type=&quot;season&quot; season=&quot;\3&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;season&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;season&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;((?!$INFO[language])[a-z])*&lt;/Language&gt;[^&lt;]*[^S]*Season&gt;([0-9]+)&lt;/Season&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;banner&quot; type=&quot;season&quot; season=&quot;\2&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;banner&quot; type=&quot;season&quot; season=&quot;\2&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;season&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;seasonwide&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;$INFO[language]&lt;/Language&gt;[^&lt;]*[^S]*Season&gt;([0-9]+)&lt;/Season&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;banner&quot; type=&quot;season&quot; season=&quot;\3&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;banner&quot; type=&quot;season&quot; season=&quot;\3&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;season&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;seasonwide&lt;/BannerType2&gt;[^&lt;]*&lt;Language&gt;((?!$INFO[language])[a-z])*&lt;/Language&gt;[^&lt;]*[^S]*Season&gt;([0-9]+)&lt;/Season&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;poster&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;poster&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;poster&lt;/BannerType&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb aspect=&quot;poster&quot; type=&quot;season&quot; season=&quot;-1&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb aspect=&quot;poster&quot; type=&quot;season&quot; season=&quot;-1&quot;&gt;http://thetvdb.com/banners/\1&lt;/thumb&gt;" dest="4+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;poster&lt;/BannerType&gt;</expression>
</RegExp>
- <RegExp conditional="fanart" input="$$7" output="&lt;fanart url=&quot;http://thetvdb.com/banners/&quot;&gt;\1&lt;/fanart&gt;" dest="4+">
- <RegExp input="$$5" output="&lt;thumb dim=&quot;\2&quot; colors=&quot;\3&quot; preview=&quot;_cache/\1&quot;&gt;\1&lt;/thumb&gt;" dest="7+">
+ <RegExp conditional="fanart" input="$$5" output="&lt;fanart url=&quot;http://thetvdb.com/banners/&quot;&gt;\1&lt;/fanart&gt;" dest="4+">
+ <RegExp input="$$1" output="&lt;thumb dim=&quot;\2&quot; colors=&quot;\3&quot; preview=&quot;_cache/\1&quot;&gt;\1&lt;/thumb&gt;" dest="5">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;fanart&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;([^&lt;]*)&lt;/BannerType2&gt;[^&lt;]*&lt;Colors&gt;([^&lt;]*)&lt;/Colors&gt;[^&lt;]*&lt;Language&gt;$INFO[language]&lt;/Language&gt;</expression>
</RegExp>
- <RegExp input="$$5" output="&lt;thumb dim=&quot;\2&quot; colors=&quot;\3&quot; preview=&quot;_cache/\1&quot;&gt;\1&lt;/thumb&gt;" dest="7+">
+ <RegExp input="$$1" output="&lt;thumb dim=&quot;\2&quot; colors=&quot;\3&quot; preview=&quot;_cache/\1&quot;&gt;\1&lt;/thumb&gt;" dest="5+">
<expression repeat="yes">&lt;BannerPath&gt;([^&lt;]*)&lt;/BannerPath&gt;[^&lt;]*&lt;BannerType&gt;fanart&lt;/BannerType&gt;[^&lt;]*&lt;BannerType2&gt;([^&lt;]*)&lt;/BannerType2&gt;[^&lt;]*&lt;Colors&gt;([^&lt;]*)&lt;/Colors&gt;[^&lt;]*&lt;Language&gt;((?!$INFO[language])[a-z])*&lt;/Language&gt;</expression>
</RegExp>
<expression noclean="1"/>
</RegExp>
- <RegExp input="$$3" output="\1" dest="6">
- <expression>.*/(.*).zip</expression>
- </RegExp>
- <RegExp input="$$3" output="&lt;episodeguide&gt;&lt;url cache=&quot;$$2-$$6.xml&quot;&gt;\1&lt;/url&gt;&lt;/episodeguide&gt;" dest="4+">
- <expression/>
- </RegExp>
<expression noclean="1"/>
</RegExp>
- </GetDetails>
+ </ParseArt>
<!-- input: $1=html !-->
<!-- input: $2=series url !-->
From 93085d1cd4ca39f8be362d187a289dcfdbb259e2 Mon Sep 17 00:00:00 2001
From: popcornmix <popcornmix@gmail.com>
Date: Sat, 2 Aug 2014 17:48:04 +0100
@ -10419,38 +9974,6 @@ index 03a05de..c0ff30d 100644
// we only want to upload frames once
if (buffer->flipindex++)
From b1b3b79b2dfd39574fb9fe6dcbc3c2e4cf7077cc Mon Sep 17 00:00:00 2001
From: popcornmix <popcornmix@gmail.com>
Date: Wed, 19 Nov 2014 20:36:56 +0000
Subject: [PATCH 95/96] scraper: Fix for losing infotags when artwork grab
fails suggested by menakite
---
xbmc/addons/Scraper.cpp | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/xbmc/addons/Scraper.cpp b/xbmc/addons/Scraper.cpp
index 36865ac..d430f15 100644
--- a/xbmc/addons/Scraper.cpp
+++ b/xbmc/addons/Scraper.cpp
@@ -931,7 +931,6 @@ bool CScraper::GetArt(XFILE::CCurlFile &fcurl, const std::string &id, CVideoInfo
"(file: '%s', content: '%s', version: '%s')", __FUNCTION__, id.c_str(), Name().c_str(), Path().c_str(),
ADDON::TranslateContent(Content()).c_str(), Version().asString().c_str());
- video.Reset();
vector<string> vcsIn;
CScraperUrl scurl;
vcsIn.push_back(id);
@@ -956,6 +955,8 @@ bool CScraper::GetArt(XFILE::CCurlFile &fcurl, const std::string &id, CVideoInfo
CLog::Log(LOGERROR, "%s: Invalid XML file (want <details>)", __FUNCTION__);
continue;
}
+ if (!fRet)
+ video.Reset();
video.Load(pxeDetails, true/*fChain*/);
fRet = true; // but don't exit in case of chaining
}
From a815b2f685515f3669f33d842421dbaad278def8 Mon Sep 17 00:00:00 2001
From: popcornmix <popcornmix@gmail.com>
Date: Wed, 19 Nov 2014 20:57:10 +0000