Also zumindest ist bei mir das Pidgin dann immer verreckt als ich es als Referenz behandeln wollte.
Code:
use Purple;
use GD;
use Win32::Lglcd;
my $version = "1.0.2";
%PLUGIN_INFO = (
perl_api_version => 2,
name => "PidGin G15",
version => $version,
summary => "Nachrichten dem G15 LCD",
description => "Das Plugin zeigt eine Benachrichtigung wenn jemand online oder offline geht. Später wird auch das Versenden von Nachrichten möglich sein. Hoffe ich.",
author => "Constantin Wenger aka SpeedProg <constantin.wenger\@googlemail.com>",
url => "http://www.speedprog.tk",
load => "plugin_load",
unload => "plugin_unload"
);
my %UML = ( 'Ä' => 'Ae', 'Ö' => 'Oe', 'ô' => 'o', 'Ü' => 'Ue', 'ä' => 'ae', 'ö' => 'oe', 'ü' => 'ue', 'ß' => 'ss', '»' => '>>', '«' => '<<', ''' => '\'', '"' => '"', '&' => '&' );
my @UMLKEYS = join("|", keys(%UML));
my @msglist = ("");
my $msglistlen = -1;
my $x = 0;
my $font = gdTinyFont;
my $im = new GD::Image(160,43,0) or error("can't create image!\n");
my $white = $im->colorAllocate(255,255,255) or error("can't allocate color white!\n");
my $black = $im->colorAllocate(0,0,0) or error("can't allocate color black!\n");
sub error {
my ($msg) = @_;
Purple::Debug::error("PidGin G15", "VERSION:". $version ."\n". $msg ."\n");
}
sub adScreenMsg {
my ($msg) = @_;
error("MSG:". $msg);
$msg =~ s/(@UMLKEYS)/$UML{$1}/g;
while(length($msg) > 0){
$msglistlen=$msglistlen+1;
if(length($msg) > 32){
error("Laenge: ". length($msg));
my $spacepos = rindex($msg, " ", 31);
if($spacepos == -1){
error("Kein Leerzeichen")
$msglist[$msglistlen] = substr($msg, 0, 32);
error("Hinzugefuegt: ". substr($msg, 0, 32));
$msg = substr($msg, 32);
}
else{
error("Leerzeichen bei: ".$spacepos);
$msglist[$msglistlen] = substr($msg, 0, $spacepos);
error("Hinzugefuegt: ". $msglist[$msglistlen]);
$msg = substr($msg, $spacepos+1);
}
}
else{
$msglist[$msglistlen] = substr($msg, 0);
$msg = "";
}
}
}
sub onSoftButtonChanged {
my ($connection, $button, $params) = @_;
return 0;
}
sub plugin_init {
return %PLUGIN_INFO;
}
sub signedon_cb {
my ($user, $data) = @_;
adScreenMsg($user->get_alias . " ist online!");
$im->filledRectangle(0,0,159,42,$white);
if($msglistlen > 3){
$im->string($font,0,0, $msglist[$msglistlen-4], $black);
}
if($msglistlen > 2){
$im->string($font,0,8, $msglist[$msglistlen-3], $black);
}
if($msglistlen > 1){
$im->string($font,0,16, $msglist[$msglistlen-2], $black);
}
if($msglistlen > 0){
$im->string($font,0,24, $msglist[$msglistlen-1], $black);
}
$im->string($font,0,32, $msglist[$msglistlen], $black);
my $pict = $im->Lglcd( 'x'=> $x ) or error("can't transform to lglcd pic!\n");
$g15->sendbmp($pict) or error("can't send pic to screen!\n");
}
sub signedoff_cb {
my ($user, $data) = @_;
adScreenMsg($user->get_alias . " ist offline!");
#Purple::Debug::info("PidGin G15", $user->get_alias . " ist offline\n");
$im->filledRectangle(0,0,159,42,$white);
if($msglistlen > 3){
$im->string($font,0,0, $msglist[$msglistlen-4], $black);
}
if($msglistlen > 2){
$im->string($font,0,8, $msglist[$msglistlen-3], $black);
}
if($msglistlen > 1){
$im->string($font,0,16, $msglist[$msglistlen-2], $black);
}
if($msglistlen > 0){
$im->string($font,0,24, $msglist[$msglistlen-1], $black);
}
$im->string($font,0,32, $msglist[$msglistlen], $black);
my $pict = $im->Lglcd( 'x'=> $x ) or error("can't transform to lglcd pic!\n");
$g15->sendbmp($pict) or error("can't send pic to screen!\n");
}
sub receivedmsg_cb {
my($account, $sender, $message, $conv, $flags, $data) = @_;
while($message =~ m/<FONT.*?>(.*)<\/FONT>/){
$message = $1;
}
adScreenMsg($sender . ": " . $message);
error($sender . " hat eine Nachricht geschrieben\n");
$im->filledRectangle(0,0,159,42,$white);
if($msglistlen > 3){
$im->string($font,0,0, $msglist[$msglistlen-4], $black);
}
if($msglistlen > 2){
$im->string($font,0,8, $msglist[$msglistlen-3], $black);
}
if($msglistlen > 1){
$im->string($font,0,16, $msglist[$msglistlen-2], $black);
}
if($msglistlen > 0){
$im->string($font,0,24, $msglist[$msglistlen-1], $black);
}
$im->string($font,0,32, $msglist[$msglistlen], $black);
my $pict = $im->Lglcd( 'x'=> $x ) or error("can't transform to lglcd pic!\n");
$g15->sendbmp($pict) or error("can't send pic to screen!\n");
}
sub plugin_load {
my $plugin = shift;
$data = "";
$blist_h = Purple::BuddyList::get_handle() or error("FUNC_FAIL => Purple::BuddyList::get_handle();\n");
$conv_h = Purple::Conversations::get_handle() or error("FUNC_FAIL => Purple::Conversations::get_handle();\n");
Purple::Signal::connect($blist_h, "buddy-signed-on", $plugin, \&signedon_cb, $data) or error("FUNC_FAIL => Purple::Signal::connect($blist_h, \"buddy-signed-on\", $plugin, \&signedon_cb, $data);\n");
Purple::Signal::connect($blist_h, "buddy-signed-off", $plugin, \&signedoff_cb, $data) or error("FUNC_FAIL => Purple::Signal::connect($blist_h, \"buddy-signed-off\", $plugin, \&signedoff_cb, $data);\n");
Purple::Signal::connect($conv_h, "received-im-msg", $plugin, \&receivedmsg_cb, $data) or error("FUNC_FAIL => Purple::Signal::connect($conv_h, \"received-im-msg\", $plugin, \&receivedmsg_cb, $data);\n");
Purple::Signal::connect($conv_h, "received-chat-msg", $plugin, \&receivedmsg_cb, $data) or error("FUNC_FAIL => Purple::Signal::connect($conv_h, \"received-chat-msg\", $plugin, \&receivedmsg_cb, $data);\n");
$g15 = Win32::Lglcd->new or error("FUNC_FAIL => Win32::Lglcd->new;\n");
$g15->init() or error("FUNC_FAIL => $g15->init();\n");
$g15->connect('PidGin G15') or error("FUNC_FAIL => $g15->connect('PidGin G15');\n");
$g15->use_families(LGLCD_DEVICE_FAMILY_KEYBOARD_G15) or error("FUNC_FAIL => $g15->use_families(LGLCD_DEVICE_FAMILY_KEYBOARD_G15);\n");
$g15->open(callback=>\&onSoftButtonChanged) or error("FUNC_FAIL => $g15->open(callback=>\&onSoftButtonChanged);\n");
$g15->foreground() or error("FUNC_FAIL => $g15->foreground();\n");
$im->filledRectangle(0,0,159,42,$white) or error("FUNC_FAIL => Win32::Lglcd->new;\n");
$im->string(gdGiantFont,0,5, "PidGin G15 Plugin" ,$black) or error("FUNC_FAIL => Win32::Lglcd->new;\n");
my $pict = $im->Lglcd( 'x'=> $x ) or error("FUNC_FAIL => $im->Lglcd( 'x'=> $x );\n");
$g15->sendbmp($pict) or error("FUNC_FAIL => $g15->sendbmp($pict);\n");
Purple::Debug::info("PidGin G15", "plugin_load() - Plugin loaded.\n");
}
sub plugin_unload {
my $plugin = shift;
$g15->close() or error("can't close devices!\n");
#$g15->disconnect() or Purple::Debug::error("PidGin G15", "can't disconnect library Win32::Lglcd!\n");
#$g15->deinit() or Purple::Debug::error("PidGin G15", "can't free library Win32::Lglcd!\n");
Purple::Debug::info("PidGin G15", "plugin_unload() - Plugin unloaded.\n");
}