mirror of
https://github.com/pewdiepie-archdaemon/odysseus.git
synced 2026-06-17 10:15:27 -04:00
Email library: drop the 'Default' chip — pick an explicit account always
Bug: clicking the dot to change the server-side default account while viewing 'Default' left a desynced state — the email list still showed the OLD default's cached UIDs, but the server's default now pointed at a different account. Opening any email used the visible UID + account_id='' on the read endpoint, which resolved against the NEW default account → wrong email content (or older mail entirely). Fix: remove the 'Default' chip. _loadAccounts now auto-selects the is_default account (or the first one) into state._libAccountId so the list view + every per-email request always carries an explicit account_id and can't desync from set-default. The dot button still lives on each account chip for changing which account the server treats as the default — but it no longer affects which account the list is currently displaying.
This commit is contained in:
@@ -1334,6 +1334,15 @@ async function _loadAccounts() {
|
||||
const d = await r.json();
|
||||
state._libAccounts = d.accounts || [];
|
||||
} catch (_) { state._libAccounts = []; }
|
||||
// The 'Default' chip is gone — pick an explicit account so the email
|
||||
// list and any per-email actions (open in new tab, mark read, etc.)
|
||||
// always carry an account_id and can't desync from the server's
|
||||
// is_default state.
|
||||
if (!state._libAccountId && state._libAccounts.length) {
|
||||
const def = state._libAccounts.find(a => a.is_default) || state._libAccounts[0];
|
||||
state._libAccountId = def.id;
|
||||
_publishActiveAccount();
|
||||
}
|
||||
_renderAccountsStrip();
|
||||
}
|
||||
|
||||
@@ -1342,10 +1351,11 @@ function _renderAccountsStrip() {
|
||||
if (!strip) return;
|
||||
strip.style.display = 'flex';
|
||||
const esc = s => String(s || '').replace(/&/g, '&').replace(/</g, '<').replace(/"/g, '"');
|
||||
const allActive = !state._libAccountId ? ' active' : '';
|
||||
// 'Default' rather than 'All (default)' — this view shows the account
|
||||
// marked is_default; cross-account aggregation is a separate feature.
|
||||
let html = `<button class="memory-toolbar-btn gallery-chip${allActive}" data-acc-id="">Default</button>`;
|
||||
// The 'Default' chip caused desync bugs (changing the server-side
|
||||
// default via the dot while still on the cached 'default' view would
|
||||
// open the wrong account's emails). Each account renders as its own
|
||||
// chip; the active one is selected explicitly via _loadAccounts.
|
||||
let html = '';
|
||||
// 6px dot — matches the sidebar notification-dot size.
|
||||
const _dotFilled = '<svg width="6" height="6" viewBox="0 0 24 24" fill="currentColor"><circle cx="12" cy="12" r="10"/></svg>';
|
||||
const _dotHollow = '<svg width="6" height="6" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="3"><circle cx="12" cy="12" r="9"/></svg>';
|
||||
|
||||
Reference in New Issue
Block a user