From 1dfab7b82b6df34d7ae3cccdb3251498d6475732 Mon Sep 17 00:00:00 2001 From: enes Date: Fri, 13 Sep 2024 17:57:19 +0200 Subject: [PATCH] refactor: metadatacontroller as singleton --- src/components/AppBar/AppBar.tsx | 2 +- src/controllers/AuthController.ts | 2 +- src/controllers/MetadataController.ts | 9 ++++++++- src/layouts/Main.tsx | 2 +- src/pages/nostr/index.tsx | 2 +- src/pages/profile/index.tsx | 2 +- src/pages/settings/profile/index.tsx | 4 ++-- src/utils/dvm.ts | 2 +- src/utils/nostr.ts | 6 +++--- 9 files changed, 19 insertions(+), 12 deletions(-) diff --git a/src/components/AppBar/AppBar.tsx b/src/components/AppBar/AppBar.tsx index 8c7ac63..aaabbd3 100644 --- a/src/components/AppBar/AppBar.tsx +++ b/src/components/AppBar/AppBar.tsx @@ -37,7 +37,7 @@ import { setUserRobotImage } from '../../store/userRobotImage/action' import { Container } from '../Container' import { ButtonIcon } from '../ButtonIcon' -const metadataController = new MetadataController() +const metadataController = MetadataController.getInstance() export const AppBar = () => { const navigate = useNavigate() diff --git a/src/controllers/AuthController.ts b/src/controllers/AuthController.ts index 09b20df..cc8def5 100644 --- a/src/controllers/AuthController.ts +++ b/src/controllers/AuthController.ts @@ -25,7 +25,7 @@ export class AuthController { constructor() { this.nostrController = NostrController.getInstance() - this.metadataController = new MetadataController() + this.metadataController = MetadataController.getInstance() } /** diff --git a/src/controllers/MetadataController.ts b/src/controllers/MetadataController.ts index 8053874..984afd3 100644 --- a/src/controllers/MetadataController.ts +++ b/src/controllers/MetadataController.ts @@ -22,6 +22,7 @@ import { import { DEFAULT_LOOK_UP_RELAY_LIST } from '../utils/const' export class MetadataController extends EventEmitter { + private static instance: MetadataController private nostrController: NostrController private specialMetadataRelay = 'wss://purplepag.es' private pendingFetches = new Map>() // Track pending fetches @@ -31,6 +32,13 @@ export class MetadataController extends EventEmitter { this.nostrController = NostrController.getInstance() } + public static getInstance(): MetadataController { + if (!MetadataController.instance) { + MetadataController.instance = new MetadataController() + } + return MetadataController.instance + } + /** * Asynchronously checks for more recent metadata events authored by a specific key. * If a more recent metadata event is found, it is handled and returned. @@ -119,7 +127,6 @@ export class MetadataController extends EventEmitter { // Check if the cached metadata is older than one day if (isOlderThanOneDay(cachedMetadataEvent.cachedAt)) { // If older than one week, find the metadata from relays in background - this.checkForMoreRecentMetadata(hexKey, cachedMetadataEvent.event) } diff --git a/src/layouts/Main.tsx b/src/layouts/Main.tsx index 9402e97..3a1f10e 100644 --- a/src/layouts/Main.tsx +++ b/src/layouts/Main.tsx @@ -38,7 +38,7 @@ export const MainLayout = () => { const hasSubscribed = useRef(false) useEffect(() => { - const metadataController = new MetadataController() + const metadataController = MetadataController.getInstance() const logout = () => { dispatch( diff --git a/src/pages/nostr/index.tsx b/src/pages/nostr/index.tsx index bd99485..a9948af 100644 --- a/src/pages/nostr/index.tsx +++ b/src/pages/nostr/index.tsx @@ -31,7 +31,7 @@ export const Nostr = () => { const navigate = useNavigate() const authController = new AuthController() - const metadataController = new MetadataController() + const metadataController = MetadataController.getInstance() const nostrController = NostrController.getInstance() const [isLoading, setIsLoading] = useState(false) diff --git a/src/pages/profile/index.tsx b/src/pages/profile/index.tsx index ca4bb87..905e7d0 100644 --- a/src/pages/profile/index.tsx +++ b/src/pages/profile/index.tsx @@ -27,7 +27,7 @@ export const ProfilePage = () => { const { npub } = useParams() - const metadataController = useMemo(() => new MetadataController(), []) + const metadataController = useMemo(() => MetadataController.getInstance(), []) const [pubkey, setPubkey] = useState() const [nostrJoiningBlock, setNostrJoiningBlock] = diff --git a/src/pages/settings/profile/index.tsx b/src/pages/settings/profile/index.tsx index 9b01a72..245ae77 100644 --- a/src/pages/settings/profile/index.tsx +++ b/src/pages/settings/profile/index.tsx @@ -12,7 +12,7 @@ import { useTheme } from '@mui/material' import { UnsignedEvent, nip19, kinds, VerifiedEvent, Event } from 'nostr-tools' -import React, { useEffect, useMemo, useRef, useState } from 'react' +import React, { useEffect, useRef, useState } from 'react' import { Link, useParams } from 'react-router-dom' import { toast } from 'react-toastify' import { MetadataController, NostrController } from '../../../controllers' @@ -41,7 +41,7 @@ export const ProfileSettingsPage = () => { const dispatch: Dispatch = useDispatch() - const metadataController = useMemo(() => new MetadataController(), []) + const metadataController = MetadataController.getInstance() const nostrController = NostrController.getInstance() const [pubkey, setPubkey] = useState() diff --git a/src/utils/dvm.ts b/src/utils/dvm.ts index 8995ae7..c2f33e8 100644 --- a/src/utils/dvm.ts +++ b/src/utils/dvm.ts @@ -13,7 +13,7 @@ import { setRelayInfoAction } from '../store/actions' export const getNostrJoiningBlockNumber = async ( hexKey: string ): Promise => { - const metadataController = new MetadataController() + const metadataController = MetadataController.getInstance() const relaySet = await metadataController.findRelayListMetadata(hexKey) diff --git a/src/utils/nostr.ts b/src/utils/nostr.ts index 0a3e052..a2799a3 100644 --- a/src/utils/nostr.ts +++ b/src/utils/nostr.ts @@ -365,7 +365,7 @@ export const getUsersAppData = async (): Promise => { // Check if relayMap is undefined in the Redux store if (!relayMap) { // If relayMap is not present, fetch relay list metadata - const metadataController = new MetadataController() + const metadataController = MetadataController.getInstance() const relaySet = await metadataController .findRelayListMetadata(usersPubkey) .catch((err) => { @@ -835,7 +835,7 @@ const getUserAppDataFromBlossom = async (url: string, privateKey: string) => { */ export const subscribeForSigits = async (pubkey: string) => { // Instantiate the MetadataController to retrieve relay list metadata - const metadataController = new MetadataController() + const metadataController = MetadataController.getInstance() const relaySet = await metadataController .findRelayListMetadata(pubkey) .catch((err) => { @@ -939,7 +939,7 @@ export const sendNotification = async (receiver: string, meta: Meta) => { const wrappedEvent = createWrap(unsignedEvent, receiver) // Instantiate the MetadataController to retrieve relay list metadata - const metadataController = new MetadataController() + const metadataController = MetadataController.getInstance() const relaySet = await metadataController .findRelayListMetadata(receiver) .catch((err) => {