From 5cdc77ccf3a6f46bb37ae9c23587ad54791a0f40 Mon Sep 17 00:00:00 2001 From: pdmarf <135653545+pdmarf@users.noreply.github.com> Date: Fri, 24 Apr 2026 09:13:38 +0100 Subject: [PATCH] v1.0.36: eliminate blue flash between setSettings and setState setState was being called after setRunningEntry, which makes two async global settings calls and takes ~1 second. During that time the button sat in the blue reset state from setSettings. Now setState is called immediately after setSettings, before setRunningEntry, so the blue flash is imperceptibly brief. Co-Authored-By: Claude Sonnet 4.6 --- com.pdma.notion-timer.sdPlugin/bin/plugin.js | 6 +++--- .../bin/plugin.js.sig | 4 ++-- com.pdma.notion-timer.sdPlugin/manifest.json | 2 +- notion-timer.streamDeckPlugin | Bin 99185 -> 99189 bytes src/plugin.ts | 10 +++++----- version.json | 2 +- 6 files changed, 12 insertions(+), 12 deletions(-) diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js b/com.pdma.notion-timer.sdPlugin/bin/plugin.js index 1ae1597..14e91b5 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.35"; +var CURRENT_VERSION = "1.0.36"; 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= @@ -6625,8 +6625,8 @@ var TimerToggle = class extends SingletonAction { const stopped = { ...ev.payload.settings, activeEntryId: null }; await ev.action.setSettings(stopped); this.settingsCache.set(ev.action.id, stopped); - await setRunningEntry(null); await Promise.all([ev.action.setState(0), ev.action.setTitle(title)]); + await setRunningEntry(null); } else { const prevEntryId = await getRunningEntryId(); if (prevEntryId) { @@ -6651,8 +6651,8 @@ var TimerToggle = class extends SingletonAction { const started = { ...ev.payload.settings, activeEntryId: entryId }; await ev.action.setSettings(started); this.settingsCache.set(ev.action.id, started); - await setRunningEntry(entryId); await Promise.all([ev.action.setState(1), ev.action.setTitle(`\u23F1 ${title}`)]); + await setRunningEntry(entryId); } } catch (err) { await Promise.all([ev.action.setState(activeEntryId ? 1 : 0), ev.action.setTitle(activeEntryId ? `\u23F1 ${title}` : title)]); diff --git a/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig b/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig index 2fc381f..530bb5d 100644 --- a/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig +++ b/com.pdma.notion-timer.sdPlugin/bin/plugin.js.sig @@ -1,2 +1,2 @@ -x3:b ' - A!ɨol&ho۔c`5^LB'#9PIS{ \ No newline at end of file +Yxek*o +h@= \ 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 810de30..66fe687 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.35", + "Version": "1.0.36", "SDKVersion": 2, "Software": { "MinimumVersion": "5.0" }, "OS": [{ "Platform": "mac", "MinimumVersion": "10.11" }], diff --git a/notion-timer.streamDeckPlugin b/notion-timer.streamDeckPlugin index 97bfa1ec0df73675b2228d0cbec379dc41635d9e..36eeeed5bda965109330aebbf675cf0533996fe2 100644 GIT binary patch delta 1506 zcmZ9Mc{tR09LIk@#+Yf!vMM9W3}c)R8sjL^G|nNJV%Rh}lVfOfIL26m4w56!;D=pF zMjjO-v(9>CwkGRXS$CqH6%jddBucw8+x0wspXc*D-_QN|Cu!o4f630>uY${ZvhD{ZZpjQFnoXsmTkz-)|@mt3BPk^Qs%y%c>+NriTB1$;o< z2RHiw>#+%XFGTEQ)ZCa$(Qn%-H`&C5ZwhH86<6Hm@9RWJ*Gtbp0MhlqwMcYXB>;r8 zWdTD#9SCGb7)73l;NFu*OApzCqIrBig@70Eh}JyNQSi?YPo7iX9&b1p!|X5-gei!c zMksHEKE)~shd9u_^ruHJ*5z_CCZc^a1AVRpKZg&}J1vy*oww3@ZuL%(^>g3V(Hja6 zF)C8ykOM?0q05dGVN|w=QCcsokP{igKTb<=RK0=N%y9On)cz|N<-@rC!7~*-sf6Y z=8(2E8$KA)hZEHhFU&i@6kdi|zHT>QrE~^W=bb+LxZ9#mfi&UTsL4#8!iOu{MP)r| znM60nF|P`Y3fjueyZ07Gw4OqAjpCYJw;wkQs84eGg_G(LT4r_wLZcVy{T5}@d)#Vz zDV{ra`ZI*1F6YSWLXlSNfbKO%SUM2xq%xse)g6`NpTo-B71C!ePPx7%p3oCV+uYh6 z2d~bL(amrxWORl(%=|%iRyI0QB6oF=yBla)T`3xW6;1^D#U}H?r39``y_#>lzj`lC zLnV|>@p<*TOVM@Rr?wkolV@zfp^xh`Rwmhe?*5xoa40;`nC@_Bo+4iCDmKILqu)02 zeAD^(wWn)D*2#}yt5(y4yn{=WMg4oaIq3VQV+Tn^#?8&EqJRHaHMBbsL<`Q2Rpuc1 z5{(3vL%D;HUJPi>k&0Yu-)S<}-Gw81^%7Q0sSbs%J*s7Ay^iDEp%!K4T~%P_$3rV{;tyWGU#J!-0K zoig}aaX?}Tp~WP1+Wu%;rV+ukp)oq&j1l77G4 zNb0Tp1RT9{E#N?ptx{-4=-4 zz$)@klm0Ty7tB7Iiuz0iud>B`Jf}SxX-O*(7Z2x>ndg@j7w*?(lovI08+b?QC6g@7UY8%qtXr6b)4N#8-EI*r7I5~8Rtf4V@JJqu*(pOCwu|sIM z%R`(`lx5HV>M&8t@k`Ofl-e@7S$p|!u*ssxLtd#meja}wZZjv17UMM3+u;6FjFDq= zPY}p@IBnl8ycdu9@Q6X^mLONF$aCVG4cS$_oYM-GwafBr%%!=RNXC@Fl~XrnoiV^x zQJk(F{f+p_f7Y=?Eq__>2ky+cG1Uc>*(LiKa}>yr1=`6<1OUBZgWDl-0tl~v$O5(G zB*=rN5vs@KwTWr`AhuMJjfyu+y#0=Es3BG^m8Ie z1{+KYJz3J^e}~S8TmS$7 delta 1497 zcmZ9MdpOg39LImZZML>?-0xD%r4Vyjj+vfNu@>eMxs~Hm%xxhWGE4Nx-RMUg-9{p@ zTn>qz>2h##?KvS&Su4gF2}e4l&h~Vw^Yne5&mZ6S=laL{d97w4m$HypDg}x&}p=yRPhmat7{wwEQ*;-#KM5k;IjjRio&DhL1wC2{rlzF2Zu0AJz6z+SN` z2|SyN(q-pb$*>nK(M(CJWW*2cr!D1)xxwYw0>c4JeI}ZfX|J>1SKAdERZxX8=ns#b zEKv#J2K_`hddQ*DP(uz^WK&Nidnzxkq#%%3Ubc*6z2uB7fMoqN6>oN}0RW;>;D8CB z1%$*#o6`gDhWZWwnv7y@A zZbYqGcfo|;9~C}RRD{2;uz=H(Pg73x6I@r`)#IRK(UU*h7S@mZ=)h~&x{s$-)|kMZ zj#Pzx7!WW`aM;9A;T~Pw*!om2*{42myK(c*z|+2A3v=Eo+A(^?^_fX#LrzZf3RQL) zkyf6+<-3Y zUSH_R8&A#ftpjZ#)(ByY!jwUdsS0;;FUMtHT?=zmV}v3t%?SOg!eh14aAHo+I4{4c zmH$?ssI$oz$de+KhH$V0fGsCyS=wio*pKfgImuelG~YQ6BloCBbQxuZgxkT7Jh3f# zY&bwTPPl$5RHquP+A$3474@kBFE-X)mlJktq|@kSYt8QE_7csU`DQ)0W~pt^!fa&DE`Cy<>gbJQFe~ZCq7T+>JFoIzu?5QRrj45in}@*oXab zKJ^mGlG(bkbv4qX<{v#qX`s?U>6hv!4XzBT9-G<_e3okV6ZDm!BgCe-Jx75*gG`b@ z5>w)8N&H~KQcp^(058|QVtlKTmw7vRLer0fX_(cuU-LML?|axTf-19(&V5+4ZBs1v zuBWBgFQpbR;>z*fCjO)jYU+tcDstlo&iTQE%=7q|OBOo{`X_qFZFdry3{~OMrC^qQ z3A3d1Rw9dup2&gS#` z!Uvsy4uKs*IzF!}wu}gSF67K=hZo6a=Q^*g>^REfmM)>awFq8kdQO%5_V+Sp21VXRww~q}hquA(@6xpm-tGD1 z8korARvmnfA?+V@pD+b)7%6_Nec?VEP1lB1jkPVcD5@s!uYVgF{3O+>{ASeyxA25S z-;3O)@ef!#^-j)IL09%e4H_jkt@8y>deUWfWhGg8WK{jFF|OSOSN13aqs2ZRwD{}O z+EgXxJQWd|5H3S>6B739Yf>AW!z>|k>u#1t!M!%g%eXDx6iRLljiOv7Wx}$piw4x@T>l19%P#iYQua4ka;So1Ig|Nr65*1=m2Z| zzamNp-C>)rztkLKfo|Xs)W`x8VCNE`CKhM_QO<&%;2?DQEa { const stopped = { ...ev.payload.settings, activeEntryId: null }; await ev.action.setSettings(stopped); this.settingsCache.set(ev.action.id, stopped); - await setRunningEntry(null); - // Re-assert after setSettings resets visual state + // Re-assert immediately — before setRunningEntry's async calls await Promise.all([ev.action.setState(0), ev.action.setTitle(title)]); + await setRunningEntry(null); } else { const prevEntryId = await getRunningEntryId(); @@ -267,9 +267,9 @@ class TimerToggle extends SingletonAction { const started = { ...ev.payload.settings, activeEntryId: entryId }; await ev.action.setSettings(started); this.settingsCache.set(ev.action.id, started); - await setRunningEntry(entryId); - // Re-assert after setSettings resets visual state + // Re-assert immediately — before setRunningEntry's async calls await Promise.all([ev.action.setState(1), ev.action.setTitle(`⏱ ${title}`)]); + await setRunningEntry(entryId); } } catch (err) { // Revert optimistic visual on error diff --git a/version.json b/version.json index bb146ad..e96f7f9 100644 --- a/version.json +++ b/version.json @@ -1 +1 @@ -{ "version": "1.0.35" } +{ "version": "1.0.36" }