fix sh/dx <call> with sql spot logging
[spider.git] / perl / DXCommandmode.pm
index 6f01eb574f54dd618a083a30e0f1a6306b5218de..e86abd1a4f76c3f35a7150b7a0a72550e7d4a658 100644 (file)
@@ -37,6 +37,7 @@ use DB_File;
 use VE7CC;
 use DXXml;
 use AsyncMsg;
+use JSON;
 
 use Mojo::IOLoop;
 use Mojo::IOLoop::ForkCall;
@@ -122,6 +123,7 @@ sub start
        $self->{ann_talk} = $user->wantann_talk;
        $self->{here} = 1;
        $self->{prompt} = $user->prompt if $user->prompt;
+       $self->{lastmsgpoll} = 0;
 
        # sort out new dx spot stuff
        $user->wantdxcq(0) unless defined $user->{wantdxcq};
@@ -564,7 +566,7 @@ sub process
        my $dxchan;
        
        foreach $dxchan (@dxchan) {
-               next if $dxchan->{sort} ne 'U';  
+               next unless $dxchan->{sort} eq 'U';  
        
                # send a outstanding message prompt if required
                if ($t >= $dxchan->lastmsgpoll + $msgpolltime) {
@@ -1251,9 +1253,13 @@ sub send_motd
 
 # Punt off a long running command into a separate process
 #
-# Hhis is called from commands to run some potentially long running
+# This is called from commands to run some potentially long running
 # function. The process forks and then runs the function and returns
 # the result back to the cmd. 
+#
+# NOTE: this merely forks the current process and then runs the cmd in that (current) context.
+#       IT DOES NOT START UP SOME NEW PROGRAM AND RELIES ON THE FACT THAT IT IS RUNNING DXSPIDER 
+#       THE CURRENT CONTEXT!!
 # 
 # call: $self->spawn_cmd(\<function>, [cb => sub{...}], [prefix => "cmd> "], [progress => 0|1], [args => [...]]);
 sub spawn_cmd
@@ -1272,6 +1278,8 @@ sub spawn_cmd
        no strict 'refs';
                
        my $fc = Mojo::IOLoop::ForkCall->new;
+       $fc->serializer(\&encode_json);
+       $fc->deserializer(\&decode_json);
        $fc->run(
                         sub {my @args = @_; my @res = $cmdref->(@args); return @res},
                         $args,