mirror of
https://github.com/BlowaterNostr/blowater.git
synced 2024-10-18 07:33:22 +00:00
defer loading of relay records (#440)
This commit is contained in:
parent
8604dcd405
commit
8d6aa9f043
@ -241,6 +241,22 @@ export class App {
|
|||||||
forever(sync_kind_1(this.pool, this.database));
|
forever(sync_kind_1(this.pool, this.database));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
(async () => {
|
||||||
|
await this.database.waitRelayRecordToLoad();
|
||||||
|
render(
|
||||||
|
<AppComponent
|
||||||
|
eventBus={this.eventBus}
|
||||||
|
model={this.model}
|
||||||
|
pool={this.pool}
|
||||||
|
popOverInputChan={this.popOverInputChan}
|
||||||
|
rightPanelInputChan={this.rightPanelInputChan}
|
||||||
|
installPrompt={installPrompt}
|
||||||
|
toastInputChan={this.toastInputChan}
|
||||||
|
/>,
|
||||||
|
document.body,
|
||||||
|
);
|
||||||
|
})();
|
||||||
|
|
||||||
// Database
|
// Database
|
||||||
(async () => {
|
(async () => {
|
||||||
let i = 0;
|
let i = 0;
|
||||||
|
@ -104,9 +104,7 @@ Deno.test("Relay Record", async () => {
|
|||||||
|
|
||||||
await stream.pop();
|
await stream.pop();
|
||||||
await stream.pop();
|
await stream.pop();
|
||||||
|
await stream.pop();
|
||||||
const isCanceled = await sleep(10, stream.pop());
|
|
||||||
assertEquals(isCanceled, not_cancelled);
|
|
||||||
});
|
});
|
||||||
|
|
||||||
Deno.test("mark removed event", async () => {
|
Deno.test("mark removed event", async () => {
|
||||||
|
@ -72,8 +72,22 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
|||||||
private readonly eventMarker: EventMarker,
|
private readonly eventMarker: EventMarker,
|
||||||
private readonly events: Map<string, Parsed_Event>,
|
private readonly events: Map<string, Parsed_Event>,
|
||||||
private readonly removedEvents: Set<string>,
|
private readonly removedEvents: Set<string>,
|
||||||
private readonly relayRecords: Map<string, Set<string>>,
|
) {
|
||||||
) {}
|
this.relay_record_loaded = new Promise(async (resolve) => {
|
||||||
|
const all_records = await relayRecorder.getAllRelayRecords();
|
||||||
|
for (const [event_id, relays] of all_records.entries()) {
|
||||||
|
const set = this.relayRecords.get(event_id);
|
||||||
|
if (set) {
|
||||||
|
for (const relay of relays) {
|
||||||
|
set.add(relay);
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
this.relayRecords.set(event_id, relays);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
resolve(undefined);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
static async New(
|
static async New(
|
||||||
eventsAdapter: EventsAdapter,
|
eventsAdapter: EventsAdapter,
|
||||||
@ -101,9 +115,7 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
|||||||
}
|
}
|
||||||
|
|
||||||
console.log("Datebase_View:parsed", Date.now() - t);
|
console.log("Datebase_View:parsed", Date.now() - t);
|
||||||
|
|
||||||
const all_removed_events = await eventMarker.getAllMarks();
|
const all_removed_events = await eventMarker.getAllMarks();
|
||||||
const all_relay_records = await relayAdapter.getAllRelayRecords();
|
|
||||||
// Construct the View
|
// Construct the View
|
||||||
const db = new Database_View(
|
const db = new Database_View(
|
||||||
eventsAdapter,
|
eventsAdapter,
|
||||||
@ -111,7 +123,6 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
|||||||
eventMarker,
|
eventMarker,
|
||||||
initialEvents,
|
initialEvents,
|
||||||
new Set(all_removed_events.map((mark) => mark.event_id)),
|
new Set(all_removed_events.map((mark) => mark.event_id)),
|
||||||
all_relay_records,
|
|
||||||
);
|
);
|
||||||
console.log("Datebase_View:New time spent", Date.now() - t);
|
console.log("Datebase_View:New time spent", Date.now() - t);
|
||||||
for (const e of db.events.values()) {
|
for (const e of db.events.values()) {
|
||||||
@ -153,6 +164,8 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
|||||||
await this.eventMarker.markEvent(id, "removed");
|
await this.eventMarker.markEvent(id, "removed");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private relayRecords = new Map<string, Set<string>>();
|
||||||
|
private relay_record_loaded: Promise<void>;
|
||||||
getRelayRecord(eventID: string) {
|
getRelayRecord(eventID: string) {
|
||||||
const relays = this.relayRecords.get(eventID);
|
const relays = this.relayRecords.get(eventID);
|
||||||
if (relays == undefined) {
|
if (relays == undefined) {
|
||||||
@ -161,6 +174,19 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
|||||||
return relays;
|
return relays;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private async recordRelay(eventID: string, url: string) {
|
||||||
|
await this.relayRecorder.setRelayRecord(eventID, url);
|
||||||
|
const records = this.relayRecords.get(eventID);
|
||||||
|
if (records) {
|
||||||
|
const size = records.size;
|
||||||
|
records.add(url);
|
||||||
|
return records.size > size;
|
||||||
|
} else {
|
||||||
|
this.relayRecords.set(eventID, new Set([url]));
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
getProfilesByText(name: string): Profile_Nostr_Event[] {
|
getProfilesByText(name: string): Profile_Nostr_Event[] {
|
||||||
const result = [];
|
const result = [];
|
||||||
for (const event of this.profiles.values()) {
|
for (const event of this.profiles.values()) {
|
||||||
@ -276,17 +302,8 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
|
|
||||||
private async recordRelay(eventID: string, url: string) {
|
async waitRelayRecordToLoad(): Promise<void> {
|
||||||
await this.relayRecorder.setRelayRecord(eventID, url);
|
return this.relay_record_loaded;
|
||||||
const records = this.relayRecords.get(eventID);
|
|
||||||
if (records) {
|
|
||||||
const size = records.size;
|
|
||||||
records.add(url);
|
|
||||||
return records.size > size;
|
|
||||||
} else {
|
|
||||||
this.relayRecords.set(eventID, new Set([url]));
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user