Nueva dirección - New location

Modificando amulecmd

Llevo tiempo usando amule para mis descargas y casi siempre he estado satisfecho, pero como siempre se puede ir un poco más allá, desde que la gente de aMule sacó un modelo cliente(demonio)/servidor de su programa decidí usarlo. Lo que pasa es que no me gustaba demasiado eso de tener que escribir "show DL" a cada vez que quería ver algo y la verdad es que el buscador que hay en amulecmd es muy pobre, así que al final uso amulegui para buscar y amulecmd para ver como van mis descargas.
Finalmente me decidí a modificar el asunto para que presentase resultados medianamente bonitos y sin tener que escribir nada. La idea es crear un "amule_ver_descargas".

Todo el trabajo se ha realizado sobre aMule-2.1.3
La parte de programación no fue "demasiado difícil", lo más fue entender un poco como estaba hecho el código y buscar las partes a modificar.
Lo primero que he cambiado está en el archivo TextClient.cpp, si buscamos un poco veremos que por las lineas 650 se forma una cadena con lo que se va a mostrar al pedir la información de las descargas. La idea es cambiar esto sin más.

Lo siguiente era obviar la consola. Buceando un poco (hacia atrás en en el flujo) encontramos:
void CaMuleExternalConnector::TextShell(const wxString &prompt) (Línea 350+-).
Esta función simplemente toma una cadena de stdin a través de GetCommand y pasa la info (como sea que lo haga) de lo que se ha tecleado, simplemente forzamos la cadena del buffer a "show DL" siempre y evitamos que pase por GetCommmand. Además, limpiamos la pantalla (llamada simple y sencillota a system, - no necesitamos popen ni nada del estilo-) y esperamos 10 segundos entre cada refresco... y ya está ahora vamos a compilar.

Cabe decir que aquí he realizado el trabajo sobre una versión parcheada del código, no se si afecta la verdad, pero por si acaso aquí está el parche, lo aplicamos en el directorio src, claro:
patch -p1 < aMule-wx.patch\?rev\=1.2


Ahora para compilar podemos hacer un ./configure --enable-amulecmd && make, pero, si como a mi, os falla o simplemente no queréis esperar todo el proceso podemos compilar solo lo que necesitamos.
Primero hacemos el objeto de ExternalConnector.cpp:
if g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/local/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread -DwxUSE_GUI=0 -I./libs -Ilibs -DEC_REMOTE -DECSOCKET_USE_EVENTS=0 -DUSE_EMBEDDED_CRYPTO -W -Wall -Wshadow -Wundef -O2 -MT amulecmd-ExternalConnector.o -MD -MP -MF ".deps/amulecmd-ExternalConnector.Tpo" -c -o amulecmd-ExternalConnector.o `test -f 'ExternalConnector.cpp' || echo './'`ExternalConnector.cpp; \
then mv -f ".deps/amulecmd-ExternalConnector.Tpo" ".deps/amulecmd-ExternalConnector.Po"; else rm -f ".deps/amulecmd-ExternalConnector.Tpo"; fi


Luego el objeto de TextClient.cpp:
if g++ -DHAVE_CONFIG_H -I. -I. -I.. -I/usr/local/lib/wx/include/gtk2-unicode-release-2.8 -I/usr/local/include/wx-2.8 -D_FILE_OFFSET_BITS=64 -D_LARGE_FILES -D__WXGTK__ -pthread -DwxUSE_GUI=0 -I./libs -Ilibs -DEC_REMOTE -DECSOCKET_USE_EVENTS=0 -DUSE_EMBEDDED_CRYPTO -W -Wall -Wshadow -Wundef -O2 -MT amulecmd-TextClient.o -MD -MP -MF ".deps/amulecmd-TextClient.Tpo" -c -o amulecmd-TextClient.o `test -f 'TextClient.cpp' || echo './'`TextClient.cpp; then mv -f ".deps/amulecmd-TextClient.Tpo" ".deps/amulecmd-TextClient.Po"; else rm -f ".deps/amulecmd-TextClient.Tpo"; fi


Y finalmente el binario (he tenido que quitar unas flags que no me queria g++ en mi máquina):
g++ -DUSE_EMBEDDED_CRYPTO -W -Wall -Wshadow -Wundef -g -ggdb -fno-inline -D__DEBUG__ -fmessage-length=0 -D_GLIBCXX_DEBUG -D_GLIBCXX_DEBUG_PEDANTIC -O2 -pg -pg -lpthread -o amulecmd amulecmd-TextClient.o amulecmd-ExternalConnector.o amulecmd-OtherFunctions.o -Llibs/common -Llibs/ec -lmulecommon -lec -pthread -L/usr/X11R6/lib -lwx_baseu_net-2.8 -lwx_baseu-2.8 -lz


Las tres líneas las he sacado de la compilación de aMule grepeando lo necesario, sin más y están aquí condensadas.

Finalmente aquí y aquí están los archivos modificados, van directos a la carpeta src, con el resto de fuentes.
Y un par de capturas, del antes:

y el después: