From 4f9a98acfb36aa838126b709b9ed8aa96ee1589e Mon Sep 17 00:00:00 2001 From: Eric <5089238+emizzle@users.noreply.github.com> Date: Fri, 5 Jul 2024 21:13:13 +1000 Subject: [PATCH] fix multi tab sync - moved all logic to a modified pinia-persisted-state plugin, allowing for a better sync of the metadata (eg bad messaging replacement) --- src/App.vue | 32 ----- src/main.js | 3 +- src/plugins/pinia/crosstabsync.js | 195 ++++++++++++++++++++++++++++++ src/stores/requests.js | 3 +- 4 files changed, 199 insertions(+), 34 deletions(-) create mode 100644 src/plugins/pinia/crosstabsync.js diff --git a/src/App.vue b/src/App.vue index 19bf373..b0341b9 100644 --- a/src/App.vue +++ b/src/App.vue @@ -32,34 +32,6 @@ onMounted(() => { requestsStore.fetchPastRequests() }) eventsStore.listenForNewEvents() - - window.addEventListener('storage', handleStorageEvent) -}) - -const getLocalStorageKey = inject('getLocalStorageKey') -const localStorageKey = getLocalStorageKey(requestsStore.$id) -const localStorageMetaKey = `${localStorageKey}_storeEventMeta` -function handleStorageEvent(event) { - if (event.key === localStorageKey) { - let serialized = window.localStorage.getItem(localStorageMetaKey) - if (serialized) { - let { source, timestamp } = serializer.deserialize(serialized) - // prevent our own window local storage updates from hydrating (infinite - // loop) and prevent stale updates from hydrating - if (source !== window.name && timestamp > lastStoreTimestamp) { - requestsStore.$hydrate() - } - } - } -} -let lastStoreTimestamp = 0 -requestsStore.$subscribe((_mutation, state) => { - lastStoreTimestamp = Date.now() - const storeEventMeta = { - source: window.name, - timestamp: Date.now() - } - window.localStorage.setItem(localStorageMetaKey, serializer.serialize(storeEventMeta)) }) async function detectRunningCodexNode() { @@ -79,10 +51,6 @@ async function detectRunningCodexDevnet() { return false } } - -onUnmounted(() => { - window.removeEventListener('storage', handleStorageEvent) -})