use utf8;
# TODO:
-# - support non-fixed sheets
# - detect moves between groups
+# - better daemon behavior
require '../include/config.pm';
my $cell = shift;
my $name = $cell->{'userEnteredValue'}{'stringValue'};
return undef if (!defined($name));
- return undef if ($name =~ /^G[1-4]\.[1-4]/);
+ return undef if ($name =~ /^G[1-4]\.[1-5]/);
$name =~ s/🆕//;
$name =~ s/\(.*\)//g;
$name =~ s/\[.*\]//g;
die $response->decoded_content if !$response->is_success;
}
+sub get_spreadsheet_with_title {
+ my ($ua, $token, $wanted_sheet_title) = @_;
+
+ # See if we have any spreadsheets that match this title.
+ my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&fields=sheets/properties',
+ Authorization => 'Bearer ' . $token
+ );
+ my $sheets_json = JSON::XS::decode_json($response->decoded_content);
+ my ($tab_name, $tab_id);
+ for my $sheet (@{$sheets_json->{'sheets'}}) {
+ my $title = $sheet->{'properties'}{'title'};
+ my $sheet_id = $sheet->{'properties'}{'sheetId'};
+ if ($title =~ /\Q$wanted_sheet_title\E/) {
+ # skv_log("Synkroniserer ($config::invitation_channel, $invitation_ts) mot arket “$title” (fane-ID $sheet_id).");
+ return ($title, $sheet_id);
+ }
+ }
+ return (undef, undef);
+}
+
skv_log("Siste sync startet: " . POSIX::ctime(time));
# Initialize the handles we need for communication.
my $wanted_sheet_title = $linkref->{'sheet_title'};
die "Could not get newest sheet title" if (!defined($wanted_sheet_title));
-# See if we have any spreadsheets that match this title.
-my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&fields=sheets/properties',
- Authorization => 'Bearer ' . $token
-);
-my $sheets_json = JSON::XS::decode_json($response->decoded_content);
-my ($tab_name, $tab_id);
-for my $sheet (@{$sheets_json->{'sheets'}}) {
- my $title = $sheet->{'properties'}{'title'};
- my $sheet_id = $sheet->{'properties'}{'sheetId'};
- if ($title =~ /\Q$wanted_sheet_title\E/) {
- skv_log("Synkroniserer ($config::invitation_channel, $invitation_ts) mot arket “$title” (fane-ID $sheet_id).");
- $tab_name = $title;
- $tab_id = $sheet_id;
- last;
- }
-}
+my ($tab_name, $tab_id) = get_spreadsheet_with_title($ua, $token, $wanted_sheet_title);
if (!defined($tab_name)) {
skv_log("Fant ikke noen fane med “$wanted_sheet_title” i navnet; kan ikke synkronisere.\n");
sheet_batch_update($ua, $token, [ serialize_skv_log_to_sheet() ]);
}
# Get the list of all people in the sheet (we're going to need them soon anyway).
-$response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=' . $tab_name . '!A9:Z5000&fields=sheets/data/rowData/values/userEnteredValue',
+my $response = $ua->get('https://sheets.googleapis.com/v4/spreadsheets/' . $config::sheet_id . '?key=' . $config::gsheets_api_key . '&ranges=' . $tab_name . '!A4:Z5000&fields=sheets/data/rowData/values/userEnteredValue',
Authorization => 'Bearer ' . $token
);
my $main_sheet_json = JSON::XS::decode_json($response->decoded_content);
my %seen_names = ();
{
my $main_sheet_rows = $main_sheet_json->{'sheets'}[0]{'data'}[0]{'rowData'};
- my $rowno = 9;
+ my $rowno = 4;
for my $row (@$main_sheet_rows) {
my $colno = 0;
for my $val (@{$row->{'values'}}) {
if ($ref->{'event_type'} eq 'reaction_added') {
$msg .= ' +';
} else {
- $msg .= ' -';
+ $msg .= ' –';
}
if ($ref->{'reaction'} eq 'open_mouth') {
$msg .= '😮';
$msg .= '❤️';
}
$msg .= ' ';
- $msg .= $slack_userid_to_real_name{$ref->{'userid'}} // ($slack_userid_to_slack_name{$ref->{'userid'}} . ' (fant ikke regneark-navn)');
+ if (exists($slack_userid_to_real_name{$ref->{'userid'}})) {
+ $msg .= $slack_userid_to_real_name{$ref->{'userid'}};
+ } elsif (exists($slack_userid_to_slack_name{$ref->{'userid'}})) {
+ $msg .= $slack_userid_to_slack_name{$ref->{'userid'}} . ' (fant ikke regneark-navn)';
+ } else {
+ # Should only happen if we didn't see the initial reaction_add, only reaction_remove.
+ $msg .= $ref->{'userid'} . ' (fant ikke Slack-navn)';
+ }
push @recent_changes, { values => [{ userEnteredValue => { stringValue => $msg } }] };
}
while (scalar @recent_changes < 50) {