mirror of
https://github.com/spartanz51/tutabridge.git
synced 2026-06-24 10:54:32 +02:00
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:
@@ -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";
|
||||
}
|
||||
Reference in New Issue
Block a user