mirror of
https://github.com/irislib/iris-messenger.git
synced 2024-09-19 17:46:33 +00:00
delete event[] before insert
This commit is contained in:
parent
8100578969
commit
4a5b1b12b4
@ -257,9 +257,10 @@ const Events = {
|
||||
},
|
||||
insert(event: Event) {
|
||||
try {
|
||||
delete event['$loki'];
|
||||
this.db.insert(event);
|
||||
} catch (e) {
|
||||
// console.log('failed to insert event', e, typeof e);
|
||||
console.log('failed to insert event', e, typeof e);
|
||||
// suppress error on duplicate insert. lokijs should throw a different error kind?
|
||||
}
|
||||
},
|
||||
@ -394,13 +395,13 @@ const Events = {
|
||||
}
|
||||
return true;
|
||||
},
|
||||
handle(event: Event, force = false, saveToIdb = true) {
|
||||
handle(event: Event, force = false, saveToIdb = true): boolean {
|
||||
if (!event) return;
|
||||
if (!force && !!this.db.by('id', event.id)) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
if (!force && !this.acceptEvent(event)) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
// Accepting metadata so we still get their name. But should we instead save the name on our own list?
|
||||
// They might spam with 1 MB events and keep changing their name or something.
|
||||
@ -429,7 +430,7 @@ const Events = {
|
||||
switch (event.kind) {
|
||||
case 0:
|
||||
if (this.handleMetadata(event) === false) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
break;
|
||||
case 1:
|
||||
@ -448,7 +449,7 @@ const Events = {
|
||||
break;
|
||||
case 3:
|
||||
if (SocialNetwork.followEventByUser.get(event.pubkey)?.created_at >= event.created_at) {
|
||||
return;
|
||||
return false;
|
||||
}
|
||||
this.maybeAddNotification(event);
|
||||
this.handleFollow(event);
|
||||
@ -503,12 +504,13 @@ const Events = {
|
||||
// go through subscriptions and callback if filters match
|
||||
for (const sub of PubSub.subscriptions.values()) {
|
||||
if (!sub.filters) {
|
||||
return;
|
||||
continue;
|
||||
}
|
||||
if (this.matchFilters(event, sub.filters)) {
|
||||
sub.callback && sub.callback(event);
|
||||
}
|
||||
}
|
||||
return true;
|
||||
},
|
||||
handleNextFutureEvent() {
|
||||
if (this.futureEventIds.size === 0) {
|
||||
|
@ -1,11 +1,10 @@
|
||||
import Dexie, { Table } from 'dexie';
|
||||
import { throttle } from 'lodash';
|
||||
|
||||
import { Event, Filter, matchFilter } from '../lib/nostr-tools';
|
||||
|
||||
import Events from './Events';
|
||||
import Key from './Key';
|
||||
import SocialNetwork from './SocialNetwork';
|
||||
import {throttle} from "lodash";
|
||||
export class MyDexie extends Dexie {
|
||||
events!: Table<Event & { id: string }>;
|
||||
|
||||
@ -58,7 +57,7 @@ export default {
|
||||
.orderBy('created_at')
|
||||
.reverse()
|
||||
.filter((event) => event.kind === 1)
|
||||
.limit(3000)
|
||||
.limit(5000)
|
||||
.each((event) => {
|
||||
Events.handle(event, false, false);
|
||||
});
|
||||
|
@ -1,5 +1,5 @@
|
||||
import localForage from 'localforage';
|
||||
import { debounce } from 'lodash';
|
||||
import { debounce, throttle } from 'lodash';
|
||||
|
||||
import { Event } from '../lib/nostr-tools';
|
||||
|
||||
@ -7,35 +7,36 @@ import Events from './Events';
|
||||
import Key from './Key';
|
||||
import SocialNetwork from './SocialNetwork';
|
||||
|
||||
let latestByFollows;
|
||||
const getLatestByFollows = () => {
|
||||
if (latestByFollows) {
|
||||
return latestByFollows;
|
||||
}
|
||||
latestByFollows = Events.db.addDynamicView('latest_by_follows', { persist: true });
|
||||
latestByFollows.applyFind({ kind: 1 });
|
||||
latestByFollows.applySimpleSort('created_at', { desc: true });
|
||||
latestByFollows.applyWhere((event: Event) => {
|
||||
return SocialNetwork.followDistanceByUser.get(event.pubkey) <= 1;
|
||||
});
|
||||
return latestByFollows;
|
||||
};
|
||||
|
||||
let latestByEveryone;
|
||||
const getLatestByEveryone = () => {
|
||||
if (latestByEveryone) {
|
||||
return latestByEveryone;
|
||||
}
|
||||
latestByEveryone = Events.db.addDynamicView('latest_by_everyone', { persist: true });
|
||||
latestByEveryone.applyFind({ kind: 1 });
|
||||
latestByEveryone.applySimpleSort('created_at', { desc: true });
|
||||
return latestByEveryone;
|
||||
};
|
||||
|
||||
export default {
|
||||
loaded: false,
|
||||
saveEvents: debounce(() => {
|
||||
const latestMsgs = Events.db
|
||||
.chain()
|
||||
.simplesort('created_at')
|
||||
.where((e: Event) => {
|
||||
if (e.kind !== 1) {
|
||||
return false;
|
||||
}
|
||||
const followDistance = SocialNetwork.followDistanceByUser.get(e.pubkey);
|
||||
if (followDistance > 1) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.limit(100)
|
||||
.data();
|
||||
const latestMsgsByEveryone = Events.db
|
||||
.chain()
|
||||
.simplesort('created_at')
|
||||
.where((e: Event) => {
|
||||
if (e.kind !== 1) {
|
||||
return false;
|
||||
}
|
||||
return true;
|
||||
})
|
||||
.limit(100)
|
||||
.data();
|
||||
saveEvents: throttle(() => {
|
||||
const latestMsgs = getLatestByFollows().data().slice(0, 100);
|
||||
const latestMsgsByEveryone = getLatestByEveryone().data().slice(0, 100);
|
||||
const notifications = Events.notifications.eventIds
|
||||
.map((eventId: any) => {
|
||||
return Events.db.by('id', eventId);
|
||||
@ -56,6 +57,8 @@ export default {
|
||||
localForage.setItem('dms', dms);
|
||||
localForage.setItem('keyValueEvents', kvEvents);
|
||||
// TODO save own block and flag events
|
||||
console.log('saved latestMsgs', latestMsgs.length);
|
||||
console.log('saved latestMsgsByEveryone', latestMsgsByEveryone.length);
|
||||
}, 5000),
|
||||
|
||||
saveProfilesAndFollows: debounce(() => {
|
||||
|
Loading…
Reference in New Issue
Block a user