Author: bdonlan
Date: 2004-05-29 22:34:24 -0400 (Sat, 29 May 2004)
New Revision: 193
Modified:
trunk/haver-gtk/TODO
trunk/haver-gtk/bin/haver-gtk.pl
trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm
Log:
* Moved channel join logic to Channel.pm
* Removed some obsolete comments
* Added TODO entry
Modified: trunk/haver-gtk/TODO
===================================================================
--- trunk/haver-gtk/TODO 2004-05-30 01:11:02 UTC (rev 192)
+++ trunk/haver-gtk/TODO 2004-05-30 02:34:24 UTC (rev 193)
@@ -1,4 +1,5 @@
TODO:
+* Capture _warn in Channel.pm and Query.pm
* Find some framework for all these pages with associated sessions
* Move cmd_* and haver_* to separate files
* Pages.pm should not care about page names
Modified: trunk/haver-gtk/bin/haver-gtk.pl
===================================================================
--- trunk/haver-gtk/bin/haver-gtk.pl 2004-05-30 01:11:02 UTC (rev 192)
+++ trunk/haver-gtk/bin/haver-gtk.pl 2004-05-30 02:34:24 UTC (rev 193)
@@ -168,12 +168,6 @@
if(defined $config->{window_x} && defined $config->{window_x}
&& defined $config->{window_w} && defined $config->{window_h}) {
# XXX: Sanity checks
-# $gui{main_window}->move_resize(
-# $config->{window_x},
- # $config->{window_y},
- # $config->{window_w},
- # $config->{window_h},
- #);
$gui{main_window}->set_uposition($config->{window_x},
$config->{window_y});
$gui{main_window}->set_usize($config->{window_w},
$config->{window_h});
}
@@ -251,13 +245,6 @@
# XXX: proper error handling
$pages->get_current_page()->print_page("!!! ERROR: $@");
}
-
-# if($text =~ m|^/(\w+)\s*(.*)$|) {
-# _call("cmd_$1", $2);
-# # XXX: Error on nonexistent command
-# } elsif (get_current_page()->can('send_msg')) {
-# get_current_page()->send_msg(q{"}, $text);
-# }
}
sub entry_key_pressed {
@@ -436,15 +423,11 @@
my $page = $pages->get_page("#$chan");
if ($page) {
- ### XXX: Move rejoin logic to channel module
- unless ($page->{present}) {
- $kernel->post('haver', 'join', $chan);
- }
+ $page->join();
$pages->set_page($page);
return;
}
- $kernel->post("haver", "join", $chan);
- $pages->add_page(new Haver::Client::Gtk::Page::Channel($chan, FALSE));
+ $pages->add_page(new Haver::Client::Gtk::Page::Channel($chan,
FALSE))->join();
}
sub cmd_users {
Modified: trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm 2004-05-30
01:11:02 UTC (rev 192)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm 2004-05-30
02:34:24 UTC (rev 193)
@@ -51,6 +51,7 @@
$page->{channel} = $name;
$page->{local} = 0;
$page->{present} = $present;
+ $page->{joining} = 0;
$page->{session} = POE::Session->create(
object_states => [
$page => {qw{
@@ -124,7 +125,7 @@
sub close ($) {
my $self = shift;
- if ($self->{present}) {
+ if ($self->{present} || $self->{joining}) {
$poe_kernel->post('haver', 'part', $self->{channel});
return 0;
} else {
@@ -144,6 +145,14 @@
delete $self->{notebook};
}
+sub join {
+ my $self = $_[0];
+
+ return if ($self->{joining} || $self->{present});
+ $poe_kernel->post('haver', 'join', $self->{channel});
+ $self->{joining} = 1;
+}
+
### SESSION EVENTS
sub _start {
@@ -157,6 +166,7 @@
if ($self->{channel} eq $chan) {
$self->print_page("Joined $chan.");
$self->{present} = 1;
+ $self->{joining} = 0;
$kernel->post('haver', 'users', $chan);
}
}
@@ -164,7 +174,12 @@
sub _parted {
my ($self, $kernel, $chan) = @_[OBJECT,KERNEL,ARG1];
if ($chan eq $self->{channel}) {
- $self->{notebook}->del_page($self) if $self->{notebook};
+ if ($self->{notebook}) {
+ $self->{notebook}->del_page($self);
+ } else {
+ ### XXX: Is a race condition possible here?
+ $kernel->yield('destroy');
+ }
}
}
@@ -228,7 +243,7 @@
sub _discon {
my ($self, $kernel) = @_[OBJECT,KERNEL];
$self->print_page("Disconnected.");
- $self->{present} = 0;
+ $self->{joining} = $self->{present} = 0;
}
sub _destroy {