Hoy he lanzado una nueva versión de Z88Transfer. Los cambios observables por los usuarios son más bien pequeños: ahora muestra una barra de progreso durante la transferencia, permite transferir varios archivos de una sola tacada, comprueba más exhaustivamente si un archivo nuevo sobreescribe a uno viejo, y, sobre todo, simplifica muchísimo su uso en windows.
Sin embargo, por dentro los cambios son mucho más radicales, pues prácticamente he reescrito la aplicación. Las razones han sido tres:
- Por un lado, varias partes del código estaban muy sucias y eran muy poco modulares.
- Por otra, quería internacionalizar la aplicación, para poder traducirla a otros idiomas (aunque en esta versión todavía no hay traducciones).
- Por último, quería organizar en condiciones el código de las ventanas poniendo los manejadores de eventos de cada una en su propia clase (haciéndolo así más modular mantenible), además de simplificarlo usando diálogos para los distintos mensajes que pueden aparecer, en lugar de ventanas modales.
La última razón es especialmente importante. En el caso de SuperShow, el código era ya bastante bueno pues es la última aplicación que he escrito hasta la fecha, pero en el caso de Z88Transfer el código era realmente sucio, pues fue la primera aplicación que hice con PyGTK. Sin embargo, gracias a que es una aplicación relativamente sencilla, el código aún era razonable (la transferencia de ficheros y la conversión de formatos van en sendas clases separadas, lo que simplificó la reescritura).
¿Y a qué viene ésto? Pues viene porque también estoy reescribiendo el código de DeVeDe. Cuando comencé a escribir con PyGTK no sabía como generar una única ventana ni como conectar los eventos de ésta con métodos de una clase, pues la documentación del módulo PyGlade era escasa, por no decir nula. El resultado fue que la única manera que tenía de programar era generando una instancia de absolutamente todas las ventanas disponibles en el archivo de Glade, y metiendo todas las funciones de eventos directamente en un único fichero, lo que dio lugar a un código… bueno, llamémoslo caótico (por ser benévolo conmigo mismo), y muy poco mantenible.
Ahora lo veo en retrospectiva y me parece increible que haya sido capaz de escalar el código original de DeVeDe hasta el nivel actual, aunque siendo yo el programador supongo que no tiene mucho mérito. El que sí que tiene mérito es, sin duda, Peter Gill, que lo revisó y modificó para que funcionase también en windows. Un código que fue escrito originalmente como una solución chapucera y rápida para hacerle con comodidad a mi madre una pequeña colección de DVDs con los programas de Arguiñano que bajaba de la mula.
En estos momentos ya he reescrito toda la parte de conversión de vídeos y de generación de la imagen de DVD usando una orientación a objetos bastante razonable, y posiblemente lance una versión sólo con esas modificaciones, pues el nuevo código debería ser mucho más resistente a fallos tontos (el propio Peter, cuando lo revisó para asegurarse de que funcionase en Windows, comentó que sería una tarea muchísimo más sencilla gracias a la nueva arquitectura). El siguiente paso será cambiar a una clase independiente todo el código de la ventana de propiedades de los vídeos, para permitir añadir con más facilidad nuevas opciones de codificación. Por último, meteré en su propia clase la ventana principal y pondré la ventana de selección de tipo de disco como un diálogo. Entonces podré dar por terminada la refactorización del código y seguir añadiendo cosas nuevas.