179 lines
9.1 KiB
JavaScript
179 lines
9.1 KiB
JavaScript
// preload.js — expose IPC to renderer
|
|
const { contextBridge, ipcRenderer, webUtils } = require('electron');
|
|
|
|
contextBridge.exposeInMainWorld('electronAPI', {
|
|
// Lokale Datei-Operationen
|
|
selectFolder: () => ipcRenderer.invoke('select-folder'),
|
|
selectFile: () => ipcRenderer.invoke('select-file'),
|
|
getFileTree: (data) => ipcRenderer.invoke('getFileTree', data),
|
|
readFile: (data) => ipcRenderer.invoke('readFile', data),
|
|
writeFile: (data) => ipcRenderer.invoke('writeFile', data),
|
|
deleteFile: (data) => ipcRenderer.invoke('deleteFile', data),
|
|
|
|
// Umbenennen, Erstellen, Verschieben, Kopieren
|
|
renameGiteaItem: (data) => ipcRenderer.invoke('rename-gitea-item', data),
|
|
createGiteaItem: (data) => ipcRenderer.invoke('create-gitea-item', data),
|
|
renameLocalItem: (data) => ipcRenderer.invoke('rename-local-item', data),
|
|
createLocalItem: (data) => ipcRenderer.invoke('create-local-item', data),
|
|
moveLocalItem: (data) => ipcRenderer.invoke('move-local-item', data),
|
|
copyLocalItem: (data) => ipcRenderer.invoke('copy-local-item', data),
|
|
|
|
// Gitea Datei-Operationen
|
|
listGiteaRepos: (data) => ipcRenderer.invoke('list-gitea-repos', data),
|
|
getGiteaCurrentUser: () => ipcRenderer.invoke('get-gitea-current-user'),
|
|
getGiteaUserHeatmap: (data) => ipcRenderer.invoke('get-gitea-user-heatmap', data),
|
|
|
|
// GitHub Datei-Operationen
|
|
listGithubRepos: (data) => ipcRenderer.invoke('list-github-repos', data),
|
|
getGithubCurrentUser: () => ipcRenderer.invoke('get-github-current-user'),
|
|
getGithubUserHeatmap: (data) => ipcRenderer.invoke('get-github-user-heatmap', 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),
|
|
downloadGiteaFolder: (data) => ipcRenderer.invoke('download-gitea-folder', data),
|
|
downloadGiteaFile: (data) => ipcRenderer.invoke('download-gitea-file', data),
|
|
uploadLocalFolderToGitea: (data) => ipcRenderer.invoke('upload-local-folder-to-gitea', data),
|
|
|
|
// Repository & Git Management
|
|
saveCredentials: (data) => ipcRenderer.invoke('save-credentials', data),
|
|
loadCredentials: () => ipcRenderer.invoke('load-credentials'),
|
|
getCredentialsStatus: () => ipcRenderer.invoke('get-credentials-status'),
|
|
testGiteaConnection: (data) => ipcRenderer.invoke('test-gitea-connection', data),
|
|
testGithubConnection: (data) => ipcRenderer.invoke('test-github-connection', data),
|
|
updateGiteaAvatar: (data) => ipcRenderer.invoke('update-gitea-avatar', data),
|
|
updateGiteaRepoAvatar: (data) => ipcRenderer.invoke('update-gitea-repo-avatar', data),
|
|
updateGiteaRepoVisibility: (data) => ipcRenderer.invoke('update-gitea-repo-visibility', data),
|
|
updateGiteaRepoTopics: (data) => ipcRenderer.invoke('update-gitea-repo-topics', data),
|
|
getGiteaTopicsCatalog: () => ipcRenderer.invoke('get-gitea-topics-catalog'),
|
|
migrateRepoToGitea: (data) => ipcRenderer.invoke('migrate-repo-to-gitea', data),
|
|
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),
|
|
uploadAndPush: (data) => ipcRenderer.invoke('upload-and-push', data),
|
|
deleteGiteaRepo: (data) => ipcRenderer.invoke('delete-gitea-repo', data),
|
|
syncRepoToGitHub: (data) => ipcRenderer.invoke('sync-repo-to-github', data),
|
|
runBatchRepoAction: (data) => ipcRenderer.invoke('run-batch-repo-action', data),
|
|
validateRepoName: (data) => ipcRenderer.invoke('validate-repo-name', data),
|
|
checkCloneTargetCollisions: (data) => ipcRenderer.invoke('check-clone-target-collisions', data),
|
|
|
|
// Offline/Retry Queue
|
|
getRetryQueue: () => ipcRenderer.invoke('get-retry-queue'),
|
|
processRetryQueueNow: () => ipcRenderer.invoke('process-retry-queue-now'),
|
|
removeRetryQueueItem: (data) => ipcRenderer.invoke('remove-retry-queue-item', data),
|
|
|
|
// Drag & Drop
|
|
prepareDownloadDrag: (data) => ipcRenderer.invoke('prepare-download-drag', data),
|
|
startNativeDrag: (filePath) => ipcRenderer.send('ondragstart', filePath),
|
|
getPathType: (filePath) => ipcRenderer.invoke('get-path-type', filePath),
|
|
getPathForFile: (file) => {
|
|
try {
|
|
return webUtils.getPathForFile(file) || '';
|
|
} catch (_) {
|
|
return '';
|
|
}
|
|
},
|
|
|
|
// 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),
|
|
|
|
// === FAVORITEN & ZULETZT GEÖFFNET ===
|
|
loadFavorites: () => ipcRenderer.invoke('load-favorites'),
|
|
saveFavorites: (data) => ipcRenderer.invoke('save-favorites', data),
|
|
loadRecent: () => ipcRenderer.invoke('load-recent'),
|
|
saveRecent: (data) => ipcRenderer.invoke('save-recent', data),
|
|
|
|
// === UPDATER APIs ===
|
|
checkForUpdates: (options) => ipcRenderer.invoke('check-for-updates', options || {}),
|
|
getAppVersion: () => ipcRenderer.invoke('get-app-version'),
|
|
|
|
// Triggert den tatsächlichen Download des Assets
|
|
// WICHTIG: Muss in renderer.js als window.electronAPI.startUpdateDownload(asset) aufgerufen werden
|
|
startUpdateDownload: (asset) => ipcRenderer.invoke('start-update-download', asset),
|
|
|
|
// === Progress & Update Subscriptions ===
|
|
onUpdateAvailable: (cb) => {
|
|
const listener = (event, info) => cb(info);
|
|
ipcRenderer.on('update-available', listener);
|
|
return () => ipcRenderer.removeListener('update-available', listener);
|
|
},
|
|
|
|
onUpdateNotAvailable: (cb) => {
|
|
const listener = (event, info) => cb(info);
|
|
ipcRenderer.on('update-not-available', listener);
|
|
return () => ipcRenderer.removeListener('update-not-available', listener);
|
|
},
|
|
|
|
onUpdateProgress: (cb) => {
|
|
const listener = (event, percent) => cb(percent);
|
|
ipcRenderer.on('update-progress', listener);
|
|
return () => ipcRenderer.removeListener('update-progress', listener);
|
|
},
|
|
|
|
onPushProgress: (cb) => {
|
|
const listener = (event, percent) => { try { cb(percent); } catch (_) {} };
|
|
ipcRenderer.on('push-progress', listener);
|
|
return () => ipcRenderer.removeListener('push-progress', listener);
|
|
},
|
|
|
|
onFolderUploadProgress: (cb) => {
|
|
const listener = (event, payload) => { try { cb(payload); } catch (_) {} };
|
|
ipcRenderer.on('folder-upload-progress', listener);
|
|
return () => ipcRenderer.removeListener('folder-upload-progress', listener);
|
|
},
|
|
|
|
onFolderDownloadProgress: (cb) => {
|
|
const listener = (event, payload) => { try { cb(payload); } catch (_) {} };
|
|
ipcRenderer.on('folder-download-progress', listener);
|
|
return () => ipcRenderer.removeListener('folder-download-progress', listener);
|
|
},
|
|
|
|
onRetryQueueUpdated: (cb) => {
|
|
const listener = (event, payload) => { try { cb(payload); } catch (_) {} };
|
|
ipcRenderer.on('retry-queue-updated', listener);
|
|
return () => ipcRenderer.removeListener('retry-queue-updated', listener);
|
|
},
|
|
|
|
onBatchActionProgress: (cb) => {
|
|
const listener = (event, payload) => { try { cb(payload); } catch (_) {} };
|
|
ipcRenderer.on('batch-action-progress', listener);
|
|
return () => ipcRenderer.removeListener('batch-action-progress', listener);
|
|
},
|
|
|
|
// Window Controls
|
|
windowMinimize: () => ipcRenderer.send('window-minimize'),
|
|
windowMaximize: () => ipcRenderer.send('window-maximize'),
|
|
windowClose: () => ipcRenderer.send('window-close'),
|
|
|
|
// Autostart
|
|
setAutostart: (enable) => ipcRenderer.invoke('set-autostart', enable),
|
|
getAutostart: () => ipcRenderer.invoke('get-autostart'),
|
|
|
|
// Utility
|
|
copyToClipboard: (text) => ipcRenderer.invoke('copy-to-clipboard', text),
|
|
openExternalUrl: (url) => ipcRenderer.invoke('open-external-url', url),
|
|
debugToMain: (level, message, payload) => ipcRenderer.send('renderer-debug-log', { level, message, payload })
|
|
}); |