only check for lockout if the user exists
[spider.git] / perl / Spot.pm
index cb91c18aead934482da1878bb292e7b1ad6672e6..8b66b0f6c762f78c398c230a64856a7ae89a621a 100644 (file)
@@ -23,7 +23,7 @@ use vars qw($fp $maxspots $defaultspots $maxdays $dirprefix $duplth $dupage $fil
 $fp = undef;
 $maxspots = 50;                                        # maximum spots to return
 $defaultspots = 10;                            # normal number of spots to return
-$maxdays = 3*31;                               # normal maximum no of days to go back
+$maxdays = 100;                                # normal maximum no of days to go back
 $dirprefix = "spots";
 $duplth = 20;                                  # the length of text to use in the deduping
 $dupage = 3*3600;               # the length of time to hold spot dups
@@ -95,20 +95,20 @@ sub prefix
        return $fp->{prefix};
 }
 
-# add a spot to the data file (call as Spot::add)
-sub add
+# fix up the full spot data from the basic spot data
+sub prepare
 {
-       my @spot = @_;                          # $freq, $call, $t, $comment, $spotter = @_
-       my @out = @spot[0..4];      # just up to the spotter
+       # $freq, $call, $t, $comment, $spotter = @_
+       my @out = @_[0..4];      # just up to the spotter
 
        # normalise frequency
-       $spot[0] = sprintf "%.f", $spot[0];
+       $_[0] = sprintf "%.1f", $_[0];
   
        # remove ssids if present on spotter
        $out[4] =~ s/-\d+$//o;
 
        # remove leading and trailing spaces
-       $spot[3] = unpad($spot[3]);
+       $_[3] = unpad($_[3]);
        
        # add the 'dxcc' country on the end for both spotted and spotter, then the cluster call
        my @dxcc = Prefix::extract($out[1]);
@@ -121,17 +121,16 @@ sub add
        my $spotter_itu = (@dxcc > 0 ) ? $dxcc[1]->itu() : 0;
        my $spotter_cq = (@dxcc > 0 ) ? $dxcc[1]->cq() : 0;
        push @out, $spotter_dxcc;
-       push @out, $spot[5];
-
-       my $buf = join("\^", @out);
-
-       # compare dates to see whether need to open another save file (remember, redefining $fp 
-       # automagically closes the output file (if any)). 
-       $fp->writeunix($out[2], $buf);
-  
+       push @out, $_[5];
        return (@out, $spotted_itu, $spotted_cq, $spotter_itu, $spotter_cq);
 }
 
+sub add
+{
+       my $buf = join("\^", @_[0..7]);
+       $fp->writeunix($_[2], $buf);
+}
+
 # search the spot database for records based on the field no and an expression
 # this returns a set of references to the spots
 #
@@ -170,7 +169,8 @@ sub search
        my @todate;
 
        $dayfrom = 0 if !$dayfrom;
-       $dayto = $maxdays if !$dayto;
+       $dayto = $maxdays unless $dayto;
+       $dayto = $dayfrom + $maxdays if $dayto < $dayfrom;
        @fromdate = Julian::sub(@today, $dayfrom);
        @todate = Julian::sub(@fromdate, $dayto);
        $from = 0 unless $from;
@@ -230,6 +230,7 @@ sub ftor
        my ($a, $b) = @_;
        return undef unless $a < $b;
        $b--;
+       my $d = $b - $a;
        my @a = split //, $a;
        my @b = split //, $b;
        my $out;
@@ -239,7 +240,9 @@ sub ftor
        while (@b) {
                my $aa = shift @a;
                my $bb = shift @b;
-               if ($aa eq $bb) {
+               if (@b < (length $d) - 1) {
+                       $out .= '\\d';
+               } elsif ($aa eq $bb) {
                        $out .= $aa;
                } elsif ($aa < $bb) {
                        $out .= "[$aa-$bb]";