X-Git-Url: http://dxcluster.net/gitweb/gitweb.cgi?a=blobdiff_plain;f=perl%2FQSL.pm;h=0df7570ba24f615ac1fccce38cde2d59955588ca;hb=b7dedfebf0e11a5fc3050f8a0350a45a5a680e11;hp=4d3bd1154fde0e8224cdcb1bd2806f390c781344;hpb=d384410d4d5d1031cabab44350b80f2a55fe808d;p=spider.git diff --git a/perl/QSL.pm b/perl/QSL.pm index 4d3bd115..0df7570b 100644 --- a/perl/QSL.pm +++ b/perl/QSL.pm @@ -14,20 +14,17 @@ use DB_File; use DXDebug; use Prefix; -use vars qw($VERSION $BRANCH); -$VERSION = sprintf( "%d.%03d", q$Revision$ =~ /(\d+)\.(\d+)/ ); -$BRANCH = sprintf( "%d.%03d", q$Revision$ =~ /\d+\.\d+\.(\d+)\.(\d+)/ || (0,0)); -$main::build += $VERSION; -$main::branch += $BRANCH; - -use vars qw($qslfn $dbm); +use vars qw($qslfn $dbm $maxentries); $qslfn = 'qsl'; $dbm = undef; +$maxentries = 50; + +localdata_mv("$qslfn.v1"); sub init { my $mode = shift; - my $ufn = "$main::root/data/$qslfn.v1"; + my $ufn = localdata("$qslfn.v1"); Prefix::load() unless Prefix::loaded(); @@ -43,6 +40,7 @@ sub init } import Storable qw(nfreeze freeze thaw); my %u; + undef $dbm; if ($mode) { $dbm = tie (%u, 'DB_File', $ufn, O_CREAT|O_RDWR, 0666, $DB_BTREE) or confess "can't open qsl file: $qslfn ($!)"; } else { @@ -62,7 +60,9 @@ sub new return bless [uc $call, []], $pkg; } -# the format of each entry is [manager, times found, last time] +# called $self->update(comment, time, spotter) +# $self has the callsign as the first argument in an array of array references +# the format of each entry is [manager, times found, last time, last reporter] sub update { return unless $dbm; @@ -71,19 +71,24 @@ sub update my $t = shift; my $by = shift; my $changed; - + + return unless length $line && $line =~ /\b(?:QSL|VIA)\b/i; foreach my $man (split /\b/, uc $line) { my $tok; - if (is_callsign($man)) { + if (is_callsign($man) && !is_qra($man)) { my @pre = Prefix::extract($man); $tok = $man if @pre && $pre[0] ne 'Q'; } elsif ($man =~ /^BUR/) { $tok = 'BUREAU'; - } elsif ($man eq 'HC' || $man =~ /^HOM/) { + } elsif ($man =~ /^LOTW/) { + $tok = 'LOTW'; + } elsif ($man eq 'HC' || $man =~ /^HOM/ || $man =~ /^DIR/) { $tok = 'HOME CALL'; } elsif ($man =~ /^QRZ/) { $tok = 'QRZ.com'; + } else { + next; } if ($tok) { my ($r) = grep {$_->[0] eq $tok} @{$self->[1]}; @@ -99,6 +104,8 @@ sub update unshift @{$self->[1]}, $r; $changed++; } + # prune the number of entries + pop @{$self->[1]} while (@{$self->[1]} > $maxentries); } } $self->put if $changed;