The branch, eden-pre has been updated
via 943164f2bf6e76d4f63e5693a932a3e867f112eb (commit)
from 0dd0db3c11b162278c9d3357f1a92d6b9e6e261e (commit)
- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=943164f2bf6e76d4f63e5693a932a3e867f112eb
commit 943164f2bf6e76d4f63e5693a932a3e867f112eb
Author: ronie <ro...@poedel.net>
Date: Wed Dec 21 21:17:23 2011 +0100
[script.artwork.downloader] -v1.0.3
Downloads artwork for selected movie when multiple exist with same name
diff --git a/script.artwork.downloader/addon.xml
b/script.artwork.downloader/addon.xml
index ccc1523..e099a05 100644
--- a/script.artwork.downloader/addon.xml
+++ b/script.artwork.downloader/addon.xml
@@ -2,7 +2,7 @@
<addon
id="script.artwork.downloader"
name="Artwork Downloader"
- version="1.0.2"
+ version="1.0.3"
provider-name="paddycarey, putneyj, Martijn Kaijser"
>
<requires>
diff --git a/script.artwork.downloader/changelog.txt
b/script.artwork.downloader/changelog.txt
index 511154f..0d9e439 100644
--- a/script.artwork.downloader/changelog.txt
+++ b/script.artwork.downloader/changelog.txt
@@ -1,3 +1,11 @@
+[B]1.0.3[/B]
+- Fixed: Error below limit check
+- Fixed: Custom download for specific movie artwork only
+- Fixed: Downloads artwork for selected movie when multiple exist with same
name
+ Needs extra argument from skin (see runscript.txt)
+- Fixed: Did not run service when set to 00->09
+- Added: Try conversion of non standard IMDB Id
+
[B]1.0.2[/B]
- Added: Log summary on failed/missing items
- Added: Support the providers message on finished
diff --git a/script.artwork.downloader/default.py
b/script.artwork.downloader/default.py
index 231a402..8cdc10d 100644
--- a/script.artwork.downloader/default.py
+++ b/script.artwork.downloader/default.py
@@ -1,4 +1,4 @@
-### import
+#import modules
import re
import os
import time
@@ -11,18 +11,18 @@ import urllib
from traceback import print_exc
### import libraries
+from resources.lib import language
from resources.lib import media_setup
from resources.lib import provider
from resources.lib.utils import _log as log
from resources.lib.utils import _dialog as dialog
+from resources.lib.utils import _getUniq as getUniq
from resources.lib.script_exceptions import DownloadError,
CreateDirectoryError, HTTP404Error, HTTP503Error, NoFanartError, HTTPTimeout,
ItemNotFoundError, CopyError
-from resources.lib import language
from resources.lib.fileops import fileops
-from xml.parsers.expat import ExpatError
from resources.lib.apply_filters import apply_filters
from resources.lib.settings import _settings
from resources.lib.media_setup import _media_listing as media_listing
-
+from xml.parsers.expat import ExpatError
### get addon info
__addon__ = xbmcaddon.Addon()
__addonid__ = __addon__.getAddonInfo('id')
@@ -33,6 +33,7 @@ __localize__ = __addon__.getLocalizedString
__addonpath__ = __addon__.getAddonInfo('path')
__language__ = language.get_abbrev()
+### set button actions for GUI
ACTION_PREVIOUS_MENU = ( 9, 10, 92, 216, 247, 257, 275, 61467, 61448, )
@@ -65,9 +66,9 @@ class Main:
if not self.medianame == '':
if self.mode == 'gui':
# GUI mode check is at the end of: 'def
download_artwork'
- self.solo_mode(self.mediatype, self.medianame)
+ self.solo_mode(self.mediatype, self.medianame,
self.mediapath)
else:
- self.solo_mode(self.mediatype, self.medianame)
+ self.solo_mode(self.mediatype, self.medianame,
self.mediapath)
if not dialog('iscanceled', background =
self.settings.background) and not self.mode == 'customgui':
self._batch_download(self.download_list)
# No medianame specified
@@ -84,8 +85,6 @@ class Main:
self.Medialist = media_listing('tvshow')
log("Bulk mode: TV Shows")
self.download_artwork(self.Medialist,
self.tv_providers)
- elif self.mediatype == 'music':
- log('Bulk mode: Music not yet implemented',
xbmc.LOGNOTICE)
if not dialog('iscanceled', background =
self.settings.background):
self._batch_download(self.download_list)
# No mediatype is specified
@@ -95,13 +94,13 @@ class Main:
self.settings.movie_enable = True
self.settings.tvshow_enable = True
# Normal oprations check
- if self.settings.movie_enable:
+ if self.settings.movie_enable and not dialog('iscanceled',
background = True):
self.Medialist = media_listing('movie')
self.mediatype = 'movie'
self.download_artwork(self.Medialist, self.movie_providers)
else:
log('Movie fanart disabled, skipping', xbmc.LOGINFO)
- if self.settings.tvshow_enable:
+ if self.settings.tvshow_enable and not dialog('iscanceled',
background = True):
self.Medialist = media_listing('tvshow')
self.mediatype = 'tvshow'
self.download_artwork(self.Medialist, self.tv_providers)
@@ -127,6 +126,7 @@ class Main:
self.download_counter['Total Artwork'] = 0
self.mediatype = ''
self.medianame = ''
+ self.mediapath = ''
self.mode = ''
self.silent = ''
self.gui_selected_type = ''
@@ -138,28 +138,17 @@ class Main:
### load settings and initialise needed directories
def initialise(self):
log("## Checking for script arguments")
- try: log( "## arg 0: %s" % sys.argv[0] )
- except: log( "## no arg0" )
- try: log( "## arg 1: %s" % sys.argv[1] )
- except: log( "## no arg1" )
- try: log( "## arg 2: %s" % sys.argv[2] )
- except: log( "## no arg2" )
- try: log( "## arg 3: %s" % sys.argv[3] )
- except: log( "## no arg3" )
- try: log( "## arg 4: %s" % sys.argv[4] )
- except: log( "## no arg4" )
- try: log( "## arg 5: %s" % sys.argv[5] )
- except: log( "## no arg5" )
- try: log( "## arg 6: %s" % sys.argv[6] )
- except: log( "## no arg6" )
- try: log( "## arg 7: %s" % sys.argv[7] )
- except: log( "## no arg7" )
- try: log( "## arg 8: %s" % sys.argv[8] )
- except: log( "## no arg8" )
- try: log( "## arg 9: %s" % sys.argv[9] )
- except: log( "## no arg8" )
- try: log( "## arg 10: %s" % sys.argv[10] )
- except: log( "## no arg8" )
+ try:
+ log( "## arg 0: %s" % sys.argv[0] )
+ log( "## arg 1: %s" % sys.argv[1] )
+ log( "## arg 2: %s" % sys.argv[2] )
+ log( "## arg 3: %s" % sys.argv[3] )
+ log( "## arg 4: %s" % sys.argv[4] )
+ log( "## arg 5: %s" % sys.argv[5] )
+ log( "## arg 6: %s" % sys.argv[6] )
+ log( "## arg 7: %s" % sys.argv[7] )
+ except:
+ log( "## No more arg" )
log("## Checking for downloading mode...")
for item in sys.argv:
# Check for download mode
@@ -180,11 +169,14 @@ class Main:
log('Error: invalid mediatype, must be one of movie,
tvshow or music', xbmc.LOGERROR)
return False
# Check for medianame
- match = re.search("medianame=" , item)
+ match = re.search("medianame=(.*)" , item)
if match:
- self.medianame = item.replace("medianame=" , "")
- else:
- pass
+ self.medianame = match.group(1)
+ # Check for mediapath
+ match = re.search("mediapath=(.*)" , item)
+ if match:
+ self.mediapath = (match.group(1).rstrip(' /\ '))
+ log('matchgroup: %s' %self.mediapath)
try:
# Creates temp folder
self.fileops = fileops()
@@ -217,8 +209,11 @@ class Main:
log('- %s: %s' % (artwork_type,
self.download_counter[artwork_type]), xbmc.LOGNOTICE)
# print failed items
log('## Failed items:')
- for item in self.getUniq(self.failed_items):
- log(' - %s' %item, xbmc.LOGNOTICE)
+ if not self.failed_items:
+ log(' - No failed/missing items found')
+ else:
+ for item in getUniq(self.failed_items):
+ log(' - %s' %item, xbmc.LOGNOTICE)
# dialogs
summary = __localize__(32012) + ': %s ' % self.download_counter['Total
Artwork'] + __localize__(32016)
summary_notify = ': %s ' % self.download_counter['Total Artwork'] +
__localize__(32016)
@@ -253,9 +248,13 @@ class Main:
xbmc.executebuiltin( 'XBMC.ReloadSkin()' )
'''
-
### solo mode
- def solo_mode(self, itemtype, itemname):
+ def solo_mode(self, itemtype, itemname, itempath):
+ log('################')
+ log('Debugging type: %s' %itemtype)
+ log('Debugging name: %s' %itemname)
+ log('Debugging path: %s' %itempath)
+ log('################')
# activate both movie/tvshow for custom r
if self.mode == 'custom':
self.settings.movie_enable = True
@@ -270,17 +269,20 @@ class Main:
log("Error: type must be one of 'movie', 'tvshow', aborting",
xbmc.LOGERROR)
return False
log('Retrieving fanart for: %s' % itemname)
+ # Search through the media lists for match
for currentitem in self.Medialist:
if itemname == currentitem["name"]:
- if itemtype == 'movie':
+ # Check on exact path match when provided
+ if itempath == currentitem['path'] or itempath == '':
self.Medialist = []
self.Medialist.append(currentitem)
- self.download_artwork(self.Medialist, self.movie_providers)
- if itemtype == 'tvshow':
+ else:
self.Medialist = []
- self.Medialist.append(currentitem)
- self.download_artwork(self.Medialist, self.tv_providers)
- break
+ if itemtype == 'movie':
+ self.download_artwork(self.Medialist, self.movie_providers)
+ elif itemtype == 'tvshow':
+ self.download_artwork(self.Medialist, self.tv_providers)
+
### download media fanart
def download_artwork(self, media_list, providers):
@@ -295,17 +297,10 @@ class Main:
break
if not self.settings.failcount < self.settings.failthreshold:
break
- # Check for stacked movies
- try:
- self.media_path =
os.path.split(currentmedia["path"])[0].rsplit(' , ', 1)[1]
- except:
- self.media_path = os.path.split(currentmedia["path"])[0]
- # Fixes problems with rared movies
- if self.media_path.startswith("rar"):
- self.media_path =
os.path.split(urllib.url2pathname(self.media_path.replace("rar://","")))[0]
# Declare some vars
- self.media_id = currentmedia["id"]
+ self.media_id = currentmedia["id"]
self.media_name = currentmedia["name"]
+ self.media_path = currentmedia["path"]
dialog('update', percentage = int(float(self.processeditems) /
float(len(media_list)) * 100.0), line1 = self.media_name, line2 =
__localize__(32008), line3 = '', background = self.settings.background)
log('########################################################')
log('Processing media: %s' % self.media_name, xbmc.LOGNOTICE)
@@ -334,6 +329,10 @@ class Main:
elif self.media_id == '':
log('%s: No ID found, skipping' % self.media_name,
xbmc.LOGNOTICE)
self.failed_items.append('%s: No ID found, skipping' %
self.media_name)
+ elif self.mediatype == 'movie' and not
self.media_id.startswith('tt'):
+ self.media_id_old = self.media_id
+ self.media_id = "tt%.7d" % int(self.media_id)
+ log('%s: No IMDB ID found, try ID conversion: %s -> %s' %
(self.media_name, self.media_id_old,self.media_id), xbmc.LOGNOTICE)
elif self.mediatype == 'tvshow' and self.media_id.startswith('tt'):
log('%s: IMDB ID found for TV show, skipping' %
self.media_name, xbmc.LOGNOTICE)
self.failed_items.append('%s: IMDB ID found for TV show,
skipping' % self.media_name)
@@ -407,34 +406,23 @@ class Main:
def _download_process(self):
if not self.mode == 'custom':
self.download_arttypes = []
- if self.mediatype == 'tvshow':
- for arttypes in self.settings.tvshow_arttype_list:
- if arttypes['bulk_enabled']:
- self.download_arttypes.append(arttypes['art_type'])
- elif self.mediatype == 'movie':
- for arttypes in self.settings.movie_arttype_list:
- if arttypes['bulk_enabled']:
- self.download_arttypes.append(arttypes['art_type'])
- if self.settings.movie_enable and self.mediatype == 'movie':
- for arttypes in self.settings.movie_arttype_list:
- if arttypes['art_type'] in self.download_arttypes:
- if arttypes['art_type'] == 'extrafanart':
- self._download_art(arttypes['art_type'], 'fanart',
arttypes['filename'], self.target_extrafanartdirs, arttypes['gui_string'])
- elif arttypes['art_type'] == 'defaultthumb':
- self._download_art(arttypes['art_type'], 'poster',
arttypes['filename'], self.target_artworkdir, arttypes['gui_string'])
- elif arttypes['art_type'] == 'extrathumbs':
- self._download_art(arttypes['art_type'], 'thumb',
arttypes['filename'], self.target_extrathumbsdirs, arttypes['gui_string'])
- else:
- self._download_art(arttypes['art_type'],
arttypes['art_type'], arttypes['filename'], self.target_artworkdir,
arttypes['gui_string'])
- if self.settings.tvshow_enable and self.mediatype == 'tvshow':
- for arttypes in self.settings.tvshow_arttype_list:
- if arttypes['art_type'] in self.download_arttypes:
- if arttypes['art_type'] == 'extrafanart':
- self._download_art(arttypes['art_type'], 'fanart',
arttypes['filename'], self.target_extrafanartdirs, arttypes['gui_string'])
- elif arttypes['art_type'] == 'defaultthumb':
- self._download_art(arttypes['art_type'],
str.lower(self.settings.tvshow_defaultthumb_type), arttypes['filename'],
self.target_artworkdir, arttypes['gui_string'])
- else:
- self._download_art(arttypes['art_type'],
arttypes['art_type'], arttypes['filename'], self.target_artworkdir,
arttypes['gui_string'])
+ for item in self.settings.available_arttypes:
+ if item['bulk_enabled'] and self.mediatype ==
item['media_type']:
+ self.download_arttypes.append(item['art_type'])
+
+ for item in self.settings.available_arttypes:
+ if item['art_type'] in self.download_arttypes and
((self.settings.movie_enable and self.mediatype == item['media_type']) or
(self.settings.tvshow_enable and self.mediatype == item['media_type'])):
+ if item['art_type'] == 'extrafanart':
+ self._download_art(item['art_type'], 'fanart',
item['filename'], self.target_extrafanartdirs, item['gui_string'])
+ elif item['art_type'] == 'defaultthumb' and self.mediatype ==
'movie':
+ self._download_art(item['art_type'], 'poster',
item['filename'], self.target_artworkdir, item['gui_string'])
+ elif item['art_type'] == 'defaultthumb' and self.mediatype ==
'tvshow':
+ self._download_art(item['art_type'],
str.lower(self.settings.tvshow_defaultthumb_type), item['filename'],
self.target_artworkdir, item['gui_string'])
+ elif item['art_type'] == 'extrathumbs':
+ self._download_art(item['art_type'], 'thumb',
item['filename'], self.target_extrathumbsdirs, item['gui_string'])
+ else:
+ self._download_art(item['art_type'], item['art_type'],
item['filename'], self.target_artworkdir, item['gui_string'])
+
### Retrieves imagelist for GUI solo mode
def _gui_imagelist(self, art_type):
@@ -526,8 +514,9 @@ class Main:
elif limited[0]:
log("Ignoring (%s): %s" % (limited[1],
image['filename']))
# Check if artwork doesn't exist and the one available
below settings
- if not self.fileops._exists(os.path.join(targetdir,
image['filename'])) and not image['artwork_type'] =='extrafanart' and not
image['artwork_type'] =='extrathumbs':
- self.failed_items.append('%s: Skipping %s - Below
limit setting' % (self.media_name,image['artwork_type']))
+ for targetdir in image['targetdirs']:
+ if not
self.fileops._exists(os.path.join(targetdir, image['filename'])) and not
image['artwork_type'] =='extrafanart' and not image['artwork_type']
=='extrathumbs':
+ self.failed_items.append('%s: Skipping %s -
Below limit setting' % (self.media_name,image['artwork_type']))
else:
if self.settings.files_overwrite:
download_list.append(image)
@@ -581,18 +570,10 @@ class Main:
dialog('close', background = self.settings.background)
self.GUI_type_list = []
# Fill GUI art type list
- if self.mediatype == 'tvshow':
- for arttypes in self.settings.tvshow_arttype_list:
- if arttypes['solo_enabled'] == 'true':
- gui = arttypes['gui_string']
- self.GUI_type_list.append (gui)
-
- # Fill GUI art type list
- if self.mediatype == 'movie':
- for arttypes in self.settings.movie_arttype_list:
- if arttypes['solo_enabled'] == 'true':
- gui = arttypes['gui_string']
- self.GUI_type_list.append (gui)
+ for item in self.settings.available_arttypes:
+ if item['solo_enabled'] == 'true' and self.mediatype ==
item['media_type']:
+ gui = item['gui_string']
+ self.GUI_type_list.append (gui)
#
if len(self.GUI_type_list) == 1:
self.GUI_type_list[0] = "True"
@@ -627,20 +608,12 @@ class Main:
return False
else:
# Check what artwork type has been chosen and parse the image
restraints
- if self.mediatype == 'tvshow':
- for arttypes in self.settings.tvshow_arttype_list:
- if self.GUI_type_list[select] == arttypes['gui_string']:
- self.gui_selected_type = arttypes['art_type']
- self.gui_selected_filename = arttypes['filename']
- self.gui_selected_msg = arttypes['gui_string']
- return True
- if self.mediatype == 'movie':
- for arttypes in self.settings.movie_arttype_list:
- if self.GUI_type_list[select] == arttypes['gui_string']:
- self.gui_selected_type = arttypes['art_type']
- self.gui_selected_filename = arttypes['filename']
- self.gui_selected_msg = arttypes['gui_string']
- return True
+ for item in self.settings.available_arttypes:
+ if self.GUI_type_list[select] == item['gui_string'] and
self.mediatype == item['media_type']:
+ self.gui_selected_type = item['art_type']
+ self.gui_selected_filename = item['filename']
+ self.gui_selected_msg = item['gui_string']
+ return True
else:
return False
@@ -648,10 +621,11 @@ class Main:
self.download_arttypes = []
# Look for argument matching artwork types
for item in sys.argv:
- for type in (self.settings.tvshow_arttype_list or
self.settings.movie_arttype_list):
- if type['art_type'] in item:
+ for type in self.settings.available_arttypes:
+ if item == type['art_type'] and self.mediatype ==
type['media_type']:
log('Custom mode arttype: %s' %type['art_type'])
self.download_arttypes.append(item)
+
# If only one specified
if len(self.download_arttypes) == 1 and not self.medianame == '':
log('Start custom solomode')
@@ -664,18 +638,11 @@ class Main:
log('Image list larger than 1')
if self._choose_image():
log('Chosen: %s'%self.image_url)
- if self.mediatype == 'tvshow':
- for arttypes in self.settings.tvshow_arttype_list:
- if gui_arttype == arttypes['art_type']:
- self.gui_selected_type = arttypes['art_type']
- self.gui_selected_filename =
arttypes['filename']
- self.gui_selected_msg = arttypes['gui_string']
- if self.mediatype == 'movie':
- for arttypes in self.settings.movie_arttype_list:
- if gui_arttype == arttypes['art_type']:
- self.gui_selected_type = arttypes['art_type']
- self.gui_selected_filename =
arttypes['filename']
- self.gui_selected_msg = arttypes['gui_string']
+ for item in self.settings.available_arttypes:
+ if gui_arttype == item['art_type'] and self.mediatype
== item['media_type']:
+ self.gui_selected_type = item['art_type']
+ self.gui_selected_filename = item['filename']
+ self.gui_selected_msg = item['gui_string']
self._download_art(self.gui_selected_type,
self.gui_selected_type, self.gui_selected_filename, self.target_artworkdir,
self.gui_selected_msg)
self._batch_download(self.download_list)
if not self._download_art_succes:
@@ -687,22 +654,13 @@ class Main:
xbmcgui.Dialog().ok(__localize__(32017) ,
__localize__(32018) )
else:
self._download_process()
- log('Debug: Image list not larger than 1')
+ log('Debug: More than 1 image available')
# If more than one specified
else:
log('Start custom bulkmode')
self._download_process()
- # order preserving and get unique entry
- def getUniq(self,seq):
- seen = []
- result = []
- for item in seq:
- if item in seen: continue
- seen.append(item)
- result.append(item)
- return result
def _choose_image(self):
log( "### image list: %s" % self.gui_imagelist)
@@ -773,4 +731,4 @@ if (__name__ == "__main__"):
log('## Authors = %s' % str(__author__))
log('## Version = %s' % str(__version__))
Main()
- log('script stopped')
+ log('script stopped')
\ No newline at end of file
diff --git a/script.artwork.downloader/readme.txt
b/script.artwork.downloader/readme.txt
index f275871..d243d30 100644
--- a/script.artwork.downloader/readme.txt
+++ b/script.artwork.downloader/readme.txt
@@ -57,6 +57,7 @@ Skins using this Add-On:
- reFocus (made by Jeroen)
- Convergence (made by Mudislander)
- Backrow (by Sharpe)
+ - Glass (by Ronan/Frost/Kbalist)
----------------------------------------------------------------------------------------------
To run the script in bulk mode simply click on it in the 'Addons' or
'Programs' menu in XBMC.
diff --git a/script.artwork.downloader/resources/docs/pre-eden.xml
b/script.artwork.downloader/resources/docs/pre-eden.xml
index 9682374..7a41fc6 100644
--- a/script.artwork.downloader/resources/docs/pre-eden.xml
+++ b/script.artwork.downloader/resources/docs/pre-eden.xml
@@ -7,7 +7,7 @@
<description>Get Artwork</description>
<label>$LOCALIZE[31316]</label>
<onclick
condition="Container.Content(tvshows)">XBMC.RunScript(script.artwork.downloader,
mediatype=tvshow, medianame=$INFO[ListItem.TVShowTitle])</onclick>
- <onclick
condition="Container.Content(movies)">XBMC.RunScript(script.artwork.downloader,
mediatype=movie, medianame=$INFO[ListItem.Title])</onclick>
+ <onclick
condition="Container.Content(movies)">XBMC.RunScript(script.artwork.downloader,
mediatype=movie,
medianame=$INFO[ListItem.Title],mediapath=$INFO[ListItem.Path])</onclick>
<visible>[Container.Content(tvshows)|Container.Content(movies)]+system.hasaddon(script.artwork.downloader)</visible>
</item>
@@ -18,7 +18,7 @@
<description>Get Artwork</description>
<label>$LOCALIZE[31316]</label>
<onclick
condition="Container.Content(tvshows)">XBMC.RunScript(script.artwork.downloader,
mode=gui, mediatype=tvshow, medianame=$INFO[ListItem.TVShowTitle])</onclick>
- <onclick
condition="Container.Content(movies)">XBMC.RunScript(script.artwork.downloader,
mode=gui, mediatype=movie, medianame=$INFO[ListItem.Title])</onclick>
+ <onclick
condition="Container.Content(movies)">XBMC.RunScript(script.artwork.downloader,
mode=gui, mediatype=movie,
medianame=$INFO[ListItem.Title],mediapath=$INFO[ListItem.Path])</onclick>
<visible>[Container.Content(tvshows)|Container.Content(movies)]+system.hasaddon(script.artwork.downloader)</visible>
</item>
@@ -50,4 +50,4 @@
<aspectratio align="center">scale</aspectratio>
<imagepath
background="true">$INFO[ListItem.Path,,extrafanart]</imagepath>
<visible>Container.Content(movies)+Container(5000).HasFocus(8)</visible>
- </control>
+ </control>
\ No newline at end of file
diff --git a/script.artwork.downloader/resources/docs/runscript.txt
b/script.artwork.downloader/resources/docs/runscript.txt
index 247450e..89f4794 100644
--- a/script.artwork.downloader/resources/docs/runscript.txt
+++ b/script.artwork.downloader/resources/docs/runscript.txt
@@ -14,11 +14,15 @@ Code to run script solo:
XBMC.RunScript(script.artwork.downloader, mode=gui, mediatype=?,
medianame=?)
-> Runs using the GUI dialog. No add-on settings applied
+
+ XBMC.RunScript(script.artwork.downloader, mode=gui, mediatype=?,
medianame=?,mediapath=?)
+ -> Runs using the GUI dialog. No add-on settings applied.
'mediapath'is meant for movies but can work for tvshows to.
XBMC.runscript(script.artwork.downloader, mode=custom,
mediatype=?,medianame=?,<art_type>,<art_type>,<art_type>)
-> downloads according to specified art_type. Use as many as you
like. Only add-on limits apply
+
Code to run script bulk mode:
XBMC.runscript(script.artwork.downloader)
-> downloads according to add-on settings
@@ -51,6 +55,7 @@ Available options "mode=?"
Available options "medianame=?":
Any name/title that fits the corresponding "mediatype="
-> example: mediatype=movie, medianame=$INFO[ListItem.Title]
+ -> example: mediatype=movie, medianame=$INFO[ListItem.Title],
mediapath=$INFO[ListItem.Path]
-> example: mediatype=movie, medianame=Avatar
-> example: mediatype=tvshow, medianame=$INFO[ListItem.TVShowTitle]
-> example: mediatype=tvshow, medianame=House
diff --git a/script.artwork.downloader/resources/language/English/strings.xml
b/script.artwork.downloader/resources/language/English/strings.xml
index 9881b6c..c074847 100644
--- a/script.artwork.downloader/resources/language/English/strings.xml
+++ b/script.artwork.downloader/resources/language/English/strings.xml
@@ -1,8 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<strings>
<!-- Add-on messages id=32001 to 32030 -->
- <string id="32001">Please help get more art or donate on:</string>
- <string id="32002">Run add-on at time: (24h)</string>
+ <string id="32001">Please help get more artwork or donate on:</string>
+ <string id="32002">Scheduled run at time: (24h)</string>
<string id="32003">Faulty/empty settings combination found!</string>
<string id="32004">Select your preferences and press OK to
save</string>
<string id="32005">Cleaning up</string>
@@ -26,11 +26,11 @@
<string id="32023">Run add-on at start-up / login</string>
<string id="32024">Run add-on as a service</string>
<string id="32025">-</string>
- <string id="32026">24</string>
- <string id="32027">36</string>
- <string id="32028">48</string>
+ <string id="32026">-</string>
+ <string id="32027">-</string>
+ <string id="32028">-</string>
<string id="32029">[I](After changes are made you must restart XBMC)
[/I]</string>
- <string id="32030">No ID found for looking up artwork</string>
+ <string id="32030">No provider ID found for looking up artwork</string>
<!-- Add-on settings: General section id=32031 to 32050 -->
<string id="32031">General settings</string>
@@ -38,7 +38,7 @@
<string id="32033">Run in background</string>
<string id="32034">Show dialog on finished/errors</string>
<string id="32035">Overwrite all existing artwork [I](will be
automaticly disabled after downloading)[/I] </string>
- <string id="32036">Centralize fanart [I](Can be used for fanart
slideshow)[/I] </string>
+ <string id="32036">Centralize extrafanart [I](Can be used for
extrafanart slideshow)[/I] </string>
<string id="32037">Central TV fanart directory</string>
<string id="32038">Central Movie fanart directory</string>
<string id="32039">-</string>
diff --git a/script.artwork.downloader/resources/lib/media_setup.py
b/script.artwork.downloader/resources/lib/media_setup.py
index 8cdca06..e806ee2 100644
--- a/script.artwork.downloader/resources/lib/media_setup.py
+++ b/script.artwork.downloader/resources/lib/media_setup.py
@@ -1,3 +1,4 @@
+import os
import re
import xbmc
import urllib
@@ -10,7 +11,6 @@ from resources.lib.utils import _log as log
# Retrieve JSON list
def _media_listing(media_type):
-
log('Using JSON for retrieving %s info' %media_type)
Medialist = []
if media_type == 'tvshow':
@@ -21,7 +21,7 @@ def _media_listing(media_type):
for item in jsonobject['result']['tvshows']:
Media = {}
Media['name'] = item['label']
- Media['path'] = item['file']
+ Media['path'] = _media_path(item['file'])
Media['id'] = item['imdbnumber']
Media['tvshowid'] = item['tvshowid']
### Search for season numbers
@@ -41,10 +41,22 @@ def _media_listing(media_type):
for item in jsonobject['result']['movies']:
Media = {}
Media['name'] = item['label']
- Media['path'] = item['file']
+ Media['path'] = _media_path(item['file'])
Media['id'] = item['imdbnumber']
Media['movieid'] = item['movieid']
Medialist.append(Media)
else:
log('No JSON results found')
- return Medialist
\ No newline at end of file
+ return Medialist
+
+
+def _media_path(path):
+ # Check for stacked movies
+ try:
+ path = os.path.split(path)[0].rsplit(' , ', 1)[1]
+ except:
+ path = os.path.split(path)[0]
+ # Fixes problems with rared movies
+ if path.startswith("rar"):
+ path = os.path.split(urllib.url2pathname(path.replace("rar://","")))[0]
+ return path
\ No newline at end of file
diff --git a/script.artwork.downloader/resources/lib/settings.py
b/script.artwork.downloader/resources/lib/settings.py
index 8ccdcab..b8cb9b1 100644
--- a/script.artwork.downloader/resources/lib/settings.py
+++ b/script.artwork.downloader/resources/lib/settings.py
@@ -2,7 +2,6 @@
import xbmc
import xbmcaddon
import os
-import time
import sys
import platform
import xbmcgui
@@ -26,7 +25,6 @@ settings_file = os.path.join(__addondir__, "settings.xml")
class _settings:
-
### Get settings from settings.xml
def _get(self):
self.movie_enable = __addon__.getSetting("movie_enable") ==
'true'
@@ -37,7 +35,7 @@ class _settings:
self.movie_logo = __addon__.getSetting("movie_logo") ==
'true'
self.movie_discart = __addon__.getSetting("movie_discart") ==
'true'
self.movie_defaultthumb =
__addon__.getSetting("movie_defaultthumb") == 'true'
-
+
self.tvshow_enable = __addon__.getSetting("tvshow_enable") ==
'true'
self.tvshow_poster = __addon__.getSetting("tvshow_poster") ==
'true'
self.tvshow_seasonposter =
__addon__.getSetting("tvshow_seasonposter") == 'true'
@@ -64,12 +62,12 @@ class _settings:
self.service_runtime = __addon__.getSetting("service_runtime")
self.files_overwrite = __addon__.getSetting("files_overwrite")
== 'true'
self.xbmc_caching_enabled =
__addon__.getSetting("xbmc_caching_enabled") == 'true'
-
+
# temporary force these to false
self.tvshow_seasonposter = False
self.tvshow_seasonbanner = False
self.tvshow_seasonthumbs = False
-
+
def _get_limit(self):
self.limit_artwork =
__addon__.getSetting("limit_artwork") == 'true'
self.limit_extrafanart_max =
int(__addon__.getSetting("limit_extrafanart_max").rstrip('0').rstrip('.'))
@@ -150,162 +148,179 @@ class _settings:
### Create list for Artwork types to download
def _artype_list(self):
- self.movie_arttype_list = []
- self.tvshow_arttype_list = []
+ self.available_arttypes = []
# create global list
info = {}
+ info['media_type'] = 'movie'
info['bulk_enabled'] = self.movie_poster
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32128)
info['art_type'] = 'poster'
info['filename'] = 'poster.jpg'
- self.movie_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'movie'
info['bulk_enabled'] = self.movie_fanart
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32121)
info['art_type'] = 'fanart'
info['filename'] = 'fanart.jpg'
- self.movie_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'movie'
info['bulk_enabled'] = self.movie_extrafanart
info['solo_enabled'] = 'false'
info['gui_string'] = __localize__(32122)
info['art_type'] = 'extrafanart'
info['filename'] = ''
- self.movie_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'movie'
info['bulk_enabled'] = self.movie_extrathumbs
info['solo_enabled'] = 'false'
info['gui_string'] = __localize__(32131)
info['art_type'] = 'extrathumbs'
info['filename'] = 'thumb'
- self.movie_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'movie'
info['bulk_enabled'] = self.movie_logo
info['solo_enabled'] = 'false'
info['gui_string'] = __localize__(32126)
info['art_type'] = 'clearlogo'
info['filename'] = 'logo.png'
- self.movie_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'movie'
info['bulk_enabled'] = self.movie_discart
info['solo_enabled'] = 'false'
info['gui_string'] = __localize__(32132)
info['art_type'] = 'discart'
info['filename'] = 'cdart.png'
- self.movie_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'movie'
info['bulk_enabled'] = self.movie_defaultthumb
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32133)
info['art_type'] = 'defaultthumb'
info['filename'] = 'folder.jpg'
- self.movie_arttype_list.append(info)
+ self.available_arttypes.append(info)
# append tv show list
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_poster
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32128)
info['art_type'] = 'poster'
info['filename'] = 'poster.jpg'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_seasonposter
info['solo_enabled'] = 'false'
info['gui_string'] = __localize__(32129)
info['art_type'] = 'seasonposter'
info['filename'] = 'season'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_fanart
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32121)
info['art_type'] = 'fanart'
info['filename'] = 'fanart.jpg'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_extrafanart
info['solo_enabled'] = 'false'
info['gui_string'] = __localize__(32122)
info['art_type'] = 'extrafanart'
info['filename'] = ''
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_clearart
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32125)
info['art_type'] = 'clearart'
info['filename'] = 'clearart.png'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_logo
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32126)
info['art_type'] = 'clearlogo'
info['filename'] = 'logo.png'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_thumb
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32130)
info['art_type'] = 'tvthumb'
info['filename'] = 'landscape.jpg'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_seasonthumbs
info['solo_enabled'] = 'false'
info['gui_string'] = __localize__(32134)
info['art_type'] = 'seasonthumbs'
info['filename'] = 'seasonthumb'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_showbanner
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32123)
info['art_type'] = 'banner'
info['filename'] = 'banner.jpg'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_seasonbanner
info['solo_enabled'] = 'false'
info['gui_string'] = __localize__(32124)
info['art_type'] = 'seasonbanner'
info['filename'] = 'seasonbanner'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_characterart
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32127)
info['art_type'] = 'characterart'
info['filename'] = 'character.png'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
+
info = {}
+ info['media_type'] = 'tvshow'
info['bulk_enabled'] = self.tvshow_defaultthumb
info['solo_enabled'] = 'true'
info['gui_string'] = __localize__(32133)
info['art_type'] = 'defaultthumb'
info['filename'] = 'folder.jpg'
- self.tvshow_arttype_list.append(info)
-
+ self.available_arttypes.append(info)
### Check for faulty setting combinations
def _check(self):
diff --git a/script.artwork.downloader/resources/lib/utils.py
b/script.artwork.downloader/resources/lib/utils.py
index 36dd26f..3918d8a 100644
--- a/script.artwork.downloader/resources/lib/utils.py
+++ b/script.artwork.downloader/resources/lib/utils.py
@@ -78,3 +78,13 @@ def _dialog(action, percentage = 0, line0 = '', line1 = '',
line2 = '', line3 =
else:
msg = line1 + ': ' + line2
xbmc.executebuiltin("XBMC.Notification(%s, %s, 7500, %s)" %
(line0, msg, __icon__))
+
+# order preserving and get unique entry
+def _getUniq(seq):
+ seen = []
+ result = []
+ for item in seq:
+ if item in seen: continue
+ seen.append(item)
+ result.append(item)
+ return result
\ No newline at end of file
diff --git a/script.artwork.downloader/service.py
b/script.artwork.downloader/service.py
index 07303bf..4931892 100644
--- a/script.artwork.downloader/service.py
+++ b/script.artwork.downloader/service.py
@@ -13,17 +13,20 @@ from resources.lib.settings import _settings
# starts update/sync
def autostart():
+ xbmcaddon.Addon().setSetting(id="files_overwrite", value='false')
settings = _settings()
settings._get()
addondir = xbmc.translatePath( utils.__addon__.getAddonInfo('profile')
)
tempdir = os.path.join(addondir, 'temp')
- service_runtime = "%s:00" % settings.service_runtime
+ service_runtime = str('%.2d'%int(settings.service_runtime) + ':00')
log('Service - Run at startup: %s'%settings.service_startup,
xbmc.LOGNOTICE)
log('Service - Run as service: %s'%settings.service_enable,
xbmc.LOGNOTICE)
- log('Service - Time: %s:00'%service_runtime, xbmc.LOGNOTICE)
- xbmcvfs.rmdir(tempdir)
+ log('Service - Time: %s'%service_runtime, xbmc.LOGNOTICE)
+ if xbmcvfs.exists(tempdir):
+ xbmcvfs.rmdir(tempdir)
+ log('Removing temp folder from previous run.')
if settings.service_startup:
- time.sleep(10)
+ time.sleep(15)
xbmc.executebuiltin('XBMC.RunScript(script.artwork.downloader,silent=true)')
if settings.service_enable:
while (not xbmc.abortRequested):
@@ -36,4 +39,4 @@ def autostart():
xbmc.executebuiltin('XBMC.RunScript(script.artwork.downloader,silent=true)')
else:
log('Addon already running, scheduled run aborted',
xbmc.LOGNOTICE)
-autostart()
+autostart()
\ No newline at end of file
-----------------------------------------------------------------------
Summary of changes:
script.artwork.downloader/addon.xml | 2 +-
script.artwork.downloader/changelog.txt | 8 +
script.artwork.downloader/default.py | 230 ++++++++------------
script.artwork.downloader/readme.txt | 1 +
.../resources/docs/pre-eden.xml | 6 +-
.../resources/docs/runscript.txt | 5 +
.../resources/language/English/strings.xml | 14 +-
.../resources/lib/media_setup.py | 20 ++-
.../resources/lib/settings.py | 103 +++++----
script.artwork.downloader/resources/lib/utils.py | 10 +
script.artwork.downloader/service.py | 13 +-
11 files changed, 212 insertions(+), 200 deletions(-)
hooks/post-receive
--
Scripts
------------------------------------------------------------------------------
Write once. Port to many.
Get the SDK and tools to simplify cross-platform app development. Create
new or port existing apps to sell to consumers worldwide. Explore the
Intel AppUpSM program developer opportunity. appdeveloper.intel.com/join
http://p.sf.net/sfu/intel-appdev
_______________________________________________
Xbmc-addons mailing list
Xbmc-addons@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/xbmc-addons