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;