def _copy_moviethumbs( self ): count = 0 processeditems = 0 json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMovies", "params": {"properties": ["file", "title", "thumbnail", "year"], "filter": {"field": "path", "operator": "contains", "value": "%s"}}, "id": 1}' % self.path) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = json.loads(json_query) if json_response.has_key('result') and (json_response['result'] != None) and (json_response['result'].has_key('movies')): totalitems = len( json_response['result']['movies'] ) for item in json_response['result']['movies']: if self.dialog.iscanceled(): log('script cancelled') return processeditems = processeditems + 1 self.dialog.update( int( float( processeditems ) / float( totalitems ) * 100), LANGUAGE(32005) + ': ' + str( count + 1 ) ) name = item['title'] year = str(item['year']) artwork = item['thumbnail'] tmp_filename = name + ' (' + year + ')' + '.jpg' filename = clean_filename( tmp_filename ) if self.normalize_names == "true": filename = video_library._normalize_string(filename) # test file path with movie_content to find source name moviethumbspath = self.moviethumbspath if self.split_movies_sources == "true" and item['file'] in self.movies_content: media_source = self.movies_content[item['file']] if self.normalize_names == "true": media_source = video_library._normalize_string(media_source) moviethumbspath = os.path.join( self.moviethumbspath, media_source ) if artwork != '': try: xbmcvfs.copy( xbmc.translatePath( artwork ), os.path.join( moviethumbspath, filename ) ) count += 1 except: log( 'failed to copy moviethumb' ) log( 'moviethumbs copied: %s' % count )
def _copy_seasonthumbs( self ): _TVShow_ = namedtuple('TVShow', ['id', 'path']) count = 0 tvshows = [] json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties": ["file"], "filter": {"field": "path", "operator": "contains", "value": "%s"}}, "id": 1}' % self.path) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = json.loads(json_query) if json_response.has_key('result') and (json_response['result'] != None) and (json_response['result'].has_key('tvshows')): for item in json_response['result']['tvshows']: if self.dialog.iscanceled(): log('script cancelled') return tvshow = _TVShow_(int(item['tvshowid']), item['file']) tvshows.append(tvshow) for tvshow in tvshows: processeditems = 0 json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetSeasons", "params": {"properties": ["thumbnail", "showtitle"], "tvshowid":%s}, "id": 1}' % tvshow.id ) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = json.loads(json_query) if json_response.has_key('result') and (json_response['result'] != None) and (json_response['result'].has_key('seasons')): totalitems = len( json_response['result']['seasons'] ) for item in json_response['result']['seasons']: if self.dialog.iscanceled(): log('script cancelled') return processeditems = processeditems + 1 self.dialog.update( int( float( processeditems ) / float( totalitems ) * 100), LANGUAGE(32007) + ': ' + str( count + 1 ) ) name = item['label'] tvshow_title = item['showtitle'] artwork = item['thumbnail'] tmp_filename = tvshow_title + ' - ' + name + '.jpg' filename = clean_filename( tmp_filename ) if self.normalize_names == "true": filename = video_library._normalize_string(filename) # test file path with tv_content to find source name seasonthumbspath = self.seasonthumbspath if self.split_tvshows_sources == "true": for tv_file_path, source_name in self.tvshows_content.items(): if tv_file_path.startswith(tvshow.path): if self.normalize_names == "true": source_name = video_library._normalize_string(source_name) seasonthumbspath = os.path.join( self.seasonthumbspath, source_name ) break if artwork != '': try: xbmcvfs.copy( xbmc.translatePath( artwork ), os.path.join( seasonthumbspath, filename ) ) count += 1 except: log( 'failed to copy seasonthumb' ) log( 'seasonthumbs copied: %s' % count )
def _copy_albumthumbs( self ): count = 0 processeditems = 0 json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "AudioLibrary.GetAlbums", "params": {"properties": ["title", "thumbnail", "artist"]}, "id": 1}') json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = json.loads(json_query) if json_response.has_key('result') and (json_response['result'] != None) and (json_response['result'].has_key('albums')): totalitems = len( json_response['result']['albums'] ) for item in json_response['result']['albums']: if self.dialog.iscanceled(): log('script cancelled') return processeditems = processeditems + 1 self.dialog.update( int( float( processeditems ) / float( totalitems ) * 100), LANGUAGE(32011) + ': ' + str( count + 1 ) ) name = item['title'] artist = item['artist'][0] artwork = item['thumbnail'] tmp_filename = artist + ' - ' + name + '.jpg' filename = clean_filename( tmp_filename ) if self.normalize_names == "true": filename = video_library._normalize_string(filename) if artwork != '': try: xbmcvfs.copy( xbmc.translatePath( artwork ), os.path.join( self.albumthumbspath, filename ) ) count += 1 except: log( 'failed to copy albumthumb' ) log( 'albumthumbs copied: %s' % count )
def _copy_musicvideothumbs( self ): count = 0 processeditems = 0 json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetMusicVideos", "params": {"properties": ["title", "thumbnail", "artist"], "filter": {"field": "path", "operator": "contains", "value": "%s"}}, "id": 1}' % self.path) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = json.loads(json_query) if json_response.has_key('result') and (json_response['result'] != None) and (json_response['result'].has_key('musicvideos')): totalitems = len( json_response['result']['musicvideos'] ) for item in json_response['result']['musicvideos']: if self.dialog.iscanceled(): log('script cancelled') return processeditems = processeditems + 1 self.dialog.update( int( float( processeditems ) / float( totalitems ) * 100), LANGUAGE(32009) + ': ' + str( count + 1 ) ) name = item['title'] artwork = item['thumbnail'] if item['artist']: # bug workaround, musicvideos can end up in the database without an artistname artist = item['artist'][0] tmp_filename = artist + ' - ' + name + '.jpg' else: tmp_filename = name + '.jpg' filename = clean_filename( tmp_filename ) if self.normalize_names == "true": filename = video_library._normalize_string(filename) if artwork != '': try: xbmcvfs.copy( xbmc.translatePath( artwork ), os.path.join( self.musicvideothumbspath, filename ) ) count += 1 except: log( 'failed to copy musicvideothumb' ) log( 'musicvideothumbs copied: %s' % count )
def _create_directories( self ): if not xbmcvfs.exists( self.directory ): try: xbmcvfs.mkdir( self.directory ) except: self.directoriescreated = 'false' log( 'failed to create artwork directory' ) if self.directoriescreated == 'true': for path in self.artworklist: try: xbmcvfs.mkdir( path ) except: self.directoriescreated = 'false' log( 'failed to create directories' ) # Create media type based directories if defined by user (movies, tvshows) # media source format: [(name, path, content)] if self.directoriescreated == 'true': if self.split_movies_sources == "true" and (self.moviefanart == "true" or self.moviethumbs == 'true'): for ms_name in [m_s.name for m_s in self.movies_sources]: try: if self.normalize_names == "true": ms_name = video_library._normalize_string(ms_name) if self.moviefanart == "true": xbmcvfs.mkdir( os.path.join( self.moviefanartpath, ms_name ) ) if self.moviethumbs == "true": xbmcvfs.mkdir( os.path.join( self.moviethumbspath, ms_name ) ) except: self.directoriescreated = 'false' log( 'failed to create directories for movies content type' ) if self.split_tvshows_sources == "true" and (self.tvshowfanart == 'true' or self.tvshowbanners == 'true' or self.tvshowposters == 'true' or self.seasonthumbs == 'true' or self.episodethumbs == 'true'): for tvs_name in [tv_s.name for tv_s in self.tvshows_sources]: try: if self.normalize_names == "true": tvs_name = video_library._normalize_string(tvs_name) if self.tvshowfanart == 'true': xbmcvfs.mkdir( os.path.join( self.tvshowfanartpath, tvs_name ) ) if self.tvshowbanners == 'true': xbmcvfs.mkdir( os.path.join( self.tvshowbannerspath, tvs_name ) ) if self.tvshowposters == 'true': xbmcvfs.mkdir( os.path.join( self.tvshowposterspath, tvs_name ) ) if self.seasonthumbs == 'true': xbmcvfs.mkdir( os.path.join( self.seasonthumbspath, tvs_name ) ) if self.episodethumbs == 'true': xbmcvfs.mkdir( os.path.join( self.episodethumbspath, tvs_name ) ) except: self.directoriescreated = 'false' log( 'failed to create directories for tvshows content type' )
def _copy_episodethumbs( self ): count = 0 processeditems = 0 json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetEpisodes", "params": {"properties": ["file", "title", "thumbnail", "season", "episode", "showtitle"], "filter": {"field": "path", "operator": "contains", "value": "%s"}}, "id": 1}' % self.path) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = json.loads(json_query) if json_response.has_key('result') and (json_response['result'] != None) and (json_response['result'].has_key('episodes')): totalitems = len( json_response['result']['episodes'] ) for item in json_response['result']['episodes']: if self.dialog.iscanceled(): log('script cancelled') return processeditems = processeditems + 1 self.dialog.update( int( float( processeditems ) / float( totalitems ) * 100), LANGUAGE(32008) + ': ' + str( count + 1 ) ) name = item['title'] tvshow = item['showtitle'] artwork = item['thumbnail'] season = item['season'] episode = item['episode'] episodenumber = "s%.2d%.2d" % (int( season ), int( episode )) tmp_filename = tvshow + ' - ' + episodenumber + ' - ' + name + '.jpg' filename = clean_filename( tmp_filename ) if self.normalize_names == "true": filename = video_library._normalize_string(filename) # test file path with tv_content to find source name episodethumbspath = self.episodethumbspath if self.split_tvshows_sources == "true" and item['file'] in self.tvshows_content: source_name = self.tvshows_content[item['file']] if self.normalize_names == "true": source_name = video_library._normalize_string(source_name) episodethumbspath = os.path.join( self.episodethumbspath, source_name) if artwork != '': try: xbmcvfs.copy( xbmc.translatePath( artwork ), os.path.join( episodethumbspath, filename ) ) count += 1 except: log( 'failed to copy episodethumb' ) log( 'episodethumbs copied: %s' % count )
def _copy_tvshowposters( self ): count = 0 processeditems = 0 json_query = xbmc.executeJSONRPC('{"jsonrpc": "2.0", "method": "VideoLibrary.GetTVShows", "params": {"properties": ["file", "title", "art"], "filter": {"field": "path", "operator": "contains", "value": "%s"}}, "id": 1}' % self.path) json_query = unicode(json_query, 'utf-8', errors='ignore') json_response = json.loads(json_query) if json_response.has_key('result') and (json_response['result'] != None) and (json_response['result'].has_key('tvshows')): totalitems = len( json_response['result']['tvshows'] ) for item in json_response['result']['tvshows']: if self.dialog.iscanceled(): log('script cancelled') return processeditems = processeditems + 1 self.dialog.update( int( float( processeditems ) / float( totalitems ) * 100), LANGUAGE(32014) + ': ' + str( count + 1 ) ) name = item['title'] artwork = item['art'].get('poster') tmp_filename = name + '.jpg' filename = clean_filename( tmp_filename ) if self.normalize_names == "true": filename = video_library._normalize_string(filename) # test file path with tv_content to find source name tvshowposterspath = self.tvshowposterspath if self.split_tvshows_sources == "true": for tv_file_path, source_name in self.tvshows_content.items(): if tv_file_path.startswith(item['file']): if self.normalize_names == "true": source_name = video_library._normalize_string(source_name) tvshowposterspath = os.path.join( self.tvshowposterspath, source_name ) break if artwork != '': try: xbmcvfs.copy( xbmc.translatePath( artwork ), os.path.join( tvshowposterspath, filename ) ) count += 1 except: log( 'failed to copy tvshowposter' ) log( 'tvshowposters copied: %s' % count )