From 967e27d1b9ddc137ac2e6d2e578b66f3df8f8714 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sun, 25 May 2025 06:12:40 +0200 Subject: [PATCH] Refactor drag-and-drop functionality in main.js and renderer.js --- main.js | 30 ------------------------------ renderer.js | 23 +++++++++++++++++++++++ 2 files changed, 23 insertions(+), 30 deletions(-) diff --git a/main.js b/main.js index 1da6395..03f20dc 100644 --- a/main.js +++ b/main.js @@ -664,36 +664,6 @@ async function main() { const tray = createTray(win); - // (1) Die Kernfunktion - async function addFolderByPath(newFolder) { - await initGitRepo(newFolder); - let folders = store.get('folders') || []; - let folderObj = folders.find(f => f.path === newFolder); - if (!folderObj) { - folderObj = { path: newFolder, monitoring: true, linesChanged: 0, llmCandidates: [] }; - folders.push(folderObj); - store.set('folders', folders); - } - store.set('selected', newFolder); - watchRepo(newFolder, win); - startMonitoringWatcher(newFolder, win); - return store.get('folders'); - } - - // (2) Die IPC-Handler anpassen: - ipcMain.handle('add-folder', async () => { - const { canceled, filePaths } = await dialog.showOpenDialog({ - properties: ['openDirectory'] - }); - if (canceled || !filePaths[0]) { - return store.get('folders'); - } - return await addFolderByPath(filePaths[0]); - }); - - ipcMain.handle('add-folder-by-path', async (_e, folderPath) => { - return await addFolderByPath(folderPath); - }); // --- Context Menu bauen --- diff --git a/renderer.js b/renderer.js index 9f7a31f..d06aeb1 100644 --- a/renderer.js +++ b/renderer.js @@ -71,6 +71,29 @@ window.addEventListener('DOMContentLoaded', async () => { return folders.find(f => f.path === path) || null; } + document.body.addEventListener('dragover', e => { + e.preventDefault(); + e.dataTransfer.dropEffect = 'copy'; + }); + + document.body.addEventListener('drop', async e => { + e.preventDefault(); + const files = [...e.dataTransfer.files]; + if (!files.length) return; + // Prüfe, ob Ordner: + for (let f of files) { + // f ist File, hat .path und .type, aber bei Folders oft type="" (leerer String) + if (f.type === "" /* = Ordner (bei DnD) */) { + await window.electronAPI.addFolderByPath(f.path); + await renderSidebar(); + const sel = await window.electronAPI.getSelected(); + if (sel) await renderContent(sel); + } + } + }); + + + async function renderSidebar() { const folders = await window.electronAPI.getFolders(); console.log("Renderer-Folders:", folders);