diff --git a/backend/07-migrate.go b/backend/07-migrate.go index c13c79e..ce491e5 100644 --- a/backend/07-migrate.go +++ b/backend/07-migrate.go @@ -124,6 +124,29 @@ func migrateAccount(a Account) error { return nil } +func CheckAccount(name string) error { + a, err := GetAccount(name) + if err != nil { + return err + } + src, err := OpenIMAPSource(a) + if err != nil { + return fmt.Errorf("open source %s: %w", a.Name, err) + } + defer src.Close() + msgs, err := src.Fetch("INBOX") + if err != nil { + return fmt.Errorf("fetch source INBOX %s: %w", a.Name, err) + } + dst, err := OpenIMAPTarget(a) + if err != nil { + return fmt.Errorf("open target %s: %w", a.Name, err) + } + defer dst.Close() + log.Printf("account %s ok: source INBOX messages=%d, target login ok", a.Name, len(msgs)) + return nil +} + func startJob(accountID int64) (int64, error) { res, err := DB.Exec(`INSERT INTO jobs(account_id,state) VALUES(?, 'running')`, accountID) if err != nil { diff --git a/main.go b/main.go index 6f5413f..ab38654 100644 --- a/main.go +++ b/main.go @@ -18,6 +18,7 @@ func main() { runOnce := flag.String("run", "", "einen Umzugs-Job einmalig ausfuehren (Konto-Name oder 'all'), ohne Web-UI") watch := flag.Bool("watch", false, "Delta-Sync in Schleife bis Stop (Cutover-Fenster)") seedAccount := flag.String("seed-account", "", "Konto aus lokaler JSON-Datei in die DB schreiben (nur CLI/Test)") + checkAccount := flag.String("check-account", "", "Konto-Logins pruefen und INBOX zaehlen, ohne zu kopieren") flag.Parse() if err := backend.LoadConfig("config.json"); err != nil { @@ -34,6 +35,10 @@ func main() { must(backend.SeedAccountFromFile(*seedAccount)) return } + if *checkAccount != "" { + must(backend.CheckAccount(*checkAccount)) + return + } // CLI-Modus: ohne Web laufen lassen (Cronjob / Cutover). if *runOnce != "" {