diff options
Diffstat (limited to 'desktop/island')
| -rw-r--r-- | desktop/island/Logic.js | 9 | ||||
| -rw-r--r-- | desktop/island/test_logic.js | 9 |
2 files changed, 17 insertions, 1 deletions
diff --git a/desktop/island/Logic.js b/desktop/island/Logic.js index e79625c..24458cd 100644 --- a/desktop/island/Logic.js +++ b/desktop/island/Logic.js @@ -62,3 +62,12 @@ function parseOpenWindow(data) { const p = String(data || "").split(","); return { address: p[0] || "", workspace: p[1] || "", appClass: p[2] || "" }; } + +// OBS's outputDuration (ms) as mm:ss, or h:mm:ss past an hour. +function obsElapsed(ms) { + const s = Math.floor((ms > 0 ? ms : 0) / 1000); + const two = n => String(n).padStart(2, "0"); + const h = Math.floor(s / 3600); + const mmss = `${two(Math.floor(s / 60) % 60)}:${two(s % 60)}`; + return h ? `${h}:${mmss}` : mmss; +} diff --git a/desktop/island/test_logic.js b/desktop/island/test_logic.js index 5932991..ee237cc 100644 --- a/desktop/island/test_logic.js +++ b/desktop/island/test_logic.js @@ -8,7 +8,7 @@ const assert = require("assert"); const src = fs.readFileSync(__dirname + "/Logic.js", "utf8") .replace(/^\.pragma library$/m, ""); const L = new Function(src + - "\nreturn { volumeIcon, vmRole, flagFor, privacyRoles, parseOpenWindow };")(); + "\nreturn { volumeIcon, vmRole, flagFor, privacyRoles, parseOpenWindow, obsElapsed };")(); // Volume: muted or zero is muted, then thirds. assert.strictEqual(L.volumeIcon(0.5, true), "audio-volume-muted"); @@ -52,4 +52,11 @@ assert.deepStrictEqual(L.parseOpenWindow("55d1a0,3,kitty,a, b, c"), assert.deepStrictEqual(L.parseOpenWindow(""), { address: "", workspace: "", appClass: "" }); +// OBS elapsed: mm:ss under an hour, h:mm:ss past it. +assert.strictEqual(L.obsElapsed(0), "00:00"); +assert.strictEqual(L.obsElapsed(61000), "01:01"); +assert.strictEqual(L.obsElapsed(3599999), "59:59"); +assert.strictEqual(L.obsElapsed(3661000), "1:01:01"); +assert.strictEqual(L.obsElapsed(undefined), "00:00"); + console.log("ok"); |
