]> git.sesse.net Git - skvidarsync/blobdiff - bin/ws.pl
Handle edits, at last?
[skvidarsync] / bin / ws.pl
index fd01cb551bf35ebab43c4327bf65f4db5584b25a..583ab38cd6e3802dd5146c029d7161f9db9479d2 100644 (file)
--- a/bin/ws.pl
+++ b/bin/ws.pl
@@ -69,10 +69,16 @@ sub ws_cb {
 
        $connection->on(each_message => sub {
                my ($conn, $message) = @_;
+               my $now = [Time::HiRes::gettimeofday];
                print STDERR "Message: $message->{'body'}\n";
                my $json = JSON::XS::decode_json($message->{'body'});
                eval {
                        if (exists($json->{'payload'}{'event'})) {
+                               if (exists($json->{'payload'}{'event'}{'event_ts'}) &&
+                                   $json->{'payload'}{'event'}{'event_ts'} =~ /(\d+)\.(\d+)/) {
+                                       my $elapsed = Time::HiRes::tv_interval([$1, $2], $now);
+                                       printf STDERR "Message used %.1f ms to reach us.\n", 1e3 * $elapsed;
+                               }
                                handle_event($json->{'payload'}{'event'});
                        }
                };
@@ -111,14 +117,16 @@ sub handle_event {
        my $user = $ev->{'user'};
 
        if ($type eq 'message') {
-               if ($ev->{'message'}{'text'} =~ /(20\d{2}-\d{2}-\d{2})/) {
+               if ($ev->{'text'} =~ /(20\d{2}-\d{2}-\d{2})/ || $ev->{'message'}{'text'} =~ /(20\d{2}-\d{2}-\d{2})/) {
                        # TODO: What if edits happen out-of-order?
                        my $date = $1;
                        my $channel = $ev->{'channel'};
                        my $ts = $ev->{'message'}{'ts'};
                        print STDERR "Matching message {$channel, $ts} to date $date\n";
-                       $dbh->do('INSERT INTO message_sheet_link (channel, ts, sheet_title) VALUES (?,?,?)', undef,
+                       $dbh->do('INSERT INTO message_sheet_link (channel, ts, sheet_title) VALUES (?,?,?) ON CONFLICT (channel,ts) DO UPDATE SET sheet_title=EXCLUDED.sheet_title', undef,
                                $channel, $ts, $date);
+                       # Blow the cache.
+                       $dbh->do('UPDATE message_sheet_link SET tab_name=NULL, tab_id=NULL WHERE channel=?', undef, $channel);
                } else {
                        print STDERR "No date found in message, ignoring\n";
                }