chore: remove feed cache

This commit is contained in:
Kieran 2023-02-21 12:03:14 +00:00
parent 3f406ec19e
commit a49121c05a
Signed by: Kieran
GPG Key ID: DE71CEB3925BE941
3 changed files with 5 additions and 73 deletions

View File

@ -1,10 +1,9 @@
import Dexie, { Table } from "dexie";
import { TaggedRawEvent, u256 } from "@snort/nostr";
import { u256 } from "@snort/nostr";
import { MetadataCache } from "State/Users";
import { hexToBech32 } from "Util";
export const NAME = "snortDB";
export const VERSION = 3;
export const VERSION = 4;
export interface SubCache {
id: string;
@ -15,27 +14,14 @@ export interface SubCache {
const STORES = {
users: "++pubkey, name, display_name, picture, nip05, npub",
events: "++id, pubkey, created_at",
feeds: "++id",
};
export class SnortDB extends Dexie {
users!: Table<MetadataCache>;
events!: Table<TaggedRawEvent>;
feeds!: Table<SubCache>;
constructor() {
super(NAME);
this.version(VERSION)
.stores(STORES)
.upgrade(async tx => {
await tx
.table("users")
.toCollection()
.modify(user => {
user.npub = hexToBech32("npub", user.pubkey);
});
});
this.version(VERSION).stores(STORES);
}
}

View File

@ -2,8 +2,7 @@ import { useEffect, useMemo, useReducer, useState } from "react";
import { TaggedRawEvent } from "@snort/nostr";
import { Subscriptions } from "@snort/nostr";
import { System } from "System";
import { debounce, unwrap } from "Util";
import { db } from "Db";
import { debounce } from "Util";
export type NoteStore = {
notes: Array<TaggedRawEvent>;
@ -80,7 +79,6 @@ export default function useSubscription(
const [state, dispatch] = useReducer(notesReducer, initStore);
const [debounceOutput, setDebounceOutput] = useState<number>(0);
const [subDebounce, setSubDebounced] = useState<Subscriptions>();
const useCache = useMemo(() => options?.cache === true, [options]);
useEffect(() => {
if (sub) {
@ -97,25 +95,11 @@ export default function useSubscription(
end: false,
});
if (useCache) {
// preload notes from db
PreloadNotes(subDebounce.Id)
.then(ev => {
dispatch({
type: "EVENT",
ev: ev,
});
})
.catch(console.warn);
}
subDebounce.OnEvent = e => {
dispatch({
type: "EVENT",
ev: e,
});
if (useCache) {
db.events.put(e);
}
};
subDebounce.OnEnd = c => {
@ -144,15 +128,7 @@ export default function useSubscription(
System.RemoveSubscription(subDebounce.Id);
};
}
}, [subDebounce, useCache]);
useEffect(() => {
if (subDebounce && useCache) {
return debounce(500, () => {
TrackNotesInFeed(subDebounce.Id, state.notes).catch(console.warn);
});
}
}, [state, useCache]);
}, [subDebounce]);
useEffect(() => {
return debounce(DebounceMs, () => {
@ -174,23 +150,3 @@ export default function useSubscription(
},
};
}
/**
* Lookup cached copy of feed
*/
const PreloadNotes = async (id: string): Promise<TaggedRawEvent[]> => {
const feed = await db.feeds.get(id);
if (feed) {
const events = await db.events.bulkGet(feed.ids);
return events.filter(a => a !== undefined).map(a => unwrap(a));
}
return [];
};
const TrackNotesInFeed = async (id: string, notes: TaggedRawEvent[]) => {
const existing = await db.feeds.get(id);
const ids = Array.from(new Set([...(existing?.ids || []), ...notes.map(a => a.id)]));
const since = notes.reduce((acc, v) => (acc > v.created_at ? v.created_at : acc), +Infinity);
const until = notes.reduce((acc, v) => (acc < v.created_at ? v.created_at : acc), -Infinity);
await db.feeds.put({ id, ids, since, until });
};

View File

@ -17,7 +17,6 @@ import { SearchRelays, SnortPubKey } from "Const";
import useEventPublisher from "Feed/EventPublisher";
import useModeration from "Hooks/useModeration";
import { IndexedUDB } from "State/Users/Db";
import { db } from "Db";
import { bech32ToHex } from "Util";
import { NoteCreator } from "Element/NoteCreator";
import Plus from "Icons/Plus";
@ -120,15 +119,6 @@ export default function Layout() {
// cleanup on load
if (dbType === "indexdDb") {
IndexedUDB.ready = true;
await db.feeds.clear();
const now = Math.floor(new Date().getTime() / 1000);
const cleanupEvents = await db.events
.where("created_at")
.above(now - 60 * 60)
.primaryKeys();
console.debug(`Cleanup ${cleanupEvents.length} events`);
await db.events.bulkDelete(cleanupEvents);
}
console.debug(`Using db: ${dbType}`);