From d9a91fe5b12a17275c6cc98aa3dd4d5e4d843a40 Mon Sep 17 00:00:00 2001 From: pdmarf <135653545+pdmarf@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:13:39 +0100 Subject: [PATCH 1/5] v1.0.23: stable-rebuild base from v1.0.15 Known-good state: blue icons, cross-folder timer fix, name dropdown. Versioned above master (1.0.22) so auto-updater does not overwrite. Install script points at stable-rebuild branch. Co-Authored-By: Claude Sonnet 4.6 --- com.pdma.notion-timer.sdPlugin/bin/plugin.js | 2 +- .../bin/plugin.js.sig | Bin 64 -> 64 bytes install.sh | 2 +- notion-timer.streamDeckPlugin | Bin 99324 -> 98470 bytes src/plugin.ts | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js b/com.pdma.notion-timer.sdPlugin/bin/plugin.js index ec3f8d8..a59bd84 100644 --- a/com.pdma.notion-timer.sdPlugin/bin/plugin.js +++ b/com.pdma.notion-timer.sdPlugin/bin/plugin.js @@ -6438,7 +6438,7 @@ async function stopTimer(token, entryId) { } // src/plugin.ts -var CURRENT_VERSION = "1.0.15"; +var CURRENT_VERSION = "1.0.23"; var GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/master"; var SIGNING_PUBLIC_KEY = `-----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAN7ko8TUpuPzPAJuKAZCRjV0c4ZSlou5d9pUAF6o12b4= diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig b/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig index 99f1a519923ecd446c3774e86b637c4b7b7048db..9289204994e7bb92b08c00b3aec5ad39665bef85 100644 GIT binary patch literal 64 zcmV-G0Kfm_C_Q!c(ELeQh=Clta2_61{6sKxQ3;OPX{J5S^%)JhG;y4ae}YlXc6p@s_;Y1~*S3DZx` WBvjtDY%2iRbFvU+Q*~@!rb`dg*c|Zy diff --git a/install.sh b/install.sh index 35711f1..4c174a3 100644 --- a/install.sh +++ b/install.sh @@ -7,7 +7,7 @@ TMP_DIR=$(mktemp -d) PLUGIN_FILE="${TMP_DIR}/notion-timer.streamDeckPlugin" echo "Downloading Notion Timer..." -curl -sL "${GITEA}/${REPO}/raw/branch/master/notion-timer.streamDeckPlugin" -o "${PLUGIN_FILE}" +curl -sL "${GITEA}/${REPO}/raw/branch/stable-rebuild/notion-timer.streamDeckPlugin" -o "${PLUGIN_FILE}" echo "Installing — Stream Deck will open automatically..." open "${PLUGIN_FILE}" diff --git a/notion-timer.streamDeckPlugin b/notion-timer.streamDeckPlugin index 36aadc827d709b63e31008fa66b32fe4f6092faf..c3273a20752a5b1957517c1a56cbd76ca0a706c9 100644 GIT binary patch delta 517 zcmey<&bF+PZ9+2h&lS@rrdhCy)x63quX#23&V8wk`&X-jgeT`}_=ClPa+?optmgy^ zmKs?aK^13~R&X;gvV3J^U|~&lxvg%K-k&O(swg>M zBj&lvfre`4d!Kn-Jr4W{GB92Ht8gddmtW_2K-Pnt!2!13(wE(Na-*>=JIFR5-h9;9 zY6;V?+RcnNY&j=azVKv{*uDA4i_3vPdizW(#(2BQ@1IC)-urk9%k&==jQJqXPS2`j zbYliOb^62_Mw#vBD;aHAz~X#$jIl6rvFZL*jBH@x-a1BiRACNSNKF4-$LP-tbO+cd zurSDl(+levyibmi`9&ZlOH^0ogUcC=*7%t%s4%;kx_U0 z>1IaR=?!&^EYs&VGO94|E@Ye>_)vBF>qf?4X4YcH>5ff|Wz4=MAW?Y7|?WXTrpdowf3ce-K~qp&113l{?j^iQ4|v)&@(g#(Zc!UmH!vMWtq zW6V35-+3^s=Y zY<)q(Z|TX6#wWnSDG0cIpO<8`ZmRt1u;7>q;pQ7cf>K>U`T5aN z+h=KTHs&+EPvvm^tg&#f@SfdTji2Lc zB!UwSADMfwEw~uwcv|S)NuhO5li!8St3No4%hq>ZR^z?9Z+}isnyz|u+F##|lA=B8 zu6AV?pWBxkYTn~_tq&6UJKy3=93ph0fPSCuxT)?Y(C-CI)8&jAjksWb)`9ss@34YE z>vzke8JqHcaQfXjm2z>mf>TaNlKTvn=iiPpriX70+U)RQ-i+^=60<&DJ5*BkS7Rgh z!%vPLJ%z&CXCK_&671!hH7cP+*0-v2azDZbh_7|t;+-}w3({6B!UO$&{ zZr3*%$NQ>brcKi|CfP(jS6Mgnmew+Xm}3vx^(XTzyt;Bx_s1{}Yn6VV^lE0|)1Bqh zgw^9pZdLwmUvqTE;Ec2sQ{T3`(BUnQ9rm!NLKxjQ5#+?)UE^7KHaRIQI2`> zW3Z~}e+wCfr}x)0IxxR|0ulLM<#T`V7QTn4aChs6PEe4I|fd|2m+q{1+f${ps`T f7#)}#t)@S$WAqkbWdpfc0ti0<%YtteAlCx`Z(O-M diff --git a/src/plugin.ts b/src/plugin.ts index 4c0599b..d59075a 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -1,4 +1,4 @@ -const CURRENT_VERSION = "1.0.15"; +const CURRENT_VERSION = "1.0.23"; const GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/master"; const SIGNING_PUBLIC_KEY = `-----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAN7ko8TUpuPzPAJuKAZCRjV0c4ZSlou5d9pUAF6o12b4= From 3a91fafe8f37c3427668a732f576bc9ed4ce9a39 Mon Sep 17 00:00:00 2001 From: pdmarf <135653545+pdmarf@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:41:29 +0100 Subject: [PATCH 2/5] v1.0.25: add Check for Updates button Co-Authored-By: Claude Sonnet 4.6 --- com.pdma.notion-timer.sdPlugin/bin/plugin.js | 30 ++++++++++++++---- .../bin/plugin.js.sig | 4 ++- .../ui/property-inspector.html | 29 +++++++++++++++++ notion-timer.streamDeckPlugin | Bin 98470 -> 98754 bytes src/plugin.ts | 24 ++++++++++---- 5 files changed, 74 insertions(+), 13 deletions(-) diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js b/com.pdma.notion-timer.sdPlugin/bin/plugin.js index a59bd84..022e76d 100644 --- a/com.pdma.notion-timer.sdPlugin/bin/plugin.js +++ b/com.pdma.notion-timer.sdPlugin/bin/plugin.js @@ -6438,7 +6438,7 @@ async function stopTimer(token, entryId) { } // src/plugin.ts -var CURRENT_VERSION = "1.0.23"; +var CURRENT_VERSION = "1.0.25"; var GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/master"; var SIGNING_PUBLIC_KEY = `-----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAN7ko8TUpuPzPAJuKAZCRjV0c4ZSlou5d9pUAF6o12b4= @@ -6456,24 +6456,35 @@ function fetchWithTimeout2(url) { const timer = setTimeout(() => controller.abort(), 1e4); return fetch(url, { signal: controller.signal }).finally(() => clearTimeout(timer)); } -async function checkForUpdates() { +async function checkForUpdates(sendStatus) { try { const resp = await fetchWithTimeout2(`${GITEA_BASE}/version.json`); - if (!resp.ok) return; + if (!resp.ok) { + sendStatus?.("Update check failed"); + return; + } const { version } = await resp.json(); if (!/^\d+\.\d+\.\d+$/.test(version)) return; - if (!isNewerVersion(version, CURRENT_VERSION)) return; + if (!isNewerVersion(version, CURRENT_VERSION)) { + sendStatus?.(`Already up to date (v${CURRENT_VERSION})`); + return; + } + sendStatus?.(`Updating to v${version}\u2026`); const [pluginResp, sigResp] = await Promise.all([ fetchWithTimeout2(`${GITEA_BASE}/com.pdma.notion-timer.sdPlugin/bin/plugin.js`), fetchWithTimeout2(`${GITEA_BASE}/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig`) ]); - if (!pluginResp.ok || !sigResp.ok) return; + if (!pluginResp.ok || !sigResp.ok) { + sendStatus?.("Download failed"); + return; + } const newCode = await pluginResp.text(); const sigBytes = Buffer.from(await sigResp.arrayBuffer()); const { verify } = await import("node:crypto"); const valid = verify(null, Buffer.from(newCode), SIGNING_PUBLIC_KEY, sigBytes); if (!valid) { plugin_default.logger.error("Update rejected: signature verification failed"); + sendStatus?.("Update rejected: invalid signature"); return; } const fs3 = await import("fs"); @@ -6481,7 +6492,9 @@ async function checkForUpdates() { plugin_default.logger.info(`Updated to ${version}, restarting\u2026`); process.exit(0); } catch (err) { - plugin_default.logger.error(`Update check failed: ${err instanceof Error ? err.message : String(err)}`); + const msg = err instanceof Error ? err.message : String(err); + plugin_default.logger.error(`Update check failed: ${msg}`); + sendStatus?.(`Error: ${msg}`); } } var HARDCODED = { @@ -6621,6 +6634,11 @@ plugin_default.ui.onSendToPlugin(async (ev) => { const title = buttonTitle(ev.payload.settings.projectName || ""); if (title) await ev.action.setTitle(title); } + if (ev.payload.event === "checkForUpdates") { + const send = (msg) => plugin_default.ui.sendToPropertyInspector({ event: "updateStatus", message: msg }); + send("Checking\u2026"); + await checkForUpdates(send); + } }); plugin_default.connect(); setTimeout(() => checkForUpdates(), 1e4); diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig b/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig index 9289204..d1817a8 100644 --- a/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig +++ b/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig @@ -1 +1,3 @@ -(=uIXpTD0tQ εFr!(\${ EHR05q \ No newline at end of file +Һ +HJ{l >0^t @@ -125,6 +145,8 @@

+ +

@@ -229,6 +251,10 @@ document.getElementById("projectSelect").addEventListener("change", save); document.getElementById("notionToken").addEventListener("input", scheduleCredSave); document.getElementById("userId").addEventListener("change", saveCredentials); + document.getElementById("updateBtn").addEventListener("click", function() { + document.getElementById("updateStatus").textContent = ""; + $PI.sendToPlugin({ event: "checkForUpdates" }); + }); }); $PI.onDidReceiveGlobalSettings(function(jsn) { @@ -268,6 +294,9 @@ $PI.onSendToPropertyInspector(ACTION_UUID, function(jsn) { var payload = jsn.payload; + if (payload.event === "updateStatus") { + document.getElementById("updateStatus").textContent = payload.message; + } if (payload.event === "projects") { if (payload.version) { document.getElementById("versionText").textContent = "v" + payload.version; diff --git a/notion-timer.streamDeckPlugin b/notion-timer.streamDeckPlugin index c3273a20752a5b1957517c1a56cbd76ca0a706c9..e30bf4c36740521bf9fcb307e5e80a828b1dcb7a 100644 GIT binary patch delta 5142 zcmZWtcQl;www=*?FF~R+y69c>Xh9GpMki`?qZ_^V!Kl$iXVgTA5M4w>?GtbI&p61V6y&Y$=-d8;ypqV9mmL+O z5(wteEPT@K(rE$JDED*Ub3+YNCfwhLH(z)RvQ_wOxn!1HOpt5T^pRJ@R7NPE$Et#p z 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 delta 4823 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 { return fetch(url, { signal: controller.signal }).finally(() => clearTimeout(timer)); } -async function checkForUpdates(): Promise { +async function checkForUpdates(sendStatus?: (msg: string) => void): Promise { try { const resp = await fetchWithTimeout(`${GITEA_BASE}/version.json`); - if (!resp.ok) return; + if (!resp.ok) { sendStatus?.("Update check failed"); return; } const { version } = await resp.json() as { version: string }; if (!/^\d+\.\d+\.\d+$/.test(version)) return; - if (!isNewerVersion(version, CURRENT_VERSION)) return; + if (!isNewerVersion(version, CURRENT_VERSION)) { + sendStatus?.(`Already up to date (v${CURRENT_VERSION})`); + return; + } + sendStatus?.(`Updating to v${version}…`); const [pluginResp, sigResp] = await Promise.all([ fetchWithTimeout(`${GITEA_BASE}/com.pdma.notion-timer.sdPlugin/bin/plugin.js`), fetchWithTimeout(`${GITEA_BASE}/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig`), ]); - if (!pluginResp.ok || !sigResp.ok) return; + if (!pluginResp.ok || !sigResp.ok) { sendStatus?.("Download failed"); return; } const newCode = await pluginResp.text(); const sigBytes = Buffer.from(await sigResp.arrayBuffer()); @@ -40,6 +44,7 @@ async function checkForUpdates(): Promise { const valid = verify(null, Buffer.from(newCode), SIGNING_PUBLIC_KEY, sigBytes); if (!valid) { streamDeck.logger.error("Update rejected: signature verification failed"); + sendStatus?.("Update rejected: invalid signature"); return; } @@ -48,7 +53,9 @@ async function checkForUpdates(): Promise { streamDeck.logger.info(`Updated to ${version}, restarting…`); process.exit(0); } catch (err) { - streamDeck.logger.error(`Update check failed: ${err instanceof Error ? err.message : String(err)}`); + const msg = err instanceof Error ? err.message : String(err); + streamDeck.logger.error(`Update check failed: ${msg}`); + sendStatus?.(`Error: ${msg}`); } } @@ -235,6 +242,11 @@ streamDeck.ui.onSendToPlugin<{ event: string; settings?: TimerSettings }>(async const title = buttonTitle(ev.payload.settings.projectName || ""); if (title) await ev.action.setTitle(title); } + if (ev.payload.event === "checkForUpdates") { + const send = (msg: string) => streamDeck.ui.sendToPropertyInspector({ event: "updateStatus", message: msg }); + send("Checking…"); + await checkForUpdates(send); + } }); streamDeck.connect(); From 47d8c7d98d46633fcefbd1bb333c1ff59e5738d1 Mon Sep 17 00:00:00 2001 From: pdmarf <135653545+pdmarf@users.noreply.github.com> Date: Thu, 23 Apr 2026 21:43:46 +0100 Subject: [PATCH 3/5] v1.0.25: update manifest version to 1.0.25 Stream Deck plugin settings panel was showing "version 1" because manifest.json had a hardcoded "Version": "1.0.0". Co-Authored-By: Claude Sonnet 4.6 --- com.pdma.notion-timer.sdPlugin/manifest.json | 2 +- notion-timer.streamDeckPlugin | Bin 98754 -> 98756 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/com.pdma.notion-timer.sdPlugin/manifest.json b/com.pdma.notion-timer.sdPlugin/manifest.json index d000408..76b72fc 100644 --- a/com.pdma.notion-timer.sdPlugin/manifest.json +++ b/com.pdma.notion-timer.sdPlugin/manifest.json @@ -2,7 +2,7 @@ "Author": "Pete Marfleet", "Description": "Toggle Notion time tracking for a project with a single button press.", "Name": "Notion Timer", - "Version": "1.0.0", + "Version": "1.0.25", "SDKVersion": 2, "Software": { "MinimumVersion": "5.0" }, "OS": [{ "Platform": "mac", "MinimumVersion": "10.11" }], diff --git a/notion-timer.streamDeckPlugin b/notion-timer.streamDeckPlugin index e30bf4c36740521bf9fcb307e5e80a828b1dcb7a..d25c9f2b51774ca622923226682afa193dd38acc 100644 GIT binary patch delta 711 zcmX@q%yy)ijW@uXnT3l11Pa$qpU7**+VU#1tYxyNvGjD23Pz!grQRBhKQ|xLSj@#( zGC9@QgS7^z;OFE`#xX!XzljSQh+osv9BHyW(u7gUkr!x8jPuHtjn^0%7>uSjlrmb@ z167oQa0NF5Bg|9o(-W9J*^MBnpm0zz}5T!elw_#WQ;d9s0k zuJwB6%GRDgO&3ajiq)K(-fy`l{=dwGRKA_YbsYk=>(<=RTJ4kV_Q~B&|Aubh{O=+a zs@MFumjwA9>DB0ddB3IGGG51{>dewzT=!T(Rr}FiroOQJU?oSz z%^Sxq`^CHvU0XGw)9|xw>ar@n^%q~f*`$@6xbb6nl~I}R{`zlfLfI>H4S&5YV>iw* zU#PD?yVS)yeaHHq2WGtqV*FYKKC>EY3;Y&;3f$mcFF4`iLem#EbFcppIGD6!iS`jG ziO}M(O}qhL)lag!Z*r9QCG~yUZ)2xJdmTf2SDh5qyt3hvSCn()Wj-0%9h&c!-2M_j z$2nW~uj9YldwyHplm3-;Iex8$|KhLrSX;7^x9j>=Mf{F@!KPMw>hTk^pTH!=$Rx)M zPgF6}Ho delta 719 zcmX@o%yy`mjW@uXnT3l11RhT7n#gO$W_dHy)#~PCFJr0cVik-+8%w=4CN2`*d|6{6 z7o*PPRAUd;&&{tg`6h2Njsf!dOdpF}o!K4J_FkX3 zr^ci%GGujSL=g4tNU`F%vt(UcuGiW(|+yhXIbypGWSnk`%-4@ zkzbC2Pntb?T3>5&TNa!W+j>gxwU(Hebp1m0WV6~%y) z6O@o=kbtrT7^a^sXVeC!h3SFyjAGjbDi|lRGU`lUT+0~7_<8!ldPX@QPqL0N2*Q(? i4phOmy{nFK9}`-d3T Date: Fri, 24 Apr 2026 07:47:32 +0100 Subject: [PATCH 4/5] v1.0.26: eliminate double-green flash when switching timers MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Both buttons now flip to their final visual state immediately on key press, before any API calls. Previously the old button stayed green throughout the stopTimer network round-trip (~0.5–2s), causing a window where both buttons appeared green simultaneously. Co-Authored-By: Claude Sonnet 4.6 --- com.pdma.notion-timer.sdPlugin/bin/plugin.js | 16 +++++++++----- .../bin/plugin.js.sig | 5 ++--- com.pdma.notion-timer.sdPlugin/manifest.json | 2 +- notion-timer.streamDeckPlugin | Bin 98756 -> 98770 bytes src/plugin.ts | 20 ++++++++++++------ 5 files changed, 28 insertions(+), 15 deletions(-) diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js b/com.pdma.notion-timer.sdPlugin/bin/plugin.js index 022e76d..4398be8 100644 --- a/com.pdma.notion-timer.sdPlugin/bin/plugin.js +++ b/com.pdma.notion-timer.sdPlugin/bin/plugin.js @@ -6438,7 +6438,7 @@ async function stopTimer(token, entryId) { } // src/plugin.ts -var CURRENT_VERSION = "1.0.25"; +var CURRENT_VERSION = "1.0.26"; var GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/master"; var SIGNING_PUBLIC_KEY = `-----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAN7ko8TUpuPzPAJuKAZCRjV0c4ZSlou5d9pUAF6o12b4= @@ -6589,6 +6589,16 @@ var TimerToggle = class extends SingletonAction { await setRunningEntry(null); } else { const prevEntryId = await getRunningEntryId(); + if (prevEntryId) { + for (const other of this.actions) { + if (other.id === ev.action.id) continue; + const otherSettings = this.settingsCache.get(other.id); + if (otherSettings?.activeEntryId === prevEntryId) { + await Promise.all([other.setState(0), other.setTitle(buttonTitle(otherSettings.projectName || ""))]); + } + } + } + await Promise.all([ev.action.setState(1), ev.action.setTitle(`\u23F1 ${title}`)]); if (prevEntryId) { await stopTimer(global.notionToken, prevEntryId); for (const other of this.actions) { @@ -6598,8 +6608,6 @@ var TimerToggle = class extends SingletonAction { const stopped = { ...otherSettings, activeEntryId: null }; await other.setSettings(stopped); this.settingsCache.set(other.id, stopped); - await other.setState(0); - await other.setTitle(buttonTitle(otherSettings.projectName || "")); } } } @@ -6614,8 +6622,6 @@ var TimerToggle = class extends SingletonAction { await ev.action.setSettings(started); this.settingsCache.set(ev.action.id, started); await setRunningEntry(entryId); - await ev.action.setState(1); - await ev.action.setTitle(`\u23F1 ${title}`); } } catch (err) { plugin_default.logger.error("Timer toggle failed:", err); diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig b/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig index d1817a8..86c3f4c 100644 --- a/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig +++ b/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig @@ -1,3 +1,2 @@ -Һ -HJ{l >0^tq2lZ +e>W%"Y8ge8B$>W=kIďMe2K \ No newline at end of file diff --git a/com.pdma.notion-timer.sdPlugin/manifest.json b/com.pdma.notion-timer.sdPlugin/manifest.json index 76b72fc..8461c55 100644 --- a/com.pdma.notion-timer.sdPlugin/manifest.json +++ b/com.pdma.notion-timer.sdPlugin/manifest.json @@ -2,7 +2,7 @@ "Author": "Pete Marfleet", "Description": "Toggle Notion time tracking for a project with a single button press.", "Name": "Notion Timer", - "Version": "1.0.25", + "Version": "1.0.26", "SDKVersion": 2, "Software": { "MinimumVersion": "5.0" }, "OS": [{ "Platform": "mac", "MinimumVersion": "10.11" }], diff --git a/notion-timer.streamDeckPlugin b/notion-timer.streamDeckPlugin index d25c9f2b51774ca622923226682afa193dd38acc..37993c2964a9dab42187a56643d9877dfb1e2611 100644 GIT binary patch delta 1461 zcmZ8hXH*kb7|lx{LIQ-a1!RsrlZKvQpr{KyyM3@`` zB0DefJeIP}x@q)el(g8M*1BA+WS~|@o53nb@VxyhljGWKs`XC#y!6J&)32jw$w&y0 zTLKV>oQ70SbT15QFZCl5zQs~I|56XWj-U{FSBjV32bz8r)M_8mPT^^#58J!+8q{D2 zIe`!HF&=2`p}TE)O{8fGmI#w=BAcTCk-g^n`0)W!H3ZT_gF&`J^dVvKu@(v8v4<_< z*!*>x+@LgoLMTFDvR$Or5R7vw111d@L=JFzT)yXA4+&l1pnNS?@VdXetF|=Pz_h!6 z=O0u;J!r#-MV+GIxOQoOXYpBzz9D&ewoDswiPPJ-DXGgrw}a*7g}z=m)ZI1Pl0Zj} zo(Y`I7L6=eMjQRQ;XYMRYWK9Ue(pKlJ0o*`V@1cAB9E~_wGf;5(zPx2-*%ts#7KybeiT{4ZlR|ifHnANsI_x3G+&M!Su1RNZO@Ca_bF)?k0cW%@zvR zpBSGidq?{bUw?sD(4KMgg740n@z#x-y^Px*r|EB~iwS$Hv}lx!JnyE5I=D$epXqP| zr|U%a(OVh{(fu;?OqZH;=x3M!+|RG- zDr#!vCKd;e!)tlxp!krB-@M5Qh#7HpRL#{HJ<;%lof5}iUMha^ii%6mcJ8y9iMWbo zmxSsaOg%hgxX(~K%7dSGTf5-$rl+X+F-f8;5PkS_(#eWd!`@y#L1j_HEcfra!SN82 z@3T*cja9^a>#% zeMYp${pYHHDS6=ne*8Y|Hn}c(?v2Y_j;7O&Lm}vB<#Zt~BPQ~}W#=ssCeOuXeXS*- zN>=`G9k}lYzkvDydAb=7HLdI!K7)9;NL4TvRJvgps7E+wr|n2scm0B6e&D@(-U=jc zyg-ur&gR_mWCaKs&%ZVodV1n0MHmo73AQevk1k{kt1aCvf!4GQL^1rUGMmtpZL5U| z+a%fY9(lj`2MR*iY^Hlhibl<7--8u7^F6v%gwgWOt(0*3f|zE`DX!EZP9!mmLYtJ- zS9I1cTQrNw-lkJ>B_@(GDmQ&EM=`B$8nb9&j{=r@gUJJ#$d=N5DD1W){HvY*4@V<# zj?L8%$Ykn!P6;!#cji({W}9v_k(t&!EKnLGO>}e|+0fmye%jomiDbePoisEIgZ{=>F8o-evZJ@ehVXT*j>Rj)oD#FDl0$|0uX@Z2SX9-s{PvcYADHgNqU7UA>VlN#M$WD3-`J z=s$oQZY}dpDH<~S9rzFd)ByG=zW|Thm;_v5QX6o6=|Jn2YBDI0{~TW2s*}K5mKZWp zU**3k!!=6-Zl6dku2c!?5Me0QO&)*p~q`Vc*d{a+wUE_Rm*J7{CbL JkR;7n$lo!ljo<(P delta 1411 zcmY+EdpOg37{K@4Y;IxXc92lHMKet2Ii6!JkV`cQ5K*iSKgeu4y-@E@aFD^sA-ntVBfO;;AE~D+ z++;bu$_#90))lpNYlp1;BLQ36_IJK!k_{IItDzuZMlcOn=<#FQ$cK&vZ;N8z5?6x4 zlYpF*Bn+{3%WBm5npu_td|jcy0>!A+DiBTRsk^>04CpjyHoZjdoA!H|CxPZxY}(_T zALnu9Tn_19tVIOrFe!FtXk-OBh(2YNEysw1Oiz8FqkX0gWy;rpCyK{O^F)tHbU9a>wD|7@AUly4|_v57ufq)zNMF9}YD`-xwi zDfgFu=}TFEO)_N4QAa6eGoC>xc)i!5BlEIMT1E#I3r_n~WZS589>ikx`MPZm+#~kl zVQeNPz%qO)>`|Q|vRFk(!F1u;hp6o#T|)d)utO;~O=y$VpiFyG)*xCJggr|B)$eS` zBy#UWA$}J+3iT?oa)5optz}+x{`EM?EIG2xWGcMGl%3?N9+(h};Vkdps1o7)XJT7# z&PDyf?x~TtzvF@6%hH6UNnSPkxAHNUTv8~;-!Yr%JiOxpJAGIiMQp~6kfiFWhXEXc zX1=Sd8{vDx(agp)Gq7kQxk{!#{xYk!A38+^R*W@5zsAo17VL99K4OBtHM^C|X+@R> z%$-z@NcFDY{kUbnhMTE*)aNre&s6kE;{8}VeqZIYmW#Ao_pPqGt8Vo+?%$?3M65-K zT~m6+1vN#EWEsLQ`A(yxLmHfXH32&Voa}<#)#{21+hTd+4nu6VwZ-<-BtDq%=pt*>!v>qqF~qC=E>F7MBih}T78`F1E4uS`L616!yiYfb(5uPjuz3gJ?q0eJX|a06 zajhpLXoG@|UU&a7r7C*vDeUZquyVR=^^>tlo?&Qk?X(ZwG?s9iF{i5#Sz(M_dLJu} zBke54V9rtPUBjEIGlzF%1u4rJlHJaxB$C}rW;|;cPV%`=inothogY|0w}v#8Zf#dn z^@{Q4$#{tLI>nuMwyH~N^M%VeyS5fvudK>WC4;9md>3E*fnHgS4NV3gN}qoWwkbtxqfQIlG`Icl~7?Fay8NddiV+Ovp;gSIX3_vN#fR50nd{2@oKpwi040Qen iYhVgcLPSsjTiZ+vf>MA2VwGBmn*y{@WpS(8g#8COFmW9K diff --git a/src/plugin.ts b/src/plugin.ts index 0b40fcb..b611d66 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -1,4 +1,4 @@ -const CURRENT_VERSION = "1.0.25"; +const CURRENT_VERSION = "1.0.26"; const GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/master"; const SIGNING_PUBLIC_KEY = `-----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAN7ko8TUpuPzPAJuKAZCRjV0c4ZSlou5d9pUAF6o12b4= @@ -195,7 +195,19 @@ class TimerToggle extends SingletonAction { } else { const prevEntryId = await getRunningEntryId(); - // Stop previous timer + // Optimistically update visuals immediately — no waiting for API + if (prevEntryId) { + for (const other of this.actions) { + if (other.id === ev.action.id) continue; + const otherSettings = this.settingsCache.get(other.id); + if (otherSettings?.activeEntryId === prevEntryId) { + await Promise.all([other.setState(0), other.setTitle(buttonTitle(otherSettings.projectName || ""))]); + } + } + } + await Promise.all([ev.action.setState(1), ev.action.setTitle(`⏱ ${title}`)]); + + // Now do the API calls if (prevEntryId) { await stopTimer(global.notionToken, prevEntryId); for (const other of this.actions) { @@ -205,8 +217,6 @@ class TimerToggle extends SingletonAction { const stopped = { ...otherSettings, activeEntryId: null }; await other.setSettings(stopped); this.settingsCache.set(other.id, stopped); - await other.setState(0); - await other.setTitle(buttonTitle(otherSettings.projectName || "")); } } } @@ -222,8 +232,6 @@ class TimerToggle extends SingletonAction { await ev.action.setSettings(started); this.settingsCache.set(ev.action.id, started); await setRunningEntry(entryId); - await ev.action.setState(1); - await ev.action.setTitle(`⏱ ${title}`); } } catch (err) { streamDeck.logger.error("Timer toggle failed:", err); From 034c951d9b32f32c03f585e8ba6e0c2056491384 Mon Sep 17 00:00:00 2001 From: pdmarf <135653545+pdmarf@users.noreply.github.com> Date: Fri, 24 Apr 2026 07:49:03 +0100 Subject: [PATCH 5/5] v1.0.26: point auto-updater at stable-rebuild branch GITEA_BASE was pointing at master (v1.0.22), so Check for Updates always said "already up to date". Now points at stable-rebuild so updates are served from the correct branch. Also bumps version.json to 1.0.26. Co-Authored-By: Claude Sonnet 4.6 --- com.pdma.notion-timer.sdPlugin/bin/plugin.js | 2 +- .../bin/plugin.js.sig | Bin 64 -> 64 bytes notion-timer.streamDeckPlugin | Bin 98770 -> 98774 bytes src/plugin.ts | 2 +- version.json | 2 +- 5 files changed, 3 insertions(+), 3 deletions(-) diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js b/com.pdma.notion-timer.sdPlugin/bin/plugin.js index 4398be8..d772d8f 100644 --- a/com.pdma.notion-timer.sdPlugin/bin/plugin.js +++ b/com.pdma.notion-timer.sdPlugin/bin/plugin.js @@ -6439,7 +6439,7 @@ async function stopTimer(token, entryId) { // src/plugin.ts var CURRENT_VERSION = "1.0.26"; -var GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/master"; +var GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/stable-rebuild"; var SIGNING_PUBLIC_KEY = `-----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAN7ko8TUpuPzPAJuKAZCRjV0c4ZSlou5d9pUAF6o12b4= -----END PUBLIC KEY-----`; diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig b/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig index 86c3f4ce496bb10d78cc6ddd7eb3a8776c4ebc63..6d5f1bcbcaaf19e814e9feed3b6ab646c0b2bf20 100644 GIT binary patch literal 64 zcmV-G0KfkLIiLM&7SSv5ahw4*E+Lfw literal 64 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 C2BS^@ diff --git a/src/plugin.ts b/src/plugin.ts index b611d66..025416b 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -1,5 +1,5 @@ const CURRENT_VERSION = "1.0.26"; -const GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/master"; +const GITEA_BASE = "https://gitea.pdmarf.co.uk/pdm/stream_deck_notion_timer/raw/branch/stable-rebuild"; const SIGNING_PUBLIC_KEY = `-----BEGIN PUBLIC KEY----- MCowBQYDK2VwAyEAN7ko8TUpuPzPAJuKAZCRjV0c4ZSlou5d9pUAF6o12b4= -----END PUBLIC KEY-----`; diff --git a/version.json b/version.json index b0b51e1..f78be80 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{ "version": "1.0.15" } +{ "version": "1.0.26" }