Upload via GUI (19 Dateien)

This commit is contained in:
Git Manager GUI
2026-08-01 07:03:08 +02:00
parent fb6da6562e
commit ab502f44ef
19 changed files with 10983 additions and 21 deletions
+93
View File
@@ -0,0 +1,93 @@
'use strict';
/*
* preload.js – stellt dem Renderer eine schmale, sichere API bereit.
* contextIsolation ist aktiv; der Renderer hat KEINEN direkten Node-Zugriff.
*/
const { contextBridge, ipcRenderer } = require('electron');
contextBridge.exposeInMainWorld('api', {
// Einstellungen
getSettings: () => ipcRenderer.invoke('settings:get'),
saveSettings: (patch) => ipcRenderer.invoke('settings:save', patch),
getInstancesDir: () => ipcRenderer.invoke('settings:instancesDir'),
detectJava: (javaPath) => ipcRenderer.invoke('java:detect', javaPath),
scanJava: () => ipcRenderer.invoke('java:scan'),
// Minecraft-Versionen (Mojang)
mcVersions: () => ipcRenderer.invoke('mc:versions'),
loaderVersions: (loader, mcVersion) => ipcRenderer.invoke('loaders:versions', loader, mcVersion),
// Mods (Modrinth)
modSearch: (opts) => ipcRenderer.invoke('mods:search', opts),
modList: (id) => ipcRenderer.invoke('mods:list', id),
modInstall: (id, project) => ipcRenderer.invoke('mods:install', id, project),
modRemove: (id, filename) => ipcRenderer.invoke('mods:remove', id, filename),
// Instanzen
listInstances: () => ipcRenderer.invoke('instances:list'),
getInstance: (id) => ipcRenderer.invoke('instances:get', id),
createInstance: (data) => ipcRenderer.invoke('instances:create', data),
updateInstance: (id, patch) => ipcRenderer.invoke('instances:update', id, patch),
deleteInstance: (id) => ipcRenderer.invoke('instances:delete', id),
duplicateInstance: (id) => ipcRenderer.invoke('instances:duplicate', id),
openInstanceFolder: (id) => ipcRenderer.invoke('instances:openFolder', id),
openGameDir: (id) => ipcRenderer.invoke('instances:openGameDir', id),
// Welten & Ressourcenpakete
worlds: (id) => ipcRenderer.invoke('instance:worlds', id),
resourcepacks: (id) => ipcRenderer.invoke('instance:resourcepacks', id),
deleteContent: (id, sub, name) => ipcRenderer.invoke('instance:deleteContent', id, sub, name),
openSubdir: (id, sub) => ipcRenderer.invoke('instance:openSubdir', id, sub),
screenshots: (id) => ipcRenderer.invoke('instance:screenshots', id),
screenshotData: (id, name) => ipcRenderer.invoke('instance:screenshotData', id, name),
openScreenshot: (id, name) => ipcRenderer.invoke('instance:openScreenshot', id, name),
launchInstance: (id, accountId) => ipcRenderer.invoke('instances:launch', id, accountId),
exportInstance: (id) => ipcRenderer.invoke('instances:export', id),
importInstance: () => ipcRenderer.invoke('instances:import'),
importModpack: () => ipcRenderer.invoke('modpack:import'),
onLaunchProgress: (cb) => {
const listener = (_e, data) => cb(data);
ipcRenderer.on('launch:progress', listener);
return () => ipcRenderer.removeListener('launch:progress', listener);
},
// eigenes Instanz-Bild
pickImage: () => ipcRenderer.invoke('dialog:pickImage'),
setInstanceImage: (id, sourcePath) => ipcRenderer.invoke('instances:setImage', id, sourcePath),
clearInstanceImage: (id) => ipcRenderer.invoke('instances:clearImage', id),
instanceIcon: (id) => ipcRenderer.invoke('instances:icon', id),
fileDataUri: (p) => ipcRenderer.invoke('file:dataUri', p),
// Microsoft-Login (Phase 3) + Mehrkonten
authStatus: () => ipcRenderer.invoke('auth:status'),
authAccounts: () => ipcRenderer.invoke('auth:accounts'),
authSetActive: (id) => ipcRenderer.invoke('auth:setActive', id),
authRemove: (id) => ipcRenderer.invoke('auth:remove', id),
authLogin: () => ipcRenderer.invoke('auth:login'),
authLogout: () => ipcRenderer.invoke('auth:logout'),
authHealth: () => ipcRenderer.invoke('auth:health'),
authRecheck: () => ipcRenderer.invoke('auth:recheck'),
onAuthHealth: (cb) => {
const listener = (_e, data) => cb(data);
ipcRenderer.on('auth:health', listener);
return () => ipcRenderer.removeListener('auth:health', listener);
},
onAuthRefreshed: (cb) => {
const listener = () => cb();
ipcRenderer.on('auth:refreshed', listener);
return () => ipcRenderer.removeListener('auth:refreshed', listener);
},
onAuthCode: (cb) => {
const listener = (_e, data) => cb(data);
ipcRenderer.on('auth:code', listener);
return () => ipcRenderer.removeListener('auth:code', listener);
},
// Dialoge / App
openExternal: (url) => ipcRenderer.invoke('app:openExternal', url),
pickFolder: (title) => ipcRenderer.invoke('dialog:pickFolder', title),
pickJava: () => ipcRenderer.invoke('dialog:pickJava'),
appInfo: () => ipcRenderer.invoke('app:info'),
});