Themabewertung:
  • 0 Bewertung(en) - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Problem mit Plugin: Eingehende Nachrichten auswerten
#5
unter Perl ist das leider Sad nicht so:
Also zumindest ist bei mir das Pidgin dann immer verreckt als ich es als Referenz behandeln wollte.
Funktioniert einwandfrei:
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', '»' => '>>', '«' => '<<', '&apos;' => '\'', '&quot;' => '"', '&amp;' => '&' );
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");
}
Meine Homepage:
http://www.speedprog.tk/
Tongue
Zitieren


Nachrichten in diesem Thema
RE: Problem mit Plugin: Eingehende Nachrichten auswerten - von SpeedProg - 04.12.2010, 21:51

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste