fix sh/log users as well
[spider.git] / cmd / show / groups.pl
index 8cbf54e6c2940b10faf20593b03aad0a0c84410a..85e3fe2b0057dc6853e1297e4127c141c60774e6 100644 (file)
 
 use Time::Local;
 
+my $to;
+
 sub handle
 {
        my $self = shift;
-       my $to = shift;
+       $to = shift;
 
        if ($to =~ /\D/) {
                return (1, "try sh/chatgroups xxx where xxx is the number of chat messages to search.");
        }
-
-       my @out;
        $to = 500 unless $to;
 
-       @out = $self->spawn_cmd("show/groups $to", \&DXLog::print, 
-                                                       args => [0, $to, $main::systime, 'chat', undef], 
-                                                       cb => sub {
-                                                               my $self = shift;
-                                                               my @chatlog = @_;
+       if ($self->{_nospawn}) {
+               return (1, doit($self, DXLog::print(undef, $to, $main::systime, 'chat', undef)));
+       }
+       return (1, $self->spawn_cmd("show/groups $to", \&DXLog::print, args => [0, $to, $main::systime, 'chat', undef], cb => \&doit));
+}
+
+sub doit {
+       my $self = shift;
+       
+               my @chatlog = @_;
+
+               my $g= {};
+               my @out;
+               my $row;
+               my ($time, $call, $group);
+               my $found;
+               my %month = (
+                                        Jan => 0,
+                                        Feb => 1,
+                                        Mar => 2,
+                                        Apr => 3,
+                                        May => 4,
+                                        Jun => 5,
+                                        Jul => 6,
+                                        Aug => 7,
+                                        Sep => 8,
+                                        Oct => 9,
+                                        Nov => 10,
+                                        Dec => 11,
+                                       );
+
+               @chatlog = reverse @chatlog;
+               foreach $row(@chatlog) {
+                       ($time, $call, $group) = ($row =~ m/^(\S+) (\S+) -> (\S+) /o);
+                       if (!exists $g->{$group}) {
+                               $time =~ m/^(\d\d)(\w{3})(\d{4})\@(\d\d):(\d\d):(\d\d)/o;
+                               $g->{$group}->{sec} = timegm($6, $5, $4, $1, $month{$2}, $3-1900);
+                               $time =~ s/\@/ at /;
+                               $g->{$group}->{last} = $time;
+                               push @{ $g->{$group}->{calls} }, $call;
+                       }
+                       else {
+                               $found = 0;
+                               foreach (@{ $g->{$group}->{calls} }) {
+                                       if (/$call/) {
+                                               $found = 1;
+                                               last;
+                                       }
+                               }
+                               push @{ $g->{$group}->{calls} }, $call unless $found;
+                       }
+                       $g->{$group}->{msgcount}++;
+               }
 
-                                                               my $g= {};
-                                                               my @out;
-                                                               my $row;
-                                                               my ($time, $call, $group);
-                                                               my $found;
-                                                               my %month = (
-                                                                                        Jan => 0,
-                                                                                        Feb => 1,
-                                                                                        Mar => 2,
-                                                                                        Apr => 3,
-                                                                                        May => 4,
-                                                                                        Jun => 5,
-                                                                                        Jul => 6,
-                                                                                        Aug => 7,
-                                                                                        Sep => 8,
-                                                                                        Oct => 9,
-                                                                                        Nov => 10,
-                                                                                        Dec => 11,
-                                                                                       );
+               push (@out, "Chat groups recently used:");
+               push (@out, "($to messages searched)");
+               push (@out, "--------------------------");
+               my @calls;
+               my @l;
+               my $max = 6;
+               my $mtext;
+               foreach $group (sort { $g->{$b}->{sec}  <=> $g->{$a}->{sec} } keys %$g) {
+                       @calls = sort( @{ $g->{$group}->{calls} } );
+                       $mtext = "  " . $g->{$group}->{msgcount} . " messages by:";
+                       push (@out, "$group: Last active " . $g->{$group}->{last});
+                       if (@calls <= $max) {
+                               push (@out, "$mtext @calls");
+                       }
+                       else {
+                               foreach $call(@calls) {
+                                       push @l, $call;
+                                       if (@l >= $max) {
+                                               if ($max == 6) {
+                                                       push (@out, "$mtext @l");
+                                               }
+                                               else {
+                                                       push (@out, "  @l");
+                                               }
+                                               @l = ();
+                                               $max = 8;
+                                       }
+                               }
+                               push (@out, "  @l") if (@l);
+                               $max = 6;
+                               @l = ();
+                       }
+                       push (@out, "-");
+               }
+               return @out;
+       }
 
-                                                               @chatlog = reverse @chatlog;
-                                                               foreach $row(@chatlog) {
-                                                                       ($time, $call, $group) = ($row =~ m/^(\S+) (\S+) -> (\S+) /o);
-                                                                       if (!exists $g->{$group}) {
-                                                                               $time =~ m/^(\d\d)(\w{3})(\d{4})\@(\d\d):(\d\d):(\d\d)/o;
-                                                                               $g->{$group}->{sec} = timegm($6, $5, $4, $1, $month{$2}, $3-1900);
-                                                                               $time =~ s/\@/ at /;
-                                                                               $g->{$group}->{last} = $time;
-                                                                               push @{ $g->{$group}->{calls} }, $call;
-                                                                       }
-                                                                       else {
-                                                                               $found = 0;
-                                                                               foreach (@{ $g->{$group}->{calls} }) {
-                                                                                       if (/$call/) {
-                                                                                               $found = 1;
-                                                                                               last;
-                                                                                       }
-                                                                               }
-                                                                               push @{ $g->{$group}->{calls} }, $call unless $found;
-                                                                       }
-                                                                       $g->{$group}->{msgcount}++;
-                                                               }
 
-                                                               push (@out, "Chat groups recently used:");
-                                                               push (@out, "($to messages searched)");
-                                                               push (@out, "--------------------------");
-                                                               my @calls;
-                                                               my @l;
-                                                               my $max = 6;
-                                                               my $mtext;
-                                                               foreach $group (sort { $g->{$b}->{sec}  <=> $g->{$a}->{sec} } keys %$g) {
-                                                                       @calls = sort( @{ $g->{$group}->{calls} } );
-                                                                       $mtext = "  " . $g->{$group}->{msgcount} . " messages by:";
-                                                                       push (@out, "$group: Last active " . $g->{$group}->{last});
-                                                                       if (@calls <= $max) {
-                                                                               push (@out, "$mtext @calls");
-                                                                       }
-                                                                       else {
-                                                                               foreach $call(@calls) {
-                                                                                       push @l, $call;
-                                                                                       if (@l >= $max) {
-                                                                                               if ($max == 6) {
-                                                                                                       push (@out, "$mtext @l");
-                                                                                               }
-                                                                                               else {
-                                                                                                       push (@out, "  @l");
-                                                                                               }
-                                                                                               @l = ();
-                                                                                               $max = 8;
-                                                                                       }
-                                                                               }
-                                                                               push (@out, "  @l") if (@l);
-                                                                               $max = 6;
-                                                                               @l = ();
-                                                                       }
-                                                                       push (@out, "-");
-                                                               }
-                                                               return @out;
-                                                       });
-       
-       #       my @chatlog = DXLog::print(undef, $to, $main::systime, 'chat', undef);
-       return (1, @out);
-}