Mail-Graveyard/backend/07-migrate.go
2026-07-05 17:58:25 +02:00

28 lines
1.3 KiB
Go

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
}