From bf651318eb83b2c2e7fc1697c591c716622e2fae Mon Sep 17 00:00:00 2001 From: Martti Malmi Date: Sat, 19 Aug 2023 09:40:35 +0300 Subject: [PATCH] follow distance & idb save fix --- src/js/nostr/Events.ts | 7 +++---- src/js/nostr/IndexedDB.ts | 16 +++++++++++----- src/js/nostr/SocialNetwork.ts | 3 +++ src/js/views/feeds/Home.tsx | 1 - 4 files changed, 17 insertions(+), 10 deletions(-) diff --git a/src/js/nostr/Events.ts b/src/js/nostr/Events.ts index fa1b8292..5895fe75 100644 --- a/src/js/nostr/Events.ts +++ b/src/js/nostr/Events.ts @@ -400,9 +400,9 @@ const Events = { console.log('what', event); return false; } - if (UniqueIds.has(event.pubkey) && SocialNetwork.getFollowDistance(event.pubkey)) { - const distance = SocialNetwork.followDistanceByUser.get(ID(event.pubkey)); - if (distance && distance > globalFilter.maxFollowDistance) { + if (UniqueIds.has(event.pubkey) && SocialNetwork.getFollowDistance(event.pubkey) < 1000) { + const distance = SocialNetwork.getFollowDistance(event.pubkey); + if (distance > globalFilter.maxFollowDistance) { // follow distance too high, reject return false; } @@ -548,7 +548,6 @@ const Events = { // otherwise feed will be incomplete if (saveToIdb && dev.indexedDbSave !== false) { const followDistance = SocialNetwork.getFollowDistance(event.pubkey); - if (followDistance <= 1) { IndexedDB.saveEvent(event as Event & { id: string }); } else if ( diff --git a/src/js/nostr/IndexedDB.ts b/src/js/nostr/IndexedDB.ts index cf709f2d..37fe732f 100644 --- a/src/js/nostr/IndexedDB.ts +++ b/src/js/nostr/IndexedDB.ts @@ -5,7 +5,6 @@ import { Event, Filter } from 'nostr-tools'; import Events from './Events'; import Key from './Key'; -// TODO: tags should be mapped to internal event ids in order to save space type Tag = { id: string; eventId: string; @@ -67,14 +66,14 @@ const IndexedDB = { await db.tags.bulkPut(tagsToSave); }); } catch (err) { - console.error('bulkPut save error:', err); + console.error('idb bulkPut save error:', err); } }, 2000), saveEvent(event: Event & { id: string }) { const eventTags = event.tags - ?.filter((tag) => tag[0] === 'e') // only save replies & reactions for now + ?.filter((tag) => ['e', 'p'].includes(tag[0])) .map((tag) => ({ id: event.id.slice(0, 16) + '-' + tag[0].slice(0, 16) + '-' + tag[1].slice(0, 16), eventId: event.id, @@ -128,12 +127,19 @@ const IndexedDB = { async find(filter: Filter) { if (!filter) return; - if (filter['#p']) return; // TODO save reactions & replies - const stringifiedFilter = JSON.stringify(filter); if (this.seenFilters.has(stringifiedFilter)) return; this.seenFilters.add(stringifiedFilter); + if (filter['#p'] && Array.isArray(filter['#p'])) { + for (const eventId of filter['#p']) { + this.subscribedTags.add('p|' + eventId); + } + + await this.subscribeToTags(); + return; + } + if (filter['#e'] && Array.isArray(filter['#e'])) { for (const eventId of filter['#e']) { this.subscribedTags.add('e|' + eventId); diff --git a/src/js/nostr/SocialNetwork.ts b/src/js/nostr/SocialNetwork.ts index 96330247..fd68444e 100644 --- a/src/js/nostr/SocialNetwork.ts +++ b/src/js/nostr/SocialNetwork.ts @@ -28,6 +28,9 @@ export default { }, getFollowDistance: function (user: string): number { + if (user === Key.getPubKey()) { + return 0; + } const userId = ID(user); const distance = this.followDistanceByUser.get(userId); return distance === undefined ? 1000 : distance; diff --git a/src/js/views/feeds/Home.tsx b/src/js/views/feeds/Home.tsx index ff9769bf..b1cca6f3 100644 --- a/src/js/views/feeds/Home.tsx +++ b/src/js/views/feeds/Home.tsx @@ -31,7 +31,6 @@ class Feed extends View { this.unsub = SocialNetwork.getFollowedByUser( Key.getPubKey(), (followedUsers) => { - console.log('followedUsers', followedUsers); this.setState({ followedUsers: Array.from(followedUsers) }); }, true,