From 0bcd30f836dc3c31de5437cc96de4f8f76db761a Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Andrej=20Rama=C5=A1euski?= <andrej@x2.cz>
Date: Fri, 26 Nov 2021 22:11:48 +0100
Subject: [PATCH] Better counting

---
 .gitlab-ci.yml                      |  2 +-
 lib/PiTube/Controller/Websockets.pm |  8 ++++++--
 templates/stream/player.html.ep     | 24 +++++++++++++++---------
 3 files changed, 22 insertions(+), 12 deletions(-)

diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml
index 8820f86..05b1afe 100644
--- a/.gitlab-ci.yml
+++ b/.gitlab-ci.yml
@@ -2,7 +2,7 @@ image: docker:20.10.9
 
 variables:
   DOCKER_TLS_CERTDIR: "/certs"
-  IMAGE_VER: 2.2.0
+  IMAGE_VER: 2.2.1
 
 services:
   - docker:20.10.9-dind
diff --git a/lib/PiTube/Controller/Websockets.pm b/lib/PiTube/Controller/Websockets.pm
index 4267ff4..e750005 100644
--- a/lib/PiTube/Controller/Websockets.pm
+++ b/lib/PiTube/Controller/Websockets.pm
@@ -28,12 +28,16 @@ sub main {
 
     $c->on(json => sub( $c, $message ) {
         if ( $message->{stream} ) {
+
             $c->redis->db->set(
                 join (':', ('live', $message->{stream}, $key)),
                 'live', 'EX', 16
             );
-            my $keys = $c->redis->db->keys( 'live:' . $message->{stream} . ':*' );
-            $c->send(encode_json({ watchers => scalar @{$keys} }));
+
+            $c->redis->db->keys( 'live:' . $message->{stream} . ':*', sub {
+                my ($db, $err, $res) = @_ ;
+                $c->send(encode_json({ watchers => scalar @{ $res} }));
+            });
         }
     });
 
diff --git a/templates/stream/player.html.ep b/templates/stream/player.html.ep
index 8c278b5..95c1c0f 100644
--- a/templates/stream/player.html.ep
+++ b/templates/stream/player.html.ep
@@ -3,23 +3,17 @@
 %= include 'includes/player', src => $url, live => 1;
 
 <script>
+var timer;
+var ws;
 
 function connect() {
-  var ws = new WebSocket('<%= $c->config->{ws_url} %>');
+  ws = new WebSocket('<%= $c->config->{ws_url} %>');
 
   ws.onmessage = function (event) {
     var data = JSON.parse(event.data)
-
      if ( typeof data.watchers !== 'undefined' ) {
         console.log(data);
      }
-     else {
-        ws.send(JSON.stringify({
-            event: "watch",
-            stream: "<%= $c->stash->{stream}{id} %>"
-        }));
-     }
-
   };
 
   ws.onclose = function(e) {
@@ -35,6 +29,18 @@ function connect() {
   };
 }
 
+function poll() {
+  timer = setInterval(function() {
+     ws.send(JSON.stringify({
+         event: "watch",
+         stream: "<%= $c->stash->{stream}{id} %>"
+     }));
+  }, 15000);
+}
+
 connect();
+poll();
 
 </script>
+
+
-- 
GitLab