X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=cmd%2Fshow%2Fgroups.pl;h=aaa9d4cf334ac640d8f423abc860f86d080b48df;hb=8e14149148baba63ce5ae2b95aacda8ab6dd0d87;hp=8cbf54e6c2940b10faf20593b03aad0a0c84410a;hpb=65f4d068c56ddb6e25d1f62b7ca6fd43741386b3;p=spider.git diff --git a/cmd/show/groups.pl b/cmd/show/groups.pl index 8cbf54e6..aaa9d4cf 100644 --- a/cmd/show/groups.pl +++ b/cmd/show/groups.pl @@ -8,104 +8,107 @@ 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} || $main::is_win == 1) { + 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); -}