diff --git a/plugins/upload/guest-js/index.ts b/plugins/upload/guest-js/index.ts index 93dbb7d7..d9d6d261 100644 --- a/plugins/upload/guest-js/index.ts +++ b/plugins/upload/guest-js/index.ts @@ -1,27 +1,27 @@ -import { invoke } from '@tauri-apps/api/tauri'; -import { appWindow } from '@tauri-apps/api/window'; +import { invoke } from "@tauri-apps/api/tauri"; +import { appWindow } from "@tauri-apps/api/window"; interface BaseHandlerData { - id: number; + id: number; } interface ProgressHandlerData extends BaseHandlerData { - progress: number; - total: number; + progress: number; + total: number; } interface SizeHandlerData extends BaseHandlerData { - size: number; + size: number; } interface ResponseData { - text: string; - status: number; + text: string; + status: number; } enum UploadEvent { - progress = 'upload://progress', - fileSize = 'upload://file-size', + progress = "upload://progress", + fileSize = "upload://file-size", } type EventId = `${UploadEvent}-${number}`; @@ -31,43 +31,53 @@ type SizeHandler = (data: SizeHandlerData) => unknown; const handlers: Map = new Map(); const listeningMap: Map = new Map(); -const getIdForEvent = (event: UploadEvent, id: number): EventId => `${event}-${id}`; +const getIdForEvent = (event: UploadEvent, id: number): EventId => + `${event}-${id}`; async function listenToEventIfNeeded(event: UploadEvent) { - if (listeningMap.get(event)) { - return; + if (listeningMap.get(event)) { + return; + } + return appWindow.listen( + event, + ({ payload }) => { + const eventId = getIdForEvent(event, payload.id); + const handler = handlers.get(eventId); + if (typeof handler === "function") { + handler(payload); + } } - return appWindow.listen(event, ({ payload }) => { - const eventId = getIdForEvent(event, payload.id); - const handler = handlers.get(eventId); - if (typeof handler === 'function') { - handler(payload); - } - }); + ); } -export default async function upload(url: string, filePath: string, progressHandler?: ProgressHandler, fileSizeHandler?: SizeHandler, headers?: Record) { - const ids = new Uint32Array(1); - window.crypto.getRandomValues(ids); - const id = ids[0]; +export default async function upload( + url: string, + filePath: string, + progressHandler?: ProgressHandler, + fileSizeHandler?: SizeHandler, + headers?: Record +) { + const ids = new Uint32Array(1); + window.crypto.getRandomValues(ids); + const id = ids[0]; - if (progressHandler) { - const eventId = getIdForEvent(UploadEvent.progress, id); - handlers.set(eventId, progressHandler); - } + if (progressHandler) { + const eventId = getIdForEvent(UploadEvent.progress, id); + handlers.set(eventId, progressHandler); + } - if (fileSizeHandler) { - const eventId = getIdForEvent(UploadEvent.fileSize, id); - handlers.set(eventId, fileSizeHandler); - } + if (fileSizeHandler) { + const eventId = getIdForEvent(UploadEvent.fileSize, id); + handlers.set(eventId, fileSizeHandler); + } - await listenToEventIfNeeded(UploadEvent.progress); - await listenToEventIfNeeded(UploadEvent.fileSize); + await listenToEventIfNeeded(UploadEvent.progress); + await listenToEventIfNeeded(UploadEvent.fileSize); - return await invoke('plugin:upload|upload', { - id, - url, - filePath, - headers: headers ?? {}, - }); + return await invoke("plugin:upload|upload", { + id, + url, + filePath, + headers: headers ?? {}, + }); }