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));
|
||||
}
|
||||
|
||||
(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
|
||||
(async () => {
|
||||
let i = 0;
|
||||
|
@ -104,9 +104,7 @@ Deno.test("Relay Record", async () => {
|
||||
|
||||
await stream.pop();
|
||||
await stream.pop();
|
||||
|
||||
const isCanceled = await sleep(10, stream.pop());
|
||||
assertEquals(isCanceled, not_cancelled);
|
||||
await stream.pop();
|
||||
});
|
||||
|
||||
Deno.test("mark removed event", async () => {
|
||||
|
@ -72,8 +72,22 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
||||
private readonly eventMarker: EventMarker,
|
||||
private readonly events: Map<string, Parsed_Event>,
|
||||
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(
|
||||
eventsAdapter: EventsAdapter,
|
||||
@ -101,9 +115,7 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
||||
}
|
||||
|
||||
console.log("Datebase_View:parsed", Date.now() - t);
|
||||
|
||||
const all_removed_events = await eventMarker.getAllMarks();
|
||||
const all_relay_records = await relayAdapter.getAllRelayRecords();
|
||||
// Construct the View
|
||||
const db = new Database_View(
|
||||
eventsAdapter,
|
||||
@ -111,7 +123,6 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
||||
eventMarker,
|
||||
initialEvents,
|
||||
new Set(all_removed_events.map((mark) => mark.event_id)),
|
||||
all_relay_records,
|
||||
);
|
||||
console.log("Datebase_View:New time spent", Date.now() - t);
|
||||
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");
|
||||
}
|
||||
|
||||
private relayRecords = new Map<string, Set<string>>();
|
||||
private relay_record_loaded: Promise<void>;
|
||||
getRelayRecord(eventID: string) {
|
||||
const relays = this.relayRecords.get(eventID);
|
||||
if (relays == undefined) {
|
||||
@ -161,6 +174,19 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
||||
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[] {
|
||||
const result = [];
|
||||
for (const event of this.profiles.values()) {
|
||||
@ -276,17 +302,8 @@ export class Database_View implements ProfileSetter, ProfileGetter, EventRemover
|
||||
return res;
|
||||
}
|
||||
|
||||
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;
|
||||
}
|
||||
async waitRelayRecordToLoad(): Promise<void> {
|
||||
return this.relay_record_loaded;
|
||||
}
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user