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.
);
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) . ")");
}
}