remove unused contact field on message

This commit is contained in:
Audric Ackermann 2021-06-10 09:58:30 +10:00
parent c1225b3a74
commit 03fe67b974
No known key found for this signature in database
GPG Key ID: 999F434D76324AD4
7 changed files with 5 additions and 145 deletions

View File

@ -1,98 +0,0 @@
const { omit, compact, map } = require('lodash');
const { toLogFormat } = require('./errors');
const { SignalService } = require('../../../ts/protobuf');
const DEFAULT_PHONE_TYPE = SignalService.DataMessage.Contact.Phone.Type.HOME;
exports.parseAndWriteAvatar = upgradeAttachment => async (contact, context = {}) => {
const { message, logger } = context;
const { avatar } = contact;
// This is to ensure that an omit() call doesn't pull in prototype props/methods
const contactShallowCopy = Object.assign({}, contact);
const contactWithUpdatedAvatar =
avatar && avatar.avatar
? Object.assign({}, contactShallowCopy, {
avatar: Object.assign({}, avatar, {
avatar: await upgradeAttachment(avatar.avatar, context),
}),
})
: omit(contactShallowCopy, ['avatar']);
// eliminates empty numbers, emails, and addresses; adds type if not provided
const parsedContact = parseContact(contactWithUpdatedAvatar);
const error = exports._validate(parsedContact, {
messageId: idForLogging(message),
});
if (error) {
logger.error('Contact.parseAndWriteAvatar: contact was malformed.', toLogFormat(error));
}
return parsedContact;
};
function parseContact(contact) {
const boundParsePhone = phoneNumber => parsePhoneItem(phoneNumber);
return Object.assign(
{},
omit(contact, ['avatar', 'number', 'email', 'address']),
parseAvatar(contact.avatar),
createArrayKey('number', compact(map(contact.number, boundParsePhone)))
);
}
function idForLogging(message) {
return `${message.source}.${message.sourceDevice} ${message.sent_at}`;
}
exports._validate = (contact, options = {}) => {
const { messageId } = options;
const { name, number, organization } = contact;
if ((!name || !name.displayName) && !organization) {
return new Error(`Message ${messageId}: Contact had neither 'displayName' nor 'organization'`);
}
if (!number || !number.length) {
return new Error(`Message ${messageId}: Contact had no included numbers`);
}
return null;
};
function parsePhoneItem(item) {
if (!item.value) {
return null;
}
return Object.assign({}, item, {
type: item.type || DEFAULT_PHONE_TYPE,
value: item.value,
});
}
function parseAvatar(avatar) {
if (!avatar) {
return null;
}
return {
avatar: Object.assign({}, avatar, {
isProfile: avatar.isProfile || false,
}),
};
}
function createArrayKey(key, array) {
if (!array || !array.length) {
return null;
}
return {
[key]: array,
};
}

View File

@ -255,7 +255,7 @@ const toVersion5 = exports._withSchemaVersion({
});
const toVersion6 = exports._withSchemaVersion({
schemaVersion: 6,
upgrade: exports._mapContact(Contact.parseAndWriteAvatar(Attachment.migrateDataToFileSystem)),
upgrade: () => {},
});
// IMPORTANT: Weve updated our definition of `initializeAttachmentMetadata`, so
// we need to run it again on existing items that have previously been incorrectly

View File

@ -92,8 +92,10 @@ message DataMessage {
}
message OpenGroupInvitation {
optional string url = 1;
optional string name = 3;
// @required
required string url = 1;
// @required
required string name = 3;
}
message ClosedGroupControlMessage {

View File

@ -259,10 +259,6 @@ export class MessageModel extends Backbone.Model<MessageAttributes> {
window.Whisper.ExpirationTimerOptions.getAbbreviated(expireTimerUpdate.expireTimer || 0)
);
}
const contacts = this.get('contact');
if (contacts && contacts.length) {
return window.Signal.Types.Contact.getName(contacts[0]);
}
return '';
}

View File

@ -32,7 +32,6 @@ export interface MessageAttributes {
group_update?: any;
groupInvitation?: any;
attachments?: any;
contact?: any;
conversationId: string;
errors?: any;
flags?: number;

View File

@ -181,42 +181,6 @@ async function processPreviews(message: MessageModel, convo: ConversationModel):
return addedCount;
}
async function processAvatars(message: MessageModel, convo: ConversationModel): Promise<number> {
let addedCount = 0;
const isOpenGroupV2 = convo.isOpenGroupV2();
const contacts = message.get('contact') || [];
const contact = await Promise.all(
contacts.map(async (item: any, index: any) => {
if (!item.avatar || !item.avatar.avatar) {
return item;
}
addedCount += 1;
const avatarJob = await AttachmentDownloads.addJob(item.avatar.avatar, {
messaeId: message.id,
type: 'contact',
index,
isOpenGroupV2,
});
return {
...item,
avatar: {
...item.avatar,
avatar: avatarJob,
},
};
})
);
message.set({ contact });
return addedCount;
}
async function processQuoteAttachments(
message: MessageModel,
convo: ConversationModel
@ -292,8 +256,6 @@ export async function queueAttachmentDownloads(
count += await processPreviews(message, conversation);
count += await processAvatars(message, conversation);
count += await processQuoteAttachments(message, conversation);
// I don 't think we rely on this for anything

View File

@ -331,7 +331,6 @@ async function handleRegularMessage(
schemaVersion: dataMessage.schemaVersion,
attachments: dataMessage.attachments,
body: dataMessage.body,
contact: dataMessage.contact,
conversationId: conversation.id,
decrypted_at: now,
errors: [],