refactor(UserStore): move mute logic to separate function & create isMuted() function
This commit is contained in:
parent
c85f31f63f
commit
0c0465f131
|
@ -1,4 +1,5 @@
|
||||||
import { NostrEvent, NostrFilter, NStore } from '@nostrify/nostrify';
|
import { NostrEvent, NostrFilter, NStore } from '@nostrify/nostrify';
|
||||||
|
|
||||||
import { DittoEvent } from '@/interfaces/DittoEvent.ts';
|
import { DittoEvent } from '@/interfaces/DittoEvent.ts';
|
||||||
import { getTagSet } from '@/tags.ts';
|
import { getTagSet } from '@/tags.ts';
|
||||||
|
|
||||||
|
@ -16,25 +17,34 @@ export class UserStore implements NStore {
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Query events that `pubkey` did not block
|
* Query events that `pubkey` did not mute
|
||||||
* https://github.com/nostr-protocol/nips/blob/master/51.md#standard-lists
|
* https://github.com/nostr-protocol/nips/blob/master/51.md#standard-lists
|
||||||
*/
|
*/
|
||||||
async query(filters: NostrFilter[], opts: { signal?: AbortSignal; limit?: number } = {}): Promise<DittoEvent[]> {
|
async query(filters: NostrFilter[], opts: { signal?: AbortSignal; limit?: number } = {}): Promise<DittoEvent[]> {
|
||||||
const allEvents = await this.store.query(filters, opts);
|
const allEvents = await this.store.query(filters, opts);
|
||||||
|
|
||||||
const mutedPubkeysEvent = await this.getMuteList();
|
const mutedPubkeys = await this.getMutedPubkeys();
|
||||||
if (!mutedPubkeysEvent) {
|
|
||||||
return allEvents;
|
|
||||||
}
|
|
||||||
const mutedPubkeys = getTagSet(mutedPubkeysEvent.tags, 'p');
|
|
||||||
|
|
||||||
return allEvents.filter((event) => {
|
return allEvents.filter((event) => {
|
||||||
return event.kind === 0 || mutedPubkeys.has(event.pubkey) === false;
|
return event.kind === 0 || mutedPubkeys.has(event.pubkey) === false;
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
async isMuted(pubkey: string): Promise<boolean> {
|
||||||
|
const mutedPubkeys = await this.getMutedPubkeys();
|
||||||
|
return mutedPubkeys.has(pubkey);
|
||||||
|
}
|
||||||
|
|
||||||
private async getMuteList(): Promise<DittoEvent | undefined> {
|
private async getMuteList(): Promise<DittoEvent | undefined> {
|
||||||
const [muteList] = await this.store.query([{ authors: [this.pubkey], kinds: [10000], limit: 1 }]);
|
const [muteList] = await this.store.query([{ authors: [this.pubkey], kinds: [10000], limit: 1 }]);
|
||||||
return muteList;
|
return muteList;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async getMutedPubkeys(): Promise<Set<string>> {
|
||||||
|
const mutedPubkeysEvent = await this.getMuteList();
|
||||||
|
if (!mutedPubkeysEvent) {
|
||||||
|
return new Set();
|
||||||
|
}
|
||||||
|
return getTagSet(mutedPubkeysEvent.tags, 'p');
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue