summaryrefslogtreecommitdiff
path: root/broad_away.pl
blob: 208f4c5eb37370bae1f2448f35d4125087e4e59f (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
#!/usr/bin/perl 
use strict;
use warnings;
use Net::DBus;
 
{my $pidgin;
 sub setup {
     #Xchat::print('broad_away::setup called'); 
     my $bus=Net::DBus->find()
         or return;
     my $pidgin_s=$bus->get_service('im.pidgin.purple.PurpleService')
         or return;
     $pidgin=$pidgin_s->get_object('/im/pidgin/purple/PurpleObject',
                                   'im.pidgin.purple.PurpleInterface')
         or return;
 }
 sub pidgin {
     setup unless $pidgin;
     return $pidgin;
 }
}
 
my $prev_status;
sub set_away {
    my $pidgin=pidgin or return Xchat::EAT_NONE;
 
    $prev_status=$pidgin->PurpleSavedstatusGetCurrent()
        unless defined $prev_status;
 
    my $status$pidgin->PurpleSavedstatusFind($_[1][1])
        || $pidgin->PurpleSavedstatusFindTransientByTypeAndMessage(5,$_[1][1]);
    if (!$status) {
        $status=$pidgin->PurpleSavedstatusNew(undef,5); # away 
        $pidgin->PurpleSavedstatusSetMessage($status,$_[1][1]);
 
    }
    $pidgin->PurpleSavedstatusActivate($status);
    return Xchat::EAT_NONE;
}
 
sub set_back {
    my $pidgin=pidgin or return Xchat::EAT_NONE;
 
    my $status;
    if (!defined $prev_status) {
        $status=$pidgin->PurpleSavedstatusFindTransientByTypeAndMessage(2,undef);
    }
    else {
        $status=$prev_status;
        $prev_status=undef;
    }
    $pidgin->PurpleSavedstatusActivate($status);
    return Xchat::EAT_NONE;
}
 
Xchat::register('broad away','0.2','broadcast the away status onto Pidgin');
 
Xchat::hook_command('away',\&set_away);
Xchat::hook_command('back',\&set_back);