follow distance & idb save fix

This commit is contained in:
Martti Malmi 2023-08-19 09:40:35 +03:00
parent bd0e998afb
commit bf651318eb
4 changed files with 17 additions and 10 deletions

View File

@ -400,9 +400,9 @@ const Events = {
console.log('what', event); console.log('what', event);
return false; return false;
} }
if (UniqueIds.has(event.pubkey) && SocialNetwork.getFollowDistance(event.pubkey)) { if (UniqueIds.has(event.pubkey) && SocialNetwork.getFollowDistance(event.pubkey) < 1000) {
const distance = SocialNetwork.followDistanceByUser.get(ID(event.pubkey)); const distance = SocialNetwork.getFollowDistance(event.pubkey);
if (distance && distance > globalFilter.maxFollowDistance) { if (distance > globalFilter.maxFollowDistance) {
// follow distance too high, reject // follow distance too high, reject
return false; return false;
} }
@ -548,7 +548,6 @@ const Events = {
// otherwise feed will be incomplete // otherwise feed will be incomplete
if (saveToIdb && dev.indexedDbSave !== false) { if (saveToIdb && dev.indexedDbSave !== false) {
const followDistance = SocialNetwork.getFollowDistance(event.pubkey); const followDistance = SocialNetwork.getFollowDistance(event.pubkey);
if (followDistance <= 1) { if (followDistance <= 1) {
IndexedDB.saveEvent(event as Event & { id: string }); IndexedDB.saveEvent(event as Event & { id: string });
} else if ( } else if (

View File

@ -5,7 +5,6 @@ import { Event, Filter } from 'nostr-tools';
import Events from './Events'; import Events from './Events';
import Key from './Key'; import Key from './Key';
// TODO: tags should be mapped to internal event ids in order to save space
type Tag = { type Tag = {
id: string; id: string;
eventId: string; eventId: string;
@ -67,14 +66,14 @@ const IndexedDB = {
await db.tags.bulkPut(tagsToSave); await db.tags.bulkPut(tagsToSave);
}); });
} catch (err) { } catch (err) {
console.error('bulkPut save error:', err); console.error('idb bulkPut save error:', err);
} }
}, 2000), }, 2000),
saveEvent(event: Event & { id: string }) { saveEvent(event: Event & { id: string }) {
const eventTags = const eventTags =
event.tags event.tags
?.filter((tag) => tag[0] === 'e') // only save replies & reactions for now ?.filter((tag) => ['e', 'p'].includes(tag[0]))
.map((tag) => ({ .map((tag) => ({
id: event.id.slice(0, 16) + '-' + tag[0].slice(0, 16) + '-' + tag[1].slice(0, 16), id: event.id.slice(0, 16) + '-' + tag[0].slice(0, 16) + '-' + tag[1].slice(0, 16),
eventId: event.id, eventId: event.id,
@ -128,12 +127,19 @@ const IndexedDB = {
async find(filter: Filter) { async find(filter: Filter) {
if (!filter) return; if (!filter) return;
if (filter['#p']) return; // TODO save reactions & replies
const stringifiedFilter = JSON.stringify(filter); const stringifiedFilter = JSON.stringify(filter);
if (this.seenFilters.has(stringifiedFilter)) return; if (this.seenFilters.has(stringifiedFilter)) return;
this.seenFilters.add(stringifiedFilter); 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'])) { if (filter['#e'] && Array.isArray(filter['#e'])) {
for (const eventId of filter['#e']) { for (const eventId of filter['#e']) {
this.subscribedTags.add('e|' + eventId); this.subscribedTags.add('e|' + eventId);

View File

@ -28,6 +28,9 @@ export default {
}, },
getFollowDistance: function (user: string): number { getFollowDistance: function (user: string): number {
if (user === Key.getPubKey()) {
return 0;
}
const userId = ID(user); const userId = ID(user);
const distance = this.followDistanceByUser.get(userId); const distance = this.followDistanceByUser.get(userId);
return distance === undefined ? 1000 : distance; return distance === undefined ? 1000 : distance;

View File

@ -31,7 +31,6 @@ class Feed extends View {
this.unsub = SocialNetwork.getFollowedByUser( this.unsub = SocialNetwork.getFollowedByUser(
Key.getPubKey(), Key.getPubKey(),
(followedUsers) => { (followedUsers) => {
console.log('followedUsers', followedUsers);
this.setState({ followedUsers: Array.from(followedUsers) }); this.setState({ followedUsers: Array.from(followedUsers) });
}, },
true, true,