1
0

Add settings dialog for Sky Mode and Skip Prompt, update main HTML and script

- Created `settings.html` with a dialog for adjusting settings related to Sky Mode and Skip Prompt.
- Updated `main.html` to include context menus for folder operations.
- Enhanced `main.js` with functionality to handle settings changes, apply Sky Mode, and add copy-to-clipboard feature for diffs.

This commit message was automatically generated by auto-git
This commit is contained in:
2025-05-23 19:36:42 +02:00
parent 1f046d17b5
commit 134a3b7f27
11 changed files with 595 additions and 70 deletions

112
main.js
View File

@@ -1,4 +1,5 @@
const { app, BrowserWindow, ipcMain, dialog } = require('electron');
const { app, BrowserWindow, ipcMain, dialog, Menu, shell, clipboard } = require('electron');
app.name = 'Auto-Git';
const { exec } = require('child_process');
const path = require('path');
const fs = require('fs');
@@ -9,7 +10,9 @@ const chokidar = require('chokidar');
const store = new Store({
defaults: {
folders: [],
selected: null
selected: null,
skymode: true,
skipGitPrompt: true
}
});
@@ -24,7 +27,9 @@ function createWindow() {
const win = new BrowserWindow({
width: 900,
height: 600,
title: 'auto-git',
minWidth: 600,
minHeight: 400,
title: 'Auto-Git',
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: true
@@ -34,6 +39,30 @@ function createWindow() {
return win;
}
// Settings-Fenster
let settingsWin;
function openSettings(win) {
if (settingsWin) {
settingsWin.focus();
return;
}
settingsWin = new BrowserWindow({
parent: win,
modal: true,
width: 400,
height: 300,
resizable: false,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: true
}
});
settingsWin.removeMenu();
settingsWin.loadFile('settings.html');
settingsWin.on('closed', () => settingsWin = null);
}
/**
* Startet einen File-Watcher auf .git/refs/heads/master,
* sendet bei Änderungen 'repo-updated' an den Renderer.
@@ -56,7 +85,7 @@ async function initGitRepo(folder) {
const gitDir = path.join(folder, '.git');
if (!fs.existsSync(gitDir)) {
await git.init();
const message = `Initial commit: ${new Date().toISOString()}`;
const message = `Initial commit (generated by auto-git)`;
const readmePath = path.join(folder, 'README.md');
fs.writeFileSync(readmePath, `# Projekt in ${path.basename(folder)}\n`);
await git.add('./*');
@@ -67,6 +96,20 @@ async function initGitRepo(folder) {
app.whenReady().then(() => {
const win = createWindow();
// Menüs
const menu = Menu.buildFromTemplate([
{
role: 'appMenu',
submenu: [
{
label: 'Settings', click: () => openSettings(win)
},
{ role: 'quit', label: 'Quit' }
]
}, // mehr menüs hier
]);
Menu.setApplicationMenu(menu);
// 1) Beim Start bereits gespeicherte Ordner überwachen
const folders = store.get('folders');
folders.forEach(folder => {
@@ -78,6 +121,7 @@ app.whenReady().then(() => {
// 2) IPC-Handler
// Liste aller Folders
ipcMain.handle('get-folders', () => store.get('folders'));
@@ -122,6 +166,30 @@ app.whenReady().then(() => {
return updated;
});
// Zähle Commits
ipcMain.handle('get-commit-count', async (_e, folder) => {
const git = simpleGit(folder);
const log = await git.log();
return log.total; // Anzahl der Commits
});
// Prüfe, ob es ungestagte Änderungen gibt
ipcMain.handle('has-diffs', async (_e, folder) => {
const git = simpleGit(folder);
const status = await git.status();
// modified, not_added, deleted, etc.
return status.files.length > 0;
});
// Entferne das .git-Verzeichnis
ipcMain.handle('remove-git-folder', async (_e, folder) => {
const gitDir = path.join(folder, '.git');
if (fs.existsSync(gitDir)) {
await fs.promises.rm(gitDir, { recursive: true, force: true });
}
return;
});
// Selected
ipcMain.handle('get-selected', () => store.get('selected'));
ipcMain.handle('set-selected', (_e, folder) => {
@@ -186,9 +254,43 @@ app.whenReady().then(() => {
);
});
});
// IPC für skymode
ipcMain.handle('get-skymode', () => store.get('skymode'));
ipcMain.handle('set-skymode', (_e, val) => {
store.set('skymode', val);
// sende an alle Fenster
BrowserWindow.getAllWindows().forEach(win => {
win.webContents.send('skymode-changed', val);
});
});
ipcMain.handle('get-skip-git-prompt', () => store.get('skipGitPrompt'));
ipcMain.handle('set-skip-git-prompt', (_e,val) => store.set('skipGitPrompt', val));
});
ipcMain.on('show-folder-context-menu', (event, folderPath) => {
const win = BrowserWindow.fromWebContents(event.sender);
const template = [
{
label: 'Copy Folder Path',
click: () => {
clipboard.writeText(folderPath);
}
},
{
label: 'Open Folder',
click: () => {
// öffnet den Ordner in der nativen Dateiansicht
shell.openPath(folderPath);
}
}
];
const menu = Menu.buildFromTemplate(template);
menu.popup({ window: win });
});
// clean up on exit
app.on('window-all-closed', () => {
if (process.platform !== 'darwin') app.quit();
});
});