diff --git a/packages/app/src/components/dialog-select-server.tsx b/packages/app/src/components/dialog-select-server.tsx index 7ee185b289..5b04c9d719 100644 --- a/packages/app/src/components/dialog-select-server.tsx +++ b/packages/app/src/components/dialog-select-server.tsx @@ -275,6 +275,7 @@ export function DialogSelectServer(props: DialogSelectServerProps = {}) { return key }, onSuccess: async (key) => { + if (defaultServer.defaultKey() === key) await defaultServer.setDefault(null) server.remove(key) }, onError: (err) => showRequestError(language, err), @@ -610,6 +611,11 @@ export function DialogSelectServer(props: DialogSelectServerProps = {}) { WSL + + + {language.t("dialog.server.status.default")} + + {wslRuntimeLabel(item.runtime.kind)} @@ -630,7 +636,21 @@ export function DialogSelectServer(props: DialogSelectServerProps = {}) { Retry start - + + void defaultServer.setDefault(key)}> + + {language.t("dialog.server.menu.default")} + + + + + void defaultServer.setDefault(null)}> + + {language.t("dialog.server.menu.defaultRemove")} + + + + health(key)?.healthy === false - const canChangeDefault = () => defaultServer.canDefault() && i.type === "http" + const canChangeDefault = () => defaultServer.canDefault() && (i.type === "http" || wsl) const canRemove = () => i.type === "http" || wsl const opencodeAction = () => { const check = wslCheck(i) diff --git a/packages/desktop/src/main/index.ts b/packages/desktop/src/main/index.ts index da45ac66a7..181c6722a6 100644 --- a/packages/desktop/src/main/index.ts +++ b/packages/desktop/src/main/index.ts @@ -348,7 +348,9 @@ const main = Effect.gen(function* () { password, }) - void wslServers.initialize().catch((error) => logger.error("wsl server initialization failed", error)) + void wslServers + .initialize({ defaultServer: getDefaultServerUrl() }) + .catch((error) => logger.error("wsl server initialization failed", error)) yield* Effect.promise(() => health.wait).pipe( Effect.timeout("30 seconds"), diff --git a/packages/desktop/src/main/wsl-servers.ts b/packages/desktop/src/main/wsl-servers.ts index 34cf62f9d7..62580ce7ca 100644 --- a/packages/desktop/src/main/wsl-servers.ts +++ b/packages/desktop/src/main/wsl-servers.ts @@ -226,9 +226,9 @@ export function createWslServersController(appVersion: string, spawnSidecar: Spa return () => listeners.delete(listener) }, - async initialize() { + async initialize(opts?: { defaultServer?: string | null }) { refreshFromStore() - await Promise.all(state.servers.map((item) => startServer(item.config.id))) + if (opts?.defaultServer?.startsWith("wsl:")) void startServer(opts.defaultServer) }, async probeRuntime() { diff --git a/packages/desktop/src/renderer/index.tsx b/packages/desktop/src/renderer/index.tsx index ff31b374ef..9c3354da0d 100644 --- a/packages/desktop/src/renderer/index.tsx +++ b/packages/desktop/src/renderer/index.tsx @@ -18,7 +18,7 @@ import { import * as Sentry from "@sentry/solid" import type { AsyncStorage } from "@solid-primitives/storage" import { MemoryRouter } from "@solidjs/router" -import { createEffect, createMemo, createResource, onCleanup, onMount } from "solid-js" +import { createEffect, createMemo, createResource, onCleanup, onMount, Show } from "solid-js" import { render } from "solid-js/web" import pkg from "../../package.json" import { initI18n, t } from "./i18n" @@ -365,16 +365,23 @@ render(() => { } return list }) + const effectiveDefaultServer = createMemo(() => { + const key = defaultServer.latest ?? ServerConnection.Key.make("sidecar") + if (!key.startsWith("wsl:")) return key + const item = wslServers.data?.servers.find((item) => item.config.id === key) + if (item?.runtime.kind === "ready") return key + return ServerConnection.Key.make("sidecar") + }) if (!ready()) return splash return ( - - - + + {(key) => ( + + + + )} + ) }