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 {


Reply via email to