The branch, eden-pre has been updated
via daf82719340fb79ebe7dcdd4a5f7e9550b2b903e (commit)
from 2db5d501a1999ede826d2b06b4810ee60b3bea4d (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=daf82719340fb79ebe7dcdd4a5f7e9550b2b903e
commit daf82719340fb79ebe7dcdd4a5f7e9550b2b903e
Author: spiff <[email protected]>
Date: Tue Oct 11 09:47:58 2011 +0200
[script.extrafanartdownloader] -v 0.3.7
diff --git a/script.extrafanartdownloader/addon.xml
b/script.extrafanartdownloader/addon.xml
index 568d7fe..11ef108 100644
--- a/script.extrafanartdownloader/addon.xml
+++ b/script.extrafanartdownloader/addon.xml
@@ -1,8 +1,7 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
-<addon id="script.extrafanartdownloader" name="Extrafanart Downloader"
version="0.3.6" provider-name="paddycarey">
+<addon id="script.extrafanartdownloader" name="Extrafanart Downloader"
version="0.3.7" provider-name="paddycarey/putneyj">
<requires>
<import addon="xbmc.python" version="2.0"/>
- <import addon="script.module.elementtree" version="1.2.7"/>
</requires>
<extension point="xbmc.python.script" library="default.py">
<provides>executable</provides>
@@ -10,12 +9,17 @@
<extension point="xbmc.addon.metadata">
<summary lang="en">Download extrafanart for all TV shows and
Movies</summary>
<summary lang="nl">Download extrafanart voor alle TV series en
Films</summary>
- <description lang="en">Download extrafanart for all TV shows and Movies in
your library.[CR]For this to work your skins needs to support the
extrafanart.[CR]
- TV Shows: Each TV Show must have its own folder where an 'extrafanart'
subfolder will be created.[CR]
- Movies: Each movie must have its own folder where an 'extrafanart'
subfolder will be created.</description>
- <description lang="nl">Download extrafanart voor alle TV series en
Films in jou bibliotheek.[CR]Dit werkt enkel als de skin extrafanart
ondersteund.[CR]
- TV Series: Elke TV Series moet zijn eigen folder hebben waar een
'extrafanart' folder zal worden aangemaakt.[CR]
- Films: Elke Film moet zijn eigen folder hebben waar een 'extrafanart'
folder zal worden aangemaakt.[CR]
+ <description lang="en">Download extrafanart for all TV shows and Movies in
your library.[CR]
+ For this to work your skins needs to support the extrafanart.[CR]
+ Remark:[CR]Each TV Show / Movie must have its own folder where an
'extrafanart' subfolder will be created.[CR]
+ Extrafanart sources:[CR]TV Shows (thetvdb.com)[CR]Movies
(themoviedb.org)[CR]
+ Skin integration:[CR]See readme file
+ </description>
+ <description lang="nl">Download extrafanart voor alle TV series en
Films in jou bibliotheek.[CR]
+ Dit werkt enkel als de skin extrafanart ondersteund.[CR]
+ Opmerking:[CR]Elke TV Serie / Film moet zijn eigen folder hebben waar
een 'extrafanart' folder zal worden aangemaakt.[CR]
+ Extrafanart bronnen:[CR]TV Series (thetvdb.com)[CR]Films
(themoviedb.org)[CR]
+ Skin integratie:[CR]Zie readme bestand
</description>
<platform>all</platform>
</extension>
diff --git a/script.extrafanartdownloader/default.py
b/script.extrafanartdownloader/default.py
index 5837aa7..8ed6ce9 100644
--- a/script.extrafanartdownloader/default.py
+++ b/script.extrafanartdownloader/default.py
@@ -1,10 +1,16 @@
-import urllib, re, os, socket
-import xbmc, xbmcaddon, xbmcvfs, xbmcgui
-from elementtree import ElementTree
+import urllib2
+import re
+import os
+import socket
+import sys
+import xbmc
+import xbmcaddon
+import xbmcvfs
+import xbmcgui
### get addon info
-__addon__ = xbmcaddon.Addon()
+__addon__ = xbmcaddon.Addon('script.extrafanartdownloader')
__addonid__ = __addon__.getAddonInfo('id')
__addonname__ = __addon__.getAddonInfo('name')
__addonversion__ = __addon__.getAddonInfo('version')
@@ -17,76 +23,71 @@ socket.setdefaulttimeout(timeout)
### logging function
-def log(txt):
+def log(txt, severity=xbmc.LOGDEBUG):
message = 'script.extrafanartdownloader: %s' % txt
- xbmc.log(msg=message, level=xbmc.LOGDEBUG)
-
-
-class getBackdrops(object):
-
- def __init__(self):
- self.tvdbbaseurl = 'http://www.thetvdb.com/banners/'
- self.tvdbkey = '1A41A145E2DA0053'
- self.tmdbkey = '4be68d7eab1fbd1b6fd8a3b80a65a95e'
-
- def tvdb(self, showid):
- bannerlist = []
- url = 'http://www.thetvdb.com/api/%s/series/%s/banners.xml' %
(self.tvdbkey, showid)
- log('Fetching: %s' % url)
- tree = self.socket(url)
- for banner in tree.findall('Banner'):
- if banner.find('BannerType').text == 'fanart':
- fanarturl = self.tvdbbaseurl + banner.find('BannerPath').text
- bannerlist.append(fanarturl)
- log('Fanart list: %s' % str(bannerlist))
- return bannerlist
-
- def tmdb(self, tmdbid):
- bannerlist = []
- url = 'http://api.themoviedb.org/2.1/Movie.getImages/en/xml/%s/%s' %
(self.tmdbkey, tmdbid)
- log('Fetching: %s' % url)
- tree = self.socket(url)
- for backdrop in tree.getiterator('backdrop'):
- for image in backdrop.getiterator('image'):
- if image.attrib['size'] == 'original':
- fanarturl = image.attrib['url']
- bannerlist.append(fanarturl)
- log('Fanart list: %s' % str(bannerlist))
- return bannerlist
-
- def socket(self, url):
- client = urllib.urlopen(url)
- data = client.read()
- client.close()
- return ElementTree.fromstring(data)
+ xbmc.log(msg=message, level=severity)
class Main:
-
-
def __init__(self):
- self.initialise()
- if self.tvfanart == 'true':
- self.download_tvfanart()
- else:
- log('TV fanart disabled, skipping')
- if self.moviefanart == 'true':
- self.download_moviefanart()
+ if self.initialise():
+ if not self.mediatype == '':
+ if not self.medianame == '':
+ self.solo_mode(self.mediatype, self.medianame)
+ else:
+ if self.mediatype == 'tvshow':
+ self.Media_listing('TVShows')
+ self.download_fanart(self.Medialist, self.tv_providers)
+ elif self.mediatype == 'movie':
+ self.Media_listing('Movies')
+ self.download_fanart(self.Medialist,
self.movie_providers)
+ elif self.mediatype == 'artist':
+ log('Music fanart not yet implemented', xbmc.LOGNOTICE)
+ else:
+ if self.tvfanart == 'true':
+ self.Media_listing('TVShows')
+ self.download_fanart(self.Medialist, self.tv_providers)
+ else:
+ log('TV fanart disabled, skipping', xbmc.LOGINFO)
+ if self.moviefanart == 'true':
+ self.Media_listing('Movies')
+ self.download_fanart(self.Medialist, self.movie_providers)
+ else:
+ log('Movie fanart disabled, skipping', xbmc.LOGINFO)
else:
- log('Movie fanart disabled, skipping')
+ log('Initialisation error, script aborting', xbmc.LOGERROR)
self.cleanup()
### load settings and initialise needed directories
def initialise(self):
- self.getbackdrops = getBackdrops()
+ self.setup_providers()
self.fanart_count = 0
+ self.current_fanart = 0
self.moviefanart = __addon__.getSetting("moviefanart")
self.tvfanart = __addon__.getSetting("tvfanart")
self.dialog = xbmcgui.DialogProgress()
self.dialog.create(__addonname__, __language__(36003))
addondir = xbmc.translatePath('special://profile/addon_data/%s' %
__addonid__)
self.tempdir = os.path.join(addondir, 'temp')
+ self.mediatype = ''
+ self.medianame = ''
+ for item in sys.argv:
+ match = re.search("mediatype=(.*)" , item)
+ if match:
+ self.mediatype = match.group(1)
+ if self.mediatype == 'tvshow' or self.mediatype == 'movie' or
self.mediatype == 'artist':
+ pass
+ else:
+ log('Error: invalid mediatype, must be one of movie,
tvshow or artist', xbmc.LOGERROR)
+ return False
+ else:
+ pass
+ match = re.search("medianame=" , item)
+ if match:
+ self.medianame = item.replace( "medianame=" , "" )
+ else:
+ pass
try:
if not xbmcvfs.exists(self.tempdir):
if not xbmcvfs.exists(addondir):
@@ -95,10 +96,12 @@ class Main:
xbmcvfs.mkdir(self.tempdir)
log('Created temporary directory: %s' % self.tempdir)
except:
- log('Could not create temporary directory: %s' % self.tempdir)
+ log('Could not create temporary directory: %s' % self.tempdir,
xbmc.LOGERROR)
+ return False
+ return True
- ### clean up and
+ ### clean up and
def cleanup(self):
if xbmcvfs.exists(self.tempdir):
self.dialog.update(100, __language__(36004))
@@ -107,14 +110,14 @@ class Main:
tempfile = os.path.join(self.tempdir, x)
xbmcvfs.delete(tempfile)
if xbmcvfs.exists(tempfile):
- log('Error deleting temp file: %s' % tempfile)
+ log('Error deleting temp file: %s' % tempfile,
xbmc.LOGERROR)
xbmcvfs.rmdir(self.tempdir)
if xbmcvfs.exists(self.tempdir):
- log('Error deleting temp directory: %s' % self.tempdir)
+ log('Error deleting temp directory: %s' % self.tempdir,
xbmc.LOGERROR)
else:
- log('Deleted temp directory: %s' % self.tempdir)
+ log('Deleted temp directory: %s' % self.tempdir,
xbmc.LOGNOTICE)
### log results and notify user
- log('Finished: %s extrafanart downloaded' % self.fanart_count)
+ log('Finished: %s extrafanart downloaded' % self.fanart_count,
xbmc.LOGNOTICE)
summary_tmp = __language__(36009) + ': %s ' % self.fanart_count
summary = summary_tmp + __language__(36010)
self.dialog.close()
@@ -124,91 +127,54 @@ class Main:
### download a given image to a given destination
def downloadimage(self, fanarturl, fanartpath, temppath):
try:
- urllib.urlretrieve(fanarturl, temppath)
+ url = fanarturl.replace(" ", "%20")
+ temp_file = open(temppath, "wb")
+ response = urllib2.urlopen(url)
+ temp_file.write(response.read())
+ temp_file.close()
+ response.close()
except(socket.timeout):
- log('Download timed out, skipping: %s' % fanarturl)
+ log('Download timed out, skipping: %s' % fanarturl,
xbmc.LOGWARNING)
self.failcount = self.failcount + 1
except:
- log('Download failed, skipping: %s' % fanarturl)
+ log('Download failed, skipping: %s' % fanarturl, xbmc.LOGWARNING)
self.failcount = self.failcount + 1
else:
### copy fanart from temp path to library
xbmcvfs.copy(temppath, fanartpath)
if not xbmcvfs.exists(fanartpath):
- log('Error copying temp file to library: %s -> %s' %
(temppath, fanartpath))
+ log('Error copying temp file to library: %s -> %s' %
(temppath, fanartpath), xbmc.LOGERROR)
else:
self.failcount = 0
- log('Downloaded successfully: %s' % fanarturl)
+ log('Downloaded successfully: %s' % fanarturl, xbmc.LOGNOTICE)
self.fanart_count = self.fanart_count + 1
-
- ### download all tv show fanart
- def download_tvfanart(self):
- self.processeditems = 0
- self.TV_listing()
- for currentshow in self.TVlist:
- ### check if XBMC is shutting down
- if xbmc.abortRequested == True:
- log('XBMC shutting down, aborting')
- break
- ### check if script has been cancelled by user
- if self.dialog.iscanceled():
- self.dialog.close()
+ ### solo mode
+ def solo_mode(self, itemtype, itemname):
+ if itemtype == 'movie':
+ self.Media_listing('Movies')
+ elif itemtype == 'tvshow':
+ self.Media_listing('TVShows')
+ else:
+ log("Error: type must be one of 'movie' or 'tvshow', aborting",
xbmc.LOGERROR)
+ return False
+ log('Retrieving fanart for: %s' % itemname)
+ for currentitem in self.Medialist:
+ if itemname == currentitem["name"]:
+ if itemtype == 'movie':
+ self.Medialist = []
+ self.Medialist.append(currentitem)
+ self.download_fanart(self.Medialist, self.movie_providers)
+ if itemtype == 'tvshow':
+ self.Medialist = []
+ self.Medialist.append(currentitem)
+ self.download_fanart(self.Medialist, self.tv_providers)
break
- self.failcount = 0
- self.show_path = currentshow["path"]
- self.tvdbid = currentshow["id"]
- self.show_name = currentshow["name"]
- self.dialog.update(int(float(self.processeditems) /
float(len(self.TVlist)) * 100), __language__(36005), self.show_name, '')
- log('Processing show: %s' % self.show_name)
- log('ID: %s' % self.tvdbid)
- log('Path: %s' % self.show_path)
- extrafanart_dir = os.path.join(self.show_path, 'extrafanart')
- if not xbmcvfs.exists(extrafanart_dir):
- xbmcvfs.mkdir(extrafanart_dir)
- log('Created directory: %s' % extrafanart_dir)
- try:
- backdrops = self.getbackdrops.tvdb(self.tvdbid)
- except:
- log('Error getting data from TVDB, skipping')
- else:
- for fanarturl in backdrops:
- fanartfile = fanarturl.rsplit('/', 1)[1]
- temppath = os.path.join(self.tempdir, fanartfile)
- fanartpath = os.path.join(extrafanart_dir, fanartfile)
- if not xbmcvfs.exists(fanartpath):
- self.dialog.update(int(float(self.processeditems) /
float(len(backdrops)) * 100), __language__(36006), self.show_name, fanarturl)
- self.downloadimage(fanarturl, fanartpath, temppath)
- self.processeditems = self.processeditems + 1
-
-
- ### get list of all tvshows and their imdbnumber from library
- ### copied from script.logo-downloader, thanks to it's authors
- def TV_listing(self):
- json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"VideoLibrary.GetTVShows", "params": {"properties": ["file", "imdbnumber"],
"sort": { "method": "label" } }, "id": 1}')
- json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
- self.TVlist = []
- for tvshowitem in json_response:
- findtvshowname = re.search( '"label":"(.*?)","', tvshowitem )
- if findtvshowname:
- tvshowname = ( findtvshowname.group(1) )
- findpath = re.search( '"file":"(.*?)","', tvshowitem )
- if findpath:
- path = (findpath.group(1))
- findimdbnumber = re.search( '"imdbnumber":"(.*?)","',
tvshowitem )
- if findimdbnumber:
- imdbnumber = (findimdbnumber.group(1))
- TVshow = {}
- TVshow["name"] = tvshowname
- TVshow["id"] = imdbnumber
- TVshow["path"] = path
- self.TVlist.append(TVshow)
-
- def download_moviefanart(self):
+ ### download media fanart
+ def download_fanart(self, media_list, providers):
self.processeditems = 0
- self.Movie_listing()
- for currentmovie in self.Movielist:
+ for currentmedia in media_list:
### check if XBMC is shutting down
if xbmc.abortRequested == True:
log('XBMC shutting down, aborting')
@@ -219,57 +185,148 @@ class Main:
break
self.failcount = 0
try:
- self.movie_path =
os.path.split(currentmovie["path"])[0].rsplit(' , ', 1)[1]
+ self.media_path =
os.path.split(currentmedia["path"])[0].rsplit(' , ', 1)[1]
except:
- self.movie_path = os.path.split(currentmovie["path"])[0]
- self.tmdbid = currentmovie["id"]
- self.movie_name = currentmovie["name"]
- self.dialog.update(int(float(self.processeditems) /
float(len(self.Movielist)) * 100), __language__(36007), self.movie_name, '')
- log('Processing movie: %s' % self.movie_name)
- log('ID: %s' % self.tmdbid)
- log('Path: %s' % self.movie_path)
- extrafanart_dir = os.path.join(self.movie_path, 'extrafanart')
+ self.media_path = os.path.split(currentmedia["path"])[0]
+ self.media_id = currentmedia["id"]
+ self.media_name = currentmedia["name"]
+ self.dialog.update(int(float(self.processeditems) /
float(len(media_list)) * 100.0), __language__(36005), self.media_name, '')
+ log('Processing media: %s' % self.media_name)
+ log('ID: %s' % self.media_id)
+ log('Path: %s' % self.media_path)
+ extrafanart_dir = os.path.join(self.media_path, 'extrafanart')
if not xbmcvfs.exists(extrafanart_dir):
xbmcvfs.mkdir(extrafanart_dir)
- log('Created directory: %s' % extrafanart_dir)
- if self.tmdbid == '':
- log('No TMDB ID found, skipping')
- else:
- try:
- backdrops = self.getbackdrops.tmdb(self.tmdbid)
- except:
- log('Error getting data from TMDB, skipping')
+ if xbmcvfs.exists(extrafanart_dir):
+ log('Created directory: %s' % extrafanart_dir,
xbmc.LOGINFO)
else:
- for fanarturl in backdrops:
- fanartfilename = fanarturl.split('backdrops',
1)[1].replace('/', '-').lstrip('-')
- temppath = os.path.join(self.tempdir, fanartfilename)
- fanartpath = os.path.join(extrafanart_dir,
fanartfilename)
- if not xbmcvfs.exists(fanartpath):
- self.dialog.update(int(float(self.processeditems)
/ float(len(backdrops)) * 100), __language__(36008), self.movie_name, fanarturl)
- self.downloadimage(fanarturl, fanartpath, temppath)
+ log('Error creating directory, skipping: %s' %
extrafanart_dir, xbmc.LOGERROR)
+ break
+ if self.media_id == '':
+ log('%s: No ID found, skipping' % self.media_name,
xbmc.LOGNOTICE)
+ else:
+ for provider in providers:
+ try:
+ backdrops = provider.get_image_list(self.media_id)
+ except:
+ log('Error getting data from %s, skipping' %
provider.name, xbmc.LOGERROR)
+ else:
+ self.current_fanart = 0
+ for fanarturl in backdrops:
+ ### check if script has been cancelled by user
+ if self.dialog.iscanceled():
+ self.dialog.close()
+ break
+ fanartfile = provider.get_filename(fanarturl)
+ temppath = os.path.join(self.tempdir, fanartfile)
+ fanartpath = os.path.join(extrafanart_dir,
fanartfile)
+ self.current_fanart = self.current_fanart + 1
+ if not xbmcvfs.exists(fanartpath):
+ self.downloadimage(fanarturl, fanartpath,
temppath)
+
self.dialog.update(int(float(self.current_fanart) / float(len(backdrops)) *
100.0), __language__(36006), self.media_name, fanarturl)
+ else:
+
self.dialog.update(int(float(self.current_fanart) / float(len(backdrops)) *
100.0), __language__(36006), self.media_name, "")
self.processeditems = self.processeditems + 1
- ### get list of all movies and their imdbnumber from library
- def Movie_listing(self):
- json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"VideoLibrary.GetMovies", "params": {"properties": ["file", "imdbnumber"],
"sort": { "method": "label" } }, "id": 1}')
+ ### get list of all tvshows and movies with their imdbnumber from library
+ ### copied from script.logo-downloader, thanks to it's authors
+ def Media_listing(self, media_type):
+ json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method":
"VideoLibrary.Get%s", "params": {"properties": ["file", "imdbnumber"], "sort":
{ "method": "label" } }, "id": 1}' % media_type)
json_response = re.compile( "{(.*?)}", re.DOTALL ).findall(json_query)
- self.Movielist = []
- for movieitem in json_response:
- findmoviename = re.search( '"label":"(.*?)","', movieitem )
- if findmoviename:
- moviename = ( findmoviename.group(1) )
- findpath = re.search( '"file":"(.*?)","', movieitem )
+ self.Medialist = []
+ for mediaitem in json_response:
+ findmedianame = re.search( '"label":"(.*?)","', mediaitem )
+ if findmedianame:
+ medianame = ( findmedianame.group(1) )
+ findpath = re.search( '"file":"(.*?)","', mediaitem )
if findpath:
path = (findpath.group(1))
- findimdbnumber = re.search( '"imdbnumber":"(.*?)","',
movieitem )
+ findimdbnumber = re.search( '"imdbnumber":"(.*?)","',
mediaitem )
if findimdbnumber:
imdbnumber = (findimdbnumber.group(1))
- Movie = {}
- Movie["name"] = moviename
- Movie["id"] = imdbnumber
- Movie["path"] = path
- self.Movielist.append(Movie)
+ Media = {}
+ Media["name"] = medianame
+ Media["id"] = imdbnumber
+ Media["path"] = path
+ self.Medialist.append(Media)
+
+ def setup_providers(self):
+ self.movie_providers = []
+ self.tv_providers = []
+ self.music_providers = []
+
+ """
+ Setup provider for TheMovieDB.org
+ """
+ tmdb = Provider()
+ tmdb.name = 'TMDB'
+ tmdb.api_key = '4be68d7eab1fbd1b6fd8a3b80a65a95e'
+ tmdb.url =
"http://api.themoviedb.org/2.1/Movie.imdbLookup/en/xml/%s/%s"
+ tmdb.re_pattern = '<image type="backdrop" url="(.*?)" size="original"'
+ tmdb.get_filename = lambda url: url.split('backdrops',
1)[1].replace('/', '-').lstrip('-')
+
+ self.movie_providers.append(tmdb)
+
+ """
+ Setup provider for TheTVDB.com
+ """
+ tvdb = Provider()
+ tvdb.name = 'TVDB'
+ tvdb.api_key = '1A41A145E2DA0053'
+ tvdb.url = 'http://www.thetvdb.com/api/%s/series/%s/banners.xml'
+ tvdb.url_prefix = 'http://www.thetvdb.com/banners/'
+ tvdb.re_pattern =
'<BannerPath>(?P<url>.*?)</BannerPath>\s+<BannerType>fanart</BannerType>'
+
+ self.tv_providers.append(tvdb)
+
+ """
+ Setup provider for fanart.tv - TV API
+ """
+ ftvt = Provider()
+ ftvt.name = 'fanart.tv - TV API'
+ ftvt.url = 'http://fanart.tv/api/fanart.php?id=%s&type=tvthumb'
+ ftvt.re_pattern = ''
+
+ #self.tv_providers.append(ftvt)
+
+ """
+ Setup provider for fanart.tv - Music API
+ """
+ ftvm = Provider()
+ ftvm.name = 'fanart.tv - Music API'
+ ftvm.url = 'http://fanart.tv/api/music.php?id=%s&type=background'
+ ftvm.re_pattern = '<background>(.*?)</background>'
+
+ #self.music_providers.append(ftvm)
+
+"""
+Provider Class
+
+Creates general structure for all fanart providers. This will allow us to
+very easily add multiple providers for the same media type.
+"""
+class Provider:
+ def __init__(self):
+ self.name = ''
+ self.api_key = ''
+ self.url = ''
+ self.re_pattern = ''
+ self.url_prefix = ''
+ self.get_filename = lambda url: url.rsplit('/', 1)[1]
+
+ def _get_xml(self, url):
+ client = urllib2.urlopen(url)
+ data = client.read()
+ client.close()
+ return data
+
+ def get_image_list(self, media_id):
+ log(self.url % (self.api_key, media_id))
+ image_list = []
+ for i in re.finditer(self.re_pattern, self._get_xml(self.url %
(self.api_key, media_id))):
+ image_list.append(self.url_prefix + i.group(1))
+ return image_list
diff --git
a/script.extrafanartdownloader/resources/language/English/strings.xml
b/script.extrafanartdownloader/resources/language/English/strings.xml
index b20d6e8..0c4af9a 100644
--- a/script.extrafanartdownloader/resources/language/English/strings.xml
+++ b/script.extrafanartdownloader/resources/language/English/strings.xml
@@ -5,10 +5,8 @@
<string id="36002">Download tv fanart</string>
<string id="36003">Checking for extrafanart</string>
<string id="36004">Cleaning up</string>
- <string id="36005">Checking for TV show extrafanart</string>
- <string id="36006">Downloading TV show extrafanart</string>
- <string id="36007">Checking for movie extrafanart</string>
- <string id="36008">Downloading movie extrafanart</string>
+ <string id="36005">Checking for extrafanart</string>
+ <string id="36006">Downloading extrafanart</string>
<string id="36009">Finished</string>
<string id="36010">extrafanart downloaded</string>
</strings>
-----------------------------------------------------------------------
Summary of changes:
script.extrafanartdownloader/README | 53 +++
script.extrafanartdownloader/addon.xml | 20 +-
script.extrafanartdownloader/default.py | 399 +++++++++++---------
.../resources/language/English/strings.xml | 6 +-
4 files changed, 295 insertions(+), 183 deletions(-)
create mode 100644 script.extrafanartdownloader/README
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
All the data continuously generated in your IT infrastructure contains a
definitive record of customers, application performance, security
threats, fraudulent activity and more. Splunk takes this data and makes
sense of it. Business sense. IT sense. Common sense.
http://p.sf.net/sfu/splunk-d2d-oct
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons