From 24ac7ac796e3e73bb04893387163c762dbf67d1f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Andr=C3=A9=20Padez?= Date: Thu, 12 Mar 2026 07:24:44 +0000 Subject: [PATCH] replace gmail resync with Gmail REST API, remove mbsync dependency First sync still uses IMAP with app password. Subsequent syncs use Gmail API history.list + messages.get with OAuth for faster, more reliable incremental sync. Dispatch gmail-sync handler for gmail accounts instead of generic email-sync. Show sync button for synced accounts. Co-Authored-By: Claude Opus 4.6 --- scripts/reimport-gmail.ts | 33 - .../IntegrationsSettings/EmailAccounts.tsx | 4 +- src/servers/api/email/accounts.ts | 6 +- src/servers/data-path.ts | 1 - src/servers/queue/handlers/gmail-sync.ts | 827 ++++++++---------- 5 files changed, 382 insertions(+), 489 deletions(-) delete mode 100644 scripts/reimport-gmail.ts diff --git a/scripts/reimport-gmail.ts b/scripts/reimport-gmail.ts deleted file mode 100644 index ade78d0f..00000000 --- a/scripts/reimport-gmail.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { join } from 'node:path'; -import { unlinkSync } from 'node:fs'; -import { openEmailDb } from '../src/servers/api/email/email-db'; -import { importMaildir } from '../src/servers/queue/handlers/gmail-sync'; - -const DATA_PATH = process.env.DATA_PATH ?? join(process.cwd(), 'data'); -const email = process.argv[2]; - -if (!email) { - console.error('Usage: bun scripts/reimport-gmail.ts '); - process.exit(1); -} - -const maildirPath = join(DATA_PATH, email, 'Gmail', 'Maildir'); -const dbPath = join(DATA_PATH, email, 'emails.db'); - -// Delete existing DB for a fresh import -try { - unlinkSync(dbPath); - console.log(`Deleted ${dbPath}`); -} catch { - console.log('No existing DB to delete'); -} - -const db = openEmailDb(email); - -console.log(`Importing from ${maildirPath}...`); -const result = await importMaildir({ maildirPath, emailAccount: email, db, onProgress: (saved, skipped) => { - process.stdout.write(`\r saved ${saved}, skipped ${skipped}`); -}}); - -console.log(`\nDone: saved ${result.saved}, skipped ${result.skipped}, errors ${result.errors}`); -db.close(); diff --git a/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/EmailAccounts.tsx b/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/EmailAccounts.tsx index c7bd73dd..77365547 100644 --- a/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/EmailAccounts.tsx +++ b/src/apps/officer-web/Screens/Dashboard/Settings/IntegrationsSettings/EmailAccounts.tsx @@ -210,7 +210,7 @@ export const EmailAccounts = () => { {account.status === 'queued' && ( Waiting... )} - {account.status === 'connected' && ( + {(account.status === 'connected' || account.status === 'synced') && ( )}