fix (and simplify) the spot dup checking code.
[spider.git] / perl / Spot.pm
index 92f705523a364652c2320ef37814ef9548f42905..76d6e0b63191036f733d168e08636447e684f0ea 100644 (file)
@@ -3,7 +3,7 @@
 #
 # Copyright (c) - 1998 Dirk Koopman G1TLH
 #
-# $Id$
+#
 #
 
 package Spot;
@@ -21,13 +21,7 @@ use QSL;
 
 use strict;
 
-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($fp $statp $maxspots $defaultspots $maxdays $dirprefix $duplth $dupage $filterdef $totalspots $hfspots $vhfspots $maxcalllth);
+use vars qw($fp $statp $maxspots $defaultspots $maxdays $dirprefix $duplth $dupage $filterdef $totalspots $hfspots $vhfspots $maxcalllth $can_encode);
 
 $fp = undef;
 $statp = undef;
@@ -169,13 +163,13 @@ sub prepare
        my @out = @_[0..4];      # just up to the spotter
 
        # normalise frequency
-       $_[0] = sprintf "%.1f", $_[0];
+       $out[0] = sprintf "%.1f", $out[0];
   
        # remove ssids and /xxx if present on spotter
        $out[4] =~ s/-\d+$//o;
 
        # remove leading and trailing spaces
-       $_[3] = unpad($_[3]);
+       $out[3] = unpad($out[3]);
        
        
        # add the 'dxcc' country on the end for both spotted and spotter, then the cluster call
@@ -394,7 +388,8 @@ sub dup
        # remove SSID or area
        $by =~ s|[-/]\d+$||;
        
-       $freq = sprintf "%.1f", $freq;       # normalise frequency
+#      $freq = sprintf "%.1f", $freq;       # normalise frequency
+       $freq = int $freq;       # normalise frequency
        $call = substr($call, 0, $maxcalllth) if length $call > $maxcalllth;
 
        chomp $text;
@@ -407,9 +402,10 @@ sub dup
                }
        }
        my $otext = $text;
-       $text = pack("C*", map {$_ & 127} unpack("C*", $text));
+       $text = Encode::encode("iso-8859-1", $text) if $main::can_encode && Encode::is_utf8($text, 1);
+       $text =~ s/^\+\w+\s*//;                 # remove leading LoTW callsign
        $text =~ s/\s{2,}[\dA-Z]?[A-Z]\d?$// if length $text > 24;
-       $text =~ s/[^\w]//g;
+       $text =~ s/[\W\x00-\x2F\x7B-\xFF]//g; # tautology, just to make quite sure!
        $text = substr($text, 0, $duplth) if length $text > $duplth; 
        my $ldupkey = "X$freq|$call|$by|$text";
        my $t = DXDupe::find($ldupkey);