From f5a5fcf22a5d7a11c2551ec12e0b21ba23785c1b Mon Sep 17 00:00:00 2001 From: Kieran Date: Sat, 14 Jan 2023 18:31:42 +0000 Subject: [PATCH] Fix relay list loading --- src/feed/LoginFeed.js | 2 +- src/state/Login.js | 14 +++++++++++++- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/src/feed/LoginFeed.js b/src/feed/LoginFeed.js index ab121cbc..4d4034cf 100644 --- a/src/feed/LoginFeed.js +++ b/src/feed/LoginFeed.js @@ -47,7 +47,7 @@ export default function useLoginFeed() { for (let cl of contactList) { if (cl.content !== "") { let relays = JSON.parse(cl.content); - dispatch(setRelays(relays)); + dispatch(setRelays({ relays, createdAt: cl.created_at })); } let pTags = cl.tags.filter(a => a[0] === "p").map(a => a[1]); dispatch(setFollows(pTags)); diff --git a/src/state/Login.js b/src/state/Login.js index 3640b705..c27c9f66 100644 --- a/src/state/Login.js +++ b/src/state/Login.js @@ -29,6 +29,11 @@ const LoginSlice = createSlice({ */ relays: {}, + /** + * Newest relay list timestamp + */ + latestRelays: null, + /** * A list of pubkeys this user follows */ @@ -87,11 +92,18 @@ const LoginSlice = createSlice({ state.publicKey = action.payload; }, setRelays: (state, action) => { + let relays = action.payload.relays; + let createdAt = action.payload.createdAt; + if(state.latestRelays > createdAt) { + return; + } + // filter out non-websocket urls - let filtered = Object.entries({ ...state.relays, ...action.payload }) + let filtered = Object.entries(relays) .filter(a => a[0].startsWith("ws://") || a[0].startsWith("wss://")); state.relays = Object.fromEntries(filtered); + state.latestRelays = createdAt; }, removeRelay: (state, action) => { delete state.relays[action.payload];