Files
Thing/src/stores/quickpanelStore.ts
T
2026-08-06 10:33:16 +08:00

51 lines
1.9 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import { defineStore } from 'pinia'
import { moduleRegistry } from '@/modules/registry'
import { useAppStore } from '@/stores/appStore'
import { STORAGE_KEYS } from '@/lib/constants'
// Rust 端通过 tauri-specta 生成的命令绑定(bindings.ts
import { commands } from '@/lib/bindings'
/** 快速面板状态:命令缓存与设置的跨窗口同步(写入 localStorage 供独立弹窗读取) */
export const useQuickPanelStore = defineStore('quickpanel', () => {
/** 将已启用模块的命令缓存写入 localStorage(供独立弹窗窗口读取) */
const syncCommands = () => {
const appStore = useAppStore()
const enabledIds = appStore.enabledModules.map(m => m.id)
const all = moduleRegistry.getAllSearchItems()
const commands: Array<{
moduleId: string
moduleName: string
title: string
description?: string
keywords: string[]
}> = []
for (const { moduleId, items } of all) {
const config = moduleRegistry.getConfig(moduleId)
// 内置模块或已启用模块的搜索项才收录
if (!config?.builtin && !enabledIds.includes(moduleId)) continue
for (const item of items) {
commands.push({
moduleId,
moduleName: config?.name ?? moduleId,
title: item.title,
description: item.description,
keywords: item.keywords,
})
}
}
localStorage.setItem(STORAGE_KEYS.quickpanelCommands, JSON.stringify(commands))
}
/** 将快速面板设置写入 localStorage(供独立窗口的 web provider 读取搜索引擎) */
const syncSettings = async () => {
try {
const s = await commands.quickpanelGetSettings()
localStorage.setItem(STORAGE_KEYS.quickpanelSettings, JSON.stringify(s))
} catch (e) {
console.error('[quickpanel] 同步设置失败:', e)
}
}
return { syncCommands, syncSettings }
})