Author: bdonlan
Date: 2004-05-30 12:40:17 -0400 (Sun, 30 May 2004)
New Revision: 197
Modified:
trunk/haver-gtk/TODO
trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm
Log:
Capture _warn in Query.pm
Modified: trunk/haver-gtk/TODO
===================================================================
--- trunk/haver-gtk/TODO 2004-05-30 16:36:02 UTC (rev 196)
+++ trunk/haver-gtk/TODO 2004-05-30 16:40:17 UTC (rev 197)
@@ -1,5 +1,4 @@
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/lib/Haver/Client/Gtk/Page/Query.pm
===================================================================
--- trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm 2004-05-30 16:36:02 UTC
(rev 196)
+++ trunk/haver-gtk/lib/Haver/Client/Gtk/Page/Query.pm 2004-05-30 16:40:17 UTC
(rev 197)
@@ -30,6 +30,20 @@
our $VERSION = 0.01;
+my %warnings = (
+ # Warnings captured by this page. Key is haver server warning, value is
subref to call
+ # or undef to simply display
+ UID_INVALID => undef,
+ UID_NOT_FOUND => undef,
+);
+
+my %warnpos = (
+ # The position in the args of a given warning of the UID
+ # The protocol should probably use IN for this
+ UID_INVALID => 0,
+ UID_NOT_FOUND => 0,
+);
+
### METHODS
sub new ($$) {
@@ -43,6 +57,7 @@
haver_pmsg _pmsg
haver_quit _quit
haver_disconnected _discon
+ haver_warn _warn
_start _start
destroy _destroy
}}, # $self => {qw{
@@ -128,5 +143,17 @@
$kernel->post('haver', 'unregister', 'all');
}
+sub _warn {
+ my ($self, $kernel, $args, $chan) = @_[OBJECT,KERNEL,ARG0,ARG1];
+ my ($err, $eshort, $elong, @earg) = @$args;
+ my $warnpos = $warnpos{$err};
+ return unless defined $warnpos;
+ return unless exists $warnpos{$err} && $earg[$warnpos{$err}] eq
$self->{UID};
+ if($warnings{$err}) {
+ $warnings{$err}($self, @earg);
+ } else {
+ $self->print_page("Warning from server ($err): $elong");
+ }
+}
1;