def recup(self): if not VarsDep.init: # Si c'est le premier lancement de la classe... VarsDep.init = True VarsDep.instance = GestionLibs() self.creer_liste() # Récupère la librairie: trouve = False for i in range(len(VarsDep.liste)): if VarsDep.liste[i] == self.nom_lib: trouve = True VarsDep.instance.Telecharge(self.nom_lib) break if trouve: # interface.info_box(_("Librairie manquante trouvé:") + ' ' + self.nom_lib) # Si la librairie manquante a été installée, on tente de relancer le jeu: variables.instance.lance() else: interface.info_box( _("La librairie n'a pas ete trouvee") + ": " + self.nom_lib + "\n" + _("Merci de rapporter le probleme au developpeur.") )
def verif_dependances(self): """Vérifi les dépendances pour le jeu actuellement seléctionné dans la liste de jeux principale (uniquement les jeux de djl, pas les raccourcis).""" jeu_actuel = self.nom_jeu_pr() commande = "nul" cmd = self.trouve_commande(dossier=jeu_actuel) rep = config(info=2) + "/jeux/" + jeu_actuel if os.path.exists("/usr/bin/ldd32"): ldd = "ldd32" else: ldd = "ldd" liste = os.listdir(rep) if len(liste) <= 2: # Si le répertoire ne contient que 2 éléments ou moins, c'est normal for i in range(len(liste)): if os.path.isdir(rep + "/" + liste[i]): repertoire = rep + "/" + liste[i] else: # Si il y a plusieurs répertoires dans le répertoire du jeu, on binaire doit être là repertoire = rep # Créé la variable d'environnement qui va bien avant de vérifier les librairies: if os.path.exists(repertoire + "/lib"): LIBRARY_PATH = repertoire + ":" + repertoire + "/lib:" + home + "/.djl/libs" + ":/usr/lib" elif os.path.exists(repertoire + "/libs"): LIBRARY_PATH = repertoire + ":" + repertoire + "/libs:" + home + "/.djl/libs" + ":/usr/lib" else: LIBRARY_PATH = repertoire + ":" + home + "/.djl/libs" + ":/usr/lib" os.putenv("LD_LIBRARY_PATH", LIBRARY_PATH) commande = repertoire + "/" + cmd dep_ok = "" dep_manque = "" chaine = "" trouve = False retour = os.popen(ldd + " " + commande).readlines() # str() temp # retour = retour.replace(' ', '') if len(retour) > 2: for i in range(len(retour)): if ( "not found" in retour[i] ): # Si il semble manquer la librairie, on l'ajoute dans la chaine des dependances manquantes trouve = True dep_manque = dep_manque + retour[i] # + "<br>" else: # Si il a trouve la librairie, on l'ajoute à la chaine des dépendances satisfaites dep_ok = dep_ok + retour[i] if trouve: # Si il y a au moins une librairie manquante chaine = _("Dependances non satisfaites") + ":" + "\n\n" + dep_manque else: # Si toutes les dépendances semblent ok chaine = _("Toutes les dependances semblent satisfaites") + ":" + "\n\n" + dep_ok else: # Si la sortie ne fais pas au moins 2 lignes, on affiche directement le message, c'est surement une erreur (binaire on trouvé) chaine = _("Erreur") + ":\n" for i in range(len(retour)): chaine = chaine + retour[i] interface.info_box(chaine, _("Verifier les dependances"))
def __init__(self): '''Boite de dialogue qui s'affiche quand le serveur X plante''' #QtGui.QMessageBox.__init__(self) self.log_x=open(home + '/.djl/log_x', 'r') txt_log = self.log_x.read() txt = _("Le serveux X a plante, voici le message d'erreur.\n") if 'user not authorized to run the X server' in txt_log: suggestion = _("\nVous n'avez pas les droits necessaires pour lancer un second serveur X. \nSur les systemes bases sur Debian, vous pouvez regler le probleme en lancant:\n 'dpkg-reconfigure x11-common' \n Et permettre a tout le monde de lancer X11.") else: suggestion = '' #Envoi une boite de dialogue: texte = str(txt) + str(txt_log) + str(suggestion) #QtGui.QMessageBox.information(self, titre, texte) interface.info_box(texte, _("Le serveux X a plante"))
def recup(self): if not VarsDep.init: # Si c'est le premier lancement de la classe... VarsDep.init = True VarsDep.instance = GestionLibs() self.creer_liste() # Récupère la librairie: trouve = False for i in range(len(VarsDep.liste)): if VarsDep.liste[i] == self.nom_lib: trouve = True VarsDep.instance.Telecharge(self.nom_lib) break if trouve: #interface.info_box(i18n.traduc("Librairie manquante trouvé:") + ' ' + self.nom_lib) # Si la librairie manquante a été installée, on tente de relancer le jeu: variables.instance.lance() else: interface.info_box( i18n.traduc("La librairie n'a pas ete trouvee") + ': ' + self.nom_lib + '\n' + i18n.traduc("Merci de rapporter le probleme au developpeur."))
def verif_dependances(self): '''Vérifi les dépendances pour le jeu actuellement seléctionné dans la liste de jeux principale (uniquement les jeux de djl, pas les raccourcis).''' jeu_actuel = self.nom_jeu_pr() commande = 'nul' cmd = self.trouve_commande(dossier=jeu_actuel) rep = config(info=2) + '/jeux/' + jeu_actuel if os.path.exists('/usr/bin/ldd32'): ldd = 'ldd32' else: ldd = 'ldd' liste = os.listdir(rep) if len( liste ) <= 2: # Si le répertoire ne contient que 2 éléments ou moins, c'est normal for i in range(len(liste)): if os.path.isdir(rep + '/' + liste[i]): repertoire = rep + '/' + liste[i] else: # Si il y a plusieurs répertoires dans le répertoire du jeu, on binaire doit être là repertoire = rep # Créé la variable d'environnement qui va bien avant de vérifier les librairies: if os.path.exists(repertoire + '/lib'): LIBRARY_PATH = repertoire + ':' + repertoire + \ '/lib:' + config(info=2) + "/libs" + ':/usr/lib' elif os.path.exists(repertoire + '/libs'): LIBRARY_PATH = repertoire + ':' + repertoire + \ '/libs:' + config(info=2) + "/libs" + ':/usr/lib' else: LIBRARY_PATH = repertoire + ':' + config( info=2) + "/libs" + ':/usr/lib' os.putenv("LD_LIBRARY_PATH", LIBRARY_PATH) commande = repertoire + '/' + cmd dep_ok = '' dep_manque = '' chaine = '' trouve = False retour = os.popen(ldd + ' ' + commande).readlines() # str() temp #retour = retour.replace(' ', '') if len(retour) > 2: for i in range(len(retour)): # Si il semble manquer la librairie, on l'ajoute dans la chaine des # dependances manquantes if "not found" in retour[i]: trouve = True dep_manque = dep_manque + retour[i] # + "<br>" # Si il a trouve la librairie, on l'ajoute à la chaine des dépendances satisfaites else: dep_ok = dep_ok + retour[i] if trouve: # Si il y a au moins une librairie manquante chaine = _( 'Dependances non satisfaites') + ':' + "\n\n" + dep_manque else: # Si toutes les dépendances semblent ok chaine = _('Toutes les dependances semblent satisfaites' ) + ':' + "\n\n" + dep_ok # Si la sortie ne fais pas au moins 2 lignes, on affiche directement le # message, c'est surement une erreur (binaire on trouvé) else: chaine = i18n.traduc("Erreur") + ":\n" for i in range(len(retour)): chaine = chaine + retour[i] interface.info_box(chaine, _('Verifier les dependances'))
def __init__(self): '''Boite de dialogue qui s'affiche quand un jeu plante (Avec si possible une suggestion ainsi que les dernières lignes de la sortie standard du jeu''' fichier_log=open(home + '/.djl/debog', 'r') titre = _("Erreur lors du lancement du jeu") texte_log = str(fichier_log.read()) #Variables pour n'afficher la boite de dialogue que quand c'est nécessaire: mesg = 0 #Si la variable passe à 1, c'est qu'il manque une librairie, djl tentera de la télécharger fgest = False if str(texte_log) != '': texte = _("Une erreur s'est produite avec ") + variables.nom_jeu + _(". \nVoici le message d'erreur: \n") else: texte = _('Le jeu ') + variables.nom_jeu + _(" n'a put etre lance correctement. Merci de lire les eventuels messages d'erreur dans le terminal et rapporter le bogue au developpeur.") suggestion = '' if 'Wine failed with return code' in str(texte_log): suggestion = _("\n Wine n'a put lancer le jeu.") mesg = 1 elif 'ALSA lib pcm_dmix.c:996:(snd_pcm_dmix_open) unable to open slave' in str(texte_log): texte_log = 'ALSA lib pcm_dmix.c:996:(snd_pcm_dmix_open) unable to open slave' suggestion = _('\n La carte son est probablement occupee par un autre processus.') mesg = 1 elif 'Device or resource busy' in str(texte_log): suggestion = _('\n La carte son est probablement occupee par un autre processus.') mesg = 1 elif 'X Error of failed request:' in str(texte_log): mesg = 1 #Si le message d'erreur contient 'ImportError', c'est que nous lancons un script python auqul il manque une librairie: elif 'ImportError:' in str(texte_log): if 'No module named' in str(texte_log): liste_texte = texte_log.split('\n') boucle = 0 while boucle < len(liste_texte): if 'ImportError' in liste_texte[boucle]: nom_lib = liste_texte[boucle] break else: nom_lib = '' boucle = boucle+1 if nom_lib != '': suggestion = nom_lib.split() suggestion = suggestion[len(suggestion)-1] suggestion = _("\n Solution possible, installer la librairie python '") + str(suggestion) + "'" mesg = 1 elif "PNG header and library versions do not match" in texte_log: mesg = 1 #Pour les jeux LGP elif "This beta has expired" in texte_log: mesg = 1 elif "not found (required by" in texte_log: if ".so" in texte_log: suggestion = "\n" + _("C'est probablement une incompatibilite entre librairies partages.") mesg = 1 elif ": command not found" in texte_log: mesg = 1 elif "error while loading" in texte_log: #Si le binaire (x86) plante parce qu'il n'a qu'une librairie x64 à se mettre sous la dent. if "wrong ELF class: ELFCLASS64" in texte_log: fgest = True liste_texte = texte_log.split() for i in range(len(liste_texte)): if '.so' in liste_texte[i]: nom_lib = liste_texte[i] break if config(info=17) == 1: suggestion = _("djl va tenter de trouver la librairie") + ': ' + nom_lib.replace(':', '') else: suggestion = _("\n Solution possible, installer la librairie ") + nom_lib.replace(':', '') #suggestion = _("djl va tenter de trouver la librairie") + ': ' + nom_lib.replace(':', '') #suggestion = _("\n Solution possible, installer la librairie ") + nom_lib.replace(':', '') + ' (32 bits)' + '.' mesg = 1 #Si le message d'erreur contient 'No such file...', c'est qu'une librairie manque. On va l'extraire du message d'erreur #Afin de suggérer à l'utilisateur de l'installer: elif 'No such file or directory' in texte_log: if '.so' in str(texte_log): fgest = True liste_texte = texte_log.split() boucle = 0 #Boucle pour parcourir l'enssemble du message d'erreur et trouver le nom de la librairie manquante while boucle < len(liste_texte): if '.so' in liste_texte[boucle]: nom_lib = liste_texte[boucle] print "1>", nom_lib break boucle=boucle+1 #On applique des traitement sur la variables 'librairie', afin de supprimer les caractère inutiles: librairie = nom_lib.split('.') version = librairie[len(librairie)-1] if ':' in version: version = version.replace(':', '') #Parcours la liste contenant le nom de la librairie #Si il y a un élément vide, on le supprime #print librairie, str(len(librairie)) librairie_copie=librairie librairie=[] for id in range(len(librairie_copie)): #print librairie_copie[id], str(id) if librairie_copie[id] != "": librairie.append(librairie_copie[id]) if 'lib' in librairie[0]: librairie = librairie[0].replace('lib', '') else: librairie = librairie[0] #Vérifi si la version est bien un nombre: try: version = int(version) except: version = _("introuvable") #suggestion = _("\n Solution possible, installer la librairie ") + str(librairie) + _(', version ') + str(version) + '.' if config(info=17) == 1: suggestion = _("djl va tenter de trouver la librairie") + ': ' + nom_lib.replace(':', '') else: suggestion = _("\n Solution possible, installer la librairie ") + nom_lib.replace(':', '') mesg = 1 else: mesg = 1 elif 'open /dev/sequencer or /dev/snd/seq' in str(texte_log): #suggestion = '\nLa carte son est mal configurée ou occupée par un autre processus.' mesg = 0 elif "open /dev/[sound/]dsp: No such file or directory" in str(texte_log): mesg = 0 #Si c'est un problème que l'on ne connait pas, on affiche rien else: mesg = 0 #modif 0>>1 #else: #suggestion = '' if mesg == 1: #Envoi l'affichage de la boite de dialogue message = texte + "\n" + texte_log #Si le message d'erreur fais plus de x charactères, on le coupe. x = 700 if len(message) > x: message2 = "" for i in range(x): message2 = message2+message[i] message = message2 + "..." suggestion = suggestion + "\n\n" +_("Pour plus d'informations, vous pouvez consulter la sortie d'erreur du jeu dans le menu 'Information/Consulter' la sortie des jeux.") texte = message + "\n" + suggestion interface.info_box(texte, titre) #QtGui.QMessageBox.information(self, titre, texte) #Si l'on choisi de lancer le gestionnaire des dépendances après qu'un jeu ait planté parce qu'il manque une librairie. if fgest: #Récupère la librairie: if config(info=17) == 1: gdep.RecupLib(nom_lib.replace(':', ''))