]> git.cworth.org Git - lmno-server/commitdiff
admin: Fix admin page to correctly show active/idle games and players
authorCarl Worth <cworth@cworth.org>
Thu, 25 Jun 2020 01:32:54 +0000 (18:32 -0700)
committerCarl Worth <cworth@cworth.org>
Fri, 26 Jun 2020 14:37:59 +0000 (07:37 -0700)
A while ago we changed the storage for players. Previously we had a
_players array and a separate clients array for their
connections. Then at some point in the past we changed to an array
named "players" and instead of separate "clients" each player in
"players" now has its own list of connections.

Ever since that change the admin view has been broken since it wasn't
updated to track that change. Here we bring it up to date, (including
the addition of two nunjucks filters, "active" and "idle" to help with
this).

lmno.js
templates/admin.html

diff --git a/lmno.js b/lmno.js
index c2942a419446562c0da4a0b11ec23318828ef002..0db678957f0d0e09717fd9e6257d5c3d57189dff 100644 (file)
--- a/lmno.js
+++ b/lmno.js
@@ -50,11 +50,25 @@ app.use(session({
   saveUninitialized: false
 }));
 
-nunjucks.configure("templates", {
+const njx = nunjucks.configure("templates", {
   autoescape: true,
   express: app
 });
 
+njx.addFilter('active', function(list) {
+  if (list)
+    return list.filter(e => e.active === true);
+  else
+    return null;
+});
+
+njx.addFilter('idle', function(list) {
+  if (list)
+    return list.filter(e => e.active === false);
+  else
+    return null;
+});
+
 /* Load each of our game mini-apps.
  *
  * Each "engine" we load here must have a property .Game on the
@@ -283,12 +297,12 @@ app.get('/admin/', auth_admin, (request, response) => {
   let idle = [];
 
   for (let id in lmno.games) {
-    if (lmno.games[id].players.length)
+    if (lmno.games[id].players.filter(p => p.active).length > 0)
       active.push(lmno.games[id]);
     else
       idle.push(lmno.games[id]);
   }
-  response.render('admin.html', { test: "foobar", games: { active: active, idle: idle}});
+  response.render('admin.html', { games: { active: active, idle: idle}});
 });
 
 
index 39939b2f4b1c8fb3402632f3cdfa5b856377961c..3a25e608d2562c0c44e9fb367014b9857982f240 100644 (file)
 <ul>
   {% for game in games.active %}
   <li>
-    {{ game.id }} ({{ game.clients.length }}/{{ game._players.length }} active)
-    {% for player in game._players %}
-      {{ player.name }}
-    {% endfor %}
+    {{game.meta.name}}: {{ game.id }} {{ game.players.length }} players
+    <ul>
+      <li>
+        Active players:
+        {% for player in game.players|active %}
+          {{ player.name }}
+        {% endfor %}
+      </li>
+      <li>
+        Idle players:
+        {% for player in game.players|idle %}
+          {{ player.name }}
+        {% endfor %}
+      </li>
+    </ul>
   </li>
   {% endfor %}
 </ul>
 <ul>
   {% for game in games.idle %}
   <li>
-    {{ game.id }} ({{ game._players.length }})
-    {% for player in game._players %}
-      {{ player.name }}
-    {% endfor %}
+    {{game.meta.name}}: {{ game.id }} {{ game.players.length }} players
+    <ul>
+      <li>
+        {% for player in game.players %}
+          {{ player.name }}
+        {% endfor %}
+      </li>
+    </ul>
   </li>
   {% endfor %}
 </ul>