From 0348b4166e4ebfac2d626dbe06b0a01e227fadfd Mon Sep 17 00:00:00 2001 From: Jon Staab Date: Thu, 24 Oct 2024 14:19:32 -0700 Subject: [PATCH] Improve profile loading, add feeds util, add deriveIsDeleted, loosen up delta guess --- packages/app/src/profiles.ts | 7 +++---- packages/feeds/src/utils.ts | 2 ++ packages/store/src/index.ts | 11 +++++++++++ packages/util/src/Filters.ts | 2 +- 4 files changed, 17 insertions(+), 5 deletions(-) diff --git a/packages/app/src/profiles.ts b/packages/app/src/profiles.ts index 27cead9..5ff2684 100644 --- a/packages/app/src/profiles.ts +++ b/packages/app/src/profiles.ts @@ -1,7 +1,7 @@ import {derived, readable} from 'svelte/store' import {readProfile, displayProfile, displayPubkey, PROFILE} from '@welshman/util' import type {SubscribeRequestWithHandlers} from "@welshman/net" -import type {PublishedProfile, TrustedEvent} from "@welshman/util" +import type {PublishedProfile} from "@welshman/util" import {deriveEventsMapped, withGetter} from '@welshman/store' import {repository, load} from './core' import {collection} from './collection' @@ -34,9 +34,8 @@ export const { // better selections the moment we have a result, even if it's outdated await new Promise(resolve => { loadRelaySelections(pubkey, { - onEvent: (event: TrustedEvent) => { - resolve() - } + onEvent: () => resolve(), + onComplete: () => resolve(), }) }) diff --git a/packages/feeds/src/utils.ts b/packages/feeds/src/utils.ts index 2897296..8e80d2e 100644 --- a/packages/feeds/src/utils.ts +++ b/packages/feeds/src/utils.ts @@ -158,6 +158,8 @@ export const feedsFromFilter = ({since, until, ...filter}: Filter) => { export const feedFromFilter = (filter: Filter) => makeIntersectionFeed(...feedsFromFilter(filter)) +export const feedsFromFilters = (filters: Filter[]) => + makeUnionFeed(...filters.map(filter => feedFromFilter(filter))) export const walkFeed = (feed: Feed, visit: (feed: Feed) => void) => { visit(feed) diff --git a/packages/store/src/index.ts b/packages/store/src/index.ts index 8c59c2d..6ac6449 100644 --- a/packages/store/src/index.ts +++ b/packages/store/src/index.ts @@ -258,6 +258,17 @@ export const deriveEvent = (repository: Repository, idOrAddress: string) => first ) +export const deriveIsDeleted = (repository: Repository, event: TrustedEvent) => + custom(setter => { + setter(repository.isDeleted(event)) + + const onUpdate = batch(300, () => setter(repository.isDeleted(event))) + + repository.on("update", onUpdate) + + return () => repository.off("update", onUpdate) + }) + export const deriveIsDeletedByAddress = (repository: Repository, event: TrustedEvent) => custom(setter => { setter(repository.isDeletedByAddress(event)) diff --git a/packages/util/src/Filters.ts b/packages/util/src/Filters.ts index 2ef6c95..eca0e1c 100644 --- a/packages/util/src/Filters.ts +++ b/packages/util/src/Filters.ts @@ -203,7 +203,7 @@ export const getFilterGenerality = (filter: Filter) => { } export const guessFilterDelta = (filters: Filter[], max = 60 * 60 * 24 * 7) => - Math.round(max * Math.max(0.005, 1 - avg(filters.map(getFilterGenerality)))) + Math.round(max * Math.max(0.01, 1 - avg(filters.map(getFilterGenerality)))) // If a filter is specifying ids, we know how many results to expect export const getFilterResultCardinality = (filter: Filter) => {