ViewVC Help
View File | Revision Log | Show Annotations | Download File
/cvs/kgsueme/kgsueme/appwin.pl
(Generate patch)

Comparing kgsueme/kgsueme/appwin.pl (file contents):
Revision 1.3 by pcg, Sat May 31 13:58:30 2003 UTC vs.
Revision 1.4 by pcg, Sun Jun 1 13:09:46 2003 UTC

4 4
5use base KGS::Listener; 5use base KGS::Listener;
6use base gtk::widget; 6use base gtk::widget;
7 7
8my %context_id; 8my %context_id;
9
10# static method to request the userimage and call the cb when it's available.
11sub userpic {
12 my ($name, $cb) = @_;
13 $self->get_userpic ($name, $cb);
14}
9 15
10sub status { 16sub status {
11 my ($type, $text) = @_; 17 my ($type, $text) = @_;
12 18
13 $self->{status}->pop($context_id{$type}) if $context_id{$type}; 19 $self->{status}->pop($context_id{$type}) if $context_id{$type};
23 29
24 $self->{conn} = new KGS::Protocol; 30 $self->{conn} = new KGS::Protocol;
25 31
26 KGS::Listener::Debug->new->listen($self->{conn}, "any"); #d# debug only :) 32 KGS::Listener::Debug->new->listen($self->{conn}, "any"); #d# debug only :)
27 33
28 $self->listen($self->{conn}, "login"); 34 $self->listen($self->{conn}, qw(login userpic));
29 35
30 $self->{roomlist} = new roomlist conn => $self->{conn}; 36 $self->{roomlist} = new roomlist conn => $self->{conn};
31 37
32 $self->{window} = new Gtk2::Window 'toplevel'; 38 $self->{window} = new Gtk2::Window 'toplevel';
33 $self->{window}->set_title('kgsueme'); 39 $self->{window}->set_title('kgsueme');
125 } else { 131 } else {
126 sound::play 2, "warning"; 132 sound::play 2, "warning";
127 } 133 }
128} 134}
129 135
136my %userpic;
137my %userpic_cb;
138
139sub get_userpic {
140 my ($self, $name, $cb) = @_;
141
142 if (exists $userpic{$name}) {
143 $cb->($userpic{$name});
144 } else {
145 if (!exists $userpic_cb{$name}) {
146 # after 10 seconds, flush callbacks
147 $self->msg (pic_req => name => $name);
148 add Glib::Timeout 10000, sub {
149 $_->() for @{delete $userpic_cb{$name} || []};
150 0;
151 };
152 }
153 push @{$userpic_cb{$name}}, $cb;
154 }
155}
156
157sub inject_userpic {
158 my ($self, $msg) = @_;
159
160 $userpic{$msg->{name}} = $msg->{data};
161 $_->($userpic{$msg->{name}}) for @{delete $userpic_cb{$msg->{name}} || []};
162}
163
130sub event_disconnect { } 164sub event_disconnect { }
131 165
1321; 1661;
133 167

Diff Legend

Removed lines
+ Added lines
< Changed lines
> Changed lines