def onDatabaseUpdated(self, database): utils.logMsg("Kodi_Monitor: onDatabaseUpdated: " + database) if database == "video": self.resetVideoWidgetProps("", True) artutils.preCacheAllAnimatedArt() if database == "music": self.resetMusicWidgetProps({}, True)
def onDatabaseUpdated(self,database): utils.logMsg("Kodi_Monitor: onDatabaseUpdated: " + database) if database == "video": self.resetVideoWidgetProps("",True) artutils.preCacheAllAnimatedArt() if database == "music" : self.resetMusicWidgetProps({},True)
def resetMusicWidgetProps(self,data={},resetAll=False): #clear the cache for the music widgets type = "unknown" if data: data = eval(data.replace("true","True").replace("false","False")) type = data.get("type","") if (type in ["song","artist","album"] or resetAll): artutils.updateMusicArt(type,data.get("id")) if not xbmc.getCondVisibility("Library.IsScanningMusic"): utils.logMsg("Music database changed - type: %s - resetAll: %s, refreshing widgets...." %(type,resetAll)) timestr = time.strftime("%Y%m%d%H%M%S", time.gmtime()) utils.WINDOW.setProperty("widgetreloadmusic", timestr)
def getPvrBackground(self): logMsg("setting pvr background...") try: if (self.allBackgrounds.has_key("pvrfanart")): #get random image from our global cache file if self.allBackgrounds["pvrfanart"]: image = random.choice(self.allBackgrounds["pvrfanart"]) return image else: images = [] import ArtworkUtils as artutils if not WINDOW.getProperty("SkinHelper.pvrthumbspath"): setAddonsettings() customlookuppath = WINDOW.getProperty("SkinHelper.customlookuppath").decode("utf-8") pvrthumbspath = WINDOW.getProperty("SkinHelper.pvrthumbspath").decode("utf-8") paths = [customlookuppath, pvrthumbspath] for path in paths: dirs, files = xbmcvfs.listdir(path) for dir in dirs: thumbdir = os.path.join(path,dir.decode("utf-8")) dirs2, files2 = xbmcvfs.listdir(thumbdir) for file in files2: if "pvrdetails.xml" in file: artwork = artutils.getArtworkFromCacheFile(os.path.join(thumbdir,"pvrdetails.xml")) if artwork.get("fanart"): images.append(artwork.get("fanart")) del artwork for dir2 in dirs2: thumbdir = os.path.join(dir,dir2.decode("utf-8")) dirs3, files3 = xbmcvfs.listdir(thumbdir) for file in files3: if "pvrdetails.xml" in file: artwork = artutils.getArtworkFromCacheFile(os.path.join(thumbdir,"pvrdetails.xml")) if artwork.get("fanart"): images.append(artwork.get("fanart")) del artwork del artutils #store images in the cache self.allBackgrounds["pvrfanart"] = images # return a random image if images != []: random.shuffle(images) image = images[0] logMsg("setting random pvrfanart.... " + image) return image else: logMsg("pvrfanart empty so skipping pvrfanart background untill next restart") return None #if something fails, return None except: logMsg("exception occured in getPvrBackground.... ",0) return None
def resetMusicWidgetProps(self, data={}, resetAll=False): #clear the cache for the music widgets type = "unknown" if data: data = eval(data.replace("true", "True").replace("false", "False")) type = data.get("type", "") if (type in ["song", "artist", "album"] or resetAll): artutils.updateMusicArt(type, data.get("id")) if not xbmc.getCondVisibility("Library.IsScanningMusic"): utils.logMsg( "Music database changed - type: %s - resetAll: %s, refreshing widgets...." % (type, resetAll)) timestr = time.strftime("%Y%m%d%H%M%S", time.gmtime()) utils.WINDOW.setProperty("widgetreloadmusic", timestr)
def __init__( self, *args, **kwargs ): xbmcgui.WindowXMLDialog.__init__( self ) params = kwargs[ "params" ] logMsg( repr(params) ) if params.get("MOVIEID"): item = getJSON('VideoLibrary.GetMovieDetails', '{ "movieid": %s, "properties": [ %s ] }' %(params["MOVIEID"],fields_movies)) self.content = "movies" elif params.get("MUSICVIDEOID"): item = getJSON('VideoLibrary.GetMusicVideoDetails', '{ "musicvideoid": %s, "properties": [ %s ] }' %(params["MUSICVIDEOID"],fields_musicvideos)) self.content = "musicvideos" elif params.get("EPISODEID"): item = getJSON('VideoLibrary.GetEpisodeDetails', '{ "episodeid": %s, "properties": [ %s ] }' %(params["EPISODEID"],fields_episodes)) self.content = "episodes" elif params.get("TVSHOWID"): item = getJSON('VideoLibrary.GetTVShowDetails', '{ "tvshowid": %s, "properties": [ %s ] }' %(params["TVSHOWID"],fields_tvshows)) self.content = "tvshows" elif params.get("ALBUMID"): item = getJSON('AudioLibrary.GetAlbumDetails', '{ "albumid": %s, "properties": [ %s ] }' %(params["ALBUMID"],fields_albums)) self.content = "albums" elif params.get("SONGID"): item = getJSON('AudioLibrary.GetSongDetails', '{ "songid": %s, "properties": [ %s ] }' %(params["SONGID"],fields_songs)) self.content = "songs" elif params.get("RECORDINGID"): item = getJSON('PVR.GetRecordingDetails', '{ "recordingid": %s, "properties": [ %s ]}' %( params["RECORDINGID"], fields_pvrrecordings)) artwork = artutils.getPVRThumbs(item["title"],item["channel"],"recordings",item["file"]) item["art"] = artwork for key, value in artwork.iteritems(): if not item.get(key): item[key] = value if artwork.get("tmdb_type") == "movies": self.content = "movies" elif artwork.get("tmdb_type") == "tv": self.content = "episodes" else: self.content = "tvrecordings" else: item = None self.listitem = None if item: liz = prepareListItem(item) liz = createListItem(item) self.listitem = liz self.lastwidgetcontainer = params.get("lastwidgetcontainer","") WINDOW.setProperty("SkinHelper.WidgetContainer","999")
def __init__(self, *args, **kwargs): xbmcgui.WindowXMLDialog.__init__(self) params = kwargs["params"] logMsg(repr(params)) if params.get("MOVIEID"): item = getJSON( 'VideoLibrary.GetMovieDetails', '{ "movieid": %s, "properties": [ %s ] }' % (params["MOVIEID"], fields_movies)) self.content = "movies" elif params.get("MUSICVIDEOID"): item = getJSON( 'VideoLibrary.GetMusicVideoDetails', '{ "musicvideoid": %s, "properties": [ %s ] }' % (params["MUSICVIDEOID"], fields_musicvideos)) self.content = "musicvideos" elif params.get("EPISODEID"): item = getJSON( 'VideoLibrary.GetEpisodeDetails', '{ "episodeid": %s, "properties": [ %s ] }' % (params["EPISODEID"], fields_episodes)) self.content = "episodes" elif params.get("TVSHOWID"): item = getJSON( 'VideoLibrary.GetTVShowDetails', '{ "tvshowid": %s, "properties": [ %s ] }' % (params["TVSHOWID"], fields_tvshows)) self.content = "tvshows" elif params.get("ALBUMID"): item = getJSON( 'AudioLibrary.GetAlbumDetails', '{ "albumid": %s, "properties": [ %s ] }' % (params["ALBUMID"], fields_albums)) self.content = "albums" elif params.get("SONGID"): item = getJSON( 'AudioLibrary.GetSongDetails', '{ "songid": %s, "properties": [ %s ] }' % (params["SONGID"], fields_songs)) self.content = "songs" elif params.get("RECORDINGID"): item = getJSON( 'PVR.GetRecordingDetails', '{ "recordingid": %s, "properties": [ %s ]}' % (params["RECORDINGID"], fields_pvrrecordings)) artwork = artutils.getPVRThumbs(item["title"], item["channel"], "recordings", item["file"]) item["art"] = artwork for key, value in artwork.iteritems(): if not item.get(key): item[key] = value if artwork.get("tmdb_type") == "movies": self.content = "movies" elif artwork.get("tmdb_type") == "tv": self.content = "episodes" else: self.content = "tvrecordings" else: item = None self.listitem = None if item: liz = prepareListItem(item) liz = createListItem(item) self.listitem = liz self.lastwidgetcontainer = params.get("lastwidgetcontainer", "") WINDOW.setProperty("SkinHelper.WidgetContainer", "999")
# -*- coding: utf-8 -*- from Utils import * import ArtworkUtils as artworkutils #Kodi contextmenu item to configure the artwork if __name__ == '__main__': #### Animated artwork ####### logMsg("Context menu artwork settings for Animated artwork",0) WINDOW.setProperty("artworkcontextmenu", "busy") options=[] options.append(ADDON.getLocalizedString(32173)) #animated poster options.append(ADDON.getLocalizedString(32174)) #animated fanart header = ADDON.getLocalizedString(32143) ret = xbmcgui.Dialog().select(header, options) if ret != -1: if ret == 0 or ret == 1: if ret == 0: type = "poster" if ret == 1: type = "fanart" liImdb = xbmc.getInfoLabel("ListItem.IMDBNumber") liDbId = xbmc.getInfoLabel("ListItem.DBID") if liImdb and WINDOW.getProperty("contenttype") in ["movies","setmovies"]: WINDOW.clearProperty("SkinHelper.Animated%s"%type) image = artworkutils.getAnimatedArtwork(liImdb,type,liDbId,options[ret]) WINDOW.clearProperty("SkinHelper.Animated%s"%type) if image != "None": xbmc.sleep(150) WINDOW.setProperty("SkinHelper.Animated%s"%type,image) #xbmc.executebuiltin("Container.Refresh") WINDOW.clearProperty("artworkcontextmenu")
def send_headers(self): image = None images = None preferred_type = None params = urlparse.parse_qs(self.path) action = params.get("action","")[0] title = params.get("title","") if title: title = title[0].decode("utf-8") fallback = params.get("fallback","") if fallback: fallback = fallback[0].decode("utf-8") if fallback.startswith("Default"): fallback = "special://skin/media/" + fallback if action == "getthumb": image = artutils.searchThumb(title) elif action == "getvarimage": title = title.replace("{","[").replace("}","]") image_tmp = xbmc.getInfoLabel(title) if xbmcvfs.exists(image_tmp): if image_tmp.startswith("resource://"): #texture packed resource images are failing: http://trac.kodi.tv/ticket/16366 logMsg("WebService ERROR --> resource images are currently not supported due to a bug in Kodi" ,0) else: image = image_tmp elif action == "getpvrthumb": channel = params.get("channel","") preferred_type = params.get("type","") if channel: channel = channel[0].decode("utf-8") if preferred_type: preferred_type = preferred_type[0] if xbmc.getCondVisibility("Window.IsActive(MyPVRRecordings.xml)"): type = "recordings" else: type = "channels" artwork = artutils.getPVRThumbs(title, channel, type) if preferred_type: preferred_types = preferred_type.split(",") for preftype in preferred_types: if artwork.get(preftype): image = artwork.get(preftype) break else: if artwork.get("thumb"): image = artwork.get("thumb") if artwork.get("fanart"): image = artwork.get("fanart") if artwork.get("landscape"): image = artwork.get("landscape") elif action == "getallpvrthumb": channel = params.get("channel","") if channel: channel = channel[0].decode("utf-8") images = artutils.getPVRThumbs(title, channel, "recordings") # Ensure no unicode in images... for key, value in images.iteritems(): images[key] = unicode(value).encode('utf-8') images = urllib.urlencode(images) elif action == "getmusicart": preferred_type = params.get("type","") if preferred_type: preferred_type = preferred_type[0] artist = params.get("artist","") if artist: artist = artist[0] album = params.get("album","") if album: album = album[0] track = params.get("track","") if track: track = track[0] artwork = artutils.getMusicArtwork(artist, album, track) if preferred_type: preferred_types = preferred_type.split(",") for preftype in preferred_types: if artwork.get(preftype): image = artwork.get(preftype) break else: if artwork.get("thumb"): image = artwork.get("thumb") if artwork.get("fanart"): image = artwork.get("fanart") #set fallback image if nothing else worked if not image and fallback: image = fallback if images: self.send_response(200) self.send_header('Content-type','text/plaintext') self.send_header('Content-Length',len(images)) self.end_headers() return images, True elif image: self.send_response(200) if ".jpg" in image: self.send_header('Content-type','image/jpeg') else: self.send_header('Content-type','image/png') logMsg("found image for request %s --> %s" %(try_encode(self.path),try_encode(image))) st = xbmcvfs.Stat(image) modified = st.st_mtime() self.send_header('Last-Modified',"%s" %modified) image = xbmcvfs.File(image) size = image.size() self.send_header('Content-Length',str(size)) self.end_headers() else: self.send_error(404) return image, None
def send_headers(self): image = None images = None preferred_type = None params = urlparse.parse_qs(self.path) action = params.get("action", "")[0] title = params.get("title", "") if title: title = title[0].decode("utf-8") fallback = params.get("fallback", "") if fallback: fallback = fallback[0].decode("utf-8") if fallback.startswith("Default"): fallback = "special://skin/media/" + fallback if action == "getthumb": image = artutils.searchThumb(title) elif action == "getvarimage": title = title.replace("{", "[").replace("}", "]") image_tmp = xbmc.getInfoLabel(title) if xbmcvfs.exists(image_tmp): if image_tmp.startswith("resource://"): #texture packed resource images are failing: http://trac.kodi.tv/ticket/16366 logMsg( "WebService ERROR --> resource images are currently not supported due to a bug in Kodi", 0) else: image = image_tmp elif action == "getpvrthumb": channel = params.get("channel", "") preferred_type = params.get("type", "") if channel: channel = channel[0].decode("utf-8") if preferred_type: preferred_type = preferred_type[0] if xbmc.getCondVisibility("Window.IsActive(MyPVRRecordings.xml)"): type = "recordings" else: type = "channels" artwork = artutils.getPVRThumbs(title, channel, type) if preferred_type: preferred_types = preferred_type.split(",") for preftype in preferred_types: if artwork.get(preftype): image = artwork.get(preftype) break else: if artwork.get("thumb"): image = artwork.get("thumb") if artwork.get("fanart"): image = artwork.get("fanart") if artwork.get("landscape"): image = artwork.get("landscape") elif action == "getallpvrthumb": channel = params.get("channel", "") if channel: channel = channel[0].decode("utf-8") images = artutils.getPVRThumbs(title, channel, "recordings") # Ensure no unicode in images... for key, value in images.iteritems(): images[key] = unicode(value).encode('utf-8') images = urllib.urlencode(images) elif action == "getmusicart": preferred_type = params.get("type", "") if preferred_type: preferred_type = preferred_type[0] artist = params.get("artist", "") if artist: artist = artist[0] album = params.get("album", "") if album: album = album[0] track = params.get("track", "") if track: track = track[0] artwork = artutils.getMusicArtwork(artist, album, track) if preferred_type: preferred_types = preferred_type.split(",") for preftype in preferred_types: if artwork.get(preftype): image = artwork.get(preftype) break else: if artwork.get("thumb"): image = artwork.get("thumb") if artwork.get("fanart"): image = artwork.get("fanart") #set fallback image if nothing else worked if not image and fallback: image = fallback if images: self.send_response(200) self.send_header('Content-type', 'text/plaintext') self.send_header('Content-Length', len(images)) self.end_headers() return images, True elif image: self.send_response(200) if ".jpg" in image: self.send_header('Content-type', 'image/jpeg') else: self.send_header('Content-type', 'image/png') logMsg("found image for request %s --> %s" % (try_encode(self.path), try_encode(image))) st = xbmcvfs.Stat(image) modified = st.st_mtime() self.send_header('Last-Modified', "%s" % modified) image = xbmcvfs.File(image) size = image.size() self.send_header('Content-Length', str(size)) self.end_headers() else: self.send_error(404) return image, None
def send_headers(self): image = None preferred_type = None org_params = urlparse.parse_qs(self.path) params = {} for key, value in org_params.iteritems(): if value: value = value[0] if "%" in value: value = urllib.unquote(value) params[key] = value.decode("utf-8") action = params.get("action", "") title = params.get("title", "") fallback = params.get("fallback", "") if fallback.startswith("Default"): fallback = u"special://skin/media/" + fallback if action == "getthumb": image = artutils.searchThumb(title) elif action == "getanimatedposter": imdbid = params.get("imdbid", "") if imdbid: image = artutils.getAnimatedPosters(imdbid).get("animated_poster", "") elif action == "getvarimage": title = title.replace("{", "[").replace("}", "]") image_tmp = xbmc.getInfoLabel(title) if xbmcvfs.exists(image_tmp): if image_tmp.startswith("resource://"): # texture packed resource images are failing: http://trac.kodi.tv/ticket/16366 logMsg("WebService ERROR --> resource images are currently not supported due to a bug in Kodi", 0) else: image = image_tmp elif action == "getpvrthumb": channel = params.get("channel", "") preferred_type = params.get("type", "") if xbmc.getCondVisibility("Window.IsActive(MyPVRRecordings.xml)"): type = "recordings" else: type = "channels" artwork = artutils.getPVRThumbs(title, channel, type) if preferred_type: preferred_types = preferred_type.split(",") for preftype in preferred_types: if artwork.get(preftype): image = artwork.get(preftype) break else: if artwork.get("thumb"): image = artwork.get("thumb") if artwork.get("fanart"): image = artwork.get("fanart") if artwork.get("landscape"): image = artwork.get("landscape") elif action == "getallpvrthumb": channel = params.get("channel", "") images = artutils.getPVRThumbs(title, channel, "recordings") # Ensure no unicode in images... for key, value in images.iteritems(): images[key] = unicode(value).encode("utf-8") images = urllib.urlencode(images) self.send_response(200) self.send_header("Content-type", "text/plaintext") self.send_header("Content-Length", len(images)) self.end_headers() return images, True elif action == "getartwork": year = params.get("year", "") arttype = params.get("type", "") artwork = artutils.getAddonArtwork(title, year, arttype) jsonstr = json.dumps(artwork) self.send_response(200) self.send_header("Content-type", "application/json") self.send_header("Content-Length", len(jsonstr)) self.end_headers() return jsonstr, True elif action == "getmusicart": preferred_type = params.get("type", "") artist = params.get("artist", "") album = params.get("album", "") track = params.get("track", "") artwork = artutils.getMusicArtwork(artist, album, track) if preferred_type: preferred_types = preferred_type.split(",") for preftype in preferred_types: if artwork.get(preftype): image = artwork.get(preftype) break else: if artwork.get("thumb"): image = artwork.get("thumb") if artwork.get("fanart"): image = artwork.get("fanart") elif "getmoviegenreimages" in action or "gettvshowgenreimages" in action: artwork = {} cachestr = ("%s-%s" % (action, title)).encode("utf-8") cache = WINDOW.getProperty(cachestr).decode("utf-8") if cache: artwork = eval(cache) else: sort = '"order": "ascending", "method": "sorttitle", "ignorearticle": true' if "random" in action: sort = '"order": "descending", "method": "random"' action = action.replace("random", "") if action == "gettvshowgenreimages": json_result = getJSON( "VideoLibrary.GetTvshows", '{ "sort": { %s }, "filter": {"operator":"is", "field":"genre", "value":"%s"}, "properties": [ %s ],"limits":{"end":%d} }' % (sort, title, fields_tvshows, 5), ) else: json_result = getJSON( "VideoLibrary.GetMovies", '{ "sort": { %s }, "filter": {"operator":"is", "field":"genre", "value":"%s"}, "properties": [ %s ],"limits":{"end":%d} }' % (sort, title, fields_movies, 5), ) for count, item in enumerate(json_result): artwork["poster.%s" % count] = item["art"].get("poster", "") artwork["fanart.%s" % count] = item["art"].get("fanart", "") WINDOW.setProperty(cachestr, repr(artwork).encode("utf-8")) if artwork: preferred_type = params.get("type", "") if preferred_type: image = artwork.get(preferred_type, "") else: image = artwork.get("poster", "") # set fallback image if nothing else worked if not image and fallback: image = fallback if image: self.send_response(200) if ".jpg" in image: self.send_header("Content-type", "image/jpg") elif image.lower().endswith(".gif"): self.send_header("Content-type", "image/gif") else: self.send_header("Content-type", "image/png") logMsg("found image for request %s --> %s" % (try_encode(self.path), try_encode(image))) st = xbmcvfs.Stat(image) modified = st.st_mtime() self.send_header("Last-Modified", "%s" % modified) image = xbmcvfs.File(image) size = image.size() self.send_header("Content-Length", str(size)) self.end_headers() else: self.send_error(404) return image, None
#Kodi contextmenu item to configure the artwork if __name__ == '__main__': #### Animated artwork ####### logMsg("Context menu artwork settings for Animated artwork", 0) WINDOW.setProperty("artworkcontextmenu", "busy") options = [] options.append(ADDON.getLocalizedString(32173)) #animated poster options.append(ADDON.getLocalizedString(32174)) #animated fanart header = ADDON.getLocalizedString(32143) ret = xbmcgui.Dialog().select(header, options) if ret != -1: if ret == 0 or ret == 1: if ret == 0: type = "poster" if ret == 1: type = "fanart" liImdb = xbmc.getInfoLabel("ListItem.IMDBNumber") liDbId = xbmc.getInfoLabel("ListItem.DBID") if liImdb and WINDOW.getProperty("contenttype") in [ "movies", "setmovies" ]: WINDOW.clearProperty("SkinHelper.Animated%s" % type) image = artworkutils.getAnimatedArtwork(liImdb, type, liDbId, options[ret]) WINDOW.clearProperty("SkinHelper.Animated%s" % type) if image != "None": xbmc.sleep(150) WINDOW.setProperty("SkinHelper.Animated%s" % type, image) xbmc.executebuiltin("Container.Refresh") WINDOW.clearProperty("artworkcontextmenu")
if __name__ == '__main__': ##### Music Artwork ######## logMsg("Context menu artwork settings for PVR artwork",0) WINDOW.setProperty("artworkcontextmenu", "busy") options=[] options.append(ADDON.getLocalizedString(32144)) #Refresh item (auto lookup) options.append(ADDON.getLocalizedString(32157)) #cache all artwork options.append(ADDON.getLocalizedString(32126)) #Reset Cache options.append(ADDON.getLocalizedString(32148)) #Open addon settings header = ADDON.getLocalizedString(32143) + " - " + ADDON.getLocalizedString(32122) ret = xbmcgui.Dialog().select(header, options) if ret == 0: #refresh item artwork = artworkutils.getMusicArtwork(xbmc.getInfoLabel("ListItem.Artist").decode('utf-8'),xbmc.getInfoLabel("ListItem.Album").decode('utf-8'),xbmc.getInfoLabel("ListItem.Title").decode('utf-8'),ignoreCache=True) #clear properties WINDOW.clearProperty("SkinHelper.Music.Banner") WINDOW.clearProperty("SkinHelper.Music.ClearLogo") WINDOW.clearProperty("SkinHelper.Music.DiscArt") WINDOW.clearProperty("SkinHelper.Music.FanArt") WINDOW.clearProperty("SkinHelper.Music.Thumb") WINDOW.clearProperty("SkinHelper.Music.Info") WINDOW.clearProperty("SkinHelper.Music.TrackList") WINDOW.clearProperty("SkinHelper.Music.SongCount") WINDOW.clearProperty("SkinHelper.Music.albumCount") WINDOW.clearProperty("SkinHelper.Music.AlbumList") WINDOW.clearProperty("SkinHelper.Music.ExtraFanArt") #set new properties
logMsg("Context menu artwork settings for PVR artwork", 0) WINDOW.setProperty("artworkcontextmenu", "busy") options = [] options.append( ADDON.getLocalizedString(32144)) #Refresh item (auto lookup) options.append(ADDON.getLocalizedString(32157)) #cache all artwork options.append(ADDON.getLocalizedString(32126)) #Reset Cache options.append(ADDON.getLocalizedString(32148)) #Open addon settings header = ADDON.getLocalizedString( 32143) + " - " + ADDON.getLocalizedString(32122) ret = xbmcgui.Dialog().select(header, options) if ret == 0: #refresh item artwork = artworkutils.getMusicArtwork( xbmc.getInfoLabel("ListItem.Artist").decode('utf-8'), xbmc.getInfoLabel("ListItem.Album").decode('utf-8'), xbmc.getInfoLabel("ListItem.Title").decode('utf-8'), ignoreCache=True) #clear properties WINDOW.clearProperty("SkinHelper.Music.Banner") WINDOW.clearProperty("SkinHelper.Music.ClearLogo") WINDOW.clearProperty("SkinHelper.Music.DiscArt") WINDOW.clearProperty("SkinHelper.Music.FanArt") WINDOW.clearProperty("SkinHelper.Music.Thumb") WINDOW.clearProperty("SkinHelper.Music.Info") WINDOW.clearProperty("SkinHelper.Music.TrackList") WINDOW.clearProperty("SkinHelper.Music.SongCount") WINDOW.clearProperty("SkinHelper.Music.albumCount") WINDOW.clearProperty("SkinHelper.Music.AlbumList") WINDOW.clearProperty("SkinHelper.Music.ExtraFanArt")
def send_headers(self): image = None preferred_type = None org_params = urlparse.parse_qs(self.path) params = {} for key, value in org_params.iteritems(): if value: value = value[0] if "%" in value: value = urllib.unquote(value) params[key] = value.decode("utf-8") action = params.get("action", "") title = params.get("title", "") fallback = params.get("fallback", "") if fallback.startswith("Default"): fallback = u"special://skin/media/" + fallback if action == "getthumb": image = artutils.searchThumb(title) elif action == "getanimatedposter": imdbid = params.get("imdbid", "") if imdbid: image = artutils.getAnimatedPosters(imdbid).get( "animated_poster", "") elif action == "getvarimage": title = title.replace("{", "[").replace("}", "]") image_tmp = xbmc.getInfoLabel(title) if xbmcvfs.exists(image_tmp): if image_tmp.startswith("resource://"): #texture packed resource images are failing: http://trac.kodi.tv/ticket/16366 logMsg( "WebService ERROR --> resource images are currently not supported due to a bug in Kodi", 0) else: image = image_tmp elif action == "getpvrthumb": channel = params.get("channel", "") preferred_type = params.get("type", "") if xbmc.getCondVisibility("Window.IsActive(MyPVRRecordings.xml)"): type = "recordings" else: type = "channels" artwork = artutils.getPVRThumbs(title, channel, type) if preferred_type: preferred_types = preferred_type.split(",") for preftype in preferred_types: if artwork.get(preftype): image = artwork.get(preftype) break else: if artwork.get("thumb"): image = artwork.get("thumb") if artwork.get("fanart"): image = artwork.get("fanart") if artwork.get("landscape"): image = artwork.get("landscape") elif action == "getallpvrthumb": channel = params.get("channel", "") images = artutils.getPVRThumbs(title, channel, "recordings") # Ensure no unicode in images... for key, value in images.iteritems(): images[key] = unicode(value).encode('utf-8') images = urllib.urlencode(images) self.send_response(200) self.send_header('Content-type', 'text/plaintext') self.send_header('Content-Length', len(images)) self.end_headers() return images, True elif action == "getartwork": year = params.get("year", "") arttype = params.get("type", "") artwork = artutils.getAddonArtwork(title, year, arttype) jsonstr = json.dumps(artwork) self.send_response(200) self.send_header('Content-type', 'application/json') self.send_header('Content-Length', len(jsonstr)) self.end_headers() return jsonstr, True elif action == "getmusicart": preferred_type = params.get("type", "") artist = params.get("artist", "") album = params.get("album", "") track = params.get("track", "") artwork = artutils.getMusicArtwork(artist, album, track) if preferred_type: preferred_types = preferred_type.split(",") for preftype in preferred_types: if artwork.get(preftype): image = artwork.get(preftype) break else: if artwork.get("thumb"): image = artwork.get("thumb") if artwork.get("fanart"): image = artwork.get("fanart") elif "getmoviegenreimages" in action or "gettvshowgenreimages" in action: artwork = {} cachestr = ("%s-%s" % (action, title)).encode("utf-8") cache = WINDOW.getProperty(cachestr).decode("utf-8") if cache: artwork = eval(cache) else: sort = '"order": "ascending", "method": "sorttitle", "ignorearticle": true' if "random" in action: sort = '"order": "descending", "method": "random"' action = action.replace("random", "") if action == "gettvshowgenreimages": json_result = getJSON( 'VideoLibrary.GetTvshows', '{ "sort": { %s }, "filter": {"operator":"is", "field":"genre", "value":"%s"}, "properties": [ %s ],"limits":{"end":%d} }' % (sort, title, fields_tvshows, 5)) else: json_result = getJSON( 'VideoLibrary.GetMovies', '{ "sort": { %s }, "filter": {"operator":"is", "field":"genre", "value":"%s"}, "properties": [ %s ],"limits":{"end":%d} }' % (sort, title, fields_movies, 5)) for count, item in enumerate(json_result): artwork["poster.%s" % count] = item["art"].get( "poster", "") artwork["fanart.%s" % count] = item["art"].get( "fanart", "") WINDOW.setProperty(cachestr, repr(artwork).encode("utf-8")) if artwork: preferred_type = params.get("type", "") if preferred_type: image = artwork.get(preferred_type, "") else: image = artwork.get("poster", "") #set fallback image if nothing else worked if not image and fallback: image = fallback if image: self.send_response(200) if ".jpg" in image: self.send_header('Content-type', 'image/jpg') elif image.lower().endswith(".gif"): self.send_header('Content-type', 'image/gif') else: self.send_header('Content-type', 'image/png') logMsg("found image for request %s --> %s" % (try_encode(self.path), try_encode(image))) st = xbmcvfs.Stat(image) modified = st.st_mtime() self.send_header('Last-Modified', "%s" % modified) image = xbmcvfs.File(image) size = image.size() self.send_header('Content-Length', str(size)) self.end_headers() else: self.send_error(404) return image, None
options.append(ADDON.getLocalizedString(32144)) #Refresh item (auto lookup) options.append(ADDON.getLocalizedString(32145)) #Refresh item (manual lookup) options.append(ADDON.getLocalizedString(32149)) #Add channel to ignore list options.append(ADDON.getLocalizedString(32150)) #Add title to ignore list options.append(ADDON.getLocalizedString(32148)) #Open addon settings header = ADDON.getLocalizedString(32143) + " - " + ADDON.getLocalizedString(32120) title = xbmc.getInfoLabel("ListItem.Title").decode('utf-8') if not title: title = xbmc.getInfoLabel("ListItem.Label").decode('utf-8') channel = xbmc.getInfoLabel("ListItem.ChannelName").decode('utf-8') path = xbmc.getInfoLabel("ListItem.FileNameAndPath").decode('utf-8') genre = xbmc.getInfoLabel("ListItem.Genre").decode('utf-8') year = xbmc.getInfoLabel("ListItem.Year").decode('utf-8') ret = xbmcgui.Dialog().select(header, options) if ret == 0: #Refresh item (auto lookup) artwork = artworkutils.getPVRThumbs(title,channel,type,path,genre,year,ignoreCache=True, manualLookup=False) elif ret == 1: #Refresh item (manual lookup) artwork = artworkutils.getPVRThumbs(title,channel,type,path,genre,year,ignoreCache=True, manualLookup=True) elif ret == 2: #Add channel to ignore list ignorechannels = WINDOW.getProperty("SkinHelper.ignorechannels").decode("utf-8") if ignorechannels: ignorechannels += ";" ignorechannels += channel ADDON.setSetting("ignorechannels",ignorechannels) WINDOW.setProperty("SkinHelper.ignorechannels",ignorechannels) artwork = artworkutils.getPVRThumbs(title,channel,type,path,genre,year,ignoreCache=True, manualLookup=False) elif ret == 3: #Add title to ignore list ignoretitles = WINDOW.getProperty("SkinHelper.ignoretitles").decode("utf-8") if ignoretitles: ignoretitles += ";"
options.append(ADDON.getLocalizedString(32148)) #Open addon settings header = ADDON.getLocalizedString( 32143) + " - " + ADDON.getLocalizedString(32120) title = xbmc.getInfoLabel("ListItem.Title").decode('utf-8') if not title: title = xbmc.getInfoLabel("ListItem.Label").decode('utf-8') channel = xbmc.getInfoLabel("ListItem.ChannelName").decode('utf-8') path = xbmc.getInfoLabel("ListItem.FileNameAndPath").decode('utf-8') genre = xbmc.getInfoLabel("ListItem.Genre").decode('utf-8') year = xbmc.getInfoLabel("ListItem.Year").decode('utf-8') ret = xbmcgui.Dialog().select(header, options) if ret == 0: #Refresh item (auto lookup) artwork = artworkutils.getPVRThumbs(title, channel, type, path, genre, year, ignoreCache=True, manualLookup=False) elif ret == 1: #Refresh item (manual lookup) artwork = artworkutils.getPVRThumbs(title, channel, type, path, genre, year, ignoreCache=True, manualLookup=True) elif ret == 2: #Choose art