… | |
… | |
4 | |
4 | |
5 | use base KGS::Listener; |
5 | use base KGS::Listener; |
6 | use base gtk::widget; |
6 | use base gtk::widget; |
7 | |
7 | |
8 | my %context_id; |
8 | my %context_id; |
|
|
9 | |
|
|
10 | # static method to request the userimage and call the cb when it's available. |
|
|
11 | sub userpic { |
|
|
12 | my ($name, $cb) = @_; |
|
|
13 | $self->get_userpic ($name, $cb); |
|
|
14 | } |
9 | |
15 | |
10 | sub status { |
16 | sub 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 | |
|
|
136 | my %userpic; |
|
|
137 | my %userpic_cb; |
|
|
138 | |
|
|
139 | sub 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 | |
|
|
157 | sub 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 | |
130 | sub event_disconnect { } |
164 | sub event_disconnect { } |
131 | |
165 | |
132 | 1; |
166 | 1; |
133 | |
167 | |