1
0

auto-git:

[change] main.js
 [change] preload.js
 [change] renderer.js
This commit is contained in:
2025-05-24 06:05:52 +02:00
parent 18ba00205d
commit abc1ba77b3
3 changed files with 103 additions and 0 deletions

38
main.js
View File

@@ -484,6 +484,44 @@ app.whenReady().then(() => {
ipcMain.handle('set-skip-git-prompt', (_e,val) => store.set('skipGitPrompt', val));
// Auto-Verzeichnisstruktur
const IGNORED_NAMES = [
'.DS_Store', 'node_modules', '.git', 'dist', 'build',
'.cache', 'out', '.venv', '.mypy_cache', '__pycache__'
];
// Hilfsfunktion: Dateinamen oder Ordner ignorieren?
function isIgnored(name) {
return IGNORED_NAMES.includes(name);
}
function walkDir(base, rel = '.') {
const full = path.join(base, rel);
let list = [];
try {
fs.readdirSync(full, { withFileTypes: true }).forEach(dirent => {
if (isIgnored(dirent.name)) return;
const entry = path.join(rel, dirent.name);
if (dirent.isDirectory()) {
list.push({ name: dirent.name, type: 'dir', children: walkDir(base, entry) });
} else {
list.push({ name: dirent.name, type: 'file' });
}
});
} catch (e) {
// Permissions o.ä. ignorieren
}
return list;
}
ipcMain.handle('get-folder-tree', async (_e, folderPath) => {
try {
return walkDir(folderPath, '.');
} catch {
return [];
}
});

View File

@@ -24,6 +24,7 @@ contextBridge.exposeInMainWorld('electronAPI', {
commitCurrentFolder: (folderObj, message) => ipcRenderer.invoke('commit-current-folder', folderObj, message),
showFolderContextMenu: folderPath => ipcRenderer.send('show-folder-context-menu', folderPath),
setMonitoring: (folderObj, monitoring) => ipcRenderer.invoke('set-monitoring', folderObj.path, monitoring),
getFolderTree: (folderPath) => ipcRenderer.invoke('get-folder-tree', folderPath),
});
ipcRenderer.on('repo-updated', (_e, folder) => {

View File

@@ -410,4 +410,68 @@ folders.forEach(folderObj => {
commitBtn.textContent = 'Commit';
});
const folderTitleDrop = document.getElementById('folderTitleDrop');
const folderTitleArrow = document.getElementById('folderTitleArrow');
const folderHierarchyDropdown = document.getElementById('folderHierarchyDropdown');
const titleEl = document.getElementById('currentTitle');
let isDropdownOpen = false;
folderTitleDrop.addEventListener('click', async () => {
if (isDropdownOpen) {
closeDropdown();
return;
}
const selected = await window.electronAPI.getSelected();
if (!selected || !selected.path) return;
// Lade die aktuelle Ordnerhierarchie
folderHierarchyDropdown.innerHTML = '<div class="text-gray-400 italic">Lade Verzeichnis...</div>';
folderHierarchyDropdown.classList.remove('hidden');
folderHierarchyDropdown.classList.add('open');
folderTitleArrow.classList.add('open');
isDropdownOpen = true;
const tree = await window.electronAPI.getFolderTree(selected.path);
folderHierarchyDropdown.innerHTML = renderFolderTree(tree);
});
function closeDropdown() {
folderHierarchyDropdown.classList.add('hidden');
folderHierarchyDropdown.classList.remove('open');
folderTitleArrow.classList.remove('open');
isDropdownOpen = false;
}
// KEIN automatisches Schließen beim Klick außerhalb!
function renderFolderTree(tree, level = 0) {
if (!Array.isArray(tree)) return '';
return `<ul class="${level === 0 ? 'font-mono text-[0.98rem] space-y-1' : 'pl-4 space-y-1'}">` + tree.map(node => {
if (node.type === 'dir') {
return `
<li>
<span class="inline-flex items-center font-semibold text-blue-700">
<svg class="h-4 w-4 mr-1 inline-block" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" d="M3 7a2 2 0 012-2h4l2 2h6a2 2 0 012 2v9a2 2 0 01-2 2H5a2 2 0 01-2-2V7"/>
</svg>
${node.name}
</span>
${renderFolderTree(node.children, level + 1)}
</li>
`;
} else {
return `
<li class="flex items-center text-gray-800">
<svg class="h-4 w-4 mr-1 opacity-60" fill="none" stroke="currentColor" stroke-width="2" viewBox="0 0 24 24">
<path stroke-linecap="round" stroke-linejoin="round" d="M9 17v-6a2 2 0 012-2h6"/>
<path stroke-linecap="round" stroke-linejoin="round" d="M7 17a2 2 0 002 2h6a2 2 0 002-2V7a2 2 0 00-2-2h-6a2 2 0 00-2 2v10z"/>
</svg>
<span>${node.name}</span>
</li>
`;
}
}).join('') + '</ul>';
}
});