59 lines
2.2 KiB
Go
59 lines
2.2 KiB
Go
package backend
|
|
|
|
import (
|
|
"database/sql"
|
|
|
|
_ "modernc.org/sqlite"
|
|
)
|
|
|
|
var DB *sql.DB
|
|
|
|
// Account = eine Umzugs-Zeile: Quelle (alt) -> Ziel (neu), frei gemapptes
|
|
// Zieladress-Postfach. Wird im Browser gepflegt (Tabelle accounts).
|
|
type Account struct {
|
|
ID int64
|
|
Name string // z.B. "hans-peter"
|
|
// Quelle (alter Provider). Security: "tls" (implizit, 993/995),
|
|
// "starttls" (Klartext-Port 143/110 + Upgrade), "none" (reiner Klartext).
|
|
// SrcInsecure = ungueltige/selbstsignierte Zerts akzeptieren (alte Hoster).
|
|
SrcHost string
|
|
SrcPort int
|
|
SrcSecurity string
|
|
SrcInsecure bool
|
|
SrcUser string // hans-peter@dr-gold.de
|
|
SrcPass string
|
|
SrcProto string // "imap" (default) oder "pop3" (Fallback-Quelle)
|
|
// Ziel (neuer Provider). Meist "tls"; "none"/"starttls" ebenso moeglich.
|
|
DstHost string
|
|
DstPort int
|
|
DstSecurity string
|
|
DstInsecure bool
|
|
DstUser string // archiv-hans-peter@dr-gold.com
|
|
DstPass string
|
|
MboxDir string // Unterordner unter Cfg.MboxRoot; leer = Cfg.MboxRoot/Name
|
|
Active bool
|
|
}
|
|
|
|
// ConnectDB oeffnet die SQLite-DB (modernc, kein cgo) und legt das Schema an.
|
|
//
|
|
// Schema (TODO Codex):
|
|
//
|
|
// accounts(...) -- die Umzugs-Zeilen (oben), inkl.
|
|
// src_security/src_insecure etc.
|
|
// folder_map(account_id, src, dst) -- optionales manuelles Umbenennen
|
|
// (Vorrang vor der Rollen-Automatik
|
|
// aus 11-folders.go)
|
|
// copied(account_id, folder, message_id) -- Idempotenz-/Delta-Cache: schon
|
|
// kopierte Message-IDs, UNIQUE.
|
|
// Zweiter Lauf kopiert nur das Delta.
|
|
// jobs(account_id, started, finished, -- Lauf-Historie fuer den Fortschritt
|
|
// total, done, errors, state) im Browser.
|
|
func ConnectDB() error {
|
|
// TODO Codex: sql.Open("sqlite", Cfg.DBPath), PRAGMA journal_mode=WAL,
|
|
// CREATE TABLE IF NOT EXISTS ... siehe Schema oben.
|
|
return nil
|
|
}
|
|
|
|
// TODO Codex: ListAccounts / SaveAccount / DeleteAccount / GetAccount,
|
|
// AlreadyCopied(accountID, folder, messageID) bool,
|
|
// MarkCopied(accountID, folder, messageID).
|