Ejemplo n.º 1
0
 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            
Ejemplo n.º 5
0
    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")
Ejemplo n.º 7
0
    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
Ejemplo n.º 10
0
    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
Ejemplo n.º 12
0
#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
Ejemplo n.º 14
0
    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")
Ejemplo n.º 15
0
    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
Ejemplo n.º 16
0
 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 += ";"
Ejemplo n.º 17
0
 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