domingo, 25 de septiembre de 2011

Integración de JDownloader en Unity

Unity tiene la cualidad de poder mostrar en el icono de una aplicación una barra de progreso, un contador y un menú contextual. Éste es una aplicación para poder agregar estas características.


Instalación

  En primer lugar se necesita instalar JDownloader. Recomiendo que para ello utilicéis el repositorio oficial. Para instalar este añadido, he creado un repositorio para poder almacenar todas las aplicaciones y plugins de este blog ppa:narfss/proyectobs. Por lo tanto, ahora es mucho más fácil la instalación, tan solo abrir una terminal (aunque no es el único metodo, si que es el más rapido).
  • Agregar repositorios:
    sudo add-apt-repository ppa:narfss/proyectobs
  • Actualizar información de repositorios:
    sudo apt-get update
  • Instalar unity-Jdownloader:
    sudo apt-get install unity-jdownloader
Por útimo, iniciar Jdownloader (con cualquier lanzador) y activar el control remoto. Entrar en la pestaña de Configuración, dentro del apartado "Plugins y Add-ons". Entre los elementos de la lista validar "JD Remote Control", asegurar que el puerto es el 10.025.

Uso

  Con las instalaciones citadas completadas ahora se podrán encontrar dos lanzadores para JDownloader denominados "JDownloader" y "Unity-JDownloader". Como es de imaginar el segundo es el que dará a la aplicación las características nuevas. 

Características

  Éstas son las características actuales que aporta esta aplicación:

  1. Contador: Pese a que la idea inicial de estos contadores es poder llevar una cuenta, en mi caso he preferido mostrar la velocidad de descarga. Me parece más interesante.
  2. Progreso: La barra de progreso mostrará el porcentaje descargado de todos los paquetes (descargándose, completados o detenidos) que se encuentren en la lista.
  3. Botones Play y Pause: Al hacer click derecho en el menú contextual aparecen las opciones play y pause, con semejante funcionalidad que en el programa.
  4. Lista paquetes: En el menú contextual aparecerá la lista de paquetes, con su progreso actual.

  5. Notificado: Concluida una descarga se muestra un mensaje de sistema con la información.
Configuración y otras opciones

Llegadas algunas peticiones he actualizado con dos nuevos posibles parámetros.

Para añadir cualquiera de estos debéis de editar el archivo (o una copia que guardareis en vuestro home en .usr/share/applications) el original lo encontrareis en /usr/share/applications/unity-jdownloader.desktop

En la linea 7, podréis añadir estas opciones.
Exec=unity-jdownloader
  • --jd /PATH/TO/jd.sh
    Muchos usuarios habían hecho la instalación por medio del archivo jd.sh, con este parámetro podrán especificar su ruta, aunque continuo recomendando la instalación por ppa.
  • --sound /PATH/TO/sonido.wav
    Por defecto las notificaciones no tienen ningun sonido. Sabiendo que algunos hechan de menos las alertas sonoras he habilitado una manera de specificar una ruta a un archivo de audio wav.
Ejemplo completo de como quedaria la linea 7:
Exec=unity-jdownloader --jd /home/narf/.jd.sh --sound /home/narf/Descargas/audio.wav
 
Futuras características

Por ahora la aplicación funciona de una forma local, por lo que JDownloader no puede estar en otro ordenador, pero he estado preparando esa posibilidad, también el poder agregar los links desde el menú contextual. Ya que no podre hacer uso de esas características por ahora he preferido aplazarlas a otro momento en el cual pueda probar.

Bugs & features
  • En caso de mantener el menú contextual un tiempo prolongado las entradas referentes a los paquetes en descarga desaparecen. Esto es debido a que se actualizan como nuevas entradas, buscare una solución más limpia.
Modificaciones obosoletas

Tras la aparicion en otros blogs he visto que varios usuarios preguntan que hacer si habian instalado JDownloader con el archivo jd.sh, aqui van posibles soluciones que aun no he podido probar:
  • Crear un enlace solido (Andrew):
    sudo ln -s /PATH/TO/jd.sh /usr/bin/jdownloader
  • Modificar el archivo de ejecución (por Miloš Jakovljević):
    sudo gedit /usr/bin/unity-jdownloader
    y la linea 37 modificarla de:
    program="jdownloader"
    a:
    program="/PATH/TO/jd.sh"

32 comentarios:

  1. Es extraño, al intentar instalar unity-jdownloader desde repos me da el siguiente error:

    Leyendo listas de paquetes... Hecho
    Creando árbol de dependencias
    Leyendo la información de estado... Hecho
    No se pudieron instalar algunos paquetes. Esto puede significar que
    usted pidió una situación imposible o, si está usando la distribución
    inestable, que algunos paquetes necesarios no han sido creados o han
    sido movidos fuera de Incoming.
    La siguiente información puede ayudar a resolver la situación:

    Los siguientes paquetes tienen dependencias incumplidas:
    unity-jdownloader:i386 : Depende de: python:i386 (>= 2.6) pero no es instalable
    E: No se han podido corregir los problemas; ha retenido paquetes rotos.

    Obviamente tengo python instalado, la versión 2.6 y 2.7... ¿alguna solución para esto?

    Saludos, y gracias por vuestro trabajo.

    ResponderEliminar
  2. @dex87, ayer estube actualizando el repositorio para que estubiera disponible para oneiric, y hoy mismo he enviado una actualización (1.8). Y aun estoy reparando pequeños fallos de funcionamiento a medida que lo uso y encuentro tiempo. Intentalo de nuevo por si hubiera habido algun error entre versiones.

    Acabo de instalarlo por si acaso en un netbook de 32bits, recien instalado oneiric. Y se ha instalado sin problemas. La dependencia es solo con python y parece ser que viene por defecto instalado en todos los ubuntu.

    ¿tu sistema no sera por casualidad de 64? No los he adaptado para esa arquitectura aun.

    ResponderEliminar
  3. En efecto... es 64 bits... perdón por una pregunta tan obvia pero la euforia me hizo despistarme... Espero ansioso! Saludos y muchas gracias.

    ResponderEliminar
  4. @dex87 Ya he podido hacer los cambios necesarios para que funcione en amd64. Lo he probado en un live cd asi que no tendras problemas en instalarlo.

    Aun queda un bug por el cual no desaparecen las entradas de la lista, no afecta la funcionamiento, lo solucionare cuando pueda.

    Disfruta de la aplicación.

    ResponderEliminar
  5. Buenas, me gusta mucho la integracion queda superelegante, lo unico que no entiendo que tiene que ver el puerto? o el jdownloader-remote? Un saludo y gracias de nuevo.

    ResponderEliminar
  6. @Anonimo Jdownloader-remote es un plugin Jdownloader que crea un servicio web para poder controlar la aplicación.
    Algo así como una dirección web a tu ordenador que si la visitas conlleva una acción.

    Todos los ordenadores tienen una dirección ip que lleva a si mismos http://127.0.0.1 estando en el mismo . Por otro lado también tienes una IP que te da el router, esta podría ser visitada desde cualquier ordenador de la red de tu casa (por ejemplo: 182.168.1.186). Y por ultimo cuando tu ordenador se conecta a internet también tiene una dirección ip que puede ser visitada desde cualquier sitio del mundo (por ejemplo: 85.56.140.25).

    Para diferenciar servicios se asigna un puerto (podrías tener varios programas con un servicio web, tal vez un gestor de torrents, o un servidor de paginas o mil cosas) en el caso de este plugin el puerto es 10025.

    ¿Todo esto que conlleva?
    Pues con una dirección compuesta por una ip y un puerto se podría acceder al JDownloader, si desde el ordenador tiene acceso a este.

    Desde el mismo ordenador en el que esta en ejecución:
    http://127.0.0.1:10025/help
    también funciona así:
    http://localhost:10025/help

    Desde otro ordenador conectado a la red de casa, si el router lo permite:
    http://192.186.1.186:10025/help

    O si el router ha sido configurado para que el puerto sea comunicado con el exterior (de fabrica suelen venir todos cortados por seguridad), podrías acceder desde cualquier ordenador conectado a internet.

    Como ves un servicio web proporciona muchas opciones y libertad, de una manera muy sencilla. Se que me he enrollado explicandolo, pero cuando tengo tiempo prefiero explicarlo todo con detalle.

    Me alegra que te guste. Muchas gracias.

    ResponderEliminar
  7. Que tal. Sigo el blog Web Upd8 y acaba de aparecer una entrada comentando sobre este interesante plugin para JDowloader. Pues, antes que nada, felicitaciones, aparecer ahí ya es un reconocimiento.
    Tengo una duda. Uno de los viejos requerimientos no satisfechos de JDownloader es la incapacidad de éste de avisar -con alguna alarma o sonido- que se está pidiendo completar un "captcha" para continuar con el siguiente archivo.
    ¿Este plugin, permite eso?
    Si no fuese el caso, el aviso que implementa este plugin tras haber completado un archivo, ¿es sólo visual o también sonoro?
    Imagino que ya puedes ver por dónde va la necesidad.
    Gracias y felicitaciones por lo hecho ya.

    ResponderEliminar
  8. Gracias @Fer, la verdad es que me siento orgulloso. No solo por aparecer, si no porque además me han encontrado por otra vía y les ha parecido interesante como para hacer ellos mismos una guia.

    En cuanto a las preguntas:
    Por ahora como esta que hecho no tengo método para saber si es requerido algún capchat. También me interesa ese tema, así que revisare si existe alguna posibilidad.

    En cuanto a un sonido con la descarga concluida, en la actual versión solo es visual, pero el sonido con una notificación ya la tengo listo en otra aplicación. Así que buscare un sonido agradable y la actualizare.

    ResponderEliminar
  9. excelente extension.,,, gracias a ella he resuelto todos los problemas de jdownloader y su mala integración en unity....Muchas gracias por tu trabajo

    ResponderEliminar
  10. He agregado dos características nuevas. Una para solventar los problemas de algunos con instalación manual y una petición de poner sonidos que ya tenia en mente y @Fer me recordó.

    Por otro lado @Fer, definitivamente con esta aplicación no tengo forma de hacer las alertas de los captchas.

    Ahora faltaría que algún día reorganice su estructura interna a una forma de objeto, al principio solo era un script muy simple que mostraba una notificación con las descargas completas.

    ResponderEliminar
  11. buen trabajo!

    esperando el deb para 64bits...

    gracias

    ResponderEliminar
  12. @ppjose El .deb debería servir para cualquier arquitectura. Lo probé yo mismo en una versión anterior.
    Inténtalo de nuevo, avísame si no es así y hubiera pasado algo.

    ResponderEliminar
  13. Gracias @Narf, lo probaré ahora mismo :-)

    ResponderEliminar
  14. he forzado la instalación pero no funciona...

    gracias!

    jstyle@tron:~$ sudo dpkg -i --force-architecture /home/jstyle/Downloads/unity-jdownloader_0.2-1ubuntu1.5_i386.deb
    [sudo] password for jstyle:
    dpkg: warning: overriding problem because --force enabled:
    package architecture (i386) does not match system (amd64)
    Selecting previously deselected package unity-jdownloader:i386.
    (Reading database ... 174299 files and directories currently installed.)
    Unpacking unity-jdownloader:i386 (from .../unity-jdownloader_0.2-1ubuntu1.5_i386.deb) ...
    dpkg: dependency problems prevent configuration of unity-jdownloader:i386:
    unity-jdownloader:i386 depends on python (>= 2.6).
    dpkg: error processing unity-jdownloader:i386 (--install):
    dependency problems - leaving unconfigured
    Processing triggers for bamfdaemon ...
    Rebuilding /usr/share/applications/bamf.index...
    Processing triggers for desktop-file-utils ...
    Processing triggers for python-gmenu ...
    Rebuilding /usr/share/applications/desktop.en_US.utf8.cache...
    Processing triggers for python-support ...
    Errors were encountered while processing:
    unity-jdownloader:i386


    jstyle@tron:~$ unity-jdownloader
    Gtk-Message: Failed to load module "canberra-gtk-module"
    /usr/lib/pymodules/python2.7/gtk-2.0/gtk/__init__.py:40: Warning: specified class size for type `PyGtkGenericCellRenderer' is smaller than the parent type's `GtkCellRenderer' class size
    from gtk import _gtk
    /usr/lib/pymodules/python2.7/gtk-2.0/gtk/__init__.py:40: Warning: g_type_get_qdata: assertion `node != NULL' failed
    from gtk import _gtk
    /usr/lib/pymodules/python2.7/gtk-2.0/gtk/__init__.py:40: Warning: g_ascii_strncasecmp: assertion `s2 != NULL' failed
    from gtk import _gtk
    Segmentation fault

    ResponderEliminar
  15. @ppjose Ya se que pasa, es una versión antigua de natty la que estas tratando de instalar, por aquel entonces no funcionaba en todas las arquitecturas.

    Mientras hago las pruebas para actualizarlo, aquí tienes el código fuente de la ultima versión, que deberías de poder instalar a mano sin problemas:

    http://dl.dropbox.com/u/1879753/Proyecto%20Boring%20Sunday/Unity-JDownloader/unity-jdownloader-0.2.tar.gz

    Descomprime, instala "sudo make install" y instalar librerías necesarias "sudo apt-get install python-pygame"

    ResponderEliminar
  16. hecho, pero me saca este error y no lo lanza

    gracias mil!

    Traceback (most recent call last):
    File "/usr/bin/unity-jdownloader", line 59, in
    jdownloader_pid, _, _, _ = GLib.spawn_async(command,flags=flags)#(None,command,None,flags, None, None)
    TypeError: function() got an unexpected keyword argument 'flags'

    ResponderEliminar
  17. @ppjose, vale creo que es un cambio que sufrió la librería entre las distribuciones. Lo he modificado en el tar.gz anterior.
    Pero no quiero que te marees, montare un live y haré las pruebas yo mismo. Avisare cuando lo actualice.

    Y disculpa por haber dejado olvidada la versión de natty, aun estoy dominando el ppa.

    ResponderEliminar
  18. ok, gracias por el curro que te pegas.

    Si lo arreglas y haces un nuevo deb para ambas arquitecturas es mejor que sea *_all.deb y que no haga falta forzar la instalación en 64bits, supongo que no será dificil empaquetar así el deb, pero lo desconozco.

    salu2

    ResponderEliminar
  19. @ppjose Ya están disponibles para Natty y Oneiric la reversión 14, para cualquier arquitectura.

    Todo lo que a ocurrido se debe a que con la actualización de distribución de ubuntu olvide una versión obsoleta en la distribución anterior (la cual fue anterior a la disponibilidad en todas las arquitecturas, ni mejoras de su funcionamiento).

    Ahora ambas distribuciones tienen el mismo código fuente pese a los cambios en librerías funcionando en cualquier arquitectura.

    Siento los contratiempos, ahora todo marchara sobre ruedas.

    ResponderEliminar
  20. hola de nuevo xD

    lo he instalado desde el ppa ya... me arranca pero no veo cambios en el icono del launcher...es exactamente el mismo que lanzando jdownloader normal.

    tengo activado el plugin remote control y funcionando en el puerto por defecto, comprobado desde el navegador.

    perdona por darte la vara xD

    alguna pista?? de que puede estar pasando? el jdownloader en su día lo instalé desde PPA (un deb)

    salu2! y gracias!

    ResponderEliminar
  21. Me pasa lo mismo que a "ppjose"
    Ya tengo instalado el jdownloader desde ppa agrego el unity-jdownloader, hago lo necesario en complementos y no pasa nada... alguna idea?
    version 11.04 64 bits
    kernel 2.6.38-13-generic

    Saludos

    ResponderEliminar
  22. ERROR:root:Could not find any typelib for Unity
    Traceback (most recent call last):
    File "/usr/bin/unity-jdownloader", line 4, in
    from gi.repository import GObject, Unity, Notify, Dbusmenu, GLib
    ImportError: cannot import name Unity

    ResponderEliminar
  23. @ppjose @juanito
    Ya he hecho las pruebas en un live cd para tener el sistema limpio, es necesaria la librería "gir1.2-unity-3.0" en Ubuntu 11.04, en 11.10 viene por defecto la versión 4.0.

    Ahora mismo tratare de hacer los cambios para que sea una librería requerida, pero enviar un cambio al ppa se toma mucho tiempo.

    Ya esta ^^ nada como probar en un live.

    ResponderEliminar
  24. Hola,

    actualizado a la última versión del deb (gir1.2-unity-3.0 ya lo tenía instalado) sigue haciendo lo mismo, no me va no se porque la verdad... me lanza el jdownloader normal es como si no fuese más que un acceso directo si nada más... aquí van mis .desktop por si vale de algo.

    [Desktop Entry]
    Name=JDownloader
    Categories=Network;FileTransfer
    Exec=jdownloader
    Icon=jdownloader
    Terminal=false
    Type=Application
    StartupWMClass=jd-Main

    #!/usr/bin/env xdg-open

    [Desktop Entry]
    Encoding=UTF-8
    Name=Unity-JDownloader
    Comment=Download Manager
    Exec=unity-jdownloader
    Icon=jdownloader
    Terminal=false
    Type=Application
    Categories=GNOME;Network;FileTransfer
    StartupNotify=True
    StartupWMClass=jd-Main

    Name[es_ES]=Unity-JDownloader
    Comment[es_ES]=Download Manager

    gracias!

    ResponderEliminar
  25. ejecutandolo desde consola....son los únicos print que veo... no veo que haga el de "print "[unity-jdownloader] Comienza Unity-Jdownloader en "+url"


    [unity-jdownloader] Run
    [unity-jdownloader] Run
    [unity-jdownloader] Run
    [unity-jdownloader] JDownloader exited with status 0, exiting.
    [unity-jdownloader] Finalizando demonio
    [unity-jdownloader] Final del script

    salu2!

    ResponderEliminar
  26. una ultima cosa jeje, perdona...

    [unity-jdownloader] Run
    0 % - Enlace Lost 5x04.samuelro.html
    [unity-jdownloader] Run
    100 % - Enlace Lost 5x04.samuelro.html

    da la impresión de que funciona realmente pero falla la creación de las quicklist y demás del icono en el dock...

    salu2!

    ResponderEliminar
  27. Al fin he dado con el problema, aunque no con la solución.
    Resulta que siempre por costumbre agrego el icono de unity-jdownloader a la barra de lanzadores dejándolo fijo.

    He podido ver que si se ejecuta unity-jdownloader de diferentes maneras ocurren cosas diferentes:
    - Desde una terminal sin el icono fijo: Aparece un icono de interrogación y denomina a la ventana win0, y por lo tanto nada de información en el.
    - Desde el menú unity o ejecución sin el icono fijo: no aparece ningún icono, como es de imaginar no aparece nada.
    - Agregando el icono al launcher: Todo funciona bien.

    En Ubuntu 11.10 funciona correctamente en cualquier caso.

    Por favor @ppjose prueba si estoy en lo cierto.
    Por ahora no se como hacer que funcionen para aquellos que no tienen fijo el icono.

    ResponderEliminar
  28. Can you update your ppa to work with Ubuntu 12.10? Pleasee

    ResponderEliminar
  29. Estupendo plug-in. Lo he estado utilizando con 12.04 pero ahora he actualizada a 12.10 y no he conseguido que funcione.

    ResponderEliminar
  30. Hola, tengo que disculparme, actualmente me he mudado, estoy lejos de casa y vine con poco "equipaje" :(

    Tratare de tenerlo listo cuando pueda.

    Hello, I have to apologize, now I've moved away from home. Without my computer and other data :(

    I'll try to have it ready as soon as posible.

    ResponderEliminar
  31. Any news on 12.10 support?

    ResponderEliminar
  32. Hay esperanza de una versión que funcione con jdownloader2 ?

    ResponderEliminar