fix(gui): refresh service after core version upgrade (#2172)

This commit is contained in:
KKRainbow
2026-04-27 15:54:52 +08:00
committed by GitHub
parent 8f862997eb
commit 969ecfc4ca
2 changed files with 21 additions and 3 deletions
+1
View File
@@ -18,6 +18,7 @@ export interface ServiceMode extends WebClientConfig {
rpc_portal: string rpc_portal: string
file_log_level: 'off' | 'warn' | 'info' | 'debug' | 'trace' file_log_level: 'off' | 'warn' | 'info' | 'debug' | 'trace'
file_log_dir: string file_log_dir: string
installed_core_version?: string
} }
export interface RemoteMode { export interface RemoteMode {
+20 -3
View File
@@ -16,7 +16,7 @@ import { useToast, useConfirm } from 'primevue'
import { loadMode, saveMode, WebClientConfig, type Mode } from '~/composables/mode' import { loadMode, saveMode, WebClientConfig, type Mode } from '~/composables/mode'
import { saveLastNetworkInstanceId, loadLastNetworkInstanceId } from '~/composables/config' import { saveLastNetworkInstanceId, loadLastNetworkInstanceId } from '~/composables/config'
import ModeSwitcher from '~/components/ModeSwitcher.vue' import ModeSwitcher from '~/components/ModeSwitcher.vue'
import { getServiceStatus } from '~/composables/backend' import { getEasytierVersion, getServiceStatus } from '~/composables/backend'
const { t, locale } = useI18n() const { t, locale } = useI18n()
const confirm = useConfirm() const confirm = useConfirm()
@@ -85,6 +85,20 @@ async function onUninstallService() {
}); });
} }
function stripModeMetadata(mode: Mode) {
if (mode.mode !== 'service') {
return mode
}
const serviceConfig = { ...mode }
delete serviceConfig.installed_core_version
return serviceConfig
}
function modeConfigChanged(next: Mode) {
return JSON.stringify(stripModeMetadata(next)) !== JSON.stringify(stripModeMetadata(currentMode.value))
}
async function onStopService() { async function onStopService() {
isModeSaving.value = true isModeSaving.value = true
manualDisconnect.value = true manualDisconnect.value = true
@@ -134,13 +148,14 @@ async function initWithMode(mode: Mode) {
} }
url = mode.remote_rpc_address url = mode.remote_rpc_address
break; break;
case 'service': case 'service': {
if (!mode.config_dir || !mode.file_log_dir || !mode.file_log_level || !mode.rpc_portal) { if (!mode.config_dir || !mode.file_log_dir || !mode.file_log_level || !mode.rpc_portal) {
toast.add({ severity: 'error', summary: t('error'), detail: t('mode.service_config_empty'), life: 10000 }) toast.add({ severity: 'error', summary: t('error'), detail: t('mode.service_config_empty'), life: 10000 })
return initWithMode({ ...mode, mode: 'normal' }); return initWithMode({ ...mode, mode: 'normal' });
} }
let serviceStatus = await getServiceStatus() let serviceStatus = await getServiceStatus()
if (serviceStatus === "NotInstalled" || JSON.stringify(mode) !== JSON.stringify(currentMode.value)) { const coreVersion = await getEasytierVersion()
if (serviceStatus === "NotInstalled" || modeConfigChanged(mode) || mode.installed_core_version !== coreVersion) {
mode.config_server_url = mode.config_server_url || undefined mode.config_server_url = mode.config_server_url || undefined
await initService({ await initService({
config_dir: mode.config_dir, config_dir: mode.config_dir,
@@ -149,6 +164,7 @@ async function initWithMode(mode: Mode) {
rpc_portal: mode.rpc_portal, rpc_portal: mode.rpc_portal,
config_server: mode.config_server_url, config_server: mode.config_server_url,
}) })
mode.installed_core_version = coreVersion
serviceStatus = await getServiceStatus() serviceStatus = await getServiceStatus()
} }
if (serviceStatus === "Stopped") { if (serviceStatus === "Stopped") {
@@ -157,6 +173,7 @@ async function initWithMode(mode: Mode) {
url = "tcp://" + mode.rpc_portal.replace("0.0.0.0", "127.0.0.1") url = "tcp://" + mode.rpc_portal.replace("0.0.0.0", "127.0.0.1")
retrys = 5 retrys = 5
break; break;
}
case 'normal': case 'normal':
url = mode.rpc_portal; url = mode.rpc_portal;
break; break;