diff --git a/index.html b/index.html index de01a03..486c2b7 100644 --- a/index.html +++ b/index.html @@ -84,6 +84,23 @@ border-style: solid !important; border-color: gold !important; } + .needs-relocation { + opacity: 0.5; + pointer-events: auto; /* Wichtig: trotzdem klickbar lassen! */ + position: relative; + } + .needs-relocation::after { + content: "!"; + color: #e11d48; + font-weight: bold; + font-size: 1.2em; + position: absolute; + left: 8px; + top: 8px; + background: #fff1f2; + border-radius: 50%; + padding: 0 5px; + } #currentTitle { /* erlauben, dass der Text umbricht */ @@ -211,11 +228,11 @@
diff --git a/main.js b/main.js index 6dfe09b..ad3fd86 100644 --- a/main.js +++ b/main.js @@ -18,13 +18,45 @@ const store = new Store({ skipGitPrompt: true, intelligentCommitThreshold: 20, autostart: false, - closeToTray: true + closeToTray: true, + needsRelocation: true } }); let tray = null; let isQuiting = false; + +function updateMissingFolders(win) { + let folders = store.get('folders') || []; + let updatedFolders = []; + let anyChanged = false; + + folders = folders.map(f => { + const missing = !fs.existsSync(f.path); + const needsRelocation = f.needsRelocation || false; + if (needsRelocation !== missing) { + anyChanged = true; + updatedFolders.push({ ...f, needsRelocation: missing }); + return { ...f, needsRelocation: missing }; + } + return f; + }); + + if (anyChanged) { + store.set('folders', folders); + // Für jeden betroffenen Folder Event schicken: + updatedFolders.forEach(folderObj => { + win.webContents.send('folders-location-updated', folderObj); + }); + } +} + +updateMissingFolders(); +setInterval(updateMissingFolders, 3000); + + + function createTray(win) { const iconPath = path.join(__dirname, 'assets/icon/trayicon.png'); const icon = nativeImage.createFromPath(iconPath); @@ -731,10 +763,17 @@ app.whenReady().then(() => { }); // Zähle Commits - ipcMain.handle('get-commit-count', async (_e, folderObj) => { - const git = simpleGit(folderObj.path); - const log = await git.log(); - return log.total; // Anzahl der Commits + ipcMain.handle('get-commit-count', async (_e, folderObj) => { + try { + if (folderObj.needsRelocation || !fs.existsSync(folderObj.path)) { + return 0; + } + const git = simpleGit(folderObj.path); + const log = await git.log(); + return log.total; + } catch (err) { + return 0; + } }); // Prüfe, ob es ungestagte Änderungen gibt @@ -756,22 +795,28 @@ app.whenReady().then(() => { // Commits holen ipcMain.handle('get-commits', async (_e, folderObj) => { - const git = simpleGit(folderObj.path); - // alle Commits holen - const log = await git.log(['--all']); - // aktuellen HEAD‐Hash ermitteln - const fullHead = (await git.revparse(['--verify', 'HEAD'])).trim(); - const head = fullHead.substring(0, 7); - return { - head, - commits: log.all.map(c => ({ - hash: c.hash.substring(0, 7), - date: c.date, - message: c.message - })) - }; + try { + if (folderObj.needsRelocation || !fs.existsSync(folderObj.path)) { + // Folder nicht vorhanden, geben wir leere Liste zurück + return { head: null, commits: [] }; + } + const git = simpleGit(folderObj.path); + const log = await git.log(['--all']); + const fullHead = (await git.revparse(['--verify', 'HEAD'])).trim(); + const head = fullHead.substring(0, 7); + return { + head, + commits: log.all.map(c => ({ + hash: c.hash.substring(0, 7), + date: c.date, + message: c.message + })) + }; + } catch (err) { + // Im Fehlerfall (z.B. Verzeichnis gelöscht) + return { head: null, commits: [] }; + } }); - // Diff ipcMain.handle('diff-commit', async (_e, folderObj, hash) => { const git = simpleGit(folderObj.path); diff --git a/preload.js b/preload.js index 5d5de6e..7a80c89 100644 --- a/preload.js +++ b/preload.js @@ -43,6 +43,7 @@ contextBridge.exposeInMainWorld('electronAPI', { onTrayToggleMonitoring: (callback) => ipcRenderer.on('tray-toggle-monitoring', callback), onTrayRemoveFolder: (callback) => ipcRenderer.on('tray-remove-folder', callback), onTrayAddFolder: (callback) => ipcRenderer.on('tray-add-folder', callback), + onFoldersLocationUpdated: (callback) => ipcRenderer.on('folders-location-updated', (e, folderObj) => callback(folderObj)), }); ipcRenderer.on('repo-updated', (_e, folder) => { diff --git a/renderer.js b/renderer.js index d76b1d9..13d7676 100644 --- a/renderer.js +++ b/renderer.js @@ -260,6 +260,9 @@ folders.forEach(folderObj => { const folder = folderObj.path; titleEl.textContent = folder; const { head, commits } = await window.electronAPI.getCommits(folderObj); + if (!commits || !commits.length) { + return; + } contentList.innerHTML = commits.map(c => `