Files
XCDesktop/electron/preload.ts
ssdfasd de4c101b36 feat(remote): 实现文件上传真实进度显示
- 使用分块上传替代一次性上传
- 调用 /upload/start → /upload/chunk → /upload/merge 接口
- 通过 IPC 事件实时推送上传进度到前端
- 修复 merge 时未使用目标路径的问题
2026-03-10 15:36:10 +08:00

43 lines
2.8 KiB
TypeScript

import { contextBridge, ipcRenderer } from 'electron'
console.log('--- PRELOAD SCRIPT LOADED SUCCESSFULLY ---')
contextBridge.exposeInMainWorld('electronAPI', {
exportPDF: (title: string, htmlContent?: string) => ipcRenderer.invoke('export-pdf', title, htmlContent),
selectHtmlFile: () => ipcRenderer.invoke('select-html-file'),
updateTitlebarButtons: (symbolColor: string) => ipcRenderer.invoke('update-titlebar-buttons', symbolColor),
onRemoteClipboardSyncToRemote: (callback: () => void) => {
ipcRenderer.on('remote-clipboard-sync-to-remote', callback);
return () => ipcRenderer.removeListener('remote-clipboard-sync-to-remote', callback);
},
onRemoteClipboardSyncFromRemote: (callback: () => void) => {
ipcRenderer.on('remote-clipboard-sync-from-remote', callback);
return () => ipcRenderer.removeListener('remote-clipboard-sync-from-remote', callback);
},
onRemoteClipboardAutoSync: (callback: (text: string) => void) => {
const handler = (_event: Electron.IpcRendererEvent, text: string) => callback(text);
ipcRenderer.on('remote-clipboard-auto-sync', handler);
return () => ipcRenderer.removeListener('remote-clipboard-auto-sync', handler);
},
onDownloadProgress: (callback: (data: { progress: number; id: string }) => void) => {
const handler = (_event: Electron.IpcRendererEvent, data: { progress: number; id: string }) => callback(data);
ipcRenderer.on('download-progress', handler);
return () => ipcRenderer.removeListener('download-progress', handler);
},
onUploadProgress: (callback: (data: { progress: number; id: string }) => void) => {
const handler = (_event: Electron.IpcRendererEvent, data: { progress: number; id: string }) => callback(data);
ipcRenderer.on('upload-progress', handler);
return () => ipcRenderer.removeListener('upload-progress', handler);
},
clipboardReadText: () => ipcRenderer.invoke('clipboard-read-text'),
clipboardWriteText: (text: string) => ipcRenderer.invoke('clipboard-write-text', text),
remoteFetchDrives: (serverHost: string, port: number, password?: string) =>
ipcRenderer.invoke('remote-fetch-drives', serverHost, port, password),
remoteFetchFiles: (serverHost: string, port: number, filePath: string, password?: string) =>
ipcRenderer.invoke('remote-fetch-files', serverHost, port, filePath, password),
remoteUploadFile: (id: string, serverHost: string, port: number, filePath: string, remotePath: string, password?: string) =>
ipcRenderer.invoke('remote-upload-file', id, serverHost, port, filePath, remotePath, password),
remoteDownloadFile: (id: string, serverHost: string, port: number, fileName: string, remotePath: string, localPath: string, password?: string) =>
ipcRenderer.invoke('remote-download-file', id, serverHost, port, fileName, remotePath, localPath, password),
})