Restructure into Cargo workspace with Tauri desktop GUI (#1)

Split the bridge into a tutabridge-core crate, a Tauri v2 desktop app
(src-tauri) and a React/TS UI (ui), keeping the CLI entrypoint at the
workspace root.

Add encrypted local storage (SQLCipher metadata index + encrypted .eml
files) so mail persists across launches and only the delta is fetched.

Wire the bridge to the Tuta Rust SDK via the tuta-repo submodule
(batch loading, MailDetailsBlob reading, interactive 2FA login).

Implement SMTP sending: build the draft and send it through Tuta's
DraftService/SendDraftService, mirroring the web client (body in
compressedBodyText, non-empty sender/recipient names, populated
SendDraftParameters). Add unit tests for the draft/send payload building.
This commit is contained in:
Anthony M
2026-05-27 14:03:15 +02:00
committed by GitHub
parent 128772bb21
commit e58ee86bed
62 changed files with 15841 additions and 384 deletions
+22
View File
@@ -0,0 +1,22 @@
export interface Config {
email: string;
imap_port: number;
smtp_port: number;
api_url: string;
}
export type BridgeStatus = "Stopped" | "Starting" | "Running" | { Error: string };
export interface BridgeStats {
uptime_secs: number | null;
mails_synced: number;
}
export function statusLabel(status: BridgeStatus): string {
if (typeof status === "string") return status;
return `Error: ${status.Error}`;
}
export function isError(status: BridgeStatus): status is { Error: string } {
return typeof status !== "string";
}