From acbf34bb70ddadbea9645fd89a43f8a1a4ec1724 Mon Sep 17 00:00:00 2001 From: octo Date: Mon, 11 Apr 2005 13:32:30 +0000 Subject: [PATCH] Some work on Userdetails, minor changes/fixes in Core, Conversations and Bignumbers.. --- lib/Onis/Plugins/Bignumbers.pm | 10 ++++----- lib/Onis/Plugins/Conversations.pm | 14 +++++++++++++ lib/Onis/Plugins/Core.pm | 44 ++++++++++++++++++++++++++++++--------- lib/Onis/Plugins/Userdetails.pm | 23 ++++++++++---------- 4 files changed, 65 insertions(+), 26 deletions(-) diff --git a/lib/Onis/Plugins/Bignumbers.pm b/lib/Onis/Plugins/Bignumbers.pm index 9b5c889..3146f5d 100644 --- a/lib/Onis/Plugins/Bignumbers.pm +++ b/lib/Onis/Plugins/Bignumbers.pm @@ -82,14 +82,14 @@ sub calculate if (!defined ($CalcData->{$main})) { - my ($lines, $words, $chars) = get_core_nick_counters ($main); - next unless (defined ($chars)); + my $core_data = get_core_nick_counters ($main); + next unless (%$core_data); $CalcData->{$main} = { - lines => $lines, - words => $words, - chars => $chars, + lines => $core_data->{'lines_total'}, + words => $core_data->{'words_total'}, + chars => $core_data->{'chars_total'}, questions => 0, uppercase => 0, smiley_happy => 0, diff --git a/lib/Onis/Plugins/Conversations.pm b/lib/Onis/Plugins/Conversations.pm index 5af0717..21ea588 100644 --- a/lib/Onis/Plugins/Conversations.pm +++ b/lib/Onis/Plugins/Conversations.pm @@ -241,3 +241,17 @@ EOF print $fh "\n\n"; } + +sub get_conversations +{ + my $nick = shift; + + if (!defined ($ConversationData->{$nick})) + { + return ({}); + } + else + { + return ($ConversationData->{$nick}); + } +} diff --git a/lib/Onis/Plugins/Core.pm b/lib/Onis/Plugins/Core.pm index 5294483..c80359a 100644 --- a/lib/Onis/Plugins/Core.pm +++ b/lib/Onis/Plugins/Core.pm @@ -24,7 +24,7 @@ use Onis::Users (qw(get_realname get_link get_image ident_to_name)); use Onis::Data::Core qw#get_all_nicks nick_to_ident ident_to_nick get_main_nick register_plugin#; use Onis::Data::Persistent; -@Onis::Plugins::Core::EXPORT_OK = (qw(get_core_nick_counters)); +@Onis::Plugins::Core::EXPORT_OK = (qw(get_core_nick_counters get_sorted_nicklist)); @Onis::Plugins::Core::ISA = ('Exporter'); our $NickLinesCounter = Onis::Data::Persistent->new ('NickLinesCounter', 'nick', @@ -49,6 +49,7 @@ our $NickCharsCounter = Onis::Data::Persistent->new ('NickCharsCounter', 'nick', our $QuoteCache = {}; # Saves per-nick information without any modification our $QuoteData = {}; # Is generated before output. Nicks are merged according to Data::Core. our $NickData = {}; # Same as above, but for nicks rather than quotes. +our $SortedNicklist = []; our @H_IMAGES = qw#dark-theme/h-red.png dark-theme/h-blue.png dark-theme/h-yellow.png dark-theme/h-green.png#; our $QuoteCacheSize = 10; @@ -557,10 +558,14 @@ EOF print $fh " $trans\n", " \n"; - for (sort + @$SortedNicklist = sort { $NickData->{$b}{"${sort_field}_total"} <=> $NickData->{$a}{"${sort_field}_total"} - } (@nicks)) + } (@nicks); + + @nicks = (); + + for (@$SortedNicklist) { my $nick = $_; my $ident = nick_to_ident ($nick); @@ -831,8 +836,17 @@ sub bar =item B (I<$nick>) -Returns the total I, I and I written by the given -nick. +Returns a hash-ref that containes all the nick-counters available. It looks +like this: + + { + lines => [qw(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)], + words => [qw(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)], + chars => [qw(0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0)], + lines_total => 0, + words_total => 0, + chars_total => 0 + } =cut @@ -840,14 +854,24 @@ sub get_core_nick_counters { my $nick = shift; - if (defined ($NickData->{$nick})) + if (!defined ($NickData->{$nick})) { - return ($NickData->{$nick}{'lines_total'}, - $NickData->{$nick}{'words_total'}, - $NickData->{$nick}{'chars_total'}); + return ({}); } - return (qw()); + return ($NickData->{$nick}); +} + +=item B () + +Returns an array-ref that containes all nicks, sorted by the field given in the +config-file. + +=cut + +sub get_sorted_nicklist +{ + return ($SortedNicklist); } =back diff --git a/lib/Onis/Plugins/Userdetails.pm b/lib/Onis/Plugins/Userdetails.pm index 75f91e2..920881f 100644 --- a/lib/Onis/Plugins/Userdetails.pm +++ b/lib/Onis/Plugins/Userdetails.pm @@ -9,6 +9,9 @@ use Onis::Language (qw(translate)); use Onis::Data::Core (qw(get_main_nick register_plugin)); use Onis::Users (qw(ident_to_name get_link get_image)); +use Onis::Plugin::Core (qw(get_core_nick_counters)); +use Onis::Plugin::Conversations (qw(get_conversations)); + our $DISPLAY_IMAGES = 0; our $DEFAULT_IMAGE = ''; @@ -129,15 +132,7 @@ return (1); sub output { - my @names = sort - { - $DATA->{'byname'}{$b}{$SORT_BY} <=> $DATA->{'byname'}{$a}{$SORT_BY} - } grep - { - defined ($DATA->{'byname'}{$_}{'words'}) - } (keys (%{$DATA->{'byname'}})); - - return (undef) unless (@names); + my $nicks_ref = get_sorted_nicklist (); my $max = $PLUGIN_MAX; @@ -149,9 +144,15 @@ sub output my $max_time = 0; my $max_conv = 0; - for (@names) + my @nicks = $nicks_ref->[0 .. ($max - 1)]; + my $nick_data = {}; + + for (@nicks) { - my $name = $_; + my $nick = $_; + + $nick_data->{$nick} = get_core_nick_counters ($nick); + $nick_data->{$nick}{'conversations'} = get_conversations ($nick); if (defined ($DATA->{'byname'}{$name}{'chars_time'})) { -- 2.11.0