Exemple #1
0
    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.")
            )
Exemple #2
0
    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"))
Exemple #3
0
 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"))
Exemple #4
0
    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."))
Exemple #5
0
    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'))
Exemple #6
0
    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(':', ''))