Simplify copyQuote logic
This commit is contained in:
parent
0d5a480c1b
commit
68223aaa12
7 changed files with 106 additions and 167 deletions
|
@ -4,7 +4,10 @@
|
|||
import cloneDeep from 'lodash/cloneDeep';
|
||||
import { throttle } from 'lodash';
|
||||
import LRU from 'lru-cache';
|
||||
import type { MessageAttributesType } from '../model-types.d';
|
||||
import type {
|
||||
MessageAttributesType,
|
||||
ReadonlyMessageAttributesType,
|
||||
} from '../model-types.d';
|
||||
import type { MessageModel } from '../models/messages';
|
||||
import { DataReader, DataWriter } from '../sql/Client';
|
||||
import * as Errors from '../types/errors';
|
||||
|
@ -14,7 +17,6 @@ import { getMessageConversation } from '../util/getMessageConversation';
|
|||
import { getMessageModelLogger } from '../util/MessageModelLogger';
|
||||
import { getSenderIdentifier } from '../util/getSenderIdentifier';
|
||||
import { isNotNil } from '../util/isNotNil';
|
||||
import { map } from '../util/iterables';
|
||||
import { softAssert, strictAssert } from '../util/assert';
|
||||
import { isStory } from '../messages/helpers';
|
||||
import type { SendStateByConversationId } from '../messages/MessageSendState';
|
||||
|
@ -451,11 +453,47 @@ export class MessageCache {
|
|||
return this.toModel(data);
|
||||
}
|
||||
|
||||
public async upgradeSchema(
|
||||
attributes: MessageAttributesType,
|
||||
minSchemaVersion: number
|
||||
): Promise<MessageAttributesType> {
|
||||
const { schemaVersion } = attributes;
|
||||
if (!schemaVersion || schemaVersion >= minSchemaVersion) {
|
||||
return attributes;
|
||||
}
|
||||
const upgradedAttributes =
|
||||
await window.Signal.Migrations.upgradeMessageSchema(attributes);
|
||||
await this.setAttributes({
|
||||
messageId: upgradedAttributes.id,
|
||||
messageAttributes: upgradedAttributes,
|
||||
skipSaveToDatabase: false,
|
||||
});
|
||||
return upgradedAttributes;
|
||||
}
|
||||
|
||||
// Finds a message in the cache by sentAt/timestamp
|
||||
public __DEPRECATED$filterBySentAt(sentAt: number): Iterable<MessageModel> {
|
||||
public async findBySentAt(
|
||||
sentAt: number,
|
||||
predicate: (attributes: ReadonlyMessageAttributesType) => boolean
|
||||
): Promise<MessageAttributesType | undefined> {
|
||||
const items = this.state.messageIdsBySentAt.get(sentAt) ?? [];
|
||||
const attrs = items.map(id => this.accessAttributes(id)).filter(isNotNil);
|
||||
return map(attrs, data => this.toModel(data));
|
||||
const inMemory = items
|
||||
.map(id => this.accessAttributes(id))
|
||||
.filter(isNotNil)
|
||||
.find(predicate);
|
||||
|
||||
if (inMemory != null) {
|
||||
return inMemory;
|
||||
}
|
||||
|
||||
log.info(`findBySentAt(${sentAt}): db lookup needed`);
|
||||
const allOnDisk = await DataReader.getMessagesBySentAt(sentAt);
|
||||
const onDisk = allOnDisk.find(predicate);
|
||||
|
||||
if (onDisk != null) {
|
||||
this.addMessageToCache(onDisk);
|
||||
}
|
||||
return onDisk;
|
||||
}
|
||||
|
||||
// Marks cached model as "should be stale" to discourage continued use.
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue