def update_movie_set(percent, movieset, art_type, filename):
    log("Selected %s: %s" % (art_type, filename), xbmc.LOGDEBUG)
    dialog_msg( "update", percent = percent, line1 = __language__( 32006 ), \
                line2 = " %s %s" % ( __language__( 32007 ), movieset[ "label" ] ), \
                line3 = filename )
    return DB.updateDatabase(movieset["setid"], filename, art_type,
                             enable_force_update)
def update_movie_sets(overwrite=False):
    log("Updating artwork for Movie Sets", xbmc.LOGNOTICE)
    dialog_msg("create")
    found_artwork_count = 0
    db_update_count = 0

    # Map of artwork types and their corresponding possible filenames
    artwork_type_filenames = {}
    artwork_type_filenames[ARTWORK_TYPE_THUMB] = setting_thumb_filenames
    artwork_type_filenames[ARTWORK_TYPE_POSTER] = setting_poster_filenames
    artwork_type_filenames[ARTWORK_TYPE_FANART] = setting_fanart_filenames
    artwork_type_filenames[ARTWORK_TYPE_LOGO] = setting_logo_filenames
    artwork_type_filenames[ARTWORK_TYPE_CLEARART] = setting_clearart_filenames
    artwork_type_filenames[ARTWORK_TYPE_BANNER] = setting_banner_filenames

    # Get movie sets
    movie_sets = DB.getMovieSets()

    if len(movie_sets) == 0:
        dialog_msg("okdialog", line1=__language__(32011))
        return found_artwork_count, db_update_count

    # Find all images in the artwork folder, mapped by lenient filenames used for matching
    file_map = {}
    if (enable_artwork_folder and artwork_folder_path != ""):
        find_images_lenient(file_map, artwork_folder_path,
                            recurse_artwork_folder)
        log("Artwork folder image map: %s" % file_map)

    for countset, movieset in enumerate(movie_sets):
        try:
            if dialog_msg("iscanceled"):
                break
            movieset_name = movieset["label"]
            percent = int((countset / float(len(movie_sets))) * 100)
            dialog_msg( "update", percent = percent, line1 = __language__( 32006 ), \
                        line2 = " %s %s" % ( __language__( 32007 ), movieset_name ) )
            # This sleep isn't needed, just makes UI nicer
            xbmc.sleep(100)

            log("------------------------------------------------------------",
                xbmc.LOGDEBUG)
            log("Processing movie set: %s" % movieset_name, xbmc.LOGDEBUG)
            log("------------------------------------------------------------",
                xbmc.LOGDEBUG)

            # The cache path is no longer correct in Gotham. Need fix or to lookup textures.db
            # videodb://1/7/ -> videodb://movies/sets/

            #set_thumb = TBN.get_cached_saga_thumb( movieset[ "setid" ], False )
            #log( "Cached thumb filename: %s" % set_thumb, xbmc.LOGDEBUG )
            #set_fanart = TBN.get_cached_saga_thumb( movieset[ "setid" ], True )
            #log( "Cached fanart filename: %s" % set_fanart, xbmc.LOGDEBUG )

            # If exiting artwork and not overwrite, move on
            #if (not overwrite and (file_exists( set_thumb ) or file_exists( set_fanart )) ):
            #    continue

            artwork_types_copied = []
            artwork_found = {}
            for artwork_type in artwork_type_filenames:
                artwork_found[artwork_type] = []

            if (enable_artwork_folder and artwork_folder_path != ""):

                # Check if there is artwork in the search folder matching all the supported artwork types
                log("== Checking single artwork folder ==", xbmc.LOGDEBUG)
                for artwork_type in artwork_type_filenames:
                    for artwork_filename in artwork_type_filenames[
                            artwork_type]:
                        artwork_filename = get_lenient_name(
                            "%s-%s" % (movieset_name, artwork_filename))
                        # log( "Checking for: %s" % artwork_filename )
                        if (artwork_filename in file_map):
                            artwork_filename = file_map[artwork_filename]
                            artwork_found[artwork_type].append(
                                artwork_filename)
                            db_update_count += update_movie_set(
                                percent, movieset, artwork_type,
                                artwork_filename)
                            artwork_types_copied.append(artwork_type)
                            break

                # If we found all artwork types, we can move on
                log("Found artwork for %s types" % len(artwork_types_copied))
                if (len(artwork_types_copied) == len(artwork_type_filenames)):
                    continue

            if (enable_search_folders):
                movie_folders = []
                movie_folder_names = []

                # Scan the movies in the set and their folders
                log(
                    "== Scanning movies in set for folder names and artwork ==",
                    xbmc.LOGDEBUG)
                movies = DB.getMoviesInSet(movieset["setid"])
                for movie in movies:
                    try:
                        dialog_msg( "update", percent = percent, line1 = __language__( 32006 ), \
                                    line2 = " %s %s" % ( __language__( 32007 ), movieset_name ), \
                                    line3 = " %s %s" % ( __language__( 32010 ), movie[ "title" ] ) )
                        log("Processing movie: %s" % movie["title"],
                            xbmc.LOGDEBUG)

                        movie_folder = os.path.dirname(movie["file"])
                        movie_folders.append(movie_folder)
                        movie_folder_names.append(
                            os.path.basename(movie_folder))

                        # Check for artwork in the parent folder of the movie folder
                        parent_folder = os.path.dirname(movie_folder)

                        # Remember all artwork found during scan of movies in the set
                        for artwork_type in artwork_type_filenames:
                            if (not artwork_type in artwork_types_copied):
                                for artwork_filename in artwork_type_filenames[
                                        artwork_type]:
                                    artwork_filename = find_image_lenient(
                                        artwork_filename, parent_folder,
                                        movieset_name)
                                    if file_exists(artwork_filename):
                                        artwork_found[artwork_type].append(
                                            artwork_filename)
                                        break

                    except:
                        xbmc.log("enumerate( movies ): %s" % repr(movie),
                                 xbmc.LOGERROR)
                        print_exc()

                # Check if all movies are actually under one folder name (may be different paths)
                log("Movie folders found: %s" % movie_folder_names)
                if (len(set(movie_folder_names)) == 1):
                    log(
                        "== All movies in the set have the same folder name ==",
                        xbmc.LOGDEBUG)
                    for movie_folder in ordered_set(movie_folders):
                        log("Checking folder for artwork: %s" % movie_folder,
                            xbmc.LOGDEBUG)
                        # Ignore artwork found during scan and look in the single folder
                        for artwork_type in artwork_type_filenames:
                            if (not artwork_type in artwork_types_copied):
                                for artwork_filename in artwork_type_filenames[
                                        artwork_type]:
                                    artwork_filename = find_image_lenient(
                                        artwork_filename, movie_folder,
                                        movieset_name)
                                    if file_exists(artwork_filename):
                                        artwork_found[artwork_type].append(
                                            artwork_filename)
                                        db_update_count += update_movie_set(
                                            percent, movieset, artwork_type,
                                            artwork_filename)
                                        artwork_types_copied.append(
                                            artwork_type)
                                        break

                # Else movies are in different folders
                else:
                    # Use the most popular artwork amongst movies in the set
                    log("== Selecting artwork found during scan ==",
                        xbmc.LOGDEBUG)
                    for artwork_type in artwork_type_filenames:
                        if (not artwork_type in artwork_types_copied):
                            artwork = artwork_found[artwork_type]
                            if (len(artwork) > 0):
                                log(
                                    "Possible artwork: %s" %
                                    list(set(artwork)), xbmc.LOGDEBUG)
                                artwork_filename = max(set(artwork),
                                                       key=artwork.count)
                                db_update_count += update_movie_set(
                                    percent, movieset, artwork_type,
                                    artwork_filename)
                                artwork_types_copied.append(artwork_type)

        except:
            xbmc.log("enumerate( movie_sets ): %s" % repr(movieset),
                     xbmc.LOGERROR)
            print_exc()

        finally:
            log("------------------------------------------------------------",
                xbmc.LOGDEBUG)
            log("All artwork found for set:\n%s" % artwork_found,
                xbmc.LOGDEBUG)
            artwork_found_no_empty = dict(
                (k, v) for k, v in artwork_found.iteritems() if v)
            if (len(artwork_found_no_empty) > 0):
                found_artwork_count += 1

    # dialog_msg( "update", percent = 100, line1 = __language__( 32009 ) )
    # xbmc.sleep( 1000 )
    dialog_msg("close")
    return found_artwork_count, db_update_count
        xbmc.sleep(1000)

        # Check the XBMC version to determine DB or JSON
        xbmcVersion = xbmc.getInfoLabel("system.buildversion")
        log("XBMC build version: %s" % xbmcVersion)
        if xbmcVersion.startswith("12"):
            log("Using Frodo SQL database")
            useSQL = True
        else:
            log("Using Gotham JSON")
            useSQL = False

        # Before accessing database, check that HTTP server is running
        if (not useSQL and not xbmc.getCondVisibility(
                "System.GetBool(services.esenabled)")):
            dialog_msg("okdialog", line1=__language__(32014))
            xbmc.executebuiltin("ActivateWindow(servicesettings)")

        elif (not (enable_artwork_folder or enable_search_folders)):
            dialog_msg("okdialog", line1=__language__(32012))

        else:
            # In Frodo, there is always artwork for movie sets, so no overwrite means no point running
            overwrite = dialog_msg("yesno", line1=__language__(32008))
            if (overwrite):
                DB.initialise(useSQL)
                found_artwork_count, db_update_count = update_movie_sets(
                    overwrite)
                dialog_msg("okdialog",
                           line1=__language__(32013) %
                           (found_artwork_count, db_update_count))
Beispiel #4
0
def update_movie_sets(overwrite = False):
    log( "Updating artwork for Movie Sets", xbmc.LOGNOTICE )
    dialog_msg( "create" )
    found_artwork_count = 0    
    db_update_count = 0    

    # Map of artwork types and their corresponding possible filenames
    artwork_type_filenames = {}
    artwork_type_filenames[ARTWORK_TYPE_THUMB] = setting_thumb_filenames
    artwork_type_filenames[ARTWORK_TYPE_POSTER] = setting_poster_filenames
    artwork_type_filenames[ARTWORK_TYPE_FANART] = setting_fanart_filenames
    artwork_type_filenames[ARTWORK_TYPE_LOGO] = setting_logo_filenames
    artwork_type_filenames[ARTWORK_TYPE_CLEARART] = setting_clearart_filenames
    artwork_type_filenames[ARTWORK_TYPE_BANNER] = setting_banner_filenames
    artwork_type_filenames[ARTWORK_TYPE_EXTRAFANART1] = setting_extrafanart1_filenames
            
    # Get movie sets
    movie_sets = DB.getMovieSets()
    
    if len( movie_sets ) == 0:
        dialog_msg( "okdialog", line1 = __language__(32011) )
        return found_artwork_count, db_update_count

    # Find all images in the artwork folder, mapped by lenient filenames used for matching  
    file_map = {}
    if ( enable_artwork_folder and artwork_folder_path != ""):
        find_images_lenient(file_map, artwork_folder_path, recurse_artwork_folder)
        log( "Artwork folder image map: %s" % file_map )
            
    for countset, movieset in enumerate( movie_sets ):
        try:
            if dialog_msg( "iscanceled" ):
                break
            movieset_name = movieset[ "label" ]
            percent = int( ( countset/float( len( movie_sets ) ) ) * 100 ) 
            dialog_msg( "update", percent = percent, line1 = __language__( 32006 ), \
                        line2 = " %s %s" % ( __language__( 32007 ), movieset_name ) )
            # This sleep isn't needed, just makes UI nicer
            xbmc.sleep( 100 )
            
            log( "------------------------------------------------------------", xbmc.LOGDEBUG )
            log( "Processing movie set: %s" % movieset_name,              xbmc.LOGDEBUG)
            log( "------------------------------------------------------------", xbmc.LOGDEBUG )
            
            # The cache path is no longer correct in Gotham. Need fix or to lookup textures.db
            # videodb://1/7/ -> videodb://movies/sets/
             
            #set_thumb = TBN.get_cached_saga_thumb( movieset[ "setid" ], False )
            #log( "Cached thumb filename: %s" % set_thumb, xbmc.LOGDEBUG )
            #set_fanart = TBN.get_cached_saga_thumb( movieset[ "setid" ], True )
            #log( "Cached fanart filename: %s" % set_fanart, xbmc.LOGDEBUG )

            # If exiting artwork and not overwrite, move on
            #if (not overwrite and (file_exists( set_thumb ) or file_exists( set_fanart )) ):
            #    continue

            artwork_types_copied = []
            artwork_found = {}
            for artwork_type in artwork_type_filenames:
                artwork_found[artwork_type] = []
                
            if ( enable_artwork_folder and artwork_folder_path != ""):
                
                # Check if there is artwork in the search folder matching all the supported artwork types
                log( "== Checking single artwork folder ==", xbmc.LOGDEBUG )
                for artwork_type in artwork_type_filenames:
                    for artwork_filename in artwork_type_filenames[artwork_type]:
                        artwork_filename = get_lenient_name("%s-%s" % (movieset_name, artwork_filename) )
                        # log( "Checking for: %s" % artwork_filename )
                        if (artwork_filename in file_map):
                            artwork_filename = file_map[ artwork_filename ]
                            artwork_found[artwork_type].append(artwork_filename)
                            db_update_count += update_movie_set(percent, movieset, artwork_type, artwork_filename)
                            artwork_types_copied.append(artwork_type)
                            break
                    
                # If we found all artwork types, we can move on
                log( "Found artwork for %s types" % len(artwork_types_copied) )
                if ( len(artwork_types_copied) == len(artwork_type_filenames) ):
                    continue
                
            if ( enable_search_folders ):
                movie_folders = []
                movie_folder_names = []
                
                # Scan the movies in the set and their folders
                log( "== Scanning movies in set for folder names and artwork ==", xbmc.LOGDEBUG )
                movies = DB.getMoviesInSet( movieset[ "setid" ])
                for movie in movies:
                    try:
                        dialog_msg( "update", percent = percent, line1 = __language__( 32006 ), \
                                    line2 = " %s %s" % ( __language__( 32007 ), movieset_name ), \
                                    line3 = " %s %s" % ( __language__( 32010 ), movie[ "title" ] ) )
                        log( "Processing movie: %s" % movie[ "title" ], xbmc.LOGDEBUG )
                
                        movie_folder = os.path.dirname( movie[ "file" ] )
                        movie_folders.append(movie_folder)
                        movie_folder_names.append(os.path.basename(movie_folder))
                        
                        # Check for artwork in the parent folder of the movie folder
                        parent_folder = os.path.dirname( movie_folder )
                        
                        # Remember all artwork found during scan of movies in the set
                        for artwork_type in artwork_type_filenames:
                            if (not artwork_type in artwork_types_copied):
                                for artwork_filename in artwork_type_filenames[artwork_type]:
                                    artwork_filename = find_image_lenient(artwork_filename, parent_folder, movieset_name)
                                    if file_exists( artwork_filename ):
                                        artwork_found[artwork_type].append(artwork_filename)
                                        break
                            
                    except:
                        xbmc.log( "enumerate( movies ): %s" % repr( movie ), xbmc.LOGERROR )
                        print_exc()

                # Check if all movies are actually under one folder name (may be different paths)
                log( "Movie folders found: %s" % movie_folder_names)
                if ( len( set(movie_folder_names) ) == 1 ):
                    log( "== All movies in the set have the same folder name ==", xbmc.LOGDEBUG)
                    for movie_folder in ordered_set(movie_folders):
                        log( "Checking folder for artwork: %s" % movie_folder, xbmc.LOGDEBUG)
                        # Ignore artwork found during scan and look in the single folder                        
                        for artwork_type in artwork_type_filenames:
                            if (not artwork_type in artwork_types_copied):
                                for artwork_filename in artwork_type_filenames[artwork_type]:
                                    artwork_filename = find_image_lenient(artwork_filename, movie_folder, movieset_name)
                                    if file_exists( artwork_filename ):
                                        artwork_found[artwork_type].append(artwork_filename)
                                        db_update_count += update_movie_set(percent, movieset, artwork_type, artwork_filename)
                                        artwork_types_copied.append(artwork_type)
                                        break
                                    
                # Else movies are in different folders
                else:
                    # Use the most popular artwork amongst movies in the set
                    log( "== Selecting artwork found during scan ==", xbmc.LOGDEBUG )
                    for artwork_type in artwork_type_filenames:
                        if (not artwork_type in artwork_types_copied):
                            artwork = artwork_found[artwork_type]
                            if ( len(artwork) > 0):
                                log( "Possible artwork: %s" % list(set(artwork)), xbmc.LOGDEBUG)
                                artwork_filename = max( set(artwork), key=artwork.count )
                                db_update_count += update_movie_set(percent, movieset, artwork_type, artwork_filename)
                                artwork_types_copied.append(artwork_type)
                            
        except:
            xbmc.log( "enumerate( movie_sets ): %s" % repr( movieset ), xbmc.LOGERROR )
            print_exc()

        finally:
            log( "------------------------------------------------------------", xbmc.LOGDEBUG )
            log( "All artwork found for set:\n%s" % artwork_found, xbmc.LOGDEBUG)
            artwork_found_no_empty = dict((k, v) for k, v in artwork_found.iteritems() if v)
            if ( len(artwork_found_no_empty) > 0 ):
                found_artwork_count += 1

            
    # dialog_msg( "update", percent = 100, line1 = __language__( 32009 ) )
    # xbmc.sleep( 1000 )
    dialog_msg( "close" )
    return found_artwork_count, db_update_count
Beispiel #5
0
def update_movie_set(percent, movieset, art_type, filename):
    log( "Selected %s: %s" % (art_type, filename), xbmc.LOGDEBUG)
    dialog_msg( "update", percent = percent, line1 = __language__( 32006 ), \
                line2 = " %s %s" % ( __language__( 32007 ), movieset[ "label" ] ), \
                line3 = filename )
    return DB.updateDatabase(movieset[ "setid" ], filename, art_type, enable_force_update)
Beispiel #6
0
        xbmc.executebuiltin('Dialog.Close(all, true)') 
        xbmc.sleep( 1000 )

        # Check the XBMC version to determine DB or JSON
        xbmcVersion = xbmc.getInfoLabel( "system.buildversion" )
        log( "XBMC build version: %s" % xbmcVersion )
        if xbmcVersion.startswith("12"):
            log( "Using Frodo SQL database" )
            useSQL = True
        else:
            log( "Using Gotham JSON" )
            useSQL = False

        # Before accessing database, check that HTTP server is running
        if ( not useSQL and not xbmc.getCondVisibility( "System.GetBool(services.esenabled)" ) ):
            dialog_msg( "okdialog", line1 = __language__(32014) )
            xbmc.executebuiltin( "ActivateWindow(servicesettings)" )
                    
        elif (not (enable_artwork_folder or enable_search_folders) ):
            dialog_msg( "okdialog", line1 = __language__(32012) )
            
        else:
            # In Frodo, there is always artwork for movie sets, so no overwrite means no point running
            overwrite = dialog_msg( "yesno", line1 = __language__(32008) )
            if (overwrite):
                DB.initialise(useSQL)
                found_artwork_count, db_update_count = update_movie_sets(overwrite)
                dialog_msg( "okdialog", line1 = __language__(32013) % (found_artwork_count, db_update_count) )
    except:
        print "Unexpected error: ", sys.exc_info()
        dialog_msg( "okdialog", line1 = str(sys.exc_info()[0]), \