Sync-Fix, Dateinamen mit Leerzeichen, E-Mail-Dropdown, Defaults-System

- Fix: Pull überschreibt lokale Vorlagen nicht mehr (Merge statt Replace)
- Fix: toFilename behält Leerzeichen und Groß-/Kleinschreibung
- E-Mail in Settings ist jetzt ein Dropdown mit TB-Identitäten
- Optionale defaults.local.js für vorkonfigurierte Verbindungsdaten (.gitignored)
This commit is contained in:
Kendrick Bollens
2026-05-07 10:22:42 +02:00
parent 1d00a06e30
commit 533d5a34f2
4 changed files with 42 additions and 7 deletions

View File

@@ -203,13 +203,13 @@ class SyncManager {
static toFilename(name) {
return name
.toLowerCase()
.replace(/[äÄ]/g, 'ae')
.replace(/[öÖ]/g, 'oe')
.replace(/[üÜ]/g, 'ue')
.replace(/ß/g, 'ss')
.replace(/[^a-z0-9]+/g, '-')
.replace(/^-+|-+$/g, '');
.replace(/[/\\:*?"<>|]/g, '-')
.replace(/^[\s.-]+|[\s.-]+$/g, '')
.trim();
}
/**
@@ -291,7 +291,13 @@ class SyncManager {
}
}
await this.saveLocalTemplates(newTemplates);
// Merge: keep local-only templates that aren't now on the server
const existingTemplates = await this.getLocalTemplates();
const pulledFilenames = new Set(newTemplates.map(t => SyncManager.toFilename(t.name).toLowerCase()));
const localOnly = existingTemplates.filter(t => !t.remotePath && !pulledFilenames.has(SyncManager.toFilename(t.name).toLowerCase()));
const merged = [...newTemplates, ...localOnly];
await this.saveLocalTemplates(merged);
syncState.fileShas = newShas;
await this.saveSyncState(syncState);