Refactor and enhance folder monitoring logic in main.js
This commit is contained in:
66
main.js
66
main.js
@@ -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);
|
||||||
|
|||||||
Reference in New Issue
Block a user