jeudi, juin 01, 2006

Plugin aMSN pour amaroK

Le blog est mort?

De retour dans la blogosphère après quelques semaines d'absence. Personne ne remarque! C'est normal, personne ne lit ;o)

Je reviens la santé fragilisée par le stress des examens. Donc, au programme pour ces vacances: le repos, une meilleure alimentation, programmer avec autre chose que Java, s'approprier quelques nouvelles techniques en guitare...

Un plugin aMSN pour amaroK

aMSN est le client de MSN multi plate-formes sous licence GPL que j'utilise sur mon ordinateur. J'ai essayé quelques-uns de ses plugins, mais celui de «music» ne fonctionne pas pour moi. Alors j'ai jeté un oeil sur le code du plugin «Nudge» et j'ai vu qu'il est assez facile d'en coder un.

Un plugin pourquoi faire?

Je voulais simplement mettre dans la fenêtre de aMSN le titre de la chanson et son interprète dans l'espace réservé pour le message personnel. Les plugins sous aMSN sont codés (ou plutôt scriptés) en TCL. Je n'avais jamais vu un code écrit dans ce langage - qui à mon avis a une syntaxe pas très élégante.

Voici une capture d'écran du résultat souhaité


Réalisation du plugin


Pour réaliser le plugin il suffit d'utiliser DCOP. Pour le moment il est vraiment élémentaire et je ne pense pas y ajouter d'autres fonctions vu que je suis déjà passé à quelque chose d'autre.

Le code

Voilà ce que j'ai codé:
#!/usr/bin/tclsh
# Description: Plugin pour afficher dans l'espace PSM
# Il faut d'abord commencer par échanger des messages
# avant que le plugin ne fonctionne. Mais bon,
# chacun peut ajuster le comportement à sa guise.
namespace eval ::amaroK {
# var globale
set oldTitre "oldTitre"

proc Init { dir } {
::plugins::RegisterPlugin "amaroK"
::config::setKey amarokpluginpath $dir

::amaroK::RegisterEvent
}

proc RegisterEvent {} {
::plugins::RegisterEvent "amaroK" chat_msg_received received
}

proc received { event evpar } {
# récupérer le titre, l'artiste ssi amaroK fonctionne
if {[catch {exec dcop amarok player title} errmsg]} {
set titre "Not listening to music :("
set artiste ""
set strPrefix ""
set strDe ""
} else {
set titre [exec dcop amarok player title]
set artiste [exec dcop amarok player artist]
#set cover [exec dcop amarok player coverImage]
set strPrefix "listening to: "
set strDe " - "
}

global amaroK::oldTitre
# n'afficher le titre que si celui-ci à changé
if { [string compare $oldTitre $titre] != 0 } {
set oldTitre $titre
set txt $strPrefix$titre$strDe$artiste
# afficher le changement dans chaque fenêtre ouverte
foreach chatid [::ChatWindow::getAllChatIds] {
# SendMessageFIFO command stack lock
SendMessageFIFO [list ::amaroK::writeMessageToGUI $chatid $txt]
"::amsn::messages_stack($chatid)"
"::amsn::messages_flushing($chatid)"
#::amsn::set_displaypic $cover
}
::MSN::changePSM "$txt"; # echange le message personnel
}

# après 35 secondes rafraîchir
after 35000 ::amaroK::received $event $evpar
}

# écrire le message $txt dans la fenêtre $chatid
proc writeMessageToGUI { chatid txt } {
set color "green"
amsn::WinWrite $chatid "\n" $color
amsn::WinWriteIcon $chatid greyline 3
amsn::WinWrite $chatid "\n" $color
amsn::WinWrite $chatid "[timestamp] $txt\n" $color
amsn::WinWriteIcon $chatid greyline 3
}
}

9 Comments:

Anonymous Anonyme said...

Moi je lis! Mais bon, faut ke j'ai la tete sur les épaules pour comprendre tout a 100% ;o)

6:50 AM  
Blogger Myelin Operation said...

Ah, il faudra faire un effort pour faciliter la lecture alors ;o)

6:02 AM  
Anonymous Anonyme said...

Lé fou gars ? Mi lit out blog moin ! Mais bon en tant que témoin privilégié du couloir d'en face j'étais au courant du début des recherches sur les plugins. Il n'empêche, Nous, Felini, comte de JA, suivons avec attention la poursuite de ces travaux.

5:27 AM  
Anonymous Anonyme said...

Hi, I've tried your code with a plugininfo.xml written by me, but it doesn't start! Where's the problem? Thanks

9:12 AM  
Blogger Myelin Operation said...

AMSN project has a rather comprehensive wiki page that may help you.

http://amsn.sourceforge.net/wiki/tiki-index.php

See the section dedicated to plugin development to solve your problem.

Anyway, this type of plugin is already implemented by the official music plugin which would not work for me by the way.

Regards,

3:06 AM  
Blogger Myelin Operation said...

Several comments have been sent to me by mail concerning this plugin. I'd like to set up things here so that I don't get any more mail related to this post.

1) I'm not expecting to support or procede with the developpement of this plugin.
2) An XML plugin configuration file is needed in order to make the plugin work.
3) I don't use the plugin nor do I have the source code with me.
4) Feel free to use the code, modify it as per the GPL license.
5) Please don't send me any mail in that connection. Use the blog to post comments.

Thanks

2:55 AM  
Anonymous Anonyme said...

pour le plugin "music" ... y a juste a utiliser la configuration et choisir le lecteur ... attendre le temps de rafraichissement entré dans la configuration .. et voila

10:22 AM  
Anonymous Anonyme said...

e ça, mais change le thème de ton blog,blanc sur noir, ça nique les yeux !

12:36 PM  
Blogger Myelin Operation said...

C'est par soucis d'économie d'énergie que j'utilise le noir ;o)

D'ailleurs faudra bien s'y faire lorsque Google passera au noir (voir http://www.blackle.com/)

10:56 AM  

Enregistrer un commentaire

<< Home