diff --git a/preload.js b/preload.js index 646c405..e91f86c 100644 --- a/preload.js +++ b/preload.js @@ -1,5 +1,5 @@ // preload.js — expose IPC to renderer -const { contextBridge, ipcRenderer } = require('electron'); +const { contextBridge, ipcRenderer, webUtils } = require('electron'); contextBridge.exposeInMainWorld('electronAPI', { // Lokale Datei-Operationen @@ -20,7 +20,13 @@ contextBridge.exposeInMainWorld('electronAPI', { // 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), @@ -33,13 +39,22 @@ contextBridge.exposeInMainWorld('electronAPI', { // 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), @@ -52,6 +67,14 @@ contextBridge.exposeInMainWorld('electronAPI', { // 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), @@ -84,7 +107,7 @@ contextBridge.exposeInMainWorld('electronAPI', { saveRecent: (data) => ipcRenderer.invoke('save-recent', data), // === UPDATER APIs === - checkForUpdates: () => ipcRenderer.invoke('check-for-updates'), + checkForUpdates: (options) => ipcRenderer.invoke('check-for-updates', options || {}), getAppVersion: () => ipcRenderer.invoke('get-app-version'), // Triggert den tatsächlichen Download des Assets @@ -98,6 +121,12 @@ contextBridge.exposeInMainWorld('electronAPI', { 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); @@ -110,12 +139,6 @@ contextBridge.exposeInMainWorld('electronAPI', { return () => ipcRenderer.removeListener('push-progress', listener); }, - onPrePushBackupStatus: (cb) => { - const listener = (event, payload) => { try { cb(payload); } catch (_) {} }; - ipcRenderer.on('pre-push-backup-status', listener); - return () => ipcRenderer.removeListener('pre-push-backup-status', listener); - }, - onFolderUploadProgress: (cb) => { const listener = (event, payload) => { try { cb(payload); } catch (_) {} }; ipcRenderer.on('folder-upload-progress', listener); @@ -140,22 +163,6 @@ contextBridge.exposeInMainWorld('electronAPI', { return () => ipcRenderer.removeListener('batch-action-progress', listener); }, - // Backup Management - exportGiteaProjectsToLocal: (data) => ipcRenderer.invoke('export-gitea-projects-to-local', data), - setupBackupProvider: (data) => ipcRenderer.invoke('setup-backup-provider', data), - testBackupProvider: (data) => ipcRenderer.invoke('test-backup-provider', data), - getBackupAuthStatus: (data) => ipcRenderer.invoke('get-backup-auth-status', data), - createCloudBackup: (data) => ipcRenderer.invoke('create-cloud-backup', data), - listCloudBackups: (data) => ipcRenderer.invoke('list-cloud-backups', data), - restoreCloudBackup: (data) => ipcRenderer.invoke('restore-cloud-backup', data), - deleteCloudBackup: (data) => ipcRenderer.invoke('delete-cloud-backup', data), - - onBackupCreated: (cb) => { - const listener = (event, payload) => { try { cb(payload); } catch (_) {} }; - ipcRenderer.on('backup-created', listener); - return () => ipcRenderer.removeListener('backup-created', listener); - }, - // Window Controls windowMinimize: () => ipcRenderer.send('window-minimize'), windowMaximize: () => ipcRenderer.send('window-maximize'), @@ -167,5 +174,6 @@ contextBridge.exposeInMainWorld('electronAPI', { // Utility copyToClipboard: (text) => ipcRenderer.invoke('copy-to-clipboard', text), - openExternalUrl: (url) => ipcRenderer.invoke('open-external-url', url) + openExternalUrl: (url) => ipcRenderer.invoke('open-external-url', url), + debugToMain: (level, message, payload) => ipcRenderer.send('renderer-debug-log', { level, message, payload }) }); \ No newline at end of file