Author: bdonlan
Date: 2004-05-29 20:57:08 -0400 (Sat, 29 May 2004)
New Revision: 191

Modified:
   trunk/haver-gtk/TODO
   trunk/haver-gtk/bin/haver-gtk.pl
   trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm
   trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm
   trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm
Log:
* Query-related haver_ events moved to Query.pm
* Channel.pm no longer crashes when someone joins/parts/quits


Modified: trunk/haver-gtk/TODO
===================================================================
--- trunk/haver-gtk/TODO        2004-05-30 00:25:03 UTC (rev 190)
+++ trunk/haver-gtk/TODO        2004-05-30 00:57:08 UTC (rev 191)
@@ -1,7 +1,7 @@
 TODO:
-* Split pmsg, etc into Query.pm, like with Channel.pm
 * Move rawlog functions to its own file
 * Move cmd_* and haver_* to separate files
+* Pages should not care about page names
 * Server list
 * Preferences
 * Timestamps

Modified: trunk/haver-gtk/bin/haver-gtk.pl
===================================================================
--- trunk/haver-gtk/bin/haver-gtk.pl    2004-05-30 00:25:03 UTC (rev 190)
+++ trunk/haver-gtk/bin/haver-gtk.pl    2004-05-30 00:57:08 UTC (rev 191)
@@ -136,8 +136,8 @@
        haver_login_request
        haver_login
        haver_login_fail
-       haver_pmsg
        haver_joined
+       haver_pmsg
        cmd_join
        cmd_j
        cmd_users
@@ -250,7 +250,7 @@
        };
        if($@) {
                # XXX: proper error handling
-               get_current_page()->print_page("!!! ERROR: $@");
+               $pages->get_current_page()->print_page("!!! ERROR: $@");
        }
        
 #      if($text =~ m|^/(\w+)\s*(.*)$|) {
@@ -412,26 +412,22 @@
        $_[HEAP]->{ready} = 1;
 }
 
-sub haver_pmsg {
-       my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG0];
-       my ($type, $from, $text) = @$args;
-       my @lines = split "\n", $text;  
-       if($type eq q{"}) {
-               get_query_page($from)->print_page(map { "$from: $_" } @lines);
-       } elsif ($type eq q{:}) {
-               get_query_page($from)->print_page(map { "* $from $_" } @lines);
-       }
-}
-
 sub haver_joined {
        my ($kernel, $heap, $channel) = @_[KERNEL,HEAP,ARG1];
-       unless(exists $heap->{clist}->{$channel}) {
-               $pages->get_page(0)->print_page("Joined $channel but didn't 
want to!");
-               $kernel->post('haver', 'part', $channel);
-               return;
+       unless ($pages->get_page("#$channel")) {
+               $pages->add_page(new 
Haver::Client::Gtk::Page::Channel($channel, TRUE));
        }
 }      
 
+sub haver_pmsg {
+       my ($kernel, $args) = @_[KERNEL,ARG0];
+       my $who = $args->[1];
+       if (!$pages->get_page("=$who")) {
+               my $page = get_query_page("$who");
+               $page->process_pmsg($args);
+       }
+}
+
 sub cmd_say {
        my ($kernel, $heap, $args) = @_[KERNEL, HEAP, ARG1];
        $pages->get_current_page()->send_msg(q{"}, $args->[0]);
@@ -445,16 +441,14 @@
        my ($kernel, $heap, $args) = @_[KERNEL,HEAP,ARG1];
        my ($chan) = @$args;
 
-       if (exists $heap->{clist}->{$chan}) {
-               my $page = $pages->get_page("#$chan");
-               if ($page) {
-                       ### XXX: Move rejoin logic to channel module
-                       unless ($page->{present}) {
-                               $kernel->post('haver', 'join', $chan);
-                       }
-                       $pages->set_page($page);
-                       return;
+       my $page = $pages->get_page("#$chan");
+       if ($page) {
+               ### XXX: Move rejoin logic to channel module
+               unless ($page->{present}) {
+                       $kernel->post('haver', 'join', $chan);
                }
+               $pages->set_page($page);
+               return;
        }
        $kernel->post("haver", "join", $chan);
        $pages->add_page(new Haver::Client::Gtk::Page::Channel($chan, FALSE));

Modified: trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm        2004-05-30 
00:25:03 UTC (rev 190)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Channel.pm        2004-05-30 
00:57:08 UTC (rev 191)
@@ -170,18 +170,18 @@
 
 sub _join {
        my ($self, $kernel, $args, $chan) = @_[OBJECT,KERNEL,ARG0,ARG1];
-       if ($chan eq $self->channel) {
+       if ($chan eq $self->{channel}) {
                my $who = $args->[0];
-               $self->ulist_add($who);
+               $self->add_ulist($who);
                $self->print_page("$who has joined $chan.");
        }
 }
 
 sub _part {
        my ($self, $kernel, $args, $chan) = @_[OBJECT,KERNEL,ARG0,ARG1];
-       if ($chan eq $self->channel) {
+       if ($chan eq $self->{channel}) {
                my $who = $args->[0];
-               $self->ulist_del($who);
+               $self->del_ulist($who);
                $self->print_page("$who has left $chan.");
        }
 }
@@ -189,7 +189,7 @@
 sub _quit {
        my ($self, $kernel, $args) = @_[OBJECT,KERNEL,ARG0];
        my ($who, $why) = @$args;
-       if ($self->ulist_del($who)) {
+       if ($self->del_ulist($who)) {
                $self->print_page("$who has quit: $why.");
        }
 }
@@ -205,11 +205,11 @@
                } elsif ($type eq q{:}) {
                        $prefix = "* $who ";
                } else {
-                       if ($text =~ /\n/) {
+                       if (@lines > 1) {
                                @lines = map { ">$_" } @lines;
                                $self->print_page("$who sent unknown message 
type $type:", @lines);
                        } else {
-                               $self->print_page("$who send unknown message 
type $type: $text");
+                               $self->print_page("$who sent unknown message 
type $type: $lines[0]");
                        }
                        return;
                }

Modified: trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm  2004-05-30 00:25:03 UTC 
(rev 190)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm  2004-05-30 00:57:08 UTC 
(rev 191)
@@ -30,11 +30,24 @@
 
 our $VERSION = 0.01;
 
+### METHODS
+
 sub new ($$) {
        my ($class, $uid) = @_;
        my $self = Haver::Client::Gtk::Page::Text::new($class, "=$uid");
        $self->{UID} = $uid;
        $self->{local} = 0;
+       $self->{session} = POE::Session->create(
+               object_states => [
+               $self => {qw{
+                       haver_pmsg                      _pmsg
+                       haver_quit                      _quit
+                       haver_disconnected      _discon
+                       _start                          _start
+                       destroy                         _destroy
+                       }}, # $self => {qw{
+               ], # object_methods => [
+       )->ID;
        return $self;
 }
 
@@ -53,4 +66,67 @@
        return 1;
 }
 
+sub added {
+       my ($self, $notebook) = @_;
+       $self->{notebook} = $notebook;
+}
+
+sub removed {
+       my $self = $_[0];
+       $poe_kernel->post($self->{session}, 'destroy');
+}
+
+sub process_pmsg {
+       my ($self, $args) = @_;
+       my ($type, $who, $text) = @$args;
+       return unless $who eq $self->{UID};
+       ### XXX: Copied from ::Channel, consolidate somewhere
+       my $prefix;
+       my @lines = split "\n", $text;
+       if ($type eq q{"}) {
+               $prefix = "<$who> ";
+       } elsif ($type eq q{:}) {
+               $prefix = "* $who ";
+       } else {
+               if (@lines > 1) {
+                       @lines = map { ">$_" } @lines;
+                       $self->print_page("$who sent unknown message type 
$type:", @lines);
+               } else {
+                       $self->print_page("$who sent unknown message type 
$type: $lines[0]");
+               }
+               return;
+       }
+       @lines = map { "$prefix$_" } @lines;
+       $self->print_page(@lines);
+}
+
+### EVENTS
+
+sub _pmsg {
+       my ($self, $kernel, $args) = @_[OBJECT,KERNEL,ARG0];
+}
+
+sub _quit {
+       my ($self, $kernel, $args) = @_[OBJECT,KERNEL,ARG0];
+       my ($who, $why) = @$args;
+       return unless $who eq $self->{UID};
+       $self->print_page("$who has quit: $why");
+}
+
+sub _discon {
+       my $self = $_[OBJECT];
+       $self->print_page("Disconnected.");
+}
+
+sub _start {
+       my ($self, $kernel) = @_[OBJECT,KERNEL];
+       $kernel->post('haver', 'register', 'all');
+}
+
+sub _destroy {
+       my ($self, $kernel) = @_[OBJECT,KERNEL];
+       $kernel->post('haver', 'unregister', 'all');
+}
+
+
 1;

Modified: trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm       2004-05-30 00:25:03 UTC 
(rev 190)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Pages.pm       2004-05-30 00:57:08 UTC 
(rev 191)
@@ -62,7 +62,7 @@
        my ($self, $hash) = @_;
        my $name = $hash->{name};
        if(exists $self->{pagenam}{$name}) {
-               croak "Page already exists: $name with ", Dumper 
$self->{pagenum}{$name};
+               croak "Page already exists: $name with ", Dumper 
$self->{pagenam}{$name};
        }
        $hash->{parent} = $self;
        $hash->{string} = $name;


Reply via email to