import { Channel, invoke } from '@tauri-apps/api/core'; import { emit } from '@tauri-apps/api/event'; import { Workspace } from '@yaakapp-internal/models'; import { useEffect } from 'react'; import { SyncOp } from './bindings/sync'; import { WatchEvent, WatchResult } from './bindings/watch'; export async function calculateSync(workspace: Workspace) { if (!workspace.settingSyncDir) return; return invoke('plugin:yaak-sync|calculate', { workspaceId: workspace.id, dir: workspace.settingSyncDir, }); } export async function applySync(workspace: Workspace, syncOps: SyncOp[]) { if (!workspace.settingSyncDir) return; return invoke('plugin:yaak-sync|apply', { workspaceId: workspace.id, dir: workspace.settingSyncDir, syncOps: syncOps, }); } export function useWatchWorkspace(workspace: Workspace | null, callback: (e: WatchEvent) => void) { useEffect(() => { if (workspace == null) return; if (!workspace.settingSyncDir) return; const channel = new Channel(); channel.onmessage = callback; const promise = invoke('plugin:yaak-sync|watch', { workspaceId: workspace.id, channel, }); return () => { promise .then(({ unlistenEvent }) => { console.log('Cancelling workspace watch', workspace.id, unlistenEvent); return emit(unlistenEvent); }) .catch(console.error); }; }, [workspace]); }