lazy-verification
This commit is contained in:
parent
1592a38c7c
commit
74b02bfff6
@ -79,7 +79,7 @@ export class AutoVerifierWithArg<T, K> {
|
||||
}
|
||||
}
|
||||
|
||||
async fetchAndVerifyIfNeded(query: K): Promise<T | null> {
|
||||
async fetchAndVerifyIfNeded(query: K, lazyVerify: boolean = false): Promise<T | null> {
|
||||
let token = this.tokenizer(query);
|
||||
this.tokenQueries.set(token, query);
|
||||
let autoVerifier = this.tokenAutoVerifiers.get(token);
|
||||
@ -91,6 +91,6 @@ export class AutoVerifierWithArg<T, K> {
|
||||
);
|
||||
this.tokenAutoVerifiers.set(token, autoVerifier);
|
||||
}
|
||||
return await autoVerifier.fetchAndVerifyIfNeeded();
|
||||
return await autoVerifier.fetchAndVerifyIfNeeded(lazyVerify);
|
||||
}
|
||||
}
|
@ -148,7 +148,8 @@ export class AutoVerifier<T> {
|
||||
// Fetches the result of the primary fetchable
|
||||
// If the primary fetchable returns null but has not been verified yet, this will return the result of the trusted fetchable
|
||||
// If the trusted fetchable has not been used to verify the primary fetchable yet, this queries the trusted fetchable and calls verify
|
||||
async fetchAndVerifyIfNeeded(): Promise<T | null> {
|
||||
// @param lazyVerify: set to true to only verify if primaryResult returns null
|
||||
async fetchAndVerifyIfNeeded(lazyVerify: boolean = false): Promise<T | null> {
|
||||
return await new Promise<T | null>(async (resolve: (result: T | null) => void, reject: (error: Error) => void) => {
|
||||
let resolved = false;
|
||||
try {
|
||||
@ -158,7 +159,7 @@ export class AutoVerifier<T> {
|
||||
let origPrimaryPromise = this.primaryPromise;
|
||||
|
||||
// pre-fetch the trusted result while we fetch the primary result
|
||||
if (this.trustedStatus === 'none') {
|
||||
if (!lazyVerify && this.trustedStatus === 'none') {
|
||||
this.trustedStatus = 'fetching';
|
||||
this.trustedPromise = this.trustedFunc();
|
||||
}
|
||||
@ -171,7 +172,7 @@ export class AutoVerifier<T> {
|
||||
if (primaryResult) {
|
||||
resolve(primaryResult);
|
||||
resolved = true;
|
||||
if (this.trustedStatus === 'verified') {
|
||||
if (lazyVerify || this.trustedStatus === 'verified') {
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
@ -168,9 +168,9 @@ export class Message implements WithEquals<Message> {
|
||||
let channel = this.channel instanceof Channel ? this.channel.name : `ch#${this.channel.id}`;
|
||||
let member = this.member instanceof Member ? this.member.displayName : `m#${this.member.id}`;
|
||||
if (this.resourceName) {
|
||||
return `m#${this.id} ${channel} @${formatDate(this.sent)} ${member}: ${this.text ? this.text + ' / ' : ''}${this.resourceName}`;
|
||||
return `msg#${this.id} ${channel} @${formatDate(this.sent)} ${member}: ${this.text ? this.text + ' / ' : ''}${this.resourceName}`;
|
||||
} else {
|
||||
return `m#${this.id} ${channel} @${formatDate(this.sent)} ${member}: ${this.text}`;
|
||||
return `msg#${this.id} ${channel} @${formatDate(this.sent)} ${member}: ${this.text}`;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -183,7 +183,7 @@ export default class PairVerifierFetchable extends EventEmitter<Conflictable> im
|
||||
return await this.fetchMessagesAfterVerifier.fetchAndVerifyIfNeded({ channelId, messageId, number });
|
||||
}
|
||||
async fetchResource(resourceId: string): Promise<Resource | null> {
|
||||
return await this.fetchResourceVerifier.fetchAndVerifyIfNeded({ id: resourceId });
|
||||
return await this.fetchResourceVerifier.fetchAndVerifyIfNeded({ id: resourceId }, true); // lazy verification
|
||||
}
|
||||
async fetchTokens(): Promise<Token[] | null> {
|
||||
return await this.fetchTokensVerifier.fetchAndVerifyIfNeeded();
|
||||
|
@ -111,6 +111,9 @@ export default class CombinedGuild extends EventEmitter<Connectable & Conflictab
|
||||
}
|
||||
this.ramGuild.handleMessagesChanged(messages);
|
||||
await this.personalDBGuild.handleMessagesChanged(messages);
|
||||
let members = await this.grabRAMMembersMap();
|
||||
let channels = await this.grabRAMChannelsMap();
|
||||
for (let message of messages) message.fill(members, channels);
|
||||
this.emit('update-messages', messages);
|
||||
});
|
||||
|
||||
@ -130,8 +133,13 @@ export default class CombinedGuild extends EventEmitter<Connectable & Conflictab
|
||||
LOG.info(`g#${this.id} channels conflict`, { changes });
|
||||
this.emit('conflict-channels', changesType, changes);
|
||||
});
|
||||
ramDiskSocket.on('conflict-messages', (changesType: AutoVerifierChangesType, changes: Changes<Message>) => {
|
||||
ramDiskSocket.on('conflict-messages', async (changesType: AutoVerifierChangesType, changes: Changes<Message>) => {
|
||||
LOG.info(`g#${this.id} messages conflict`, { changes });
|
||||
let members = await this.grabRAMMembersMap();
|
||||
let channels = await this.grabRAMChannelsMap();
|
||||
for (let message of changes.added) message.fill(members, channels);
|
||||
for (let dataPoint of changes.updated) dataPoint.newDataPoint.fill(members, channels);
|
||||
for (let message of changes.deleted) message.fill(members, channels);
|
||||
this.emit('conflict-messages', changesType, changes);
|
||||
});
|
||||
ramDiskSocket.on('conflict-tokens', (changesType: AutoVerifierChangesType, changes: Changes<Token>) => {
|
||||
|
Loading…
Reference in New Issue
Block a user