Upload via GUI (45 Dateien)

This commit is contained in:
Git Manager GUI
2026-08-09 10:06:39 +02:00
parent 87fded4cb6
commit 248a387f01
4 changed files with 35 additions and 14 deletions
+21 -9
View File
@@ -354,6 +354,10 @@ async function restoreGlobalBackup(options) {
const settingsFile = path.join(userDataDir, 'settings.json');
const rollbackSettings = path.join(rollbackDir, 'settings.json');
let settingsPreviouslyExisted = false;
// wird erst true, sobald der aktuelle Stand tatsächlich weggesichert wurde -
// vorher darf der Rollback nichts anfassen, sonst löscht ein früher Fehler
// (z. B. ungültiges Archiv) den unveränderten, intakten Originalbestand
let originalMovedAway = false;
try {
ensureDir(extractDir);
@@ -382,6 +386,7 @@ async function restoreGlobalBackup(options) {
endPercent: 40,
detailPrefix: 'Sichere aktuelle Instanzen',
});
originalMovedAway = true;
settingsPreviouslyExisted = fs.existsSync(settingsFile);
if (settingsPreviouslyExisted) fs.copyFileSync(settingsFile, rollbackSettings);
@@ -414,16 +419,23 @@ async function restoreGlobalBackup(options) {
restoredSettings,
};
} catch (err) {
try {
if (fs.existsSync(instancesDir)) fs.rmSync(instancesDir, { recursive: true, force: true });
if (fs.existsSync(rollbackInstances)) fs.cpSync(rollbackInstances, instancesDir, { recursive: true });
else ensureDir(instancesDir);
// Nur zurückrollen, wenn wir den ursprünglichen Bestand überhaupt schon
// angefasst haben (siehe originalMovedAway oben). Schlägt die
// Wiederherstellung vorher fehl (ungültiges/beschädigtes Archiv o. Ä.),
// ist instancesDir noch der unveränderte Originalbestand - den lassen wir
// dann bewusst in Ruhe, statt ihn zu löschen.
if (originalMovedAway) {
try {
if (fs.existsSync(instancesDir)) fs.rmSync(instancesDir, { recursive: true, force: true });
if (fs.existsSync(rollbackInstances)) fs.cpSync(rollbackInstances, instancesDir, { recursive: true });
else ensureDir(instancesDir);
if (includeSettings) {
if (fs.existsSync(rollbackSettings)) fs.copyFileSync(rollbackSettings, settingsFile);
else if (!settingsPreviouslyExisted && fs.existsSync(settingsFile)) fs.rmSync(settingsFile, { force: true });
}
} catch { /* ignore rollback errors */ }
if (includeSettings) {
if (fs.existsSync(rollbackSettings)) fs.copyFileSync(rollbackSettings, settingsFile);
else if (!settingsPreviouslyExisted && fs.existsSync(settingsFile)) fs.rmSync(settingsFile, { force: true });
}
} catch { /* ignore rollback errors */ }
}
throw err;
} finally {
try { fs.rmSync(tmp, { recursive: true, force: true }); } catch { /* ignore */ }
+10 -1
View File
@@ -269,7 +269,16 @@ function destroyTray() {
// Windows-Autostart-Eintrag setzen/entfernen + Tray-Symbol passend ein-/ausblenden
function applyAutostart(enabled) {
try {
app.setLoginItemSettings({ openAtLogin: !!enabled, args: enabled ? ['--hidden'] : [] });
// Gleiches Problem wie bei den Desktop-Verknüpfungen (siehe verknuepfungsArgs
// weiter oben): im Entwicklungsmodus zeigt process.execPath nur auf die nackte
// electron.exe, die ohne Pfadangabe ihren eigenen leeren Startbildschirm zeigt
// statt AeroMC zu laden. Zusätzlich: bei der Portable-Fassung zeigt
// process.execPath auf den entpackten Temp-Ordner der wäre morgen tot,
// deshalb wie bei den Verknüpfungen über verknuepfungsZiel() auflösen.
const args = enabled
? (app.isPackaged ? ['--hidden'] : [path.join(__dirname, '..'), '--hidden'])
: [];
app.setLoginItemSettings({ openAtLogin: !!enabled, path: verknuepfungsZiel(), args });
} catch { /* z. B. in portabler Umgebung ohne Schreibrechte auf die Registry */ }
if (enabled) createTray();
else destroyTray();