add extra spot dupe debugging test
authorDirk Koopman <djk@tobit.co.uk>
Fri, 14 Jun 2024 21:34:06 +0000 (22:34 +0100)
committerDirk Koopman <djk@tobit.co.uk>
Fri, 14 Jun 2024 21:34:06 +0000 (22:34 +0100)
Changes
perl/DXProtHandle.pm
perl/Spot.pm

diff --git a/Changes b/Changes
index ca5179166aceaca47836ad8609f786573d496476..dd8c6ba3d0006eef56cb0d7e6a9f07b94c5f4af3 100644 (file)
--- a/Changes
+++ b/Changes
@@ -1,3 +1,11 @@
+14Jun24======================================================================
+1. Add new flag $Spot::no_node_in_dupe (default: 1) which disables including
+   the origin node for spot dupes. This should stop people posting the same
+   spot simultaniously on several nodes at once. Or at least just ignore all
+   the "duplicates".
+
+   The curious thing is that this (default) behaviour was the only deduping
+   done originally and there was some reason to include the origin node. 
 30Apr24======================================================================
 1. "Fix" PC92 and PC19 node user creation and modification such that non-
    connected nodes or nodes that DON'T have sysop altered privilege and
index dc27225d25677691108e67f5724fa46d7dc48914..ffe91741f5091a39259d740bbe274654a9a5f8e7 100644 (file)
@@ -2205,16 +2205,20 @@ sub handle_92
                                        $user->build($parent->build($build));
                                        ++$changed;
                                }
+
                                if ($oldsort ne 'S') {
                                        $user->sort('S');
-                                       unless (DXChannel::get($user->call)) { # only do this if not connected
-                                               my $oldpriv = $user->priv;
-                                               my $oldlock = $user->lockout;
-                                               $user->priv(1) unless defined $oldpriv && $oldpriv;
-                                               $user->lockout(1) unless defined $oldlock;
-                                               dbg(sprintf "PCPROT: PC92 K rec, node $call updated sort: $oldsort->S priv: '$oldpriv'->%d lockout: '$oldlock'->%s", $user->priv || 0, $user->lockout || 0);
-                                               ++$changed;
-                                       }
+                                       dbg(sprintf "PCPROT: PC92 K rec, node $call updated sort: $oldsort->S");
+                                       ++$changed;
+                               }
+                               
+                               unless (DXChannel::get($user->call)) { # only do this if not connected
+                                       my $oldpriv = $user->priv;
+                                       my $oldlock = $user->lockout;
+                                       my $lastchanged = $changed;
+                                       $user->priv(1), ++$changed unless defined $oldpriv && $oldpriv;
+                                       $user->lockout(1), ++$changed unless defined $oldlock;
+                                       dbg(sprintf "PCPROT: PC92 K rec, node $call updated priv: '$oldpriv'->%d lockout: '$oldlock'->%s", $user->priv || 0, $user->lockout || 0) if $lastchanged != $changed;
                                }
                                unless ($user->K) {
                                        dbg(sprintf "PCPROT: PC92 K rec, node $call updated - marked as sending PC92 K records priv: %d lockout: %d ", $user->priv || 0, $user->lockout || 0);
index 316eb4b9be4f78484989480cda8b3a17554f084a..d25ed1223e43d7dbfc1f7a85fcd3b77d5a5a5f6f 100644 (file)
@@ -77,7 +77,7 @@ our $readback = $main::is_win ? 0 : 1; # don't read spot files backwards if it's
 our $qrggranularity = 1000;    # normalise the qrg to this number of hz (default: 100khz), so tough luck if you have a fumble fingers moment
 our $timegranularity = 600;            # ditto to the nearest 100 seconds 
 our $oldstyle = 0;                             # revert to traditional dupe key format
-
+our $no_node_in_dupe = 1;              # remove the node field from dupe considerations. 
 
 if ($readback) {
        $readback = `which tac`;
@@ -530,24 +530,29 @@ sub dup
 
        $l = length $text;
        $dtext .= qq{->final:'$text'($l)} if isdbg('spottext');
-               
-       my $ldupkey = $oldstyle ? "X|$call|$by|$node|$freq|$d|$text" : "X|$call|$by|$node|$qrg|$nd|$text";
 
        my $t = 0;
+       my $ldupkey;
+
+       # new feature: don't include the origin node in Spot dupes
+       # default = true
+       $node = '' if $no_node_in_dupe;
+       $ldupkey = $oldstyle ? "X|$call|$by|$node|$freq|$d|$text" : "X|$call|$by|$node|$qrg|$nd|$text";
+       
        $t = DXDupe::find($ldupkey);
-       dbg("Spot::dup ldupkey $ldupkey t '$t'") if isdbg('spotdup');
+       dbg("Spot::dup ldupkey $ldupkey t '$t'" . ($t?' DUPE':' NEW')) if isdbg('spotdup');
        $dtext .= ' DUPE' if $t;
        dbg("text transforms: $dtext") if length $text && isdbg('spottext');
        return 1 if $t > 0;     
        
        DXDupe::add($ldupkey, $main::systime+$dupage) unless $just_find;
-
+       
        $otext = substr($otext, 0, $duplth) if length $otext > $duplth; 
        $otext =~ s/\s+$//;
        if (length $otext && $otext ne $text) {
                $ldupkey = $oldstyle ? "X|$freq|$call|$by|$otext" : "X|$qrg|$call|$by|$otext";
                $t = DXDupe::find($ldupkey);
-               dbg("Spot::dup (OTEXT) ldupkey $ldupkey t '$t'") if isdbg('spotdup');
+               dbg("Spot::dup (OTEXT) ldupkey $ldupkey t '$t'" . ($t?' DUPE':' NEW')) if isdbg('spotdup');
                if (isdbg('spottext')) {
                        $dtext .= sprintf q{ DUBIOUS '%s'}, join '', @dubious if @dubious;
                        $dtext .= ' DUPE (OTEXT)' if $t;