package backend // RunMigration ist der Motor. Pro Konto: // 1. Quelle oeffnen (IMAP, sonst POP3-Fallback), Ziel oeffnen. Ordnerbaum der // Quelle (mit SPECIAL-USE + Delim) und vorhandene Ziel-Ordner holen. // 2. Pro Quell-Ordner Zielordner via MapSourceToTarget (11-folders.go) // bestimmen — Standardordner (Gesendet/Entwuerfe/Spam/Papierkorb/Archiv/ // Posteingang) landen im vorhandenen Rollen-Ordner des Ziels statt als // Dublette; Pfad-Trenner wird umgehaengt. Dann EnsureFolder + Mails streamen. // 3. Pro Mail: Message-ID gegen copied-Cache pruefen -> schon da? ueberspringen. // Sonst DOPPELT schreiben: TargetMailbox.Append (IMAP) + MboxWriter.Append // (lokal), dann MarkCopied. // 4. Fortschritt in jobs-Tabelle schreiben (Browser-Anzeige). // // name = Konto-Name oder "all". watch = true -> Delta-Schleife bis Abbruch // (Cutover-Fenster), sonst einmaliger Durchlauf. func RunMigration(name string, watch bool) error { // TODO Codex: Accounts laden (name/"all"), pro Konto migrateAccount(). // Bei watch: Schleife mit Pause, bis Kontext abgebrochen; dank copied-Cache // kopiert jeder Durchlauf nur Neues. return nil } // migrateAccount fuehrt einen einzelnen Umzug aus (ein Durchlauf). func migrateAccount(a Account) error { // TODO Codex: siehe Schritte oben. Fehler pro Mail zaehlen, nicht abbrechen. return nil }