diff --git a/index.html b/index.html index 67b0280..76161f7 100644 --- a/index.html +++ b/index.html @@ -179,8 +179,14 @@
+
+
diff --git a/main.js b/main.js index e165da3..ff1c316 100644 --- a/main.js +++ b/main.js @@ -19,6 +19,11 @@ const store = new Store({ // Map zum Speichern der Watcher pro Ordner const repoWatchers = new Map(); +// Debug Helper +function debug(msg) { + console.log(`[DEBUG ${new Date().toISOString()}] ${msg}`); +} + /** * Erstellt das BrowserWindow und lädt index.html. * Gibt das Window-Objekt zurück. @@ -288,6 +293,60 @@ ipcMain.on('show-folder-context-menu', (event, folderPath) => { ]; const menu = Menu.buildFromTemplate(template); menu.popup({ window: win }); + +// main.js + +const simpleGit = require('simple-git'); +const path = require('path'); + +// Debug Helper +function debug(msg) { + console.log(`[DEBUG ${new Date().toISOString()}] ${msg}`); +} + + ipcMain.handle('commit-current-folder', async (_e, folder, message) => { + try { + debug(`Commit-Vorgang für ${folder} gestartet…`); + const git = simpleGit(folder); + + // HEAD-Status prüfen + let currentBranch = null; + try { + currentBranch = (await git.revparse(['--abbrev-ref', 'HEAD'])).trim(); + debug(`Aktueller Branch: ${currentBranch}`); + } catch (err) { + debug('HEAD ist detached.'); + } + + // Wenn detached, alten Branch umbenennen und neuen master erzeugen + if (!currentBranch || currentBranch === 'HEAD') { + const timestamp = new Date().toISOString().replace(/[:.]/g, '-'); + const backupBranch = `backup-master-${timestamp}`; + + // Alten master umbenennen (nur falls vorhanden!) + const branches = await git.branchLocal(); + if (branches.all.includes('master')) { + await git.branch(['-m', 'master', backupBranch]); + debug(`Alter master-Branch wurde in ${backupBranch} umbenannt.`); + } + // Neuer master-Branch + await git.checkout(['-b', 'master']); + debug('Neuer master-Branch erstellt und ausgecheckt.'); + } + + await git.add(['-A']); + debug('Alle Änderungen gestaged.'); + await git.commit(message || 'test'); + debug('Commit erfolgreich erstellt.'); + await git.push(['-u', 'origin', 'master']); + debug('Push auf origin/master erfolgreich.'); + + return { success: true }; + } catch (err) { + debug(`FEHLER beim Commit: ${err.message}`); + return { success: false, error: err.message }; + } + }); }); // clean up on exit diff --git a/preload.js b/preload.js index 859eb75..99c05ac 100644 --- a/preload.js +++ b/preload.js @@ -25,6 +25,7 @@ contextBridge.exposeInMainWorld('electronAPI', { getSkipPrompt: () => ipcRenderer.invoke('get-skip-git-prompt'), setSkipPrompt: val => ipcRenderer.invoke('set-skip-git-prompt', val), showFolderContextMenu: folderPath => ipcRenderer.send('show-folder-context-menu', folderPath), + commitCurrentFolder: (folder, message) => ipcRenderer.invoke('commit-current-folder', folder, message), }); ipcRenderer.on('repo-updated', (_e, folder) => { diff --git a/renderer.js b/renderer.js index 8b64c5d..1cf6c7a 100644 --- a/renderer.js +++ b/renderer.js @@ -8,6 +8,11 @@ window.addEventListener('DOMContentLoaded', async () => { const contentList = document.getElementById('contentList'); const panel = document.querySelector('.flex-1.p-4.overflow-y-auto'); + const commitBtn = document.getElementById('commitBtn'); + + + + // 1) Baby-Blau und Nacht-Blau als RGB-Arrays const DAY_COLOR = [173, 216, 230]; const NIGHT_COLOR = [0, 0, 50]; @@ -394,4 +399,33 @@ async function renderSidebar() { window.electronAPI.showFolderContextMenu(titleEl.textContent); } }); + + + + commitBtn.addEventListener('click', async () => { + const folder = await window.electronAPI.getSelected(); + console.log('[DEBUG] Selected folder for commit:', folder); + + if (!folder || folder === 'No folder selected') { + alert('Kein Ordner ausgewählt!'); + return; + } + const message = prompt('Commit-Nachricht:', 'test'); + if (!message) return; + + commitBtn.disabled = true; + commitBtn.textContent = 'Committing...'; + + const result = await window.electronAPI.commitCurrentFolder(folder, message); + console.log('[DEBUG] Commit result:', result); + + if (result.success) { + alert('Commit erfolgreich!'); + await renderContent(folder); // ← refresht Commit-Liste! + } else { + alert('Commit fehlgeschlagen:\n' + result.error); + } + commitBtn.disabled = false; + commitBtn.textContent = 'Commit'; + }); }); \ No newline at end of file