diff --git a/src/App.tsx b/src/App.tsx index af9ae277..23665ef6 100644 --- a/src/App.tsx +++ b/src/App.tsx @@ -28,7 +28,6 @@ import { readingProgressController } from './services/readingProgressController' // import { fetchNostrverseHighlights } from './services/nostrverseService' import { nostrverseHighlightsController } from './services/nostrverseHighlightsController' import { nostrverseWritingsController } from './services/nostrverseWritingsController' -import { readsController } from './services/readsController' const DEFAULT_ARTICLE = import.meta.env.VITE_DEFAULT_ARTICLE_NADDR || 'naddr1qvzqqqr4gupzqmjxss3dld622uu8q25gywum9qtg4w4cv4064jmg20xsac2aam5nqqxnzd3cxqmrzv3exgmr2wfesgsmew' @@ -115,11 +114,6 @@ function AppRoutes({ readingProgressController.start({ relayPool, eventStore, pubkey }) } - // Load reads (controller manages its own state) - if (pubkey && eventStore && !readsController.isLoadedFor(pubkey)) { - readsController.start({ relayPool, eventStore, pubkey }) - } - // Start centralized nostrverse highlights controller (non-blocking) if (eventStore) { nostrverseHighlightsController.start({ relayPool, eventStore }) diff --git a/src/components/Me.tsx b/src/components/Me.tsx index b1769929..c809cc1e 100644 --- a/src/components/Me.tsx +++ b/src/components/Me.tsx @@ -30,7 +30,6 @@ import ReadingProgressFilters, { ReadingProgressFilterType } from './ReadingProg import { filterByReadingProgress } from '../utils/readingProgressUtils' import { deriveLinksFromBookmarks } from '../utils/linksFromBookmarks' import { readingProgressController } from '../services/readingProgressController' -import { readsController } from '../services/readsController' interface MeProps { relayPool: RelayPool @@ -231,7 +230,23 @@ const Me: React.FC = ({ try { if (!hasBeenLoaded) setLoading(true) - // Reads come from centralized loading in App.tsx + // Reads come from centralized readingProgressController (already loaded in App.tsx) + // It provides deduped reading progress per article + const progressMap = readingProgressController.getProgressMap() + + // Convert progress map to ReadItems + const readItems: ReadItem[] = Array.from(progressMap.entries()).map(([id, progress]) => ({ + id, + source: 'reading-progress', + type: 'article', + readingProgress: progress, + readingTimestamp: Math.floor(Date.now() / 1000) + })) + + const readsMap = new Map(readItems.map(item => [item.id, item])) + setReadsMap(readsMap) + setReads(readItems) + setLoadedTabs(prev => new Set(prev).add('reads')) if (!hasBeenLoaded) setLoading(false) @@ -241,23 +256,24 @@ const Me: React.FC = ({ } } - // Subscribe to reads controller updates + // Subscribe to reading progress updates useEffect(() => { - const unsubReads = readsController.onReads((reads) => { - const readsMap = new Map(reads.map(item => [item.id, item])) + const unsubProgress = readingProgressController.onProgress((progressMap) => { + const readItems: ReadItem[] = Array.from(progressMap.entries()).map(([id, progress]) => ({ + id, + source: 'reading-progress', + type: 'article', + readingProgress: progress, + readingTimestamp: Math.floor(Date.now() / 1000) + })) + + const readsMap = new Map(readItems.map(item => [item.id, item])) setReadsMap(readsMap) - setReads(reads) - }) - - const unsubLoading = readsController.onLoading((loading) => { - if (loading === false) { - setLoading(false) - } + setReads(readItems) }) return () => { - unsubReads() - unsubLoading() + unsubProgress() } }, [])