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;


Reply via email to