示例#1
0
    def __setattr__(self, name, value):

        sql = util.decode("preferencias.campo=='%s'" % name)
        preferencia = session.query(Preferencia).filter(
            util.sql_text(sql)).first()

        if preferencia != None:

            tipo = preferencia.tipo

            try:

                # Data type: 'bool', 'int', 'float', 'string', 'password' , 'memo', 'select'
                if tipo == 'int':
                    preferencia.valor = int(value)
                elif tipo == 'float':
                    preferencia.valor = float(value)
                else:  # string | password | memo | select | bool
                    preferencia.valor = str(value)

                session.commit()
            except:
                session.rollback()
                if config.DEBUG:
                    print "%s ignored" % value
示例#2
0
    def __getattr__(self, name):

        retorno = None

        sql = util.decode("preferencias.campo=='%s'" % name)
        preferencia = session.query(Preferencia).filter(
            util.sql_text(sql)).first()

        if preferencia != None:

            tipo = preferencia.tipo
            valor = preferencia.valor

            # Data type: 'bool', 'int', 'float', 'string', 'password', 'memo', 'select'
            if tipo == 'bool':
                retorno = valor == "True"
            elif tipo == 'int':
                retorno = int(valor)
            elif tipo == 'float':
                retorno = float(valor)
            elif tipo == 'memo':
                retorno = valor.strip().split('\n')
            else:  # string | password | select | bool
                retorno = str(valor)

        return retorno
示例#3
0
    def syncronizarJuegos(self, particion):
        comando = "%s -p %s ls" % (config.WBFS_APP, particion.device)
        lineas = util.getSTDOUT_NOERROR_iterador(comando)
        salida = []
        for linea in lineas:
            cachos = linea.strip().split(config.SEPARADOR)
            idgame = util.decode(cachos[0])
            sql = util.decode("idgame=='%s' and idParticion='%s'" %
                              (idgame, particion.idParticion))
            juego = session.query(Juego).filter(util.sql_text(sql)).first()
            if juego is not None:
                # el juego ya existe, se borra
                session.delete(juego)

                # guardan cambios
                session.commit()

            try:
                juego = Juego(cachos)
                juego.particion = particion
                # for compatibility with sqlalchemy
                try:
                    session.add(juego)
                except:
                    session.save(juego)
                salida.append(juego)
                session.commit()

            except SintaxisInvalida:
                continue

        return salida
示例#4
0
 def getJuego(self, DEVICE, IDGAME):
     sql = util.decode("particion.device='%s' and juego.idgame=='%s'" %
                       (DEVICE, IDGAME))
     for juego, particion in session.query(Juego, Particion).filter(
             util.sql_text(sql)):
         return juego
     return None
示例#5
0
    def iniciarPreferencia(self,
                           tipo,
                           name,
                           defecto='',
                           mostrar=False,
                           vbox=None,
                           label='',
                           datos_lista=None):
        sql = util.decode("preferencias.campo=='%s'" % name)
        preferencia = session.query(Preferencia).filter(
            util.sql_text(sql)).first()
        if preferencia == None:
            preferencia = Preferencia(tipo, name, defecto)
            # for compatibility with sqlalchemy
            try:
                session.add(preferencia)
            except:
                session.save(preferencia)
            session.commit()

        if mostrar:
            h1 = gtk.HBox(homogeneous=False, spacing=0)

            etiqueta = gtk.Label()
            etiqueta.set_text("%s : " % label)
            etiqueta.set_use_markup(True)
            # 1 line
            etiqueta.set_alignment(0.0, 0.5)
            etiqueta.set_padding(5, -1)
            # > 1 linea
            #etiqueta.set_justify(gtk.JUSTIFY_LEFT)
            etiqueta.show()

            # renderizar preferencia
            if tipo == 'memo':

                h2 = gtk.HBox(homogeneous=False, spacing=0)
                v1 = gtk.VBox(homogeneous=False, spacing=5)

                textview = TextViewRelacionado(name, defecto)
                buffer = gtk.TextBuffer()
                buffer.set_text(preferencia.valor)
                buffer.connect("changed", self.memoModificado, textview)
                textview.set_buffer(buffer)
                textview.show()
                sw1 = gtk.ScrolledWindow()
                sw1.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
                sw1.set_size_request(-1, 120)
                sw1.set_shadow_type(gtk.SHADOW_IN)
                sw1.add(textview)
                sw1.show()

                boton = gtk.Button(_('Por defecto'))
                boton.connect('clicked', self.click_por_defecto_textview,
                              buffer, textview)
                boton.show()

                etiqueta.set_alignment(0.0, 1.0)

                h2.show()
                v1.show()

                h2.pack_start(etiqueta, expand=True, fill=True, padding=0)
                h2.pack_start(boton, expand=False, fill=False, padding=0)

                v1.pack_start(h2, expand=True, fill=True, padding=0)
                v1.pack_start(sw1, expand=True, fill=True, padding=0)

                h1.pack_start(v1, expand=True, fill=True, padding=0)

            elif tipo == 'select':
                if config.DEBUG:
                    print "creando combobox"

                # ponemos la etiqueta en la izquierda
                h1.pack_start(etiqueta, expand=False, fill=False, padding=0)

                liststore = gtk.ListStore(str)
                combobox = ComboBoxRelacionado(liststore, name, defecto)
                cell = gtk.CellRendererText()
                combobox.pack_start(cell, True)
                combobox.add_attribute(cell, 'text', 0)
                for code, language in datos_lista:
                    combobox.append_text("%s" % (language))
                combobox.set_active(
                    util.get_index_by_code(datos_lista, preferencia.valor))
                combobox.connect('changed', self.comboModificado, datos_lista)
                combobox.show()
                h1.pack_start(combobox, expand=False, fill=False, padding=0)

                boton = gtk.Button(_('Por defecto'))
                boton.connect('clicked', self.click_por_defecto_combo,
                              combobox, datos_lista)
                boton.show()
                h1.pack_start(boton, expand=False, fill=False, padding=0)

            elif tipo == 'bool':

                if config.DEBUG:
                    print "creando check"

                check_button = CheckRelacionado(name, defecto, label)
                check_button.set_active(preferencia.valor == "True")
                check_button.connect("toggled", self.checkModificado)
                check_button.show()

                # ponemos la etiqueta en la izquierda
                h1.pack_start(check_button,
                              expand=False,
                              fill=False,
                              padding=0)

                boton = gtk.Button(_('Por defecto'))
                boton.connect('clicked', self.click_por_defecto_check,
                              check_button)
                boton.show()
                h1.pack_start(boton, expand=False, fill=False, padding=0)

            else:

                # ponemos la etiqueta en la izquierda
                h1.pack_start(etiqueta, expand=False, fill=False, padding=0)

                entry = EntryRelacionado(name, defecto)
                entry.set_text(preferencia.valor)
                entry.set_max_length(255)
                entry.set_editable(True)
                entry.set_size_request(250, -1)
                if tipo == 'password':
                    entry.set_visibility(False)

                entry.connect('changed', self.entryModificado)
                entry.show()
                h1.pack_start(entry, expand=True, fill=True, padding=0)

                boton = gtk.Button(_('Por defecto'))
                boton.connect('clicked', self.click_por_defecto_entry, entry)
                boton.show()
                h1.pack_start(boton, expand=False, fill=False, padding=0)

            h1.show()

            vbox.pack_start(h1, expand=False, fill=False, padding=0)
示例#6
0
 def getJuegoWIITDB(self):
     sql = util.decode("juego_wiitdb.idgame=='%s'" % (self.idgame))
     return session.query(JuegoWIITDB).filter(util.sql_text(sql)).first()
示例#7
0
    def run(self):
        self.limpiarTemporales()

        descargado_y_ok = False
        try:
            self.descargarZIP()
            self.descomprimirZIP()
            descargado_y_ok = True
        except ErrorDescargando:
            self.error_importando(
                _("Error descargando la informacion WiiTDB desde %s") %
                self.url)

        if os.path.exists(self.fichXML) and descargado_y_ok:
            xmldoc = libxml2.parseFile(self.fichXML)
            ctxt = xmldoc.xpathNewContext()
            nodo = ctxt.xpathEval("//*[name() = 'datafile']")[0]

            if self.callback_empieza_importar:
                self.callback_empieza_importar(self.fichXML)

            cont = 0
            while not self.salir and nodo != None:

                if nodo.type == "element":

                    if nodo.name == "datafile":
                        nodo = nodo.children

                    elif nodo.name == "WiiTDB":
                        self.version = int(self.leerAtributo(nodo, 'version'))
                        self.games = int(
                            self.leerAtributo(nodo, 'games').split("/")[0])

                    elif nodo.name == "game":
                        if nodo.type == "element":

                            iniciado = False
                            juego = None
                            name = self.leerAtributo(nodo, 'name')

                            if nodo.children is not None:
                                nodo = nodo.children
                                saltado = False
                                while not saltado and nodo.next is not None:
                                    if nodo.type == "element":
                                        # id, region, locale, developer, publisher, date, genre, rating, wi-fi, input, rom
                                        if not iniciado:
                                            if nodo.name == "id":
                                                idgame = nodo.content

                                                sql = util.decode(
                                                    'idgame == "%s"' % idgame)
                                                juego_wbfs = session.query(
                                                    Juego).filter(
                                                        util.sql_text(
                                                            sql)).first()
                                                # si no los tienes y estas descargando en masivo -> se lo salta
                                                saltado = juego_wbfs is None and self.todos

                                                if not saltado:
                                                    sql = util.decode(
                                                        "idgame=='%s'" %
                                                        (idgame))
                                                    try:
                                                        juego = session.query(
                                                            JuegoWIITDB
                                                        ).filter(
                                                            util.sql_text(
                                                                sql)).first()
                                                    except:
                                                        self.error_importando(
                                                            _("XML invalido"))

                                                    if juego == None:
                                                        juego = JuegoWIITDB(
                                                            nodo.content, name)

                                                    iniciado = True

                                        # ya se ha iniciado
                                        else:

                                            if nodo.name == "region":
                                                juego.region = nodo.content

                                            elif nodo.name == "locale":
                                                lang = self.leerAtributo(
                                                    nodo, 'lang')

                                                sql = util.decode(
                                                    "lang=='%s' and idJuegoWIITDB='%s'"
                                                    % (lang,
                                                       juego.idJuegoWIITDB))
                                                descripcion = session.query(
                                                    JuegoDescripcion).filter(
                                                        util.sql_text(
                                                            sql)).first()
                                                if descripcion == None:
                                                    descripcion = JuegoDescripcion(
                                                        lang)
                                                    if self.callback_nuevo_descripcion:
                                                        self.callback_nuevo_descripcion(
                                                            descripcion)

                                                if nodo.children is not None:
                                                    nodo = nodo.children
                                                    while nodo.next is not None:
                                                        if nodo.type == "element":
                                                            if nodo.name == "title":
                                                                descripcion.title = nodo.content
                                                            elif nodo.name == "synopsis":
                                                                descripcion.synopsis = nodo.content
                                                        nodo = nodo.next
                                                    nodo = nodo.parent

                                                # añadimos la descripcion al juego
                                                juego.descripciones.append(
                                                    descripcion)

                                            elif nodo.name == "developer":
                                                juego.developer = nodo.content

                                            elif nodo.name == "publisher":
                                                juego.publisher = nodo.content

                                            elif nodo.name == "date":
                                                try:
                                                    year = int(
                                                        self.leerAtributo(
                                                            nodo, 'year'))
                                                    month = int(
                                                        self.leerAtributo(
                                                            nodo, 'month'))
                                                    day = int(
                                                        self.leerAtributo(
                                                            nodo, 'day'))

                                                    fecha = date(
                                                        year, month, day)

                                                    juego.fecha_lanzamiento = fecha

                                                except ValueError:
                                                    pass

                                            elif nodo.name == "genre":
                                                valores = nodo.content
                                                for valor in valores.split(
                                                        ","):
                                                    valor = valor.strip(
                                                    ).replace("'", "`")
                                                    sql = util.decode(
                                                        "nombre=='%s'" %
                                                        (valor))
                                                    genero = session.query(
                                                        Genero).filter(
                                                            util.sql_text(
                                                                sql)).first()
                                                    if genero == None:
                                                        genero = Genero(valor)
                                                        if self.callback_nuevo_genero:
                                                            self.callback_nuevo_genero(
                                                                genero)

                                                    juego.genero.append(genero)

                                            elif nodo.name == "rating":
                                                # crear un tipo de rating si es nuevo
                                                tipo = self.leerAtributo(
                                                    nodo, 'type')
                                                sql = util.decode(
                                                    "tipo=='%s'" % (tipo))
                                                rating_type = session.query(
                                                    RatingType).filter(
                                                        util.sql_text(
                                                            sql)).first()
                                                if rating_type == None:
                                                    rating_type = RatingType(
                                                        tipo)

                                                juego.rating_type = rating_type

                                                # crea una relacion si es un nuevo valor del tipo
                                                valor = self.leerAtributo(
                                                    nodo, 'value')
                                                sql = util.decode(
                                                    "idRatingType=='%s' and valor=='%s'"
                                                    %
                                                    (rating_type.idRatingType,
                                                     valor))
                                                rating_value = session.query(
                                                    RatingValue).filter(
                                                        util.sql_text(
                                                            sql)).first()
                                                if rating_value == None:
                                                    rating_value = RatingValue(
                                                        valor)
                                                    rating_type.valores.append(
                                                        rating_value)

                                                juego.rating_value = rating_value

                                                if nodo.children is not None:
                                                    nodo = nodo.children
                                                    while nodo.next is not None:
                                                        if nodo.type == "element":
                                                            if nodo.name == "descriptor":
                                                                valores = nodo.content
                                                                for valor in valores.split(
                                                                        ","):
                                                                    valor = valor.strip(
                                                                    )
                                                                    sql = util.decode(
                                                                        "idRatingType=='%s' and valor=='%s'"
                                                                        %
                                                                        (rating_type
                                                                         .
                                                                         idRatingType,
                                                                         valor)
                                                                    )
                                                                    rating_content = session.query(
                                                                        RatingContent
                                                                    ).filter(
                                                                        util.
                                                                        sql_text(
                                                                            sql
                                                                        )
                                                                    ).first()
                                                                    if rating_content == None:
                                                                        rating_content = RatingContent(
                                                                            valor
                                                                        )
                                                                        rating_type.contenidos.append(
                                                                            rating_content
                                                                        )

                                                                    juego.rating_contents.append(
                                                                        rating_content
                                                                    )

                                                        nodo = nodo.next
                                                    nodo = nodo.parent

                                            elif nodo.name == "wi-fi":
                                                juego.wifi_players = self.leerAtributo(
                                                    nodo, 'players')
                                                try:
                                                    int(juego.wifi_players)
                                                except:
                                                    juego.wifi_players = 0

                                                if nodo.children is not None:
                                                    nodo = nodo.children
                                                    while nodo.next is not None:
                                                        if nodo.type == "element":
                                                            if nodo.name == "feature":
                                                                valores = nodo.content
                                                                for valor in valores.split(
                                                                        ","):
                                                                    valor = valor.strip(
                                                                    )
                                                                    sql = util.decode(
                                                                        "valor=='%s'"
                                                                        %
                                                                        (valor)
                                                                    )
                                                                    online_feature = session.query(
                                                                        OnlineFeatures
                                                                    ).filter(
                                                                        util.
                                                                        sql_text(
                                                                            sql
                                                                        )
                                                                    ).first()
                                                                    if online_feature == None:
                                                                        online_feature = OnlineFeatures(
                                                                            valor
                                                                        )
                                                                        if self.callback_nuevo_online_feature:
                                                                            self.callback_nuevo_online_feature(
                                                                                online_feature
                                                                            )
                                                                    juego.features.append(
                                                                        online_feature
                                                                    )
                                                        nodo = nodo.next
                                                    nodo = nodo.parent

                                            elif nodo.name == "input":
                                                juego.input_players = self.leerAtributo(
                                                    nodo, 'players')

                                                if nodo.children is not None:
                                                    nodo = nodo.children
                                                    while nodo.next is not None:
                                                        if nodo.type == "element":
                                                            if nodo.name == "control":
                                                                nombres = self.leerAtributo(
                                                                    nodo,
                                                                    'type'
                                                                ).split(",")
                                                                obligatorio = self.leerAtributo(
                                                                    nodo,
                                                                    'required')
                                                                '''
                                                                wiimotenunchuk, wiimote:nunchuk
                                                                '''
                                                                if nombres[
                                                                        0] == "wiimotenunchuk" or nombres[
                                                                            0] == "wiimote:nunchuk":
                                                                    nombres = [
                                                                        'wiimote',
                                                                        'nunchuck'
                                                                    ]
                                                                for nombre in nombres:
                                                                    nombre = nombre.strip(
                                                                    )
                                                                    '''
                                                                    wiimote = wimmote
                                                                    nunchuk = nunchuck
                                                                    gamecube = gamegube, gamecube controller
                                                                    classiccontroller = calssiccontroller, classccontroller, classic controller, classic
                                                                    balanceboard = wii balance board, balance board
                                                                    motionplus = motion.plus, wii motionplus
                                                                    wheel = steering wheel
                                                                    zapper = wii zapper
                                                                    microphone = mic
                                                                    '''
                                                                    if nombre == "wimmote":
                                                                        nombre = "wiimote"
                                                                    elif nombre == "nunchuck":
                                                                        nombre = "nunchuk"
                                                                    elif nombre == "gamegube" or nombre == "gamecube controller":
                                                                        nombre = "gamecube"
                                                                    elif nombre == "calssiccontroller" or nombre == "classccontroller" or nombre == "classic controller" or nombre == "classic":
                                                                        nombre = "classiccontroller"
                                                                    elif nombre == "wii balance board" or nombre == "balance board":
                                                                        nombre = "balanceboard"
                                                                    elif nombre == "motion.plus" or nombre == "wii motionplus":
                                                                        nombre = "motionplus"
                                                                    elif nombre == "steering wheel":
                                                                        nombre = "wheel"
                                                                    elif nombre == "wii zapper":
                                                                        nombre = "zapper"
                                                                    elif nombre == "mic":
                                                                        nombre = "microphone"

                                                                    sql = util.decode(
                                                                        "nombre=='%s'"
                                                                        %
                                                                        (nombre
                                                                         ))
                                                                    accesorio = session.query(
                                                                        Accesorio
                                                                    ).filter(
                                                                        util.
                                                                        sql_text(
                                                                            sql
                                                                        )
                                                                    ).first()
                                                                    if accesorio == None:
                                                                        accesorio = Accesorio(
                                                                            nombre
                                                                        )
                                                                        if self.callback_nuevo_accesorio:
                                                                            self.callback_nuevo_accesorio(
                                                                                accesorio,
                                                                                obligatorio
                                                                                ==
                                                                                'true'
                                                                            )

                                                                    if obligatorio == 'true':
                                                                        juego.obligatorio.append(
                                                                            accesorio
                                                                        )
                                                                    else:
                                                                        juego.opcional.append(
                                                                            accesorio
                                                                        )

                                                        # siguiente control
                                                        nodo = nodo.next

                                                    # volvemos a input
                                                    nodo = nodo.parent

                                            elif nodo.name == "rom":
                                                version = self.leerAtributo(
                                                    nodo, 'version')
                                                name = self.leerAtributo(
                                                    nodo, 'name')
                                                size = self.leerAtributo(
                                                    nodo, 'size')
                                                crc = self.leerAtributo(
                                                    nodo, 'crc')
                                                md5 = self.leerAtributo(
                                                    nodo, 'md5')
                                                sha1 = self.leerAtributo(
                                                    nodo, 'sha1')

                                                rom = Rom(
                                                    version, name, size, crc,
                                                    md5, sha1)
                                                juego.roms.append(rom)

                                    # siguiente hijo de game
                                    nodo = nodo.next

                                #volver a game
                                nodo = nodo.parent

                                if not saltado:
                                    if iniciado:
                                        # for compatibility with sqlalchemy
                                        try:
                                            session.add(juego)
                                        except:
                                            session.save(juego)
                                        if self.callback_nuevo_juego:
                                            self.callback_nuevo_juego(juego)
                                    else:
                                        self.error_importando(
                                            _("XML invalido"))

                            else:
                                self.error_importando(_("XML invalido"))

                        cont += 1
                        # callback cada 1%
                        try:
                            llamarCallback = (cont % (self.games / 100) == 0)
                        except ZeroDivisionError:
                            llamarCallback = True

                        if llamarCallback and self.callback_spinner:
                            self.callback_spinner(cont, self.games)

                        nodo = nodo.next

                    elif nodo.name == "companies":
                        if nodo.children is not None:
                            nodo = nodo.children

                            while nodo.next is not None:
                                if nodo.type == "element":
                                    if nodo.name == "company":
                                        code = self.leerAtributo(nodo, 'code')
                                        name = self.leerAtributo(nodo, 'name')
                                        sql = util.decode("code=='%s'" %
                                                          (code))
                                        companie = session.query(
                                            Companie).filter(
                                                util.sql_text(sql)).first()
                                        if companie == None:
                                            companie = Companie(code, name)
                                            # for compatibility with sqlalchemy
                                            try:
                                                session.add(companie)
                                            except:
                                                session.save(companie)

                                            if self.callback_nuevo_companie:
                                                self.callback_nuevo_companie(
                                                    companie)

                                nodo = nodo.next
                            nodo = nodo.parent
                        else:
                            self.error_importando(_("XML invalido"))

                nodo = nodo.next

            # libera el xml
            ctxt.xpathFreeContext()
            xmldoc.freeDoc()

            # hacemos efectivas las transacciones
            session.commit()

            self.limpiarTemporales()

            if self.callback_termina_importar:
                self.callback_termina_importar(self.fichXML, self.todos)
        else:
            self.error_importando(_("No existe el XML"))
示例#8
0
    def sincronizarParticiones(self, detector=config.DETECTOR_WBFS):

        salida = util.getSTDOUT_NOERROR_iterador(detector)

        listaParticiones = []

        for linea in salida:
            if linea.find("/dev/") != -1:
                cachos = linea.strip().split(config.SEPARADOR)
                device = util.decode(cachos[0])
                particion = self.getParticion(device)
                if particion is not None:

                    # borrar TODOS los juegos de esta particion
                    query = session.query(Juego)
                    query = query.filter(
                        util.sql_text("idParticion = %d" %
                                      particion.idParticion))
                    for juego in query:
                        session.delete(juego)

                    # ya borro la particion
                    session.delete(particion)

                    # guardar cambios
                    session.commit()

                try:
                    particion = Particion(cachos)
                    # for compatibility with sqlalchemy
                    try:
                        session.add(particion)
                    except:
                        session.save(particion)
                    listaParticiones.append(particion)
                    session.commit()

                except SintaxisInvalida:
                    continue

        if len(listaParticiones) > 0:

            # borrar TODOS los juegos que no sean de las particiones encontradas
            query = session.query(Juego)
            for particion in listaParticiones:
                query = query.filter(
                    util.sql_text("idParticion <> %d" % particion.idParticion))
            for juego in query:
                session.delete(juego)

            # borrar TODAS las particiones que no sean de las particiones encontradas
            query = session.query(Particion)
            for particion in listaParticiones:
                query = query.filter(
                    util.sql_text("idParticion <> %d" % particion.idParticion))
            for particion in query:
                session.delete(particion)

            # subimos cambios
            session.commit()

        return listaParticiones
示例#9
0
 def getParticion(self, DEVICE):
     sql = util.decode("device=='%s'" % (DEVICE))
     particion = session.query(Particion).filter(util.sql_text(sql)).first()
     return particion