La semana del slider y de git
Bueno. Pues el lunes comencé con el slider, el punto #3 de la entrada anterior (el punto #1 lo hice durante el fin de semana, y el #2 prefiero guardármelo para más tarde).
Todo iba bien, no parecía complicado en exceso. En el lado del motor de reproducción (basado en GStreamer), una llamada a gst_element_seek_simple() en su método set_position(). En el lado de la interfaz, hay que conectarse a las señales sliderPressed(), sliderMoved() y sliderReleased() del slider. Cuando llega esta última, hay que invocar al método set_position() del motor; en sliderMoved() hay que actualizar el texto de las etiquetas en la barra de estado (para que haya indicación visual de la posición a la que se está cambiando).
Pero, no podía ser de otra manera, surgió un problema:
gst_element_seek_simple() es asíncrono, es decir, retorna
inmediatamente, antes incluso de que la búsqueda se haya realizado. Esto
produce que, una vez el usuario suelta el slider, éste vuelva durante un
instante a su posición original, para seguir con la nueva a
continuación. La solución: conectarse al bus GStreamer para recibir
notificación de cuándo se ha realizado de verdad la búsqueda, y no
permitir al slider actualizar su posición hasta entonces. Es más código,
claro, pero se hace y punto. ;-)
Pero, de nuevo, problemas: si hacía esto, el QTimerWithPause que
utilizaba para actualizar segundo a segundo la barra de estado (y que
pausaba hasta que se realizaba la búsqueda) parecía quedarse congelado
tras reiniciarlo, o sus señales no llegaban a la barra, o qué sé yo.
Estuve todo el lunes peleándome con esto, y no conseguí llegar a ningún
sitio. Y me bloqueé. Y cuando me bloqueo no soy capaz de ser creativo y
buscar otras soluciones, así que me puse a hacer otras cosas (ver
abajo). Ayer, por fin, me sentí desbloqueado, y con fuerzas para atacar
de nuevo el problema. Y encontré una solución (conectar y desconectar la
señal del timer, en lugar de pausarlo). Tarea 559 terminada. \o/
El martes encontré otras tareas con las que desbloquearme. Por un artículo que leí, me decidí a probar Git, el sistema de control de versiones creado por Linus Torvalds. Explico mis experiencias en esta entrada de mi blog (en inglés).
Para seguir probándolo un poco más extensivamente, quise convertir algunos de mis repositorios privados de Bazaar a Git. Para ello, la manera más rápida es usar git-fast-import y un frontend para Bazaar. Como dicho frontend no existía, lo escribí.
¿Mi impresión sobre git? Lo que dicen en este comentario:
Aprender git es como aprender vi: supone un paradigma radicalmente diferente del de cualquier otro sistema de control de versiones o editor que puedas conocer. Pero una vez que superas ese problema, no querrás volver a los anteriores. Nunca.
Y uno es usuario de vim desde hace 7 años...
Ahora, a portar la barra de estado a KDE4!