import { useConnectionStore } from "@/stores/connectionStore"; import { useQueryStore } from "@/stores/queryStore"; import type { NavigationTarget } from "@/composables/useNavigationTargets"; export function useTauriEvents(deps: { openTableTarget: (target: NavigationTarget) => Promise }) { const connectionStore = useConnectionStore(); const queryStore = useQueryStore(); const unlistenHandles: Array<() => void> = []; function setupTauriListeners() { import("@tauri-apps/api/event") .then(({ listen }) => { listen<{ connection_id: string; database: string; schema?: string; table: string }>( "mcp-open-table", async (event) => { try { const { connection_id, database, schema, table } = event.payload; if (!connectionStore.connections.length) await connectionStore.initFromDisk(); const config = connectionStore.getConfig(connection_id); if (!config) return; connectionStore.activeConnectionId = connection_id; await connectionStore.ensureConnected(connection_id); if (config.db_type === "redis") { queryStore.createTab(connection_id, database || "0", `db${database || "0"}`, "redis"); } else if (config.db_type === "mongodb") { queryStore.createTab(connection_id, database, table, "mongo"); } else { deps.openTableTarget({ connectionId: connection_id, database, schema, tableName: table }); } import("@tauri-apps/api/window").then(({ getCurrentWindow }) => getCurrentWindow() .setFocus() .catch(() => {}), ); } catch (e) { console.error("[DBX] mcp-open-table error:", e); } }, ).then((unlisten) => unlistenHandles.push(unlisten)); listen("mcp-reload-connections", async () => { try { await connectionStore.initFromDisk(); } catch (e) { console.error("[DBX] mcp-reload-connections error:", e); } }).then((unlisten) => unlistenHandles.push(unlisten)); listen<{ connection_id: string; database: string; sql: string }>("mcp-execute-query", async (event) => { try { const { connection_id, database, sql } = event.payload; if (!connectionStore.connections.length) await connectionStore.initFromDisk(); const config = connectionStore.getConfig(connection_id); if (!config) return; connectionStore.activeConnectionId = connection_id; await connectionStore.ensureConnected(connection_id); const tabId = queryStore.createTab(connection_id, database, undefined, "query"); queryStore.updateSql(tabId, sql); await queryStore.executeTabSql(tabId, sql); import("@tauri-apps/api/window").then(({ getCurrentWindow }) => getCurrentWindow() .setFocus() .catch(() => {}), ); } catch (e) { console.error("[DBX] mcp-execute-query error:", e); } }).then((unlisten) => unlistenHandles.push(unlisten)); }) .catch(() => {}); } function cleanupTauriListeners() { unlistenHandles.forEach((unlisten) => unlisten()); unlistenHandles.length = 0; } return { setupTauriListeners, cleanupTauriListeners }; }