From f42e183bc824fe96f636aa4996caa0ac952f6673 Mon Sep 17 00:00:00 2001 From: Kieran Date: Tue, 27 Dec 2022 12:33:52 +0000 Subject: [PATCH] Fix profile loader --- src/nostr/Connection.js | 12 ++++++++---- src/nostr/System.js | 12 +++++++++++- src/pages/feed/UsersFeed.js | 22 +++++++++++++++------- src/state/Login.js | 5 ----- src/state/Users.js | 15 ++++++++++----- 5 files changed, 44 insertions(+), 22 deletions(-) diff --git a/src/nostr/Connection.js b/src/nostr/Connection.js index ab1056a..21ae3fd 100644 --- a/src/nostr/Connection.js +++ b/src/nostr/Connection.js @@ -56,7 +56,7 @@ export default class Connection { */ AddSubscription(sub) { let req = ["REQ", sub.Id, sub.ToObject()]; - if(sub.OrSubs.length > 0) { + if (sub.OrSubs.length > 0) { req = [ ...req, ...sub.OrSubs.map(o => o.ToObject()) @@ -71,9 +71,13 @@ export default class Connection { * @param {any} subId Subscription id to remove */ RemoveSubscription(subId) { - let req = ["CLOSE", subId]; - this._SendJson(req); - delete this.Subscriptions[subId]; + if (this.Subscriptions[subId]) { + let req = ["CLOSE", subId]; + this._SendJson(req); + delete this.Subscriptions[subId]; + return true; + } + return false; } _SendJson(obj) { diff --git a/src/nostr/System.js b/src/nostr/System.js index 2c72897..6125e80 100644 --- a/src/nostr/System.js +++ b/src/nostr/System.js @@ -60,7 +60,8 @@ export class NostrSystem { }; sub.OnEnd = (c) => { c.RemoveSubscription(sub.Id); - if(--counter === 0) { + console.debug(counter); + if (counter-- <= 0) { resolve(events); } }; @@ -68,6 +69,15 @@ export class NostrSystem { s.AddSubscription(sub); counter++; } + + // force timeout returning current results + setTimeout(() => { + for (let s of Object.values(this.Sockets)) { + s.RemoveSubscription(sub.Id); + counter++; + } + resolve(events); + }, 10_000); }); } } \ No newline at end of file diff --git a/src/pages/feed/UsersFeed.js b/src/pages/feed/UsersFeed.js index 303f504..95abb7b 100644 --- a/src/pages/feed/UsersFeed.js +++ b/src/pages/feed/UsersFeed.js @@ -14,22 +14,26 @@ export default function useUsersStore() { const [loading, setLoading] = useState(false); function isUserCached(id) { - let expire = new Date().getTime() - 60_000; // 60s expire + let expire = new Date().getTime() - (1_000 * 60 * 5) ; // 60s expire let u = users[id]; - return u && (u.loaded || 0) < expire; + return u && u.loaded > expire; } async function getUsers() { let needProfiles = pKeys.filter(a => !isUserCached(a)); + if(needProfiles.length === 0) { + return; + } + console.debug("Need profiles: ", needProfiles); let sub = new Subscriptions(); sub.Authors = new Set(needProfiles); sub.Kinds.add(EventKind.SetMetadata); let events = await system.RequestSubscription(sub); - + console.debug("Got events: ", events); let loaded = new Date().getTime(); - let profiles = events.map(a => { + let profiles = events.filter(a => a.kind === EventKind.SetMetadata).map(a => { let metaEvent = Event.FromObject(a); let data = JSON.parse(metaEvent.Content); return { @@ -40,10 +44,14 @@ export default function useUsersStore() { }; }); let missing = needProfiles.filter(a => !events.some(b => b.pubkey === a)); - let missingProfiles = missing.map(a => new{ - pubkey: a, - loaded + let missingProfiles = missing.map(a => { + return { + pubkey: a, + loaded + } }); + console.debug("Got profiles: ", profiles); + console.debug("Missing profiles: ", missing); dispatch(setUserData([ ...profiles, ...missingProfiles diff --git a/src/state/Login.js b/src/state/Login.js index 30cec60..495da3a 100644 --- a/src/state/Login.js +++ b/src/state/Login.js @@ -3,13 +3,8 @@ import { createSlice } from '@reduxjs/toolkit' const PrivateKeyItem = "secret"; const RelayList = "relays"; const DefaultRelays = JSON.stringify([ - "wss://nostr.v0l.io", "wss://nostr-pub.wellorder.net", - "wss://nostr.zebedee.cloud", "wss://relay.damus.io", - "wss://nostr.rocks", - "wss://nostr.rocks", - "wss://nostr.fmt.wiz.biz" ]); const LoginSlice = createSlice({ diff --git a/src/state/Users.js b/src/state/Users.js index 4fc9963..e96551c 100644 --- a/src/state/Users.js +++ b/src/state/Users.js @@ -37,16 +37,21 @@ const UsersSlice = createSlice({ if (!Array.isArray(ud)) { ud = [ud]; } + console.debug("Set user profiles: ", ud); for (let x of ud) { - let existing = state.users[ud.pubkey]; + let existing = state.users[x.pubkey]; if (existing) { - ud = { + x = { ...existing, - ...ud + ...x }; } - state.users[ud.pubkey] = ud; - window.localStorage.setItem(`user:${ud.pubkey}`, JSON.stringify(ud)); + state.users[x.pubkey] = x; + window.localStorage.setItem(`user:${x.pubkey}`, JSON.stringify(x)); + + let newUsersObj = {}; + Object.assign(newUsersObj, state.users); + state.users = newUsersObj; } } }