예제 #1
0
    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """

        from Widgets import Toolbar
        from Widgets import Toolbar_Busqueda
        from Widgets import Toolbar_Descarga
        from Widgets import Alerta_Busqueda

        from PanelTube import PanelTube

        from Widgets import ToolbarSalir

        boxbase = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.box_tube = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        self.box_tube.pack_start(self.toolbar, False, False, 0)
        self.box_tube.pack_start(self.toolbar_salir, False, False, 0)
        self.box_tube.pack_start(self.toolbar_busqueda, False, False, 0)
        self.box_tube.pack_start(self.toolbar_descarga, False, False, 0)
        self.box_tube.pack_start(self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(self.paneltube, True, True, 0)

        boxbase.pack_start(self.box_tube, True, True, 0)

        #boxbase.pack_start(self.socketjamedia, True, True, 0)

        self.add(boxbase)

        #from JAMediaTube.Widgets import Tube_Player

        #self.jamedia = Tube_Player()
        #self.socketjamedia.add_id(self.jamedia.get_id())

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion

        GLib.idle_add(self.__setup_init2)
예제 #2
0
    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """
        boxbase = gtk.VBox()

        self.box_tube = gtk.VBox()
        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("drawingplayer"))
        event.add(self.toolbar)
        self.box_tube.pack_start(event, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_salir)
        self.box_tube.pack_start(event, False, False, 0)

        self.box_tube.pack_start(self.toolbar_busqueda, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_descarga)
        self.box_tube.pack_start(event, False, False, 0)

        self.box_tube.pack_start(self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(self.paneltube, True, True, 0)

        self.jamedia = JAMedia()

        boxbase.pack_start(self.box_tube, True, True, 0)
        boxbase.pack_start(self.jamedia, True, True, 0)
        self.add(boxbase)

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion

        gobject.idle_add(self.__setup_init2)
예제 #3
0
    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """

        from Widgets import Toolbar
        from Widgets import Toolbar_Busqueda
        from Widgets import Toolbar_Descarga
        from Widgets import Alerta_Busqueda

        from PanelTube import PanelTube

        from Widgets import ToolbarSalir

        boxbase = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.box_tube = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        self.box_tube.pack_start(self.toolbar, False, False, 0)
        self.box_tube.pack_start(self.toolbar_salir, False, False, 0)
        self.box_tube.pack_start(self.toolbar_busqueda, False, False, 0)
        self.box_tube.pack_start(self.toolbar_descarga, False, False, 0)
        self.box_tube.pack_start(self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(self.paneltube, True, True, 0)

        boxbase.pack_start(self.box_tube, True, True, 0)

        #boxbase.pack_start(self.socketjamedia, True, True, 0)

        self.add(boxbase)

        #from JAMediaTube.Widgets import Tube_Player

        #self.jamedia = Tube_Player()
        #self.socketjamedia.add_id(self.jamedia.get_id())

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion

        GLib.idle_add(self.__setup_init2)
예제 #4
0
    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """
        boxbase = gtk.VBox()

        self.box_tube = gtk.VBox()
        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("drawingplayer"))
        event.add(self.toolbar)
        self.box_tube.pack_start(event, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_salir)
        self.box_tube.pack_start(event, False, False, 0)

        self.box_tube.pack_start(self.toolbar_busqueda, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_descarga)
        self.box_tube.pack_start(event, False, False, 0)

        self.box_tube.pack_start(self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(self.paneltube, True, True, 0)

        self.jamedia = JAMedia()

        boxbase.pack_start(self.box_tube, True, True, 0)
        boxbase.pack_start(self.jamedia, True, True, 0)
        self.set_canvas(boxbase)

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion

        gobject.idle_add(self.__setup_init2)
예제 #5
0
class JAMediaTube(Gtk.Window):
    """
    JAMediaTube.
    """

    def __init__(self):

        Gtk.Window.__init__(self)

        self.set_title("JAMediaTube")
        self.set_icon_from_file(
            os.path.join(BASE_PATH,
            "Iconos", "JAMediaTube.svg"))
        self.set_resizable(True)
        self.set_size_request(640, 480)
        self.set_border_width(2)
        self.set_position(Gtk.WindowPosition.CENTER)

        self.box_tube = None

        self.toolbar = None
        self.toolbar_busqueda = None
        self.toolbar_descarga = None
        self.toolbar_salir = None
        self.alerta_busqueda = None
        self.paneltube = None

        #self.socketjamedia = Gtk.Socket()
        #self.jamedia = None

        self.pistas = []

        self.videos_temp = []

        self.__setup_init()

    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """

        from Widgets import Toolbar
        from Widgets import Toolbar_Busqueda
        from Widgets import Toolbar_Descarga
        from Widgets import Alerta_Busqueda

        from PanelTube import PanelTube

        from Widgets import ToolbarSalir

        boxbase = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.box_tube = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        self.box_tube.pack_start(self.toolbar, False, False, 0)
        self.box_tube.pack_start(self.toolbar_salir, False, False, 0)
        self.box_tube.pack_start(self.toolbar_busqueda, False, False, 0)
        self.box_tube.pack_start(self.toolbar_descarga, False, False, 0)
        self.box_tube.pack_start(self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(self.paneltube, True, True, 0)

        boxbase.pack_start(self.box_tube, True, True, 0)

        #boxbase.pack_start(self.socketjamedia, True, True, 0)

        self.add(boxbase)

        #from JAMediaTube.Widgets import Tube_Player

        #self.jamedia = Tube_Player()
        #self.socketjamedia.add_id(self.jamedia.get_id())

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion

        GLib.idle_add(self.__setup_init2)

    def __setup_init2(self):
        """
        Inicializa la aplicación a su estado fundamental.
        """

        #self.jamedia.setup_init()
        #self.jamedia.pack_standar()
        #self.jamedia.pack_efectos()
        #self.jamedia.switch_reproductor(
        #    None, "JAMediaReproductor")

        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()

        map(self.__ocultar, [
            self.toolbar_descarga,
            self.alerta_busqueda])

        #if self.pistas:
        #    self.jamedia.set_nueva_lista(self.pistas)
        #    self.__switch(None, 'jamedia')

        #else:
        #    self.__switch(None, 'jamediatube')

        self.paneltube.encontrados.drag_dest_set(
            Gtk.DestDefaults.ALL,
            target,
            Gdk.DragAction.MOVE)

        self.paneltube.encontrados.connect(
            "drag-drop", self.__drag_drop)
        self.paneltube.encontrados.drag_dest_add_uri_targets()

        self.paneltube.descargar.drag_dest_set(
            Gtk.DestDefaults.ALL,
            target,
            Gdk.DragAction.MOVE)

        self.paneltube.descargar.connect(
            "drag-drop", self.__drag_drop)
        self.paneltube.descargar.drag_dest_add_uri_targets()

        self.connect("delete-event", self.__salir)
        self.toolbar.connect('salir', self.__confirmar_salir)
        self.toolbar_salir.connect(
            'salir', self.__salir)
        #self.toolbar.connect(
        #    'switch', self.__switch, 'jamedia')
        #self.jamedia.connect(
        #    'salir', self.__switch, 'jamediatube')
        self.toolbar_busqueda.connect(
            "comenzar_busqueda", self.__comenzar_busqueda)
        self.paneltube.connect('download',
            self.__run_download)
        self.paneltube.connect('open_shelve_list',
            self.__open_shelve_list)
        self.toolbar_descarga.connect('end',
            self.__run_download)
        self.paneltube.connect("cancel_toolbar",
            self.__cancel_toolbar)

    def __cancel_toolbar(self, widget=None):

        self.toolbar_salir.cancelar()

    def __open_shelve_list(self, widget, shelve_list, toolbarwidget):
        """
        Carga una lista de videos almacenada en un
        archivo shelve en el area del panel correspondiente
        según que toolbarwidget haya lanzado la señal.
        """

        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)

        destino = False

        if toolbarwidget == self.paneltube.toolbar_encontrados:
            destino = self.paneltube.encontrados

        elif toolbarwidget == self.paneltube.toolbar_descargar:
            destino = self.paneltube.descargar

        objetos = destino.get_children()

        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()

        GLib.idle_add(self.__add_videos, shelve_list, destino)

    def __run_download(self, widget):
        """
        Comienza descarga de un video.
        """

        if self.toolbar_descarga.estado:
            return

        videos = self.paneltube.descargar.get_children()

        if videos:
            videos[0].get_parent().remove(videos[0])
            self.toolbar_descarga.download(videos[0])

        else:
            self.toolbar_descarga.hide()

    def __drag_drop(self, destino, drag_context, x, y, n):
        """
        Ejecuta drop sobre un destino.
        """

        videoitem = Gtk.drag_get_source_widget(drag_context)

        if videoitem.get_parent() == destino:
            return

        else:
            # E try siguiente es para evitar problemas cuando:
            # El drag termina luego de que el origen se ha
            # comenzado a descargar y por lo tanto, no tiene padre.
            try:
                videoitem.get_parent().remove(videoitem)
                destino.pack_start(videoitem, False, False, 1)

            except:
                return

            if destino == self.paneltube.descargar:
                text = TipDescargas

            elif destino == self.paneltube.encontrados:
                text = TipEncontrados

            videoitem.set_tooltip_text(text)

    def __comenzar_busqueda(self, widget, palabras):
        """
        Muestra la alerta de busqueda y lanza
        secuencia de busqueda y agregado de videos al panel.
        """

        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)

        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()
        map(self.__mostrar, [self.alerta_busqueda])
        self.alerta_busqueda.label.set_text(
            "Buscando: %s" % (palabras))

        objetos = self.paneltube.encontrados.get_children()

        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()

        GLib.timeout_add(300, self.__lanzar_busqueda, palabras)

    def __lanzar_busqueda(self, palabras):
        """
        Lanza la Búsqueda y comienza secuencia
        que agrega los videos al panel.
        """

        # FIXME: Reparar (Si no hay conexión)
        from JAMediaYoutube import Buscar

        for video in Buscar(palabras):
            self.videos_temp.append(video)

        GLib.idle_add(self.__add_videos, self.videos_temp,
            self.paneltube.encontrados)

        return False

    def __add_videos(self, videos, destino):
        """
        Se crean los video_widgets de videos y
        se agregan al panel, segun destino.
        """

        if len(self.videos_temp) < 1:
            # self.videos_temp contiene solo los videos
            # encontrados en las búsquedas, no los que se cargan
            # desde un archivo.
            map(self.__ocultar, [self.alerta_busqueda])

        if not videos:
            self.paneltube.set_sensitive(True)
            self.toolbar_busqueda.set_sensitive(True)
            return False

        video = videos[0]

        from Widgets import WidgetVideoItem

        videowidget = WidgetVideoItem(video)
        text = TipEncontrados

        if destino == self.paneltube.encontrados:
            text = TipEncontrados

        elif destino == self.paneltube.descargar:
            text = TipDescargas

        videowidget.set_tooltip_text(text)
        videowidget.show_all()

        videowidget.drag_source_set(
            Gdk.ModifierType.BUTTON1_MASK,
            target,
            Gdk.DragAction.MOVE)

        # FIXME: Enlentece la aplicación ya que exige procesamiento.
        #archivo = "/tmp/preview%d" % time.time()
        #fileimage, headers = urllib.urlretrieve(
        #   video["previews"][0][0], archivo)
        #pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(fileimage,
        #    50, 50)
        #videowidget.drag_source_set_icon_pixbuf(pixbuf)
        #commands.getoutput('rm %s' % (archivo))

        videos.remove(video)
        destino.pack_start(videowidget, False, False, 1)

        texto = "Encontrado: %s" % (video["titulo"])
        if len(texto) > 50:
            texto = str(texto[0:50]) + " . . . "

        self.alerta_busqueda.label.set_text(texto)
        #self.alerta_busqueda.label.set_text(
        #   "Encontrado: %s" % (video["titulo"]))
        #self.get_property('window').invalidate_rect(
        #   self.get_allocation(), True)
        #self.get_property('window').process_updates(True)

        GLib.idle_add(self.__add_videos, videos, destino)

    def set_pistas(self, pistas):
        """
        Cuando se ejecuta pasandole un archivo.
        """

        self.pistas = pistas

    def __switch(self, widget, valor):
        """
        Cambia entre la vista de descargas y
        la de reproduccion.
        """

        if valor == 'jamediatube':
            map(self.__ocultar, [self.socketjamedia])
            map(self.__mostrar, [self.box_tube])

        elif valor == 'jamedia':
            map(self.__ocultar, [self.box_tube])
            map(self.__mostrar, [self.socketjamedia])

    def __ocultar(self, objeto):

        if objeto.get_visible():
            objeto.hide()

    def __mostrar(self, objeto):

        if not objeto.get_visible():
            objeto.show()

    def __confirmar_salir(self, widget=None, senial=None):
        """
        Recibe salir y lo pasa a la toolbar de confirmación.
        """

        self.paneltube.cancel_toolbars_flotantes()

        self.toolbar_salir.run("JAMediaTube")

    def __salir(self, widget=None, senial=None):

        # FIXME: Hay que Mejorar esta forma de salir.
        import commands
        import sys

        commands.getoutput('killall mplayer')
        sys.exit(0)
예제 #6
0
class JAMediaTube(gtk.Window):
    """
    JAMediaTube.
    """

    def __init__(self):

        gtk.Window.__init__(self)

        self.set_title("JAMediaTube")
        self.set_icon_from_file(
            os.path.join(BASE_PATH,
            "Iconos", "JAMediaTube.svg"))
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
        self.set_resizable(True)
        self.set_size_request(640, 480)
        self.set_border_width(2)
        #self.set_decorated(False)
        self.set_position(gtk.WIN_POS_CENTER)

        self.box_tube = None

        self.toolbar = None
        self.toolbar_busqueda = None
        self.toolbar_descarga = None
        self.toolbar_salir = None
        self.alerta_busqueda = None
        self.paneltube = None

        self.jamedia = None

        self.pistas = []

        self.videos_temp = []

        self.__setup_init()

    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """

        from Widgets import Toolbar
        from Widgets import Toolbar_Busqueda
        from Widgets import Toolbar_Descarga
        from Widgets import Alerta_Busqueda
        from PanelTube import PanelTube
        from Widgets import ToolbarSalir

        boxbase = gtk.VBox()

        self.box_tube = gtk.VBox()
        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("drawingplayer"))
        event.add(self.toolbar)
        self.box_tube.pack_start(
            event, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_salir)
        self.box_tube.pack_start(
            event, False, False, 0)

        self.box_tube.pack_start(
            self.toolbar_busqueda, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_descarga)
        self.box_tube.pack_start(
            event, False, False, 0)

        self.box_tube.pack_start(
            self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(
            self.paneltube, True, True, 0)

        from Widgets import Tube_Player
        self.jamedia = Tube_Player()

        boxbase.pack_start(self.box_tube, True, True, 0)
        boxbase.pack_start(self.jamedia, True, True, 0)
        self.add(boxbase)

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion

        gobject.idle_add(self.__setup_init2)

    def __setup_init2(self):
        """
        Inicializa la aplicación a su estado fundamental.
        """

        self.jamedia.setup_init()
        self.jamedia.pack_standar()
        #self.jamedia.pack_efectos()
        #self.jamedia.switch_reproductor(
        #    None, "JAMediaReproductor")

        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()

        map(self.__ocultar, [
            self.toolbar_descarga,
            self.alerta_busqueda])

        if self.pistas:
            self.jamedia.set_nueva_lista(self.pistas)
            self.__switch(None, 'jamedia')

        else:
            self.__switch(None, 'jamediatube')

        self.paneltube.encontrados.drag_dest_set(
            gtk.DEST_DEFAULT_ALL,
            target,
            gtk.gdk.ACTION_MOVE)

        self.paneltube.encontrados.connect(
            "drag-drop", self.__drag_drop)
        self.paneltube.encontrados.drag_dest_add_uri_targets()

        self.paneltube.descargar.drag_dest_set(
            gtk.DEST_DEFAULT_ALL,
            target,
            gtk.gdk.ACTION_MOVE)

        self.paneltube.descargar.connect(
            "drag-drop", self.__drag_drop)
        self.paneltube.descargar.drag_dest_add_uri_targets()

        self.connect("delete-event",
            self.__salir)
        self.toolbar.connect('salir',
            self.__confirmar_salir)
        self.toolbar_salir.connect(
            'salir', self.__salir)
        self.toolbar.connect(
            'switch', self.__switch, 'jamedia')
        self.jamedia.connect(
            'salir', self.__switch, 'jamediatube')
        self.toolbar_busqueda.connect(
            "comenzar_busqueda", self.__comenzar_busqueda)
        self.paneltube.connect('download',
            self.__run_download)
        self.paneltube.connect('open_shelve_list',
            self.__open_shelve_list)
        self.toolbar_descarga.connect('end',
            self.__run_download)
        self.paneltube.connect("cancel_toolbar",
            self.__cancel_toolbar)

    def __cancel_toolbar(self, widget=None):

        self.toolbar_salir.cancelar()

    def __open_shelve_list(self, widget, shelve_list, toolbarwidget):
        """
        Carga una lista de videos almacenada en un
        archivo shelve en el area del panel correspondiente
        según que toolbarwidget haya lanzado la señal.
        """

        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)

        destino = False

        if toolbarwidget == self.paneltube.toolbar_encontrados:
            destino = self.paneltube.encontrados

        elif toolbarwidget == self.paneltube.toolbar_descargar:
            destino = self.paneltube.descargar

        objetos = destino.get_children()

        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()

        gobject.idle_add(self.__add_videos, shelve_list, destino)

    def __run_download(self, widget):
        """
        Comienza descarga de un video.
        """

        if self.toolbar_descarga.estado:
            return

        videos = self.paneltube.descargar.get_children()

        if videos:
            videos[0].get_parent().remove(videos[0])
            self.toolbar_descarga.download(videos[0])

        else:
            self.toolbar_descarga.hide()

    def __drag_drop(self, destino, drag_context, x, y, n):
        """
        Ejecuta drop sobre un destino.
        """

        videoitem = gtk.drag_get_source_widget(drag_context)

        if videoitem.get_parent() == destino:
            return

        else:
            # E try siguiente es para evitar problemas cuando:
            # El drag termina luego de que el origen se ha
            # comenzado a descargar y por lo tanto, no tiene padre.
            try:
                videoitem.get_parent().remove(videoitem)
                destino.pack_start(videoitem, False, False, 1)

            except:
                return

            if destino == self.paneltube.descargar:
                text = TipDescargas

            elif destino == self.paneltube.encontrados:
                text = TipEncontrados

            videoitem.set_tooltip_text(text)

    def __comenzar_busqueda(self, widget, palabras):
        """
        Muestra la alerta de busqueda y lanza
        secuencia de busqueda y agregado de videos al panel.
        """

        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)

        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()
        map(self.__mostrar, [self.alerta_busqueda])
        self.alerta_busqueda.label.set_text(
            "Buscando: %s" % (palabras))

        objetos = self.paneltube.encontrados.get_children()

        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()

        gobject.timeout_add(300, self.__lanzar_busqueda, palabras)

    def __lanzar_busqueda(self, palabras):
        """
        Lanza la Búsqueda y comienza secuencia
        que agrega los videos al panel.
        """

        # FIXME: Reparar (Si no hay conexión)
        from JAMediaYoutube import Buscar

        for video in Buscar(palabras):
            self.videos_temp.append(video)

        gobject.idle_add(self.__add_videos, self.videos_temp,
            self.paneltube.encontrados)

        return False

    def __add_videos(self, videos, destino):
        """
        Se crean los video_widgets de videos y
        se agregan al panel, segun destino.
        """

        if len(self.videos_temp) < 1:
            # self.videos_temp contiene solo los videos
            # encontrados en las búsquedas, no los que se cargan
            # desde un archivo.
            map(self.__ocultar, [self.alerta_busqueda])

        if not videos:
            self.paneltube.set_sensitive(True)
            self.toolbar_busqueda.set_sensitive(True)
            return False

        video = videos[0]

        from Widgets import WidgetVideoItem

        videowidget = WidgetVideoItem(video)
        text = TipEncontrados

        if destino == self.paneltube.encontrados:
            text = TipEncontrados

        elif destino == self.paneltube.descargar:
            text = TipDescargas

        videowidget.set_tooltip_text(text)
        videowidget.show_all()

        videowidget.drag_source_set(
            gtk.gdk.BUTTON1_MASK,
            target,
            gtk.gdk.ACTION_MOVE)

        videos.remove(video)
        destino.pack_start(videowidget, False, False, 1)

        texto = "Encontrado: %s" % (video["titulo"])
        if len(texto) > 50:
            texto = str(texto[0:50]) + " . . . "

        self.alerta_busqueda.label.set_text(texto)

        gobject.idle_add(self.__add_videos, videos, destino)

    def __switch(self, widget, valor):
        """
        Cambia entre la vista de descargas y
        la de reproduccion.
        """

        if valor == 'jamediatube':
            map(self.__ocultar, [self.jamedia])
            map(self.__mostrar, [self.box_tube])

        elif valor == 'jamedia':
            map(self.__ocultar, [self.box_tube])
            map(self.__mostrar, [self.jamedia])

    def __ocultar(self, objeto):

        if objeto.get_visible():
            objeto.hide()

    def __mostrar(self, objeto):

        if not objeto.get_visible():
            objeto.show()

    def __confirmar_salir(self, widget=None, senial=None):
        """
        Recibe salir y lo pasa a la toolbar de confirmación.
        """

        self.paneltube.cancel_toolbars_flotantes()

        self.toolbar_salir.run("JAMediaTube")

    def __salir(self, widget=None, senial=None):

        #import commands
        import sys

        #commands.getoutput('killall mplayer')
        gtk.main_quit()
        sys.exit(0)

    def set_pistas(self, pistas):
        """
        Cuando se ejecuta pasandole un archivo.
        """

        self.pistas = pistas
예제 #7
0
class JAMediaTube(gtk.Window):

    def __init__(self):

        gtk.Window.__init__(self)

        self.set_title("JAMediaTube")
        self.set_icon_from_file(os.path.join(BASE_PATH,
            "Iconos", "JAMediaTube.svg"))
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
        self.set_resizable(True)
        self.set_border_width(2)
        self.set_position(gtk.WIN_POS_CENTER)

        self.box_tube = None

        self.toolbar = None
        self.toolbar_busqueda = None
        self.toolbar_descarga = None
        self.toolbar_salir = None
        self.alerta_busqueda = None
        self.paneltube = None

        self.jamedia = None

        self.archivos = []
        self.videos_temp = []

        gobject.idle_add(self.__setup_init)
        print "JAMediaTube process:", os.getpid()

    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """
        boxbase = gtk.VBox()

        self.box_tube = gtk.VBox()
        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("drawingplayer"))
        event.add(self.toolbar)
        self.box_tube.pack_start(event, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_salir)
        self.box_tube.pack_start(event, False, False, 0)

        self.box_tube.pack_start(self.toolbar_busqueda, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_descarga)
        self.box_tube.pack_start(event, False, False, 0)

        self.box_tube.pack_start(self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(self.paneltube, True, True, 0)

        self.jamedia = JAMedia()

        boxbase.pack_start(self.box_tube, True, True, 0)
        boxbase.pack_start(self.jamedia, True, True, 0)
        self.add(boxbase)

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion

        gobject.idle_add(self.__setup_init2)

    def __setup_init2(self):
        """
        Inicializa la aplicación a su estado fundamental.
        """
        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()

        map(self.__ocultar, [self.toolbar_descarga, self.alerta_busqueda])

        if self.archivos:
            self.__switch(None, 'jamedia')
            self.jamedia.base_panel.set_nueva_lista(self.archivos)
            self.archivos = []
        else:
            self.__switch(None, 'jamediatube')

        self.paneltube.encontrados.drag_dest_set(gtk.DEST_DEFAULT_ALL,
            target, gtk.gdk.ACTION_MOVE)

        self.paneltube.encontrados.connect("drag-drop", self.__drag_drop)
        self.paneltube.encontrados.drag_dest_add_uri_targets()

        self.paneltube.descargar.drag_dest_set(gtk.DEST_DEFAULT_ALL,
            target, gtk.gdk.ACTION_MOVE)

        self.paneltube.descargar.connect("drag-drop", self.__drag_drop)
        self.paneltube.descargar.drag_dest_add_uri_targets()

        self.connect("delete-event", self.__salir)
        self.toolbar.connect('salir', self.__confirmar_salir)
        self.toolbar_salir.connect('salir', self.__salir)
        self.toolbar.connect('switch', self.__switch, 'jamedia')
        self.jamedia.connect('salir', self.__switch, 'jamediatube')
        self.toolbar_busqueda.connect("comenzar_busqueda",
            self.__comenzar_busqueda)
        self.paneltube.connect('download', self.__run_download)
        self.paneltube.connect('open_shelve_list', self.__open_shelve_list)
        self.toolbar_descarga.connect('end', self.__run_download)
        self.paneltube.connect("cancel_toolbar", self.__cancel_toolbar)

        self.resize(640, 480)

    def __cancel_toolbar(self, widget=None):
        self.toolbar_salir.cancelar()

    def __open_shelve_list(self, widget, shelve_list, toolbarwidget):
        """
        Carga una lista de videos almacenada en un archivo en el area del
        panel correspondiente según que toolbarwidget haya lanzado la señal.
        """
        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)

        destino = False
        if toolbarwidget == self.paneltube.toolbar_encontrados:
            destino = self.paneltube.encontrados
        elif toolbarwidget == self.paneltube.toolbar_descargar:
            destino = self.paneltube.descargar

        objetos = destino.get_children()
        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()

        gobject.idle_add(self.__add_videos, shelve_list, destino)

    def __run_download(self, widget):
        """
        Comienza descarga de un video.
        """
        if self.toolbar_descarga.estado:
            return

        videos = self.paneltube.descargar.get_children()
        if videos:
            videos[0].get_parent().remove(videos[0])
            self.toolbar_descarga.download(videos[0])
        else:
            self.toolbar_descarga.hide()

    def __drag_drop(self, destino, drag_context, x, y, n):
        """
        Ejecuta drop sobre un destino.
        """
        videoitem = gtk.drag_get_source_widget(drag_context)
        if videoitem.get_parent() == destino:
            return
        else:
            # E try siguiente es para evitar problemas cuando:
            # El drag termina luego de que el origen se ha
            # comenzado a descargar y por lo tanto, no tiene padre.
            try:
                videoitem.get_parent().remove(videoitem)
                destino.pack_start(videoitem, False, False, 1)
            except:
                return

            if destino == self.paneltube.descargar:
                text = TipDescargas
            elif destino == self.paneltube.encontrados:
                text = TipEncontrados

            videoitem.set_tooltip_text(text)

    def __comenzar_busqueda(self, widget, palabras):
        """
        Muestra la alerta de busqueda y lanza secuencia de busqueda y
        agregado de videos al panel.
        """
        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)
        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()
        map(self.__mostrar, [self.alerta_busqueda])
        self.alerta_busqueda.label.set_text("Buscando: %s" % (palabras))

        objetos = self.paneltube.encontrados.get_children()
        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()

        gobject.timeout_add(300, self.__lanzar_busqueda, palabras)

    def __lanzar_busqueda(self, palabras):
        """
        Lanza la Búsqueda y comienza secuencia que agrega los videos al panel.
        """
        # FIXME: Reparar (Si no hay conexión)
        for video in Buscar(palabras):
            self.videos_temp.append(video)
        gobject.idle_add(self.__add_videos, self.videos_temp,
            self.paneltube.encontrados)
        return False

    def __add_videos(self, videos, destino):
        """
        Se crean los video_widgets y se agregan al panel, segun destino.
        """
        if len(self.videos_temp) < 1:
            # self.videos_temp contiene solo los videos
            # encontrados en las búsquedas, no los que se cargan
            # desde un archivo.
            map(self.__ocultar, [self.alerta_busqueda])

        if not videos:
            self.paneltube.set_sensitive(True)
            self.toolbar_busqueda.set_sensitive(True)
            return False

        video = videos[0]
        videowidget = WidgetVideoItem(video)
        text = TipEncontrados

        if destino == self.paneltube.encontrados:
            text = TipEncontrados
        elif destino == self.paneltube.descargar:
            text = TipDescargas

        videowidget.set_tooltip_text(text)
        videowidget.show_all()
        videowidget.drag_source_set(gtk.gdk.BUTTON1_MASK, target,
            gtk.gdk.ACTION_MOVE)
        videos.remove(video)
        destino.pack_start(videowidget, False, False, 1)

        texto = "Encontrado: %s" % (video["titulo"])
        if len(texto) > 50:
            texto = str(texto[0:50]) + " . . . "

        self.alerta_busqueda.label.set_text(texto)
        gobject.idle_add(self.__add_videos, videos, destino)
        return False

    def __switch(self, widget, valor):
        """
        Cambia entre la vista de descargas y la de reproduccion.
        """
        if valor == 'jamediatube':
            map(self.__ocultar, [self.jamedia])
            map(self.__mostrar, [self.box_tube])
        elif valor == 'jamedia':
            map(self.__ocultar, [self.box_tube])
            map(self.__mostrar, [self.jamedia])

    def __ocultar(self, objeto):
        if objeto.get_visible():
            objeto.hide()

    def __mostrar(self, objeto):
        if not objeto.get_visible():
            objeto.show()

    def __confirmar_salir(self, widget=None, senial=None):
        self.paneltube.cancel_toolbars_flotantes()
        self.toolbar_salir.run("JAMediaTube")

    def __salir(self, widget=None, senial=None):
        gtk.main_quit()
        sys.exit(0)

    def set_archivos(self, pistas):
        """
        Cuando se ejecuta pasandole un archivo.
        """
        self.archivos = pistas
예제 #8
0
class JAMediaTube(Gtk.Window):
    """
    JAMediaTube.
    """
    def __init__(self):

        Gtk.Window.__init__(self)

        self.set_title("JAMediaTube")
        self.set_icon_from_file(
            os.path.join(BASE_PATH, "Iconos", "JAMediaTube.svg"))
        self.set_resizable(True)
        self.set_size_request(640, 480)
        self.set_border_width(2)
        self.set_position(Gtk.WindowPosition.CENTER)

        self.box_tube = None

        self.toolbar = None
        self.toolbar_busqueda = None
        self.toolbar_descarga = None
        self.toolbar_salir = None
        self.alerta_busqueda = None
        self.paneltube = None

        #self.socketjamedia = Gtk.Socket()
        #self.jamedia = None

        self.pistas = []

        self.videos_temp = []

        self.__setup_init()

    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """

        from Widgets import Toolbar
        from Widgets import Toolbar_Busqueda
        from Widgets import Toolbar_Descarga
        from Widgets import Alerta_Busqueda

        from PanelTube import PanelTube

        from Widgets import ToolbarSalir

        boxbase = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)
        self.box_tube = Gtk.Box(orientation=Gtk.Orientation.VERTICAL)

        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        self.box_tube.pack_start(self.toolbar, False, False, 0)
        self.box_tube.pack_start(self.toolbar_salir, False, False, 0)
        self.box_tube.pack_start(self.toolbar_busqueda, False, False, 0)
        self.box_tube.pack_start(self.toolbar_descarga, False, False, 0)
        self.box_tube.pack_start(self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(self.paneltube, True, True, 0)

        boxbase.pack_start(self.box_tube, True, True, 0)

        #boxbase.pack_start(self.socketjamedia, True, True, 0)

        self.add(boxbase)

        #from JAMediaTube.Widgets import Tube_Player

        #self.jamedia = Tube_Player()
        #self.socketjamedia.add_id(self.jamedia.get_id())

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion

        GLib.idle_add(self.__setup_init2)

    def __setup_init2(self):
        """
        Inicializa la aplicación a su estado fundamental.
        """

        #self.jamedia.setup_init()
        #self.jamedia.pack_standar()
        #self.jamedia.pack_efectos()
        #self.jamedia.switch_reproductor(
        #    None, "JAMediaReproductor")

        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()

        map(self.__ocultar, [self.toolbar_descarga, self.alerta_busqueda])

        #if self.pistas:
        #    self.jamedia.set_nueva_lista(self.pistas)
        #    self.__switch(None, 'jamedia')

        #else:
        #    self.__switch(None, 'jamediatube')

        self.paneltube.encontrados.drag_dest_set(Gtk.DestDefaults.ALL, target,
                                                 Gdk.DragAction.MOVE)

        self.paneltube.encontrados.connect("drag-drop", self.__drag_drop)
        self.paneltube.encontrados.drag_dest_add_uri_targets()

        self.paneltube.descargar.drag_dest_set(Gtk.DestDefaults.ALL, target,
                                               Gdk.DragAction.MOVE)

        self.paneltube.descargar.connect("drag-drop", self.__drag_drop)
        self.paneltube.descargar.drag_dest_add_uri_targets()

        self.connect("delete-event", self.__salir)
        self.toolbar.connect('salir', self.__confirmar_salir)
        self.toolbar_salir.connect('salir', self.__salir)
        #self.toolbar.connect(
        #    'switch', self.__switch, 'jamedia')
        #self.jamedia.connect(
        #    'salir', self.__switch, 'jamediatube')
        self.toolbar_busqueda.connect("comenzar_busqueda",
                                      self.__comenzar_busqueda)
        self.paneltube.connect('download', self.__run_download)
        self.paneltube.connect('open_shelve_list', self.__open_shelve_list)
        self.toolbar_descarga.connect('end', self.__run_download)
        self.paneltube.connect("cancel_toolbar", self.__cancel_toolbar)

    def __cancel_toolbar(self, widget=None):

        self.toolbar_salir.cancelar()

    def __open_shelve_list(self, widget, shelve_list, toolbarwidget):
        """
        Carga una lista de videos almacenada en un
        archivo shelve en el area del panel correspondiente
        según que toolbarwidget haya lanzado la señal.
        """

        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)

        destino = False

        if toolbarwidget == self.paneltube.toolbar_encontrados:
            destino = self.paneltube.encontrados

        elif toolbarwidget == self.paneltube.toolbar_descargar:
            destino = self.paneltube.descargar

        objetos = destino.get_children()

        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()

        GLib.idle_add(self.__add_videos, shelve_list, destino)

    def __run_download(self, widget):
        """
        Comienza descarga de un video.
        """

        if self.toolbar_descarga.estado:
            return

        videos = self.paneltube.descargar.get_children()

        if videos:
            videos[0].get_parent().remove(videos[0])
            self.toolbar_descarga.download(videos[0])

        else:
            self.toolbar_descarga.hide()

    def __drag_drop(self, destino, drag_context, x, y, n):
        """
        Ejecuta drop sobre un destino.
        """

        videoitem = Gtk.drag_get_source_widget(drag_context)

        if videoitem.get_parent() == destino:
            return

        else:
            # E try siguiente es para evitar problemas cuando:
            # El drag termina luego de que el origen se ha
            # comenzado a descargar y por lo tanto, no tiene padre.
            try:
                videoitem.get_parent().remove(videoitem)
                destino.pack_start(videoitem, False, False, 1)

            except:
                return

            if destino == self.paneltube.descargar:
                text = TipDescargas

            elif destino == self.paneltube.encontrados:
                text = TipEncontrados

            videoitem.set_tooltip_text(text)

    def __comenzar_busqueda(self, widget, palabras):
        """
        Muestra la alerta de busqueda y lanza
        secuencia de busqueda y agregado de videos al panel.
        """

        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)

        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()
        map(self.__mostrar, [self.alerta_busqueda])
        self.alerta_busqueda.label.set_text("Buscando: %s" % (palabras))

        objetos = self.paneltube.encontrados.get_children()

        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()

        GLib.timeout_add(300, self.__lanzar_busqueda, palabras)

    def __lanzar_busqueda(self, palabras):
        """
        Lanza la Búsqueda y comienza secuencia
        que agrega los videos al panel.
        """

        # FIXME: Reparar (Si no hay conexión)
        from JAMediaYoutube import Buscar

        for video in Buscar(palabras):
            self.videos_temp.append(video)

        GLib.idle_add(self.__add_videos, self.videos_temp,
                      self.paneltube.encontrados)

        return False

    def __add_videos(self, videos, destino):
        """
        Se crean los video_widgets de videos y
        se agregan al panel, segun destino.
        """

        if len(self.videos_temp) < 1:
            # self.videos_temp contiene solo los videos
            # encontrados en las búsquedas, no los que se cargan
            # desde un archivo.
            map(self.__ocultar, [self.alerta_busqueda])

        if not videos:
            self.paneltube.set_sensitive(True)
            self.toolbar_busqueda.set_sensitive(True)
            return False

        video = videos[0]

        from Widgets import WidgetVideoItem

        videowidget = WidgetVideoItem(video)
        text = TipEncontrados

        if destino == self.paneltube.encontrados:
            text = TipEncontrados

        elif destino == self.paneltube.descargar:
            text = TipDescargas

        videowidget.set_tooltip_text(text)
        videowidget.show_all()

        videowidget.drag_source_set(Gdk.ModifierType.BUTTON1_MASK, target,
                                    Gdk.DragAction.MOVE)

        # FIXME: Enlentece la aplicación ya que exige procesamiento.
        #archivo = "/tmp/preview%d" % time.time()
        #fileimage, headers = urllib.urlretrieve(
        #   video["previews"][0][0], archivo)
        #pixbuf = GdkPixbuf.Pixbuf.new_from_file_at_size(fileimage,
        #    50, 50)
        #videowidget.drag_source_set_icon_pixbuf(pixbuf)
        #commands.getoutput('rm %s' % (archivo))

        videos.remove(video)
        destino.pack_start(videowidget, False, False, 1)

        texto = "Encontrado: %s" % (video["titulo"])
        if len(texto) > 50:
            texto = str(texto[0:50]) + " . . . "

        self.alerta_busqueda.label.set_text(texto)
        #self.alerta_busqueda.label.set_text(
        #   "Encontrado: %s" % (video["titulo"]))
        #self.get_property('window').invalidate_rect(
        #   self.get_allocation(), True)
        #self.get_property('window').process_updates(True)

        GLib.idle_add(self.__add_videos, videos, destino)

    def set_pistas(self, pistas):
        """
        Cuando se ejecuta pasandole un archivo.
        """

        self.pistas = pistas

    def __switch(self, widget, valor):
        """
        Cambia entre la vista de descargas y
        la de reproduccion.
        """

        if valor == 'jamediatube':
            map(self.__ocultar, [self.socketjamedia])
            map(self.__mostrar, [self.box_tube])

        elif valor == 'jamedia':
            map(self.__ocultar, [self.box_tube])
            map(self.__mostrar, [self.socketjamedia])

    def __ocultar(self, objeto):

        if objeto.get_visible():
            objeto.hide()

    def __mostrar(self, objeto):

        if not objeto.get_visible():
            objeto.show()

    def __confirmar_salir(self, widget=None, senial=None):
        """
        Recibe salir y lo pasa a la toolbar de confirmación.
        """

        self.paneltube.cancel_toolbars_flotantes()

        self.toolbar_salir.run("JAMediaTube")

    def __salir(self, widget=None, senial=None):

        # FIXME: Hay que Mejorar esta forma de salir.
        import commands
        import sys

        commands.getoutput('killall mplayer')
        sys.exit(0)
예제 #9
0
class JAMediaTube(gtk.Window):

    def __init__(self):

        gtk.Window.__init__(self)

        self.set_title("JAMediaTube")
        self.set_icon_from_file(os.path.join(BASE_PATH,
            "Iconos", "JAMediaTube.svg"))
        self.modify_bg(gtk.STATE_NORMAL, get_colors("window"))
        self.set_resizable(True)
        self.set_border_width(2)
        self.set_position(gtk.WIN_POS_CENTER)

        self.box_tube = None

        self.toolbar = None
        self.toolbar_busqueda = None
        self.toolbar_descarga = None
        self.toolbar_salir = None
        self.alerta_busqueda = None
        self.paneltube = None

        self.jamedia = None

        self.archivos = []
        self.buscador = Buscar()

        gobject.idle_add(self.__setup_init)
        print "JAMediaTube process:", os.getpid()

    def __setup_init(self):
        """
        Crea y Empaqueta todo.
        """
        boxbase = gtk.VBox()

        self.box_tube = gtk.VBox()
        self.toolbar = Toolbar()
        self.toolbar_busqueda = Toolbar_Busqueda()
        self.toolbar_descarga = Toolbar_Descarga()
        self.toolbar_salir = ToolbarSalir()
        self.alerta_busqueda = Alerta_Busqueda()
        self.paneltube = PanelTube()

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("drawingplayer"))
        event.add(self.toolbar)
        self.box_tube.pack_start(event, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_salir)
        self.box_tube.pack_start(event, False, False, 0)

        self.box_tube.pack_start(self.toolbar_busqueda, False, False, 0)

        event = gtk.EventBox()
        event.modify_bg(0, get_colors("download"))
        event.add(self.toolbar_descarga)
        self.box_tube.pack_start(event, False, False, 0)

        self.box_tube.pack_start(self.alerta_busqueda, False, False, 0)
        self.box_tube.pack_start(self.paneltube, True, True, 0)

        self.jamedia = JAMedia()

        boxbase.pack_start(self.box_tube, True, True, 0)
        boxbase.pack_start(self.jamedia, True, True, 0)
        self.add(boxbase)

        self.show_all()
        self.realize()

        self.paneltube.set_vista_inicial()  # oculta las toolbarsaccion
        gobject.idle_add(self.__setup_init2)

    def __setup_init2(self):
        """
        Inicializa la aplicación a su estado fundamental.
        """
        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()
        map(self.__ocultar, [self.toolbar_descarga, self.alerta_busqueda])
        if self.archivos:
            self.__switch(None, 'jamedia')
            self.jamedia.base_panel.set_nueva_lista(self.archivos)
            self.archivos = []
        else:
            self.__switch(None, 'jamediatube')

        self.paneltube.encontrados.drag_dest_set(gtk.DEST_DEFAULT_ALL,
            target, gtk.gdk.ACTION_MOVE)

        self.paneltube.encontrados.connect("drag-drop", self.__drag_drop)
        self.paneltube.encontrados.drag_dest_add_uri_targets()

        self.paneltube.descargar.drag_dest_set(gtk.DEST_DEFAULT_ALL,
            target, gtk.gdk.ACTION_MOVE)

        self.paneltube.descargar.connect("drag-drop", self.__drag_drop)
        self.paneltube.descargar.drag_dest_add_uri_targets()

        self.connect("delete-event", self.__salir)
        self.toolbar.connect('salir', self.__confirmar_salir)
        self.toolbar_salir.connect('salir', self.__salir)
        self.toolbar.connect('switch', self.__switch, 'jamedia')
        self.jamedia.connect('salir', self.__switch, 'jamediatube')
        self.toolbar_busqueda.connect("comenzar_busqueda",
            self.__comenzar_busqueda)
        self.paneltube.connect('download', self.__run_download)
        self.paneltube.connect('open_shelve_list', self.__open_shelve_list)
        self.toolbar_descarga.connect('end', self.__run_download)
        self.paneltube.connect("cancel_toolbar", self.__cancel_toolbar)
        self.buscador.connect("encontrado", self.__add_video_encontrado)
        self.buscador.connect("end", self.__end_busqueda)
        self.resize(640, 480)

    def __cancel_toolbar(self, widget=None):
        self.toolbar_salir.cancelar()

    def __open_shelve_list(self, widget, shelve_list, toolbarwidget):
        """
        Carga una lista de videos almacenada en un archivo en el area del
        panel correspondiente según que toolbarwidget haya lanzado la señal.
        """
        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)
        destino = False
        if toolbarwidget == self.paneltube.toolbar_encontrados:
            destino = self.paneltube.encontrados
        elif toolbarwidget == self.paneltube.toolbar_descargar:
            destino = self.paneltube.descargar
        objetos = destino.get_children()
        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()
        gobject.idle_add(self.__add_videos, shelve_list, destino)

    def __run_download(self, widget):
        """
        Comienza descarga de un video.
        """
        if self.toolbar_descarga.estado:
            return
        videos = self.paneltube.descargar.get_children()
        if videos:
            videos[0].get_parent().remove(videos[0])
            self.toolbar_descarga.download(videos[0])
        else:
            self.toolbar_descarga.hide()

    def __drag_drop(self, destino, drag_context, x, y, n):
        """
        Ejecuta drop sobre un destino.
        """
        videoitem = gtk.drag_get_source_widget(drag_context)
        if videoitem.get_parent() == destino:
            return
        else:
            # E try siguiente es para evitar problemas cuando:
            # El drag termina luego de que el origen se ha
            # comenzado a descargar y por lo tanto, no tiene padre.
            try:
                videoitem.get_parent().remove(videoitem)
                destino.pack_start(videoitem, False, False, 1)
            except:
                return
            if destino == self.paneltube.descargar:
                text = TipDescargas
            elif destino == self.paneltube.encontrados:
                text = TipEncontrados
            videoitem.set_tooltip_text(text)

    def __add_video_encontrado(self, buscador, _id, url):
        """
        Cuando el buscador encuentra un video, se agrega al panel.
        """
        video = dict(FEED)
        video["id"] = _id
        video["titulo"] = ""
        video["descripcion"] = ""
        video["categoria"] = ""
        video["url"] = url
        video["duracion"] = 0
        video["previews"] = ""
        self.__add_videos([video], self.paneltube.encontrados, sensitive=False)
        while gtk.events_pending():
            gtk.main_iteration()
        # Para evitar mover videos antes de lanzar actualización de metadatos

    def __end_busqueda(self, buscador):
        """
        Cuando Termina la Búsqueda, se actualizan los widgets de videos.
        """
        self.paneltube.update_widgets_videos_encontrados()
        self.paneltube.set_sensitive(True)

    def __comenzar_busqueda(self, widget, palabras, cantidad):
        """
        Muestra alerta de busqueda y lanza secuencia de busqueda y
        agregado de videos al panel.
        """
        self.paneltube.set_sensitive(False)
        self.toolbar_busqueda.set_sensitive(False)
        self.__cancel_toolbar()
        self.paneltube.cancel_toolbars_flotantes()
        map(self.__mostrar, [self.alerta_busqueda])
        self.alerta_busqueda.label.set_text("Buscando: %s" % (palabras))
        objetos = self.paneltube.encontrados.get_children()
        for objeto in objetos:
            objeto.get_parent().remove(objeto)
            objeto.destroy()
        gobject.timeout_add(300, self.__lanzar_busqueda, palabras, cantidad)

    def __lanzar_busqueda(self, palabras, cantidad):
        """
        Lanza la Búsqueda y comienza secuencia que agrega los videos al panel.
        """
        # FIXME: Reparar (Si no hay conexión)
        self.buscador.buscar(palabras, cantidad)
        return False

    def __add_videos(self, videos, destino, sensitive=True):
        """
        Se crean los video_widgets y se agregan al panel, segun destino.
        """
        if not videos:
            map(self.__ocultar, [self.alerta_busqueda])
            if sensitive:
                self.paneltube.set_sensitive(True)
            self.toolbar_busqueda.set_sensitive(True)
            return False

        video = videos[0]
        videowidget = WidgetVideoItem(video)
        text = TipEncontrados

        if destino == self.paneltube.encontrados:
            text = TipEncontrados
        elif destino == self.paneltube.descargar:
            text = TipDescargas

        videowidget.set_tooltip_text(text)
        videowidget.show_all()
        videowidget.drag_source_set(gtk.gdk.BUTTON1_MASK, target,
            gtk.gdk.ACTION_MOVE)
        videos.remove(video)
        destino.pack_start(videowidget, False, False, 1)

        texto = "Encontrado: %s" % (video["titulo"])
        if len(texto) > 50:
            texto = str(texto[0:50]) + " . . . "

        self.alerta_busqueda.label.set_text(texto)
        gobject.idle_add(self.__add_videos, videos, destino, sensitive)
        return False

    def __switch(self, widget, valor):
        """
        Cambia entre la vista de descargas y la de reproduccion.
        """
        if valor == 'jamediatube':
            map(self.__ocultar, [self.jamedia])
            map(self.__mostrar, [self.box_tube])
        elif valor == 'jamedia':
            map(self.__ocultar, [self.box_tube])
            map(self.__mostrar, [self.jamedia])

    def __ocultar(self, objeto):
        if objeto.get_visible():
            objeto.hide()

    def __mostrar(self, objeto):
        if not objeto.get_visible():
            objeto.show()

    def __confirmar_salir(self, widget=None, senial=None):
        self.paneltube.cancel_toolbars_flotantes()
        self.toolbar_salir.run("JAMediaTube")

    def __salir(self, widget=None, senial=None):
        gtk.main_quit()
        sys.exit(0)

    def set_archivos(self, pistas):
        """
        Cuando se ejecuta pasandole archivos como parámetros.
        """
        self.archivos = pistas