From b12f8a40b85da810d2befad0b12a63eb7f9b3e6e Mon Sep 17 00:00:00 2001 From: schneefux Date: Sat, 25 Mar 2017 18:12:21 +0100 Subject: send a 'done' event --- api.js | 21 ++++++++++++++++++++- index.html | 7 +++++++ 2 files changed, 27 insertions(+), 1 deletion(-) diff --git a/api.js b/api.js index eaf3424..410712a 100644 --- a/api.js +++ b/api.js @@ -160,6 +160,21 @@ async function playerById(id) { console.log("player with id '" + name + "' not found in API"); return undefined; } +/* returns true if a player has pending jobs */ +async function anyJobsRunningFor(name, id) { + var raw = await pool_raw.connect(); + result = await raw.query(` + SELECT COUNT(*)>0 AS jobs_running FROM jobs + WHERE + ( + (type='grab' AND payload->'params'->>'filter[playerNames]'=$1) OR + (type='process' AND payload->>'playername'=$1) OR + (type='compile' AND payload->>'type'='player' AND payload->>'id'=$2) + ) AND status<>'finished' AND status<>'failed' + `, [name, id]); // TODO improve dependency tracking + raw.release(); + return result.rows[0].jobs_running; +} /* update request helpers */ @@ -327,9 +342,13 @@ async function listen() { else player = await db_playerByName(job.player_name); if (player == undefined) throw "player had a job, but doesn't exist"; - console.log("sending '%s' notification for player '%s'", msg.channel, player.name); + console.log("sending '%s' notification for player '%s' ('%s')", msg.channel, player.name, player.id); io.emit(player.name, msg.channel); io.emit(player.id, msg.channel); + if (!await anyJobsRunningFor(player.name, player.id)) { + io.emit(player.name, "done"); + io.emit(player.id, "done"); + } } }); client.query("LISTEN process_finished"); diff --git a/index.html b/index.html index 9caa10f..6ccdbb1 100644 --- a/index.html +++ b/index.html @@ -45,6 +45,13 @@ .css("color", "orange") ); } + if (msg == "done") { + $("#updates").append( + $("
  • ") + .text(name + ": done") + .css("color", "red") + ); + } }); }).fail(function() { $("#updates").append( -- cgit v1.3.1