feat: interaction cache

This commit is contained in:
2023-04-25 12:57:09 +01:00
parent ce6a4ce35c
commit 69ec48141b
6 changed files with 115 additions and 59 deletions

View File

@ -0,0 +1,44 @@
import { db, EventInteraction } from "Db";
import { LoginStore } from "Login";
import { sha256 } from "Util";
import FeedCache from "./FeedCache";
class EventInteractionCache extends FeedCache<EventInteraction> {
constructor() {
super("EventInteraction", db.eventInteraction);
}
key(of: EventInteraction): string {
return sha256(of.event + of.by);
}
override async preload(): Promise<void> {
await super.preload();
const data = window.localStorage.getItem("zap-cache");
if (data) {
const toImport = [...new Set<string>(JSON.parse(data) as Array<string>)].map(a => {
const ret = {
event: a,
by: LoginStore.takeSnapshot().publicKey,
zapped: true,
reacted: false,
reposted: false,
} as EventInteraction;
ret.id = this.key(ret);
return ret;
});
await this.bulkSet(toImport);
console.debug(`Imported dumb-zap-cache events: `, toImport.length);
window.localStorage.removeItem("zap-cache");
}
await this.buffer([...this.onTable]);
}
takeSnapshot(): EventInteraction[] {
return [...this.cache.values()];
}
}
export const InteractionCache = new EventInteractionCache();

View File

@ -1,6 +1,7 @@
import { HexKey, RawEvent, UserMetadata } from "@snort/nostr";
import { hexToBech32, unixNowMs } from "Util";
import { DmCache } from "./DMCache";
import { InteractionCache } from "./EventInteractionCache";
import { UserCache } from "./UserCache";
export interface MetadataCache extends UserMetadata {
@ -48,6 +49,7 @@ export function mapEventToProfile(ev: RawEvent) {
export async function preload() {
await UserCache.preload();
await DmCache.preload();
await InteractionCache.preload();
}
export { UserCache, DmCache };