]> git.sesse.net Git - skvidarsync/commitdiff
Factor out %seen_names computation into a function.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 28 Oct 2023 17:30:48 +0000 (19:30 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 28 Oct 2023 17:30:48 +0000 (19:30 +0200)
bin/sync.pl

index 6c4db28fd3ccff67766b0bed1c394bd6988943dc..0585df3bb186e6948ddd229251e45e21d2c125e2 100644 (file)
@@ -157,6 +157,28 @@ sub get_spreadsheet_with_title {
        return (undef, undef);
 }
 
+# Make a mapping of lowercase name -> list of [canonical name, row number, column number]
+sub find_where_each_name_is {
+       my $json = shift;
+
+       my %seen_names = ();
+       my $rows = $json->{'sheets'}[0]{'data'}[0]{'rowData'};
+       my $rowno = 4;
+       for my $row (@$rows) {
+               my $colno = 0;
+               for my $val (@{$row->{'values'}}) {
+                       my $name = get_spreadsheet_name($val);
+                       if (defined($name)) {
+                               push @{$seen_names{lc $name}}, [$name, $rowno, $colno];
+                       }
+                       ++$colno;
+               }
+               ++$rowno;
+       }
+
+       return %seen_names;
+}
+
 skv_log("Siste sync startet: " . POSIX::ctime(time));
 
 # Initialize the handles we need for communication.
@@ -195,28 +217,14 @@ my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $conf
 );
 my $main_sheet_json = JSON::XS::decode_json($response->decoded_content);
 
-# Duplicate detection
-my %seen_names = ();
-{
-       my $main_sheet_rows = $main_sheet_json->{'sheets'}[0]{'data'}[0]{'rowData'};
-       my $rowno = 4;
-       for my $row (@$main_sheet_rows) {
-               my $colno = 0;
-               for my $val (@{$row->{'values'}}) {
-                       my $name = get_spreadsheet_name($val);
-                       if (defined($name)) {
-                               push @{$seen_names{lc $name}}, [$name, $rowno, $colno];
-                       }
-                       ++$colno;
-               }
-               ++$rowno;
-       }
-       for my $name (sort keys %seen_names) {
-               my $seen = $seen_names{$name};
-               if (scalar @$seen >= 2) {
-                       my $exemplar = $seen->[0][0];
-                       skv_log("Duplikat: $exemplar (" . format_cell_names_for_seen($seen) . ")");
-               }
+my %seen_names = find_where_each_name_is($main_sheet_json);
+
+# Find duplicates.
+for my $name (sort keys %seen_names) {
+       my $seen = $seen_names{$name};
+       if (scalar @$seen >= 2) {
+               my $exemplar = $seen->[0][0];
+               skv_log("Duplikat: $exemplar (" . format_cell_names_for_seen($seen) . ")");
        }
 }