Skip to content

Commit

Permalink
fix: Server icon show everywhere when server refreshed
Browse files Browse the repository at this point in the history
  • Loading branch information
ci010 committed Feb 24, 2024
1 parent 62f743f commit 0ae7bc1
Show file tree
Hide file tree
Showing 2 changed files with 7 additions and 13 deletions.
18 changes: 6 additions & 12 deletions xmcl-keystone-ui/src/composables/serverStatus.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,15 @@
import { Instance, PingServerOptions, ServerStatus, ServerStatusServiceKey, UNKNOWN_STATUS } from '@xmcl/runtime-api'
import { Instance, PingServerOptions, ServerStatus, ServerStatusServiceKey } from '@xmcl/runtime-api'
import { InjectionKey, Ref, computed, ref, set, watch } from 'vue'

import { useService, useSeverStatusAcceptVersion } from '@/composables'
import { useService } from '@/composables'
import { useLocalStorageCache } from '@/composables/cache'
import { injection } from '@/util/inject'
import { kInstances } from './instances'

export const kServerStatusCache: InjectionKey<Ref<Record<string, ServerStatus>>> = Symbol('ServerStatusCache')

export function useInstanceServerStatus(instance: Ref<Instance>) {
const serverRef = computed(() => instance.value?.server ?? { host: '' })
return useServerStatus(serverRef, ref(25565))
return useServerStatus(computed(() => instance.value?.server ?? { host: '' }), ref(25565))
}

export function useServerStatusCache() {
Expand Down Expand Up @@ -105,16 +104,13 @@ export function useServerStatus(serverRef: Ref<{ host: string; port?: number }>,
const unknownStatus = useUnknown()
const cache = injection(kServerStatusCache)
const serverId = computed(() => `${serverRef.value.host}:${serverRef.value.port ?? 25565}`)
if (!cache.value[serverId.value]) {
set(cache.value, serverId.value, unknownStatus.value)
}
watch(serverId, () => {
if (!cache.value[serverId.value]) {
set(cache.value, serverId.value, unknownStatus.value)
}
})
}, { immediate: true })
const status = computed<ServerStatus>({
get() { return cache.value[serverId.value] },
get() { return cache.value[serverId.value] ?? unknownStatus.value },
set(v) {
set(cache.value, serverId.value, v)
localStorage.setItem('serverStatusCache', JSON.stringify(cache.value))
Expand Down Expand Up @@ -144,12 +140,10 @@ export function useServerStatus(serverRef: Ref<{ host: string; port?: number }>,
})

function reset() {
status.value = UNKNOWN_STATUS
status.value = unknownStatus.value
}

const acceptingVersion = useSeverStatusAcceptVersion(status)
return {
acceptingVersion,
status,
pinging,
refresh,
Expand Down
2 changes: 1 addition & 1 deletion xmcl-keystone-ui/src/views/AppSideBarInstanceItem.vue
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ const { status } = useInstanceServerStatus(computed(() => props.instance))
const dragging = ref(false)
const dragover = ref(0)
const favicon = computed(() => getInstanceIcon(props.instance, status.value))
const favicon = computed(() => getInstanceIcon(props.instance, props.instance.server ? status.value : undefined))
const items = useInstanceContextMenuItems(computed(() => props.instance))
Expand Down

0 comments on commit 0ae7bc1

Please sign in to comment.