From b55a5be0062fb96613a2f42c25de550d69283b7a Mon Sep 17 00:00:00 2001
From: Dirk Koopman <djk@tobit.co.uk>
Date: Sat, 1 Jan 2022 20:18:27 +0000
Subject: [PATCH] final versions of Route caching functions

---
 perl/DXCommandmode.pm |  5 +++--
 perl/Route/Node.pm    | 26 +++++++++++++++++---------
 perl/Route/User.pm    | 23 +++++++++++++++--------
 perl/Spot.pm          |  3 +--
 4 files changed, 36 insertions(+), 21 deletions(-)

diff --git a/perl/DXCommandmode.pm b/perl/DXCommandmode.pm
index a2d59a58..4091d9e4 100644
--- a/perl/DXCommandmode.pm
+++ b/perl/DXCommandmode.pm
@@ -1009,8 +1009,9 @@ sub format_dx_spot
 	my ($slot1, $slot2) = ('', '');
 	
 	my $clth = 30 + $self->{width} - 80;    # allow comment to grow according the screen width 
-	my $comment = substr (($_[3] || ''), 0, $clth);
-	$comment =~ s/\t/ /g;
+	my $c = $_[3];
+	$c =~ s/\t/ /g;
+	my $comment = substr (($c || ''), 0, $clth);
 	$comment .= ' ' x ($clth - (length($comment)));
 	
     if (!$slot1 && $self->{user}->wantgrid) {
diff --git a/perl/Route/Node.pm b/perl/Route/Node.pm
index 90f691e4..4aa8be9e 100644
--- a/perl/Route/Node.pm
+++ b/perl/Route/Node.pm
@@ -400,23 +400,31 @@ sub TO_JSON { return { %{ shift() } }; }
 sub write_cache
 {
 	my $json = DXJSON->new;
-	$json->canonical(0)->allow_blessed(1)->convert_blessed(1);
-	
+	$json->canonical(isdbg('routecache'));
+
 	my $ta = [ gettimeofday ];
-	$json->indent(1)->canonical(1) if isdbg('routecache');
-	my $s = eval {$json->encode(\%list)};
-	if ($s) {
+	my @s;
+	eval {
+		while (my ($k, $v) = each  %list) {
+		    push @s, "$k:" . $json->encode($v) . "\n";
+	    }
+	};
+	if (!$@ && @s) {
 		my $fh = IO::File->new(">$cachefn") or confess("writing $cachefn $!");
-		$fh->print($s);
+		if (isdbg("routecache")) {
+			$fh->print(sort @s);
+		}
+		else {
+			$fh->print(@s);
+		}
 		$fh->close;
 	} else {
-		dbg("Route::User:Write_cache error '$@'");
+		dbg("Route::Node:Write_cache error '$@'");
 		return;
 	}
 	$json->indent(0)->canonical(0);
 	my $diff = _diffms($ta);
-	my $size = sprintf('%.3fKB', (length($s) / 1000));
-	dbg("Route::User:WRITE_CACHE size: $size time to write: $diff mS");
+	dbg("Route::Node:WRITE_CACHE time to write: $diff mS");
 }
 
 
diff --git a/perl/Route/User.pm b/perl/Route/User.pm
index 51d14f21..bbd289d2 100644
--- a/perl/Route/User.pm
+++ b/perl/Route/User.pm
@@ -103,23 +103,30 @@ sub TO_JSON { return { %{ shift() } }; }
 sub write_cache
 {
 	my $json = DXJSON->new;
-	$json->canonical(0)->allow_blessed(1)->convert_blessed(1);
+	$json->canonical(isdbg('routecache'));
 	
 	my $ta = [ gettimeofday ];
-	$json->indent(1)->canonical(1) if isdbg('routecache');
-	my $s = eval {$json->encode(\%list)};
-	if ($s) {
+	my @s;
+	eval {
+		while (my ($k, $v) = each  %list) {
+		    push @s, "$k:" . $json->encode($v) . "\n";
+	    }
+	};
+	if (!$@ && @s) {
 		my $fh = IO::File->new(">$cachefn") or confess("writing $cachefn $!");
-		$fh->print($s);
+		if (isdbg("routecache")) {
+			$fh->print(sort @s);
+		}
+		else {
+			$fh->print(@s);
+		}
 		$fh->close;
 	} else {
 		dbg("Route::User:Write_cache error '$@'");
 		return;
 	}
-	$json->indent(0)->canonical(0);
 	my $diff = _diffms($ta);
-	my $size = sprintf('%.3fKB', (length($s) / 1000));
-	dbg("Route::User:WRITE_CACHE size: $size time to write: $diff mS");
+	dbg("Route::User:WRITE_CACHE time to write: $diff mS");
 }
 
 #
diff --git a/perl/Spot.pm b/perl/Spot.pm
index 852a3bda..89fdec5b 100644
--- a/perl/Spot.pm
+++ b/perl/Spot.pm
@@ -238,10 +238,9 @@ sub prepare
 	# remove ssids and /xxx if present on spotter
 	$out[4] =~ s/-\d+$//o;
 
-	# remove leading and trailing spaces
+	# remove leading and trailing spaces from comment field
 	$out[3] = unpad($out[3]);
 	
-	
 	# add the 'dxcc' country on the end for both spotted and spotter, then the cluster call
 	my @spd = Prefix::cty_data($out[1]);
 	push @out, $spd[0];
-- 
2.43.0