Example #1
0
def generatePictures(id_video=None):

    """Fct qui génére les images d'une liste de vids passée en paramètre,
    ou de tte la bdd si rien n'est passé en paramètre, mais uniquement
    si une image n'existe pas déjà."""

    bdd = sqlite3.connect("fichiers.sqlite") # ouverture de la base
    bdd.row_factory = sqlite3.Row # accès aux colonnes par leur nom, pas par leur index

    c = bdd.cursor() # obtention d'un curseur

    if id_video:
        c.execute("SELECT thumb, path FROM videos WHERE id = ?", (id_video,))
    else:
        c.execute("SELECT thumb, path FROM videos")

    for ligne_bdd in c.fetchall():

        #On génère la miniature et la mosaïque
        if not os.path.exists(ligne_bdd['thumb']):
            screen.thumb(ligne_bdd['path'])
            print("Génération thumb pour {0}".format(ligne_bdd['path']))
        else:
            print('Thumb ok pour: ' + ligne_bdd['path'])

        if not os.path.exists(ligne_bdd['thumb'].replace("_thumb.png", "_mosaic.png")):
            screen.caps(ligne_bdd['path'])
            print("Génération mosaïque pour {0}".format(ligne_bdd['path']))
        else:
            print('Mosaïque ok pour: ' + ligne_bdd['path'])

    c.close()
    bdd.close()
Example #2
0
def regeneratePictures(logger, list_vids=None):

    """Fct qui régénére les images d'une liste de vids passée en paramètre,
    ou de tte la bdd si rien n'est passé en paramètre. ATTENTION, 
    on supprime ttes les images du dossier screens/ ."""

    bdd = sqlite3.connect("fichiers.sqlite") # ouverture de la base
    bdd.row_factory = sqlite3.Row # accès aux colonnes par leur nom, pas par leur index

    c = bdd.cursor() # obtention d'un curseur

    if list_vids:
        for each_video in list_vids:
            c.execute("SELECT path, thumb FROM videos WHERE id = ?", (each_video,))
            data = c.fetchone()

            thumb_path = data["thumb"]
            mosaic_path = thumb_path.replace("_thumb.png", "_mosaic.png")

            #On génère la miniature et la mosaïque
            logger.info("Régénération des images pour {0}".format(data['path']))
            screen.thumb(data['path'], md4Function(data['path']))
            screen.caps(data['path'], md4Function(data['path']))
    else:
        
        #On vide le dossier des screenshots
        logger.info("Effacement du dossier des screens")
        os.chdir('./screens')
        for picture in os.listdir('.'):
            os.remove(os.path.abspath(picture))
        os.chdir(os.path.dirname(sys.argv[0]))

        c.execute("SELECT path FROM videos")

        logger.info("Régénération de toutes les images")

        for ligne_bdd in c.fetchall():
            #On génère la miniature et la mosaïque
            screen.thumb(ligne_bdd['path'], md4Function(ligne_bdd['path']))
            screen.caps(ligne_bdd['path'], md4Function(ligne_bdd['path']))

        logger.info("Régénération terminée")

    c.close()
    bdd.close()
Example #3
0
def importation(dossier, logger, callback=None):

    """On remplit la bdd avec les listes liste et liste_chemins.
    On vérifie que le fichier à ajouter n'est pas déjà en bdd. Sinon, on l'ajoute.
    Accepte aussi un callback en option, pour mettre à jour la progress bar du gui 
    lors de l'import"""

    #On récupère la liste des fichiers et leur emplacement
    #Uniquement des vidéos avec un type autorisé, la fct de listing
    #s'occupe de vérifier
    logger.info("Importation du dossier {0}".format(dossier))
    liste, liste_chemins = listing(dossier)

    bdd = sqlite3.connect("fichiers.sqlite") # ouverture de la base
    bdd.row_factory = sqlite3.Row # accès aux colonnes par leur nom, pas par leur index

    c = bdd.cursor() # obtention d'un curseur

    nbr_videos_added = 0

    #On récupère le nbr de fichiers à importer, pr la progress bar
    nbr_max = len(liste)

    for name, path in zip(liste, liste_chemins):

        md4 = md4Function(path) 

        # On vérifie que le fichier n'existe pas déjà. Plus d'infos :
        # http://stackoverflow.com/questions/2440147/how-to-check-the-existence-of-a-row-in-sqlite-with-python
        c.execute("SELECT md4 FROM videos WHERE md4= ?", (md4,))

        #Si le fichier n'est pas présent, on l'ajoute à la bdd
        #avec ttes les opérations qui vont avec
        if c.fetchone() is None:
            nbr_videos_added += 1

            #On génère la miniature et la mosaïque
            screen.thumb(path, md4)
            screen.caps(path, md4)

            #On crée des variables, plus lisibles, pr la requête sql
            date_modif = datetime.datetime.fromtimestamp(int(os.path.getmtime(path))).strftime('%Y-%m-%d %H:%M:%S')
            path_thumb = os.getcwd() + "/screens/{0}_thumb.png".format(md4)
            today = datetime.datetime.today().strftime('%Y-%m-%d %H:%M:%S') 

            size = os.path.getsize(path)

            #On insère aussi le nom sans accent, sans majuscule, dans un champ prévu pour faire les recherches
            logger.info("Insertion de {0} dans la bdd".format(path)) 
            c.execute("INSERT INTO videos(name, name_simple, path, thumb, date, md4, size, date_add) VALUES (?, ?, ?, ?, ?, ?, ?, ?)", 
                       (name, simpleChar(name), path, path_thumb, date_modif, md4, size, today))
        else:
            logger.debug("Fichier {0} déjà présent en bdd, rien à faire".format(name))

        #On appelle le callback pr mettre à jour le pourcentage
        #de la progress bar de la gui, au besoin
        if callback != None:
            callback((liste.index(name) + 1) * 100 / nbr_max, "({0}/{1})".format(liste.index(name) + 1, nbr_max), name, os.path.dirname(path))

    # On place le commit en dehors de la boucle, ça va plus vite
    #EN TEST, sorti le 18/03/12 de la boucle
    bdd.commit()
    c.close()
    bdd.close()

    return nbr_videos_added