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()
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()
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