The branch, eden-pre has been updated
       via  3da63d2ae34d5dbf0072dc3f3c444d81142cbe51 (commit)
       via  b4235b730fccdc55c7c11890eb469b52bb1c5539 (commit)
      from  4d3de58bafb918db44c7272d5e93e06103f5c783 (commit)

- Log -----------------------------------------------------------------
http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=3da63d2ae34d5dbf0072dc3f3c444d81142cbe51

commit 3da63d2ae34d5dbf0072dc3f3c444d81142cbe51
Author: amet <[email protected]>
Date:   Sun Oct 23 23:57:48 2011 +0400

    [script.xbmc.subtitles] -v 2.9.25
    
    - fixed: typo in Napisy24pl

diff --git a/script.xbmc.subtitles/addon.xml b/script.xbmc.subtitles/addon.xml
index 99310ee..fbe409a 100644
--- a/script.xbmc.subtitles/addon.xml
+++ b/script.xbmc.subtitles/addon.xml
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <addon id="script.xbmc.subtitles"
        name="XBMC Subtitles"
-       version="2.9.24"
+       version="2.9.25"
        provider-name="Amet, mr_blobby">
   <requires>
     <import addon="xbmc.python" version="2.0"/>
diff --git a/script.xbmc.subtitles/changelog.txt 
b/script.xbmc.subtitles/changelog.txt
index 98ebe3e..5d62a8d 100644
--- a/script.xbmc.subtitles/changelog.txt
+++ b/script.xbmc.subtitles/changelog.txt
@@ -1,3 +1,6 @@
+2.9.25
+- fixed: typo in Napisy24pl
+
 2.9.24
 - fixed: Napisy24pl, thx mrto
 - fixed: Sratim service
diff --git a/script.xbmc.subtitles/resources/lib/services/Napisy24pl/service.py 
b/script.xbmc.subtitles/resources/lib/services/Napisy24pl/service.py
index 8202b6a..da7f0e4 100644
--- a/script.xbmc.subtitles/resources/lib/services/Napisy24pl/service.py
+++ b/script.xbmc.subtitles/resources/lib/services/Napisy24pl/service.py
@@ -12,7 +12,7 @@ from utilities import log, languageTranslate
 _ = sys.modules[ "__main__" ].__language__
 
 main_url = "http://napisy24.pl/search.php?str=";
-down_url = "http://napisy.me/download/mdvd";
+down_url = "http://napisy.me/download/mdvd/";
 
 subtitle_pattern = 'a href=\"/download/(\d+)/\"><strong>(.+?)</strong></a>'
 

http://xbmc.git.sourceforge.net/git/gitweb.cgi?p=xbmc/scripts;a=commit;h=b4235b730fccdc55c7c11890eb469b52bb1c5539

commit b4235b730fccdc55c7c11890eb469b52bb1c5539
Author: amet <[email protected]>
Date:   Sun Oct 23 23:55:04 2011 +0400

    [script.extrafanartdownloader] -v 0.4.0
    
    - Added silent downloading in background
    - Added Extrafanart limiter (maximum fanart/language/no text)
    - Added download backup folder for fanart
    - More extensive error checking
    - More extensive debug logging
    - Updated skin integration examples
    - Open Settings on first run

diff --git a/script.extrafanartdownloader/README 
b/script.extrafanartdownloader/README
index f738775..3eed296 100644
--- a/script.extrafanartdownloader/README
+++ b/script.extrafanartdownloader/README
@@ -1,53 +1,45 @@
-This script will automatically download all of the fanart for every TV show 
(thetvdb.com) and movie (themoviedb.org) in your XBMC library and place it in 
an 'extrafanart' directory to be used by skins which support this feature.
+This script will automatically download all of the fanart for every:
+    TV show (thetvdb.com)
+    Movie (themoviedb.org)
+in your XBMC library and place it in an 'extrafanart' directory to be used by 
skins which support this feature.
 
 The script also supports a 'solo mode' which allows it to be run from inside a 
skin and download the fanart for only 1 tv show or movie at a time.
 
-This script requires an xbmc nightly build of September 21st or later
+Eden 11.0:
+    The script can now be downloaded from the official repo XBMC-repo 
(pre-Eden)
+    This script requires an xbmc nightly build of September 21st or later
+    Current stable version : 0.4.0
 
 Current Features:
-- TV fanart
-- Movie fanart
-- Bulk mode (download all extrafanart for every tv show/movie)
-- Solo mode (download all extrafanart for only one tv show/movie)
-- Eden support (Master branch)
-- Dharma support (Dharma branch)
-
+    - TV Extrafanart
+    - Movie Extrafanart
+    - Skin integration: Bulk mode (download all extrafanart for every tv 
show/movie)
+    - Skin integration: Solo mode (download all extrafanart for only one tv 
show/movie)
+    - Limit fanart by: maximum amount/ minimum rating / language used
+    - Centralized fanart folder to be used as multi-image background folder
+    - Fanart download backup folder
+    
 Todos:
-- Music fanart
-
-The script can now be downloaded from the official repo for eden-pre.
-
-To run the script in bulk mode simply click on it in the 'Addons' or 
'Programs' menu in XBMC.  You can change the settings if you wish in the addon 
settings page.
-
-If you wish to run the script in solo mode you can do so by calling the script 
with 2 arguments.
-The first must be either 'movie' or 'tvshow' and the second should be the name 
of the movie or show, e.g.
-
-Code to run script:
-
-       XBMC.runscript(script.extrafanartdownloader, mediatype=tvshow, 
medianame=House)
-or
-       XBMC.runscript(script.extrafanartdownloader, mediatype=movie, 
medianame=50 First Dates)
-
-
-Real world code example Dharma10.1:
-  <item id="10">
-       <description>Get Extrafanart</description>
-       <label>$LOCALIZE[31316]</label>
-       <onclick>XBMC.RunScript(script.extrafanartdownloader, mediatype=tvshow, 
medianame=$INFO[ListItem.TVShowTitle])</onclick>
-       
<visible>Container.Content(tvshows)+system.hasaddon(script.extrafanartdownloader)</visible>
-  </item>
-  <item id="11">
-       <description>Get Extrafanart</description>
-       <label>$LOCALIZE[31316]</label>
-       <onclick>XBMC.RunScript(script.extrafanartdownloader, mediatype=movie, 
medianame=$INFO[ListItem.Title])</onclick>
-       
<visible>Container.Content(movies)+system.hasaddon(script.extrafanartdownloader)</visible>
-  </item>
-
-Real world code example pre-Eden 11.0:
-  <item id="10">
-       <description>Get Extrafanart</description>
-       <label>$LOCALIZE[31316]</label>
-       <onclick 
condition="Container.Content(tvshows)">XBMC.RunScript(script.extrafanartdownloader,
 mediatype=tvshow, medianame=$INFO[ListItem.TVShowTitle])</onclick>
-       <onclick 
condition="Container.Content(movies)">XBMC.RunScript(script.extrafanartdownloader,
 mediatype=movie, medianame=$INFO[ListItem.Title])</onclick>
-       
<visible>[Container.Content(tvshows)|Container.Content(movies)]+system.hasaddon(script.extrafanartdownloader)</visible>
-  </item> 
+    - Music fanart
+
+Skins using this Add-On:
+    Eden 11.0
+    - Aeon Nox (made by Big Noid)
+    - Cirrus Extended (made by Butchabay)
+    - Transparency [T!] (made by Ronie)
+
+----------------------------------------------------------------------------------------------
+To run the script in bulk mode simply click on it in the 'Addons' or 
'Programs' menu in XBMC.
+You can change the settings if you wish in the addon settings page.
+
+This script has some different run modes. Please check the files as described 
below.
+
+Code for skin intergration:
+Check "resources/docs/runscript.txt"
+
+Real world code example Dharma10.1 (available in Dharma version):
+Check "resources/docs/dharma.xml"
+
+Real world code example Eden 11.0 (available in Eden version):
+Check "resources/docs/pre-eden.xml"
+
diff --git a/script.extrafanartdownloader/addon.xml 
b/script.extrafanartdownloader/addon.xml
index 11ef108..177eef5 100644
--- a/script.extrafanartdownloader/addon.xml
+++ b/script.extrafanartdownloader/addon.xml
@@ -1,7 +1,13 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>

-<addon id="script.extrafanartdownloader" name="Extrafanart Downloader" 
version="0.3.7" provider-name="paddycarey/putneyj">

+<addon

+       id="script.extrafanartdownloader"

+       name="Extrafanart Downloader"

+       version="0.4.0"

+       provider-name="paddycarey, putneyj, Machine-Sanctum"

+    branch="Eden">

   <requires>

     <import addon="xbmc.python" version="2.0"/>

+    <import addon="script.module.elementtree"/>

   </requires>

   <extension point="xbmc.python.script" library="default.py">

     <provides>executable</provides>

@@ -9,13 +15,15 @@
   <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]

+    <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]

+       <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]

diff --git a/script.extrafanartdownloader/default.py 
b/script.extrafanartdownloader/default.py
index 8ed6ce9..b6eeb63 100644
--- a/script.extrafanartdownloader/default.py
+++ b/script.extrafanartdownloader/default.py
@@ -1,56 +1,88 @@
-import urllib2
 import re
 import os
-import socket
+import time
 import sys
 import xbmc
 import xbmcaddon
-import xbmcvfs
-import xbmcgui
-
+import platform
 
 ### get addon info
 __addon__ = xbmcaddon.Addon('script.extrafanartdownloader')
 __addonid__ = __addon__.getAddonInfo('id')
 __addonname__ = __addon__.getAddonInfo('name')
 __addonversion__ = __addon__.getAddonInfo('version')
-__language__ = __addon__.getLocalizedString
-
+__localize__ = __addon__.getLocalizedString
 
-### adjust default timeout to stop script hanging
-timeout = 20
-socket.setdefaulttimeout(timeout)
+addondir = xbmc.translatePath( __addon__.getAddonInfo('profile') )
+settings_file = os.path.join(addondir, "settings.xml")
+first_run = False
 
+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.script_exceptions import DownloadError, 
CreateDirectoryError, HTTP404Error, HTTP503Error, NoFanartError, HTTPTimeout, 
ItemNotFoundError
+from resources.lib import language
+from resources.lib.fileops import fileops
+from xml.parsers.expat import ExpatError
 
-### logging function
-def log(txt, severity=xbmc.LOGDEBUG):
-    message = 'script.extrafanartdownloader: %s' % txt
-    xbmc.log(msg=message, level=severity)
-
+Media_listing = media_setup.media_listing
+__language__ = language.get_abbrev()
 
 class Main:
     def __init__(self):
+        if not os.path.isfile(settings_file):
+            dialog('okdialog', line1 = __localize__(36037), line2 = 
__localize__(36038))
+            log('Settings.xml file not found. Opening settings window.')
+            __addon__.openSettings()
+            first_run = True
+        else:
+            log('Settings.xml file found. Continue with initializing.')
+        ### Check for script starting arguments used by skins
+        log("## Checking for arguments used by skins")
+        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" )
         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.Medialist = Media_listing('TVShows')
+                        log("Bulk mode: TV Shows")
                         self.download_fanart(self.Medialist, self.tv_providers)
                     elif self.mediatype == 'movie':
-                        self.Media_listing('Movies')
+                        self.Medialist = Media_listing('Movies')
+                        log("Bulk mode: Movies")
                         self.download_fanart(self.Medialist, 
self.movie_providers)
-                    elif self.mediatype == 'artist':
-                        log('Music fanart not yet implemented', xbmc.LOGNOTICE)
+                    elif self.mediatype == 'music':
+                        log('Bulk mode: Music not yet implemented', 
xbmc.LOGNOTICE)
             else:
-                if self.tvfanart == 'true':
-                    self.Media_listing('TVShows')
+                if self.tvfanart:
+                    self.Medialist = Media_listing('TVShows')
+                    self.mediatype = 'tvshow'
                     self.download_fanart(self.Medialist, self.tv_providers)
                 else:
                     log('TV fanart disabled, skipping', xbmc.LOGINFO)
-                if self.moviefanart == 'true':
-                    self.Media_listing('Movies')
+                if self.moviefanart:
+                    self.Medialist = Media_listing('Movies')
+                    self.mediatype = 'movie'
                     self.download_fanart(self.Medialist, self.movie_providers)
                 else:
                     log('Movie fanart disabled, skipping', xbmc.LOGINFO)
@@ -61,102 +93,118 @@ class Main:
 
     ### load settings and initialise needed directories
     def initialise(self):
-        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')
+        providers = provider.get_providers()
+        self.movie_providers = providers['movie_providers']
+        self.tv_providers = providers['tv_providers']
+        self.music_providers = providers['music_providers']
+        self.failcount = 0
+        self.failthreshold = 3
+        self.xmlfailthreshold = 5
+        self.fanart_centralized = 0
+        self.moviefanart = __addon__.getSetting("movie_enable") == 'true'
+        self.tvfanart = __addon__.getSetting("tvshow_enable") == 'true'
+        self.centralize_enable = __addon__.getSetting("centralize_enable") == 
'true'
+        self.centralfolder_split = __addon__.getSetting("centralfolder_split")
+        self.centralfolder_movies = 
__addon__.getSetting("centralfolder_movies")
+        self.centralfolder_tvshows = 
__addon__.getSetting("centralfolder_tvshows")
+        self.limit_extrafanart = __addon__.getSetting("limit_extrafanart") == 
'true'
+        self.limit_extrafanart_max = 
int(__addon__.getSetting("limit_extrafanart_max").rstrip('0').rstrip('.'))
+        self.limit_extrafanart_rating = 
int(__addon__.getSetting("limit_extrafanart_rating").rstrip('0').rstrip('.'))
+        self.limit_language = __addon__.getSetting("limit_language") == 'true'
+        self.limit_notext = __addon__.getSetting("limit_notext") == 'true'
+        self.use_cache = __addon__.getSetting("use_cache") == 'true'
+        self.cache_directory = __addon__.getSetting("cache_directory")
+        self.background = __addon__.getSetting("background") == 'true'
+        dialog('create', line1 = __localize__(36003), background = 
self.background)
         self.mediatype = ''
         self.medianame = ''
+
+        # Print out settings to log to help with debugging
+        log("## Settings...")
+        log('## Language Used = %s' % str(__language__))
+        log('## Download Movie Fanart= %s' % str(self.moviefanart))
+        log('## Download TV Show  Fanart = %s' % str(self.tvfanart))
+        log('## Background Run = %s' % str(self.background))
+        log('## Centralize Extrafanart = %s' % str(self.centralize_enable))
+        log('## Central Movies Folder = %s' % str(self.centralfolder_movies))
+        log('## Central TV Show Folder = %s' % str(self.centralfolder_tvshows))
+        log('## Limit Extrafanart = %s' % str(self.limit_extrafanart))
+        log('## Limit Extrafanart Max = %s' % str(self.limit_extrafanart_max))
+        log('## Limit Extrafanart Rating = %s' % 
str(self.limit_extrafanart_rating))
+        log('## Limit Language = %s' % str(self.limit_language))
+        log('## Limit Fanart with no text = %s' % str(self.limit_notext))
+        log('## Backup downloaded fanart= %s' % str(self.use_cache))
+        log('## Backup folder = %s' % str(self.cache_directory))
+        log("## End of Settings...")
+
+        
         for item in sys.argv:
+            log("## Checking for downloading mode...")
             match = re.search("mediatype=(.*)" , item)
             if match:
                 self.mediatype = match.group(1)
-                if self.mediatype == 'tvshow' or self.mediatype == 'movie' or 
self.mediatype == 'artist':
+                if self.mediatype == 'tvshow' or self.mediatype == 'movie' or 
self.mediatype == 'music':
                     pass
                 else:
-                    log('Error: invalid mediatype, must be one of movie, 
tvshow or artist', xbmc.LOGERROR)
+                    log('Error: invalid mediatype, must be one of movie, 
tvshow or music', xbmc.LOGERROR)
                     return False
             else:
                 pass
             match = re.search("medianame=" , item)
             if match:
-                self.medianame = item.replace( "medianame=" , "" )
+                self.medianame = item.replace("medianame=" , "")
             else:
                 pass
         try:
-            if not xbmcvfs.exists(self.tempdir):
-                if not xbmcvfs.exists(addondir):
-                    xbmcvfs.mkdir(addondir)
-                    log('Created addon directory: %s' % addondir)
-                xbmcvfs.mkdir(self.tempdir)
-                log('Created temporary directory: %s' % self.tempdir)
-        except:
-            log('Could not create temporary directory: %s' % self.tempdir, 
xbmc.LOGERROR)
+            self.fileops = fileops()
+        except CreateDirectoryError, e:
+            log("Could not create directory: %s" % str(e))
             return False
-        return True
+        else:
+            return True
 
 
     ### clean up and
     def cleanup(self):
-        if xbmcvfs.exists(self.tempdir):
-            self.dialog.update(100, __language__(36004))
-            log('Cleaning up')
-            for x in os.listdir(self.tempdir):
-                tempfile = os.path.join(self.tempdir, x)
-                xbmcvfs.delete(tempfile)
-                if xbmcvfs.exists(tempfile):
+        if self.fileops._exists(self.fileops.tempdir):
+            dialog('update', percentage = 100, line1 = __localize__(36004), 
background = self.background)
+            log('Cleaning up temp files')
+            for x in os.listdir(self.fileops.tempdir):
+                tempfile = os.path.join(self.fileops.tempdir, x)
+                self.fileops._delete(tempfile)
+                if self.fileops._exists(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, 
xbmc.LOGERROR)
+            self.fileops._rmdir(self.fileops.tempdir)
+            if self.fileops._exists(self.fileops.tempdir):
+                log('Error deleting temp directory: %s' % 
self.fileops.tempdir, xbmc.LOGERROR)
             else:
-                log('Deleted temp directory: %s' % self.tempdir, 
xbmc.LOGNOTICE)
+                log('Deleted temp directory: %s' % self.fileops.tempdir, 
xbmc.LOGNOTICE)
         ### log results and notify user
-        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()
-        xbmcgui.Dialog().ok(__addonname__, summary)
-
-
-    ### download a given image to a given destination
-    def downloadimage(self, fanarturl, fanartpath, temppath):
-        try:
-            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, 
xbmc.LOGWARNING)
-            self.failcount = self.failcount + 1
-        except:
-            log('Download failed, skipping: %s' % fanarturl, xbmc.LOGWARNING)
-            self.failcount = self.failcount + 1
+        log('Finished: %s extrafanart downloaded' % 
self.fileops.downloadcount, xbmc.LOGNOTICE)
+        summary_tmp = __localize__(36009) + ': %s ' % 
self.fileops.downloadcount
+        summary = summary_tmp + __localize__(36013)
+        dialog('close', background = self.background)
+        if not self.failcount < self.failthreshold:
+            log('Network error detected, script aborted', xbmc.LOGERROR)
+            dialog('okdialog', line1 = __localize__(36007), line2 = 
__localize__(36008), background = self.background)
+        if not xbmc.abortRequested:
+            dialog('okdialog', line1 = summary, background = self.background)
         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), xbmc.LOGERROR)
-            else:
-                self.failcount = 0
-                log('Downloaded successfully: %s' % fanarturl, xbmc.LOGNOTICE)
-                self.fanart_count = self.fanart_count + 1
+            dialog('okdialog', line1 = __localize__(36007), line2 = summary, 
background = self.background)
 
     ### solo mode
     def solo_mode(self, itemtype, itemname):
         if itemtype == 'movie':
-            self.Media_listing('Movies')
+            log("## Solo mode: Movie...")
+            self.Medialist = Media_listing('Movies')
         elif itemtype == 'tvshow':
-            self.Media_listing('TVShows')
+            self.Medialist = Media_listing('TVShows')
+            log("## Solo mode: TV Show...")
+        elif itemtype == '':
+            self.Medialist = Media_listing('Music')
+            log("## Solo mode: Music...")
         else:
-            log("Error: type must be one of 'movie' or 'tvshow', aborting", 
xbmc.LOGERROR)
+            log("Error: type must be one of 'movie', 'tvshow' or 'music', 
aborting", xbmc.LOGERROR)
             return False
         log('Retrieving fanart for: %s' % itemname)
         for currentitem in self.Medialist:
@@ -176,161 +224,143 @@ class Main:
         self.processeditems = 0
         for currentmedia in media_list:
             ### check if XBMC is shutting down
-            if xbmc.abortRequested == True:
-                log('XBMC shutting down, aborting')
+            if xbmc.abortRequested:
+                log('XBMC abort requested, aborting')
                 break
             ### check if script has been cancelled by user
-            if self.dialog.iscanceled():
-                self.dialog.close()
+            if dialog('iscanceled', background = self.background):
+                break
+            if not self.failcount < self.failthreshold:
                 break
-            self.failcount = 0
             try:
                 self.media_path = 
os.path.split(currentmedia["path"])[0].rsplit(' , ', 1)[1]
             except:
                 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)
+            dialog('update', percentage = int(float(self.processeditems) / 
float(len(media_list)) * 100.0), line1 = __localize__(36005), line2 = 
self.media_name, line3 = '', background = self.background)
+            log('Processing media: %s' % self.media_name, xbmc.LOGNOTICE)
             log('ID: %s' % self.media_id)
             log('Path: %s' % self.media_path)
+            targetdirs = []
             extrafanart_dir = os.path.join(self.media_path, 'extrafanart')
-            if not xbmcvfs.exists(extrafanart_dir):
-                xbmcvfs.mkdir(extrafanart_dir)
-                if xbmcvfs.exists(extrafanart_dir):
-                    log('Created directory: %s' % extrafanart_dir, 
xbmc.LOGINFO)
-                else:
-                    log('Error creating directory, skipping: %s' % 
extrafanart_dir, xbmc.LOGERROR)
-                    break
+            targetdirs.append(extrafanart_dir)
+            if self.centralize_enable:
+                if self.mediatype == 'tvshow':
+                    if not self.centralfolder_tvshows == '':
+                        targetdirs.append(self.centralfolder_tvshows)
+                    else:
+                        log('Error: Central fanart enabled but TV Show folder 
not set, skipping', xbmc.LOGERROR)
+                elif self.mediatype == 'movie':
+                    if not self.centralfolder_movies == '':
+                        targetdirs.append(self.centralfolder_movies)
+                    else:
+                        log('Error: Central fanart enabled but Movies folder 
not set, skipping', xbmc.LOGERROR)
             if self.media_id == '':
                 log('%s: No ID found, skipping' % self.media_name, 
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)
             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:
+                    if not self.failcount < self.failthreshold:
+                        break
+                    backdrops_result = ''
+                    self.xmlfailcount = 0
+                    while not backdrops_result == 'pass' and not 
backdrops_result == 'skipping':
+                        if backdrops_result == 'retrying':
+                            time.sleep(10)
+                        try:
+                            backdrops = provider.get_image_list(self.media_id)
+                        except HTTP404Error, e:
+                            errmsg = '404: File not found'
+                            backdrops_result = 'skipping'
+                        except HTTP503Error, e:
+                            self.xmlfailcount = self.xmlfailcount + 1
+                            errmsg = '503: API Limit Exceeded'
+                            backdrops_result = 'retrying'
+                        except NoFanartError, e:
+                            errmsg = 'No fanart found'
+                            backdrops_result = 'skipping'
+                        except ItemNotFoundError, e:
+                            errmsg = '%s not found' % self.media_id
+                            backdrops_result = 'skipping'
+                        except ExpatError, e:
+                            self.xmlfailcount = self.xmlfailcount + 1
+                            errmsg = 'Error parsing xml: %s' % str(e)
+                            backdrops_result = 'retrying'
+                        except HTTPTimeout, e:
+                            self.failcount = self.failcount + 1
+                            errmsg = 'Timed out'
+                            backdrops_result = 'skipping'
+                        except DownloadError, e:
+                            self.failcount = self.failcount + 1
+                            errmsg = 'Possible network error: %s' % str(e)
+                            backdrops_result = 'skipping'
+                        else:
+                            backdrops_result = 'pass'
+                        if not self.xmlfailcount < self.xmlfailthreshold:
+                            backdrops_result = 'skipping'
+                        if not backdrops_result == 'pass':
+                            log('Error getting data from %s (%s): %s' % 
(provider.name, errmsg, backdrops_result))
+                    if backdrops_result == 'pass':
+                        self.failcount = 0
                         self.current_fanart = 0
-                        for fanarturl in backdrops:
+                        self.downloaded_fanart = 0
+                        if (self.limit_extrafanart and 
self.limit_extrafanart_max < len(backdrops)):
+                            download_max = self.limit_extrafanart_max
+                        else: download_max = len(backdrops)
+                        targets = targetdirs[:]
+                        if self.use_cache and not self.cache_directory == '':
+                            targets.append(self.cache_directory)
+                        for fanart in backdrops:
+                            fanarturl = fanart['url']
                             ### check if script has been cancelled by user
-                            if self.dialog.iscanceled():
-                                self.dialog.close()
+                            if dialog('iscanceled', background = 
self.background):
+                                dialog('close', background = self.background)
+                                break
+                            if not self.failcount < self.failthreshold:
                                 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)
+                            
+                            if self.limit_extrafanart and 
self.downloaded_fanart >= self.limit_extrafanart_max:
+                                reason = 'Max number fanart reached: %s' % 
self.downloaded_fanart
+                                self.fileops._delete_file_in_dirs(fanartfile, 
targetdirs, reason)
+                            elif self.limit_extrafanart and 'rating' in fanart 
and fanart['rating'] < self.limit_extrafanart_rating:
+                                reason = 'Rating too low: %s' % 
fanart['rating']
+                                self.fileops._delete_file_in_dirs(fanartfile, 
targetdirs, reason)
+                            elif self.limit_extrafanart and 'series_name' in 
fanart and self.limit_notext and fanart['series_name']:
+                                reason = 'Has text'
+                                self.fileops._delete_file_in_dirs(fanartfile, 
targetdirs, reason)
+                            elif self.limit_extrafanart and 
self.limit_language and 'language' in fanart and fanart['language'] != 
__language__:
+                                reason = "Doesn't match current language: %s" 
% xbmc.getLanguage()
+                                self.fileops._delete_file_in_dirs(fanartfile, 
targetdirs, reason)
                             else:
-                                
self.dialog.update(int(float(self.current_fanart) / float(len(backdrops)) * 
100.0), __language__(36006), self.media_name, "")
+                                try:
+                                    self.fileops._downloadfile(fanarturl, 
fanartfile, targets)
+                                except HTTP404Error, e:
+                                    log("File does not exist at URL: %s" % 
str(e), xbmc.LOGWARNING)
+                                except HTTPTimeout, e:
+                                    self.failcount = self.failcount + 1
+                                    log("Error downloading file: %s, timed 
out" % str(e), xbmc.LOGERROR)
+                                except CreateDirectoryError, e:
+                                    log("Could not create directory, skipping: 
%s" % str(e), xbmc.LOGWARNING)
+                                    break
+                                except DownloadError, e:
+                                    self.failcount = self.failcount + 1
+                                    log('Error downloading file: %s (Possible 
network error: %s), skipping' % (fanarturl, str(e)), xbmc.LOGERROR)
+                                else:
+                                    self.downloaded_fanart = 
self.downloaded_fanart + 1
+                            dialog('update', percentage = 
int(float(self.current_fanart) / float(download_max) * 100.0), line1 = 
__localize__(36006), line2 = self.media_name, line3 = fanartfile, background = 
self.background)
+            log('Finished processing media: %s' % self.media_name, 
xbmc.LOGDEBUG)
             self.processeditems = self.processeditems + 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.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":"(.*?)","', 
mediaitem )
-                    if findimdbnumber:
-                        imdbnumber = (findimdbnumber.group(1))
-                        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
-
-
 
-if ( __name__ == "__main__" ):
-    log('script version %s started' % __addonversion__)
+if (__name__ == "__main__"):
+    log("######## Extrafanart Downloader: 
Initializing...............................")
+    log('## Add-on ID = %s' % str(__addonid__))
+    log('## Add-on Name= %s' % str(__addonname__))
+    log('## Add-on Version = %s' % str(__addonversion__))
     Main()
     log('script stopped')
diff --git 
a/script.extrafanartdownloader/resources/language/English/strings.xml 
b/script.extrafanartdownloader/resources/language/English/strings.xml
index 0c4af9a..a18d196 100644
--- a/script.extrafanartdownloader/resources/language/English/strings.xml
+++ b/script.extrafanartdownloader/resources/language/English/strings.xml
@@ -1,12 +1,85 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <strings>
     <!-- Plugin settings -->
-    <string id="36001">Download movie fanart</string>
-    <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 extrafanart</string>
-    <string id="36006">Downloading extrafanart</string>
-    <string id="36009">Finished</string>
-    <string id="36010">extrafanart downloaded</string>
+        <string id="36001">Download Movie fanart</string>
+        <string id="36002">Download TV Shows fanart</string>
+        <string id="36003">Checking for extrafanart</string>
+        <string id="36004">Cleaning up</string>
+        <string id="36005">Checking for extrafanart</string>
+        <string id="36006">Downloading extrafanart</string>
+        <string id="36007">Add-on aborted</string>
+        <string id="36008">Network error detected</string>
+        <string id="36009">Finished</string>
+        <string id="36010">Enable downloading</string>
+        <string id="36011">extrafanart centralized</string>
+        <string id="36012">Run in background</string>
+        <string id="36013">extrafanart downloaded</string>
+        <string id="36029">Central Folders Split Into Titles</string>  
+        <string id="36030">Centralize fanart</string>
+        <string id="36031">Central Movie fanart directory</string>
+        <string id="36032">Central TV fanart directory</string>
+        <string id="36033">Limit download: Extrafanart</string>
+        <string id="36034">Maximum downloads per title</string>
+        <string id="36035">Minimum rating</string>
+        <string id="36036">Current language only</string>
+        <string id="36037">No settings found!</string>
+        <string id="36038">Select your preferences and press OK to 
save</string>
+
+    <!-- Plugin settings: General section -->
+        <string id="36021">General settings</string>
+        <string id="36022">General settings used in Extrafanart 
Downloader</string>
+
+    <!-- Plugin settings: Movie section -->
+        <string id="36051">Movies</string>
+        <string id="36052">Options for downloading Movie artwork</string>
+
+    <!-- Plugin settings: TV Show section -->
+        <string id="36061">TV Shows</string>
+        <string id="36062">Options for downloading TV Show artwork</string>
+        <string id="36063">Exclude fanart that has text</string>
+
+    <!-- Plugin settings: Music section -->
+<string id="36071">Music</string>
+        <string id="36072">Options for downloading Music artwork</string>
+
+    <!-- Plugin settings: Advanced settings section -->   
+        <string id="36081">Advanced settings</string>
+        <string id="36086">Some advanced settings to be used</string>
+        <string id="36200">Keep backup of all downloaded fanart</string>
+        <string id="36201">Backup folder</string>
+        <string id="36202">[I]Warning: folder can increase to considerable 
size[/I]</string>
+
+    <!-- Plugin settings: Image types -->
+        <string id="36101">Fanart</string>
+        <string id="36102">Extrafanart</string>
+        <string id="36103">Show Banners</string>
+        <string id="36104">Season Banners</string>
+        <string id="36105">ClearArt</string>
+        <string id="36106">Logo</string>
+        <string id="36107">Character Art</string>
+        <string id="36108">Poster</string>
+        <string id="36109">Thumb</string>
+        <string id="36110">Extrathumbs</string>
+
+    <!-- Messages settings: Possible messages to use -->
+        <string id="32121">Please help us to get more art on</string>
+        <string id="32123">http://fanart.tv</string>
+        <string id="32123">http://www.thetvdb.com/</string>
+        <string id="32124">http://www.themoviedb.org/</string>
+        <string id="32125">Not Found</string>
+        <string id="32126">No logo found!</string>
+        <string id="32127">No clearart found!</string>
+        <string id="32128">No show thumb found!</string>
+        <string id="32129">No banner found!</string>
+        <string id="32130">No fanart found!</string>
+        <string id="32131">No extrafanart found!</string>
+        <string id="32132">No season banner found!</string>
+        <string id="32133">No characterart found!</string>
+        <string id="32134">choose what to download</string>
+        <string id="32135">Canceled</string>
+        <string id="32136">Download canceled by user</string>
+        <string id="32137">Which one to download ?</string>
+        <string id="32138">Downloading:</string>
+        <string id="32139">Getting info...</string>
+        <string id="32140">Error copying file</string>
 </strings>
diff --git a/script.extrafanartdownloader/resources/settings.xml 
b/script.extrafanartdownloader/resources/settings.xml
index 54ad901..de9c94f 100644
--- a/script.extrafanartdownloader/resources/settings.xml
+++ b/script.extrafanartdownloader/resources/settings.xml
@@ -1,7 +1,72 @@
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
 <settings>
-    <category label="General">
-               <setting id="moviefanart" type="bool" label="36001" 
default="true"/>
-               <setting id="tvfanart" type="bool" label="36002" 
default="true"/>
+    <category label="36021">
+        <setting type="sep" />
+        <setting label="36022" type="lsep" />
+        <setting type="sep" />
+        <setting label="" type="lsep" />
+        <setting label="36012" id="background" type="bool"  default="false"/>
+        <setting type="sep" />
+        <setting label="36030" id="centralize_enable" type="bool"  
default="false"/>
+        <setting label="36029" id="centralfolder_split" type="bool" 
subsetting= "true" enable="false" default="false" visible="eq(-1,true)"/>
+        <setting label="36031" id="centralfolder_movies" subsetting="true" 
type="folder"  default="" source="auto" option="writeable" enable="eq(-2,true)" 
visible="eq(-2,true)"/>
+        <setting label="36032" id="centralfolder_tvshows" subsetting="true" 
type="folder"  default="" source="auto" option="writeable" enable="eq(-3,true)" 
visible="eq(-3,true)"/>
+        <setting type="sep" />
+        <setting label="36033" id="limit_extrafanart" type="bool" 
default="false"/>
+        <setting label="36034" id="limit_extrafanart_max" subsetting="true" 
type="slider" enable="eq(-1,true)" visible="eq(-1,true)"  range="5,5,100" 
default="20" option="int" />
+        <setting label="36035" id="limit_extrafanart_rating" subsetting="true" 
type="slider" enable="eq(-2,true)" visible="eq(-2,true)"  range="0,10" 
default="5" option="int" />
+        <setting label="36036" id="limit_language" subsetting="true" 
type="bool" enable="eq(-3,true)" visible="eq(-3,true)" default="true" />
+        <setting label="36063" id="limit_notext" subsetting="true" type="bool" 
enable="eq(-4,true)" visible="eq(-4,true)" default="true" />
+    </category>
+    
+<!-- Plugin settings: Movie section -->
+    <category label="36051">
+        <setting type="sep" />
+        <setting label="36052" type="lsep" />
+        <setting type="sep" />
+        <setting label="36010" type="bool" id="movie_enable" default="true" />
+        <setting label="36108" type="bool" id="movie_poster" subsetting= 
"true" enable="eq(-1,true)" default="false" visible="false" />
+        <setting label="36101" type="bool" id="movie_fanart" subsetting= 
"true"  enable="eq(-2,true)" default="true" visible="false" />
+        <setting label="36102" type="bool" id="movie_extrafanart" subsetting= 
"true"  enable="eq(-3,true)" default="false" visible="false" />
+        <setting label="36110" type="bool" id="movie_extrathumb" subsetting= 
"true"  enable="eq(-4,true)" default="false" visible="false" />
+        <setting label="36106" type="bool" id="movie_logo" subsetting= "true"  
enable="eq(-5,true)" default="false" visible="false" />
+    </category>
+    
+<!-- Plugin settings: TV Show section -->
+    <category label="36061">
+        <setting type="sep" />
+        <setting label="36062" type="lsep" />
+        <setting type="sep" />
+        <setting label="36010" type="bool" id="tvshow_enable" default="true" />
+        <setting label="36101" type="bool" id="tvshow_fanart" subsetting= 
"true"  enable="eq(-1,true)" default="false" visible="false" />
+        <setting label="36102" type="bool" id="tvshow_extrafanart" subsetting= 
"true"  enable="eq(-2,true)" default="false" visible="false" />
+        <setting label="36005" type="bool" id="tvshow_clearart" subsetting= 
"true"  enable="eq(-3,true)" default="false" visible="false" />
+        <setting label="36106" type="bool" id="tvshow_logo" subsetting= "true" 
 enable="eq(-4,true)" default="false" visible="false" />
+        <setting label="36108" type="bool" id="tvshow_poster" subsetting= 
"true"  enable="eq(-5,true)" default="false" visible="false" />
+        <setting label="36103" type="bool" id="tvshow_showbanner" subsetting= 
"true"  enable="eq(-6,true)" default="false" visible="false" />
+        <setting label="36104" type="bool" id="tvshow_seasonbanner" 
subsetting= "true"  enable="eq(-7,true)" default="false" visible="false" />
+        <setting label="36107" type="bool" id="tvshow_characterart" 
subsetting= "true"  enable="eq(-8,true)" default="false" visible="false" />
+
+    </category>
+    
+<!-- Plugin settings: Music section -->
+<!--    <category label="36071">
+        <setting type="sep" />
+        <setting label="36072" type="lsep" />
+        <setting type="sep" />
+        <setting label="36010" type="bool" id="music_enable" default="false" />
+        <setting label="36102" type="bool" id="music_extrafanart" subsetting= 
"true"  enable="eq(-1,true)" default="false" />
+        <setting label="36105" type="bool" id="music_clearart" subsetting= 
"true"  enable="eq(-2,true)" default="false" />
+        <setting label="36106" type="bool" id="music_logo" subsetting= "true" 
enable="eq(-3,true)" default="false" />
+    </category> -->
+    
+<!-- Plugin settings: Advanced section -->
+    <category label="36081">
+        <setting type="sep" />
+        <setting label="36086" type="lsep" />
+        <setting type="sep" />
+        <setting label="36200" id="use_cache" type="bool"  default="false"/>
+        <setting label="36202" type="lsep" visible="eq(-1,true)"/>
+        <setting label="36201" id="cache_directory" subsetting="true" 
type="folder"  default="" source="auto" option="writeable" enable="eq(-2,true)" 
visible="eq(-2,true)"/>   
     </category>
 </settings>

-----------------------------------------------------------------------

Summary of changes:
 script.extrafanartdownloader/README                |   86 ++--
 script.extrafanartdownloader/addon.xml             |   14 +-
 script.extrafanartdownloader/changelog.txt         |   19 +
 script.extrafanartdownloader/default.py            |  466 +++++++++++---------
 .../resources/__init__.py                          |    0
 .../resources/docs/pre-eden.xml                    |   39 ++
 .../resources/docs/runscript.txt                   |   24 +
 .../resources/language/English/strings.xml         |   89 ++++-
 .../resources/lib}/__init__.py                     |    0
 .../resources/lib/fileops.py                       |  129 ++++++
 .../resources/lib/language.py                      |   13 +
 .../resources/lib/media_setup.py                   |   31 ++
 .../resources/lib/provider/__init__.py             |   20 +
 .../resources/lib/provider/base.py                 |   52 +++
 .../resources/lib/provider/fanarttv.py             |   21 +
 .../resources/lib/provider/tmdb.py                 |   46 ++
 .../resources/lib/provider/tvdb.py                 |   42 ++
 .../resources/lib/script_exceptions.py             |   17 +
 .../resources/lib/utils.py                         |   53 +++
 .../resources/settings.xml                         |   71 +++-
 script.xbmc.subtitles/addon.xml                    |    2 +-
 script.xbmc.subtitles/changelog.txt                |    3 +
 .../resources/lib/services/Napisy24pl/service.py   |    2 +-
 23 files changed, 958 insertions(+), 281 deletions(-)
 create mode 100644 script.extrafanartdownloader/changelog.txt
 copy {script.image.bigpictures => 
script.extrafanartdownloader}/resources/__init__.py (100%)
 create mode 100644 script.extrafanartdownloader/resources/docs/pre-eden.xml
 create mode 100644 script.extrafanartdownloader/resources/docs/runscript.txt
 copy {script.image.bigpictures/resources => 
script.extrafanartdownloader/resources/lib}/__init__.py (100%)
 create mode 100644 script.extrafanartdownloader/resources/lib/fileops.py
 create mode 100644 script.extrafanartdownloader/resources/lib/language.py
 create mode 100644 script.extrafanartdownloader/resources/lib/media_setup.py
 create mode 100644 
script.extrafanartdownloader/resources/lib/provider/__init__.py
 create mode 100644 script.extrafanartdownloader/resources/lib/provider/base.py
 create mode 100644 
script.extrafanartdownloader/resources/lib/provider/fanarttv.py
 create mode 100644 script.extrafanartdownloader/resources/lib/provider/tmdb.py
 create mode 100644 script.extrafanartdownloader/resources/lib/provider/tvdb.py
 create mode 100644 
script.extrafanartdownloader/resources/lib/script_exceptions.py
 create mode 100644 script.extrafanartdownloader/resources/lib/utils.py


hooks/post-receive
-- 
Scripts

------------------------------------------------------------------------------
The demand for IT networking professionals continues to grow, and the
demand for specialized networking skills is growing even more rapidly.
Take a complimentary Learning@Cisco Self-Assessment and learn 
about Cisco certifications, training, and career opportunities. 
http://p.sf.net/sfu/cisco-dev2dev
_______________________________________________
Xbmc-addons mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/xbmc-addons

Reply via email to