28 lines
1.3 KiB
Go
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
|
|
}
|