| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171 |
- #! /usr/bin/env python
- # *-* encoding: utf-8
- # Virtuala Navigilo : redirige une requête d'ouverture de lien de manière
- # optimale suivant votre navigateur préféré et du/des navigateur(s) déjà
- # lancé(s).
- import sys
- import os
- # Config
- FICHIER_CONF = os.environ['HOME']+'/.virtuala_navigilo.rc'
- # Table de correspondance nom binaire <=> nom processus
- NomProcessus = {'firefox-esr':'firefox-esr', \
- 'midori':'midori', \
- 'chromium-browser':'chromium-browser', \
- 'xlinks2':'xlinks2', \
- '/home/docs/icecat/icecat/icecat-bin':'icecat-bin', \
- #'w3m':'w3m' \
- }
- class Navigateur:
- """ Classe regroupant les paramètres et méthodes associés à un navigateur
- du système. """
- def __init__(self, nom, executable, nom_processus, tourne):
- self.nom = nom
- self.executable = executable
- self.nom_processus = nom_processus
- self.tourne = tourne
- self.priorite = 0
- def lance(self, url=False):
- """ Lance le navigateur """
- if url:
- os.execl(self.executable, self.executable, url)
- else:
- os.execl(self.executable, self.executable)
- def DefinitPriorite(self) :
- """ Définit la priorité donnée au navigateur. Le choix de
- l'utilisateur, si existant prévaut sur le choix système. """
- # Obtention du choix système
- sppref = os.popen('update-alternatives --query x-www-browser')
- spref = sppref.readlines()
- sppref.close()
- for l in spref:
- l = l.split(': ')
- #TODO : lire toutes les valeurs, pas seulement la Best !
- if l[0] == 'Best':
- b = l[1].strip('\n')
- b = b.strip(' ')
- if b == self.executable:
- self.priorite = 100
- #print(" Priorité du systeme: %s = 100" % self.executable)
- # Si les préférences utilisateurs sont disponibles, on les utilise.
- # On écrase ainsi les préfs système
- if os.access(FICHIER_CONF, os.R_OK):
- uppref = open(FICHIER_CONF, 'r')
- upref = uppref.readlines()
- uppref.close()
- for l in upref:
- l = l.split(': ')
- #TODO : idem, gérer les autres que Best ?
- if l[0] == 'Best':
- b = l[1].strip('\n')
- b = b.strip(' ')
- if b == self.executable:
- self.priorite = 100
- #print(" Priorité utilisateur : %s = 100" % self.executable)
- else:
- print "Pas de préférences utilisateur. Pour y rémédier, créez un ~/.navigateur_virtuel."
- def NavigateursSysteme():
- """ Retourne un tableau des navigateurs installés avec leurs informations
- utiles. """
- navigateurs = []
- # Obtention des navigateurs présents sur le système
- pliste = os.popen('update-alternatives --list x-www-browser')
- tmp_bin = pliste.readlines()
- pliste.close()
- # Détermination de l'état des navigateurs du système pour l'utilisateur
- ps = os.popen('''ps -Au $USER''')
- tmp_etat = ps.readlines()
- ps.close()
-
- for i in xrange(len(tmp_bin)):
- # Conditionnement du chemin du binaire
- executable = tmp_bin[i].replace('\n', '')
- # Extraction du nom (nom du binaire)
- nom = executable.split('/')[-1]
- # Détermination de l'état
- try:
- np = NomProcessus[nom]
- etat = False
- for l in tmp_etat:
- if np in l:
- etat = True
- navigateurs.append(Navigateur(nom, executable, NomProcessus[nom], etat))
- except KeyError:
- print("Navigateur « %s » trouvé sur le système mais pas d'informations \
- disponibles sur ce navigateur, il sera ignoré." % nom)
- return navigateurs
- def NavigateurPreferable(navigateurs):
- """ A partir d'un tableau de Navigateur, retourne le plus prioritaire lancé
- ou à défaut le plus prioritaire spécifié par l'utilisateur ou le système. """
- max_nav = False
- max_prio = 0
- for nav in navigateurs:
- if nav.tourne:
- if nav.priorite > max_prio:
- max_nav = nav
- # Pas de naviguateur lancé
- if not max_nav:
- for nav in navigateurs:
- if nav.priorite > max_prio:
- max_nav = nav
- return max_nav
- def main():
- params = False
- if len(sys.argv) > 1:
- params = sys.argv[1]
- # Construction de la liste des navigateurs potentiels
- navigateurs = NavigateursSysteme()
- print("%d navigateur(s) trouvé(s) sur le système :" % len(navigateurs))
- for nav in navigateurs:
- print(" * %s [tourne=%s]" % (nav.nom, nav.tourne))
- # Etablissement des priorités de chaque navigateur
- for nav in navigateurs:
- nav.DefinitPriorite()
- # Choix du navigateur à utiliser
- nav = NavigateurPreferable(navigateurs)
- print "Navigateur retenu : %s, priorite=%d, tourne=%s" % (nav.nom, nav.priorite, nav.tourne)
- if nav:
- # Lancement du navigateur
- nav.lance(params)
- else:
- print "Oups ! Aucun navigateur ne sera lancé !"
- if __name__ == '__main__':
- main()
|