diff options
| author | Adam <[email protected]> | 2025-12-17 13:10:57 -0600 |
|---|---|---|
| committer | Adam <[email protected]> | 2025-12-17 13:11:02 -0600 |
| commit | 4a3ba58f65d12b4f7c7a97b42a5bb3bc0eb5f88b (patch) | |
| tree | abae119fe310b1c73fc0d70d9d0d81985c5def42 /packages/desktop/src/context | |
| parent | 2a3a8a1ec2d71ae27730226cfac37830c7a5dfd7 (diff) | |
| download | opencode-4a3ba58f65d12b4f7c7a97b42a5bb3bc0eb5f88b.tar.gz opencode-4a3ba58f65d12b4f7c7a97b42a5bb3bc0eb5f88b.zip | |
chore: localStorage -> tauri store
Diffstat (limited to 'packages/desktop/src/context')
| -rw-r--r-- | packages/desktop/src/context/layout.tsx | 9 | ||||
| -rw-r--r-- | packages/desktop/src/context/local.tsx | 7 | ||||
| -rw-r--r-- | packages/desktop/src/context/notification.tsx | 9 | ||||
| -rw-r--r-- | packages/desktop/src/context/platform.tsx | 4 | ||||
| -rw-r--r-- | packages/desktop/src/context/prompt.tsx | 9 | ||||
| -rw-r--r-- | packages/desktop/src/context/terminal.tsx | 9 |
6 files changed, 24 insertions, 23 deletions
diff --git a/packages/desktop/src/context/layout.tsx b/packages/desktop/src/context/layout.tsx index af71c6a00..01e0bdf52 100644 --- a/packages/desktop/src/context/layout.tsx +++ b/packages/desktop/src/context/layout.tsx @@ -1,10 +1,10 @@ import { createStore, produce } from "solid-js/store" import { batch, createMemo, onMount } from "solid-js" import { createSimpleContext } from "@opencode-ai/ui/context" -import { makePersisted } from "@solid-primitives/storage" import { useGlobalSync } from "./global-sync" import { useGlobalSDK } from "./global-sdk" import { Project } from "@opencode-ai/sdk/v2" +import { persisted } from "@/utils/persist" const AVATAR_COLOR_KEYS = ["pink", "mint", "orange", "purple", "cyan", "lime"] as const export type AvatarColorKey = (typeof AVATAR_COLOR_KEYS)[number] @@ -32,7 +32,8 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( init: () => { const globalSdk = useGlobalSDK() const globalSync = useGlobalSync() - const [store, setStore] = makePersisted( + const [store, setStore, _, ready] = persisted( + "layout.v3", createStore({ projects: [] as { worktree: string; expanded: boolean }[], sidebar: { @@ -48,9 +49,6 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( }, sessionTabs: {} as Record<string, SessionTabs>, }), - { - name: "layout.v3", - }, ) const usedColors = new Set<AvatarColorKey>() @@ -93,6 +91,7 @@ export const { use: useLayout, provider: LayoutProvider } = createSimpleContext( }) return { + ready, projects: { list, open(directory: string) { diff --git a/packages/desktop/src/context/local.tsx b/packages/desktop/src/context/local.tsx index b12679210..2ea4de524 100644 --- a/packages/desktop/src/context/local.tsx +++ b/packages/desktop/src/context/local.tsx @@ -7,8 +7,8 @@ import { useSDK } from "./sdk" import { useSync } from "./sync" import { base64Encode } from "@opencode-ai/util/encode" import { useProviders } from "@/hooks/use-providers" -import { makePersisted } from "@solid-primitives/storage" import { DateTime } from "luxon" +import { persisted } from "@/utils/persist" export type LocalFile = FileNode & Partial<{ @@ -110,7 +110,8 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ })() const model = (() => { - const [store, setStore] = makePersisted( + const [store, setStore, _, modelReady] = persisted( + "model.v1", createStore<{ user: (ModelKey & { visibility: "show" | "hide"; favorite?: boolean })[] recent: ModelKey[] @@ -118,7 +119,6 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ user: [], recent: [], }), - { name: "model.v1" }, ) const [ephemeral, setEphemeral] = createStore<{ @@ -242,6 +242,7 @@ export const { use: useLocal, provider: LocalProvider } = createSimpleContext({ } return { + ready: modelReady, current, recent, list, diff --git a/packages/desktop/src/context/notification.tsx b/packages/desktop/src/context/notification.tsx index 5ca813448..2b258ebd6 100644 --- a/packages/desktop/src/context/notification.tsx +++ b/packages/desktop/src/context/notification.tsx @@ -1,6 +1,5 @@ import { createStore } from "solid-js/store" import { createSimpleContext } from "@opencode-ai/ui/context" -import { makePersisted } from "@solid-primitives/storage" import { useGlobalSDK } from "./global-sdk" import { useGlobalSync } from "./global-sync" import { Binary } from "@opencode-ai/util/binary" @@ -8,6 +7,7 @@ import { EventSessionError } from "@opencode-ai/sdk/v2" import { makeAudioPlayer } from "@solid-primitives/audio" import idleSound from "@opencode-ai/ui/audio/staplebops-01.aac" import errorSound from "@opencode-ai/ui/audio/nope-03.aac" +import { persisted } from "@/utils/persist" type NotificationBase = { directory?: string @@ -44,13 +44,11 @@ export const { use: useNotification, provider: NotificationProvider } = createSi const globalSDK = useGlobalSDK() const globalSync = useGlobalSync() - const [store, setStore] = makePersisted( + const [store, setStore, _, ready] = persisted( + "notification.v1", createStore({ list: [] as Notification[], }), - { - name: "notification.v1", - }, ) globalSDK.event.listen((e) => { @@ -101,6 +99,7 @@ export const { use: useNotification, provider: NotificationProvider } = createSi }) return { + ready, session: { all(session: string) { return store.list.filter((n) => n.session === session) diff --git a/packages/desktop/src/context/platform.tsx b/packages/desktop/src/context/platform.tsx index 21be49cbd..92bb2ba15 100644 --- a/packages/desktop/src/context/platform.tsx +++ b/packages/desktop/src/context/platform.tsx @@ -1,4 +1,5 @@ import { createSimpleContext } from "@opencode-ai/ui/context" +import { AsyncStorage, SyncStorage } from "@solid-primitives/storage" export type Platform = { /** Platform discriminator */ @@ -15,6 +16,9 @@ export type Platform = { /** Open a URL in the default browser */ openLink(url: string): void + + /** Storage mechanism, defaults to localStorage */ + storage?: (name?: string) => SyncStorage | AsyncStorage } export const { use: usePlatform, provider: PlatformProvider } = createSimpleContext({ diff --git a/packages/desktop/src/context/prompt.tsx b/packages/desktop/src/context/prompt.tsx index 2da0a08d5..8d3590cd9 100644 --- a/packages/desktop/src/context/prompt.tsx +++ b/packages/desktop/src/context/prompt.tsx @@ -1,9 +1,9 @@ import { createStore } from "solid-js/store" import { createSimpleContext } from "@opencode-ai/ui/context" import { batch, createMemo } from "solid-js" -import { makePersisted } from "@solid-primitives/storage" import { useParams } from "@solidjs/router" import { TextSelection } from "./local" +import { persisted } from "@/utils/persist" interface PartBase { content: string @@ -77,7 +77,8 @@ export const { use: usePrompt, provider: PromptProvider } = createSimpleContext( const params = useParams() const name = createMemo(() => `${params.dir}/prompt${params.id ? "/" + params.id : ""}.v1`) - const [store, setStore] = makePersisted( + const [store, setStore, _, ready] = persisted( + name(), createStore<{ prompt: Prompt cursor?: number @@ -85,12 +86,10 @@ export const { use: usePrompt, provider: PromptProvider } = createSimpleContext( prompt: clonePrompt(DEFAULT_PROMPT), cursor: undefined, }), - { - name: name(), - }, ) return { + ready, current: createMemo(() => store.prompt), cursor: createMemo(() => store.cursor), dirty: createMemo(() => !isPromptEqual(store.prompt, DEFAULT_PROMPT)), diff --git a/packages/desktop/src/context/terminal.tsx b/packages/desktop/src/context/terminal.tsx index cf9b5a5b9..6f7c11dea 100644 --- a/packages/desktop/src/context/terminal.tsx +++ b/packages/desktop/src/context/terminal.tsx @@ -1,9 +1,9 @@ import { createStore, produce } from "solid-js/store" import { createSimpleContext } from "@opencode-ai/ui/context" import { batch, createMemo } from "solid-js" -import { makePersisted } from "@solid-primitives/storage" import { useParams } from "@solidjs/router" import { useSDK } from "./sdk" +import { persisted } from "@/utils/persist" export type LocalPTY = { id: string @@ -21,19 +21,18 @@ export const { use: useTerminal, provider: TerminalProvider } = createSimpleCont const params = useParams() const name = createMemo(() => `${params.dir}/terminal${params.id ? "/" + params.id : ""}.v1`) - const [store, setStore] = makePersisted( + const [store, setStore, _, ready] = persisted( + name(), createStore<{ active?: string all: LocalPTY[] }>({ all: [], }), - { - name: name(), - }, ) return { + ready, all: createMemo(() => Object.values(store.all)), active: createMemo(() => store.active), new() { |
