1
0

Refactor and enhance folder monitoring logic in main.js

This commit is contained in:
2025-05-25 05:58:38 +02:00
parent ced0223d55
commit 6d4e3fbf36

64
main.js
View File

@@ -581,42 +581,70 @@ async function autoCommit(folderPath, message) {
} }
} }
app.whenReady().then(() => { app.whenReady().then(main);
async function main() {
const win = createWindow(); const win = createWindow();
function updateMissingFolders(win) { async function updateMissingFolders(win) {
let folders = store.get('folders') || []; let folders = store.get('folders') || [];
let updatedFolders = []; let updatedFolders = [];
let anyChanged = false; let anyChanged = false;
folders = folders.map(f => { // Wir müssen auf asynchrone Checks warten (wegen simple-git)
const missing = !fs.existsSync(f.path); folders = await Promise.all(folders.map(async f => {
const needsRelocation = f.needsRelocation || false; const wasRelocated = f.needsRelocation || false;
if (needsRelocation !== missing) { const nowExists = fs.existsSync(f.path);
// EdgeCase: Ordner taucht "wieder" auf
if (wasRelocated && nowExists) {
let hashFound = false;
if (f.lastHeadHash) {
try {
const git = simpleGit(f.path);
// Prüfe, ob Commit irgendwo im Repo existiert
const result = await git.raw(['branch', '--contains', f.lastHeadHash]);
hashFound = result.trim().length > 0;
} catch (err) {
hashFound = false;
}
}
if (hashFound) {
// Repo validiert → needsRelocation zurücknehmen, Monitoring bleibt wie es war
anyChanged = true; anyChanged = true;
updatedFolders.push({ ...f, needsRelocation: missing }); updatedFolders.push({ ...f, needsRelocation: false });
// NEU: Monitoring beenden, falls missing return { ...f, needsRelocation: false };
if (missing) { } else {
// Commit-Hash nicht gefunden → Ordner bleibt in Relocation
return { ...f, needsRelocation: true };
}
}
// EdgeCase: Ordner verschwindet
if (!nowExists && !wasRelocated) {
anyChanged = true;
updatedFolders.push({ ...f, needsRelocation: true, monitoring: false });
// Monitoring sofort beenden!
stopMonitoringWatcher(f.path); stopMonitoringWatcher(f.path);
f.monitoring = false; return { ...f, needsRelocation: true, monitoring: false };
}
return { ...f, needsRelocation: missing, monitoring: missing ? false : f.monitoring };
} }
// Keine Änderung an needsRelocation
return f; return f;
}); }));
if (anyChanged) { if (anyChanged) {
store.set('folders', folders); store.set('folders', folders);
console.log("change detected"); // Benachrichtige Renderer für alle betroffenen Folder
// Für jeden betroffenen Folder Event schicken:
updatedFolders.forEach(folderObj => { updatedFolders.forEach(folderObj => {
win.webContents.send('folders-location-updated', folderObj); win.webContents.send('folders-location-updated', folderObj);
}); });
} }
} }
updateMissingFolders(win);
setInterval(() => updateMissingFolders(win), 3000); await updateMissingFolders(win);
setInterval(() => { updateMissingFolders(win); }, 3000);
// Menubar // Menubar
@@ -1186,7 +1214,7 @@ app.whenReady().then(() => {
win.hide(); win.hide();
} }
}); });
}); };
ipcMain.on('show-folder-context-menu', (event, folderPath) => { ipcMain.on('show-folder-context-menu', (event, folderPath) => {
const win = BrowserWindow.fromWebContents(event.sender); const win = BrowserWindow.fromWebContents(event.sender);