From 89437fa4c29b216cf8cc14e16d9108683a5c08a5 Mon Sep 17 00:00:00 2001 From: Eternal Date: Thu, 23 Apr 2026 19:24:48 -0400 Subject: [PATCH 1/4] feat: add "one tab at a time" enforcement --- apps/client/src/pages/timelapse/create.tsx | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/apps/client/src/pages/timelapse/create.tsx b/apps/client/src/pages/timelapse/create.tsx index d3fc83f4..0209844c 100644 --- a/apps/client/src/pages/timelapse/create.tsx +++ b/apps/client/src/pages/timelapse/create.tsx @@ -603,6 +603,25 @@ export default function Page() { } + // force this code to be ran on the client + useEffect(() => { + let release = {}; + + navigator.locks.request("lapse_tab", { ifAvailable: true }, + async (lock) => { + if (!lock) { + console.log("didn't get tab lock...") + alert("You can only have one tab open on the recording page. Close the other tab.") + router.push("/") + } + console.log("got tab lock. I think") + console.log(lock) + await new Promise((resolve) => { + release = resolve + }) + }) + }, []) + return ( From bed192c3638aa5739372b17ca1add66e35f289f3 Mon Sep 17 00:00:00 2001 From: Eternal Date: Thu, 23 Apr 2026 19:39:15 -0400 Subject: [PATCH 2/4] fix: forgot to add "return" so both paths were running --- apps/client/src/pages/timelapse/create.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/pages/timelapse/create.tsx b/apps/client/src/pages/timelapse/create.tsx index 0209844c..2bde6a24 100644 --- a/apps/client/src/pages/timelapse/create.tsx +++ b/apps/client/src/pages/timelapse/create.tsx @@ -607,12 +607,14 @@ export default function Page() { useEffect(() => { let release = {}; - navigator.locks.request("lapse_tab", { ifAvailable: true }, + navigator.locks.request("lapse_lock", { ifAvailable: true }, async (lock) => { if (!lock) { console.log("didn't get tab lock...") + console.log(lock) alert("You can only have one tab open on the recording page. Close the other tab.") router.push("/") + return } console.log("got tab lock. I think") console.log(lock) From b25325578d3d1728f64edff9d21c4e5598847adf Mon Sep 17 00:00:00 2001 From: Eternal Date: Thu, 23 Apr 2026 19:44:49 -0400 Subject: [PATCH 3/4] feat: strictMode runs it twice so this prevents that --- apps/client/src/pages/timelapse/create.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/apps/client/src/pages/timelapse/create.tsx b/apps/client/src/pages/timelapse/create.tsx index 2bde6a24..3313041d 100644 --- a/apps/client/src/pages/timelapse/create.tsx +++ b/apps/client/src/pages/timelapse/create.tsx @@ -602,10 +602,12 @@ export default function Page() { function handleStreamInterrupt() { } - + const didRun = useRef(false); // force this code to be ran on the client useEffect(() => { let release = {}; + if (didRun.current) { return; } + didRun.current = true; navigator.locks.request("lapse_lock", { ifAvailable: true }, async (lock) => { From c6ae5da37fd5c92fde79c973e8f647bfd2c538b9 Mon Sep 17 00:00:00 2001 From: Eternal Date: Thu, 23 Apr 2026 19:46:59 -0400 Subject: [PATCH 4/4] chore: change name (because I borked the other name on my computer) --- apps/client/src/pages/timelapse/create.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/client/src/pages/timelapse/create.tsx b/apps/client/src/pages/timelapse/create.tsx index 3313041d..bc43a1e8 100644 --- a/apps/client/src/pages/timelapse/create.tsx +++ b/apps/client/src/pages/timelapse/create.tsx @@ -609,7 +609,7 @@ export default function Page() { if (didRun.current) { return; } didRun.current = true; - navigator.locks.request("lapse_lock", { ifAvailable: true }, + navigator.locks.request("lapse_lock_thing", { ifAvailable: true }, async (lock) => { if (!lock) { console.log("didn't get tab lock...")