[object Object]

← back to Desktop Dotbar

wire arrange bar to master router

8db4601d737909855fb27038fa3c00de247dd264 · 2026-09-17 08:21:42 -0700 · Steve Abrams

Files touched

Diff

commit 8db4601d737909855fb27038fa3c00de247dd264
Author: Steve Abrams <steve@designerwallcoverings.com>
Date:   Thu Sep 17 08:21:42 2026 -0700

    wire arrange bar to master router
---
 public/index.html | 4 ++--
 server.js         | 4 +++-
 2 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/public/index.html b/public/index.html
index 68758cd..d0ddcdc 100644
--- a/public/index.html
+++ b/public/index.html
@@ -101,7 +101,7 @@ function renderBar(){
   }
   const sp = document.createElement('div'); sp.id='spacer'; bar.appendChild(sp);
   const meta = document.createElement('div'); meta.id='meta';
-  meta.innerHTML = `<button class="arrbtn${arranging?' busy':''}" title="re-tile every screen into the grid now" onclick="arrange()">${arranging?'⧉ Arranging…':(arrangeMsg?('⧉ '+arrangeMsg):'⧉ Arrange')}</button>`
+  meta.innerHTML = `<button class="arrbtn${arranging?' busy':''}" ${arranging?'disabled':''} title="run the master dot-screen arrangement now" onclick="arrange()">${arranging?'⧉ Arranging…':(arrangeMsg?('⧉ '+arrangeMsg):'⧉ Arrange master')}</button>`
     + `<span><b>${data.total}</b> live</span>`
     + `<span class="icobtn" title="refresh" onclick="tick()">⟳</span>`
     + `<span class="icobtn" title="quit bar" onclick="(window.dotbar&&window.dotbar.quit)&&window.dotbar.quit()">✕</span>`;
@@ -149,7 +149,7 @@ async function arrange(){
   try {
     const r = await fetch('/api/arrange', { method:'POST' });
     const j = await r.json().catch(() => null);
-    msg = (j && j.ok) ? `moved ${j.moved || 0}` : ('✗ ' + ((j && j.err) || ('HTTP ' + r.status)));
+    msg = (j && j.busy) ? 'master running' : ((j && j.ok) ? `moved ${j.moved || 0}` : ('✗ ' + ((j && j.err) || ('HTTP ' + r.status))));
   } catch (e) { msg = '✗ ' + ((e && e.message) || 'no server'); }
   arranging = false; arrangeMsg = msg; renderBar();
   clearTimeout(window._arrTimer); window._arrTimer = setTimeout(() => { arrangeMsg = ''; renderBar(); }, 2200);
diff --git a/server.js b/server.js
index e50b9e3..f4dac89 100755
--- a/server.js
+++ b/server.js
@@ -109,7 +109,9 @@ return "notfound"`;
 async function arrange() {
   const { stdout, err } = await run('bash', [ROUTER], 45000);
   const m = /routed (\d+)/.exec(stdout || '');
-  return { ok: !err, moved: m ? parseInt(m[1], 10) : 0, err: err ? String(err).slice(0, 120) : null };
+  const busy = /router busy/i.test(stdout || '');
+  return { ok: !err, moved: m ? parseInt(m[1], 10) : 0,
+    master: true, busy, err: busy ? null : (err ? String(err).slice(0, 120) : null) };
 }
 
 function send(res, code, body, type = 'application/json') {

← 534bea8 dotbar: surface Arrange outcome on the button instead of swa  ·  back to Desktop Dotbar  ·  keep desktop bar supervised by launchd 5bfe0b0 →