mirror of
https://github.com/PR0M3TH3AN/bitvid.git
synced 2026-10-31 09:52:24 +00:00
Switching accounts with the profile modal open (e.g. NIP-07 -> a saved nsec) left the PREVIOUS account's DMs, subscriptions, hashtags and lists on screen until the user refreshed. Two problems: 1. handleAuthLogin ran its identity-reset steps unguarded, so if any one threw (renderSavedProfiles, a warm-list call, etc.) the steps after it were skipped — including handleActiveDmIdentityChanged, which is what clears the previous account's conversation. Result: stale DMs after a switch. Each reset step now runs in isolation via runIdentityResetStep, and the DM reset runs first. 2. The switch-with-modal-open refresh called populateOpenProfilePanels(), which only paints from current service state and omits lazily-loaded panes (messages, watch history). It also fired before the new identity's lists had loaded, with no reliable refresh afterward. Replaced with refreshOpenPanesForActiveIdentity(), which re-runs the ACTIVE pane through selectPane() — the same load+populate path as opening it fresh — so DMs reload, subscriptions/hashtags refetch, etc. It runs immediately, again once profile/wallet data settles, and once more from the auth coordinator when the new identity's blocks/subscriptions/hashtags finish loading (backfill for slow sync). Non-active panes stay lazy and repopulate on select. Per-user list caches (blocks/subscriptions/hashtags are already keyed per pubkey) mean the active pane shows cached data instantly on switch, then updates when the new identity's fetch settles — no manual refresh. Tests (tests/profile-modal-controller.test.mjs +3): a throwing reset step is isolated; a throwing DM reset no longer skips the saved-profiles reset; and refreshOpenPanesForActiveIdentity re-runs the active pane only when the modal is open. Existing profile-modal / switch-coordinator / stored-nsec-switch suites green. Co-Authored-By: Claude Opus 4.8 <[email protected]>