#!/usr/bin/env python # coding=utf8 from os import getenv,getuid,kill,waitpid from subprocess import call,Popen,PIPE from os.path import abspath,join,exists from signal import SIGTERM def recup_rep_profiles(): base_profile=join(getenv('HOME'),".mozilla","firefox") profiles_ini=join(base_profile,"profiles.ini") rep_profiles=[] lignes=open(profiles_ini).read().splitlines() for ligne in lignes: ligne=ligne.strip() if ligne.startswith("Path="): rep_profiles.append(join(base_profile,ligne[5:])) return rep_profiles def patch_sessionstore(sessionstore): if not exists(sessionstore): return chaine=open(sessionstore,"rb").read() chaine=chaine.replace('session:{state:"running"}})','session:{state:"stopped"}})') open(sessionstore,"wb").write(chaine) def recup_firefox_pids(): lignes=Popen(['pgrep','-x','firefox','-U',str(getuid())],stdout=PIPE).communicate()[0] firefox_pids=[] for ligne in lignes.splitlines(): ligne=ligne.strip() if not ligne: continue firefox_pids.append(int(ligne)) return firefox_pids def kill_firefox(firefox_pids): for pid in firefox_pids: kill(pid,SIGTERM) # Récupère les chemins vers les profiles profiles=recup_rep_profiles() # Récupère les PID des processus Firefox en cours d’exécution pids=recup_firefox_pids() # Demande confirmation si Firefox est en cours d’exécution if pids: retour=call(['zenity','--question','--title=Attention','--text=Firefox est encours d’exécution\nSi vous cliquez sur Valider, Firefox sera fermé le temps d’effectuer l’optimisation et relancé après']) if retour==1: exit(1) # Arrête Firefox kill_firefox(pids) # Patche les fichiers sessionstore.js for profile in profiles: patch_sessionstore(join(profile,"sessionstore.js")) # Compacte les bases de données progress=Popen(["zenity","--title","Optimisation","--text","Optimisation en cours...","--progress","--pulsate","--auto-close"],stdin=PIPE) for profile in profiles: Popen(['find',profile,'-name','*.sqlite','-print','-exec','sqlite3','{}','VACUUM',';'],stdout=progress.stdin) progress.stdin.close() # Relance Firefox s’il était lancé if pids: Popen(['firefox'],stderr=open("/dev/null"),stdout=open("/dev/null"))