]> git.sesse.net Git - skvidarsync/commitdiff
Split out find_diff() into its own function.
authorSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 28 Oct 2023 17:38:45 +0000 (19:38 +0200)
committerSteinar H. Gunderson <sgunderson@bigfoot.com>
Sat, 28 Oct 2023 17:38:45 +0000 (19:38 +0200)
bin/sync.pl

index aecc86dae67333f0f396e31033fe00f16e41536a..46df547b51e9b8bc3f68032275a0d23799a0bff4 100644 (file)
@@ -216,6 +216,53 @@ sub create_reaction_log {
        return @recent_changes;
 }
 
+# Also applies the diff to the database (a bit ugly).
+sub find_diff {
+       my ($dbh, $invitation_ts, $want_names, $have_names, $seen_names) = @_;
+
+       my @diffs = ();
+       for my $real_name (keys %$want_names) {
+               next if (exists($have_names->{$real_name}));
+               skv_log("Markerer at $real_name skal på trening.");
+               push @diffs, [
+                       $real_name,
+                       {
+                               backgroundColor => {
+                                       red => 1,
+                                       green => 1,
+                                       blue => 0,
+                                       alpha => 1
+                               }
+                       }
+               ];
+               $dbh->do('INSERT INTO applied (channel, ts, name) VALUES (?, ?, ?)', undef,
+                       $config::invitation_channel, $invitation_ts, $real_name);
+       }
+       for my $real_name (keys %$have_names) {
+               next if (exists($want_names->{$real_name}));
+               if (!exists($seen_names->{lc $real_name})) {
+                       # TODO: This can somehow come if we try to add someone who's not in the sheet, too?
+                       skv_log("Ønsket å fjerne at $real_name skulle på trening, men de var ikke i regnearket lenger.");
+               } else {
+                       skv_log("Fjerner at $real_name skal på trening.");
+                       push @diffs, [
+                               $real_name,
+                               {
+                                       backgroundColor => {
+                                               red => 1,
+                                               green => 1,
+                                               blue => 1,
+                                               alpha => 0
+                                       }
+                               }
+                       ];
+                       $dbh->do('DELETE FROM applied WHERE channel=? AND ts=? AND name=?', undef,
+                               $config::invitation_channel, $invitation_ts, $real_name);
+               }
+       }
+       return @diffs;
+}
+
 skv_log("Siste sync startet: " . POSIX::ctime(time));
 
 # Initialize the handles we need for communication.
@@ -396,47 +443,7 @@ while (my $ref = $q->fetchrow_hashref) {
        $have_names{$ref->{'name'}} = 1;
 }
 
-# Find the diff between the two.
-my @diffs = ();
-for my $real_name (keys %want_names) {
-       next if (exists($have_names{$real_name}));
-       skv_log("Markerer at $real_name skal på trening.");
-       push @diffs, [
-               $real_name,
-               {
-                       backgroundColor => {
-                               red => 1,
-                               green => 1,
-                               blue => 0,
-                               alpha => 1
-                       }
-               }
-       ];
-       $dbh->do('INSERT INTO applied (channel, ts, name) VALUES (?, ?, ?)', undef,
-               $config::invitation_channel, $invitation_ts, $real_name);
-}
-for my $real_name (keys %have_names) {
-       next if (exists($want_names{$real_name}));
-       if (!exists($seen_names{lc $real_name})) {
-               # TODO: This can somehow come if we try to add someone who's not in the sheet, too?
-               skv_log("Ønsket å fjerne at $real_name skulle på trening, men de var ikke i regnearket lenger.");
-       } else {
-               skv_log("Fjerner at $real_name skal på trening.");
-               push @diffs, [
-                       $real_name,
-                       {
-                               backgroundColor => {
-                                       red => 1,
-                                       green => 1,
-                                       blue => 1,
-                                       alpha => 0
-                               }
-                       }
-               ];
-               $dbh->do('DELETE FROM applied WHERE channel=? AND ts=? AND name=?', undef,
-                       $config::invitation_channel, $invitation_ts, $real_name);
-       }
-}
+my @diffs = find_diff($dbh, $invitation_ts, \%want_names, \%have_names, \%seen_names);
 
 my @yellow_updates = ();
 if (scalar @diffs > 0) {