// preload.js — expose IPC to renderer const { contextBridge, ipcRenderer } = require('electron'); contextBridge.exposeInMainWorld('electronAPI', { selectFolder: () => ipcRenderer.invoke('select-folder'), selectFile: () => ipcRenderer.invoke('select-file'), saveCredentials: (data) => ipcRenderer.invoke('save-credentials', data), loadCredentials: () => ipcRenderer.invoke('load-credentials'), createRepo: (data) => ipcRenderer.invoke('create-repo', data), pushProject: (data) => ipcRenderer.invoke('push-project', data), getBranches: (data) => ipcRenderer.invoke('getBranches', data), getCommitLogs: (data) => ipcRenderer.invoke('getCommitLogs', data), getFileTree: (data) => ipcRenderer.invoke('getFileTree', data), readFile: (data) => ipcRenderer.invoke('readFile', data), writeFile: (data) => ipcRenderer.invoke('writeFile', data), deleteFile: (data) => ipcRenderer.invoke('deleteFile', data), listGiteaRepos: (data) => ipcRenderer.invoke('list-gitea-repos', data), getGiteaRepoContents: (data) => ipcRenderer.invoke('get-gitea-repo-contents', data), getGiteaFileContent: (data) => ipcRenderer.invoke('get-gitea-file-content', data), readGiteaFile: (data) => ipcRenderer.invoke('read-gitea-file', data), writeGiteaFile: (data) => ipcRenderer.invoke('write-gitea-file', data), uploadGiteaFile: (data) => ipcRenderer.invoke('upload-gitea-file', data), uploadLocalFolderToGitea: (data) => ipcRenderer.invoke('upload-local-folder-to-gitea', data), downloadGiteaFolder: (data) => ipcRenderer.invoke('download-gitea-folder', data), downloadGiteaFile: (data) => ipcRenderer.invoke('download-gitea-file', data), prepareDownloadDrag: (data) => ipcRenderer.invoke('prepare-download-drag', data), startNativeDrag: (filePath) => ipcRenderer.send('ondragstart', filePath), uploadAndPush: (data) => ipcRenderer.invoke('upload-and-push', data), deleteGiteaRepo: (data) => ipcRenderer.invoke('delete-gitea-repo', data), // Release Management listReleases: (data) => ipcRenderer.invoke('list-releases', data), getRelease: (data) => ipcRenderer.invoke('get-release', data), createRelease: (data) => ipcRenderer.invoke('create-release', data), editRelease: (data) => ipcRenderer.invoke('edit-release', data), deleteRelease: (data) => ipcRenderer.invoke('delete-release', data), uploadReleaseAsset: (data) => ipcRenderer.invoke('upload-release-asset', data), deleteReleaseAsset: (data) => ipcRenderer.invoke('delete-release-asset', data), downloadReleaseArchive: (data) => ipcRenderer.invoke('download-release-archive', data), // Commit History & Visualization getCommits: (data) => ipcRenderer.invoke('get-commits', data), getCommitDetails: (data) => ipcRenderer.invoke('get-commit-details', data), getCommitDiff: (data) => ipcRenderer.invoke('get-commit-diff', data), getCommitFiles: (data) => ipcRenderer.invoke('get-commit-files', data), searchCommits: (data) => ipcRenderer.invoke('search-commits', data), getRepoBranches: (data) => ipcRenderer.invoke('get-repo-branches', data), // Local Repository Commits getLocalCommits: (data) => ipcRenderer.invoke('get-local-commits', data), getLocalCommitDiff: (data) => ipcRenderer.invoke('get-local-commit-diff', data), getLocalCommitDetails: (data) => ipcRenderer.invoke('get-local-commit-details', data), searchLocalCommits: (data) => ipcRenderer.invoke('search-local-commits', data), // progress subscriptions onPushProgress: (cb) => { ipcRenderer.on('push-progress', (event, percent) => { try { cb(percent); } catch (_) {} }); }, onFolderUploadProgress: (cb) => { ipcRenderer.on('folder-upload-progress', (event, payload) => { try { cb(payload); } catch (_) {} }); }, onFolderDownloadProgress: (cb) => { ipcRenderer.on('folder-download-progress', (event, payload) => { try { cb(payload); } catch (_) {} }); } });