dissabte, febrer 16

 

Modificant l'amsn

A vegades trobem coses en alguns programes que no ens acaben d'agradar i ens agradaria personalitzar-ho. En segons quins programes, tot i tenir un munt d'opcions, no podem o no trobem com fer que es comporti com a nosaltres ens agradaria. És en aquest cas quan va molt bé disposar del codi font del programa.

En aquest cas us parlaré del programa amsn (Alvaro's messenger XD), un clon del programa windows live messenger. El que vull fer és que aquest programa no em mostri una finestra de notificació (aquella que surt a sota a la dreta dient tal contacta ha iniciat sessió) quan es connecti un contacte que estigui blocat però que sí estigui a la meva llista de contactes.

El primer pas és esbrinar en quin llenguatge està escrit l'amsn. La web del programa és http://www.amsn-project.net/ i el codi està a http://www.amsn-project.net/download.php. Allà expliquen que està escrit en tcl i que utilitzen tk pel tema gràfic. Tampoc l'aprendrem gaire, que no fa falta pel que volem fer.

El primer que volem saber és si un contacte està blocat. Mirant la API de l'amsn http://amsn.sourceforge.net/devwiki/tiki-index.php?page=AMSN+API i mirant les preguntes freqüents http://www.amsn-project.net/wiki/Frequently_Asked_Questions veiem que hi ha una funció anomenada getLists:

proc getLists {user_login}

Returns a list with the lists the user belongs to (AL, BL, FL, RL).
i a les PMF:
Allow List (AL), Block List (BL), Forward or Contact List (FL) and Reverse List (RL).
Bé, més o menys ja ho tenim, però on posem el codi?
Sabem que surt un missatge on posa tal persona s'acaba de connectar.

Així que busquem aquesta cadena al codi, cosa que ens porta al fitxer langca al directori lang on hi ha les traduccions:

logsin s'acaba de connectar
Cerquem logsin en el codi i veiem que podem trobar la cadena a protocol.tcl.
Obrim aquest fitxer i cerquem la cadena (a la segona ocurrència), a la línia 4849 trobem:

if { (([::config::getKey notifyonline] == 1 &&
[::abook::getContactData $user notifyonline -1] != 0) ||
[::abook::getContactData $user notifyonline -1] == 1) } {
::amsn::notifyAdd "$short_name\n[trans logsin]." "::amsn::chatUser $user" online online $user
}
Aquí ens adonem que aquest és el codi que buscàvem, llavors modifiquem la condició de l'if per que només ens mostri la notificació si el contacte no està blocat

[lsearch [::abook::getLists $user] BL] == -1
Així que si cerca a les llistes de l'usuari que es connecti i no troba (retorna -1) entre elles la de Bloquejats (BL) mostra el missatge.

Si utilitzeu el tema de les alarmes de l'amsn potser també voldreu modificar el codi de just a sota, aquest però no es el meu cas.

Si voleu fer més modificacions una gran ajuda és veure els logs o la consola,
ctrl+s: status log
ctrl+shift+c: la consola
ctrl+d: msn protocol debug

Salut

Etiquetes de comentaris: , ,


Comentaris:
com que "Alvaro's MSN XD"?
¬¬
 
Tiu, es que es diu aixi XD, es que com l'he personalitzat li he canviat el nom a Alvaro's Messenger XD on XD significa X-press Dynamic que es un nom molt cool :p
 
Hi Oscar :D
 
Publica un comentari





<< Pàgina principal

Subscriure's a Missatges [Atom]