diff --git a/js/background.js b/js/background.js index 1561e70f824..ca2a59ffaa0 100644 --- a/js/background.js +++ b/js/background.js @@ -15,7 +15,7 @@ 'use strict'; const { Errors, Message } = window.Signal.Types; - const { context: migrationsContext } = window.Signal.Migrations; + const { upgradeMessageSchema } = window.Signal.Migrations; // Implicitly used in `indexeddb-backbonejs-adapter`: // https://github.com/signalapp/Signal-Desktop/blob/4033a9f8137e62ed286170ed5d4941982b1d3a64/components/indexeddb-backbonejs-adapter/backbone-indexeddb.js#L569 @@ -574,8 +574,7 @@ return event.confirm(); } - const upgradedMessage = - await Message.upgradeSchema(data.message, migrationsContext); + const upgradedMessage = await upgradeMessageSchema(data.message); await ConversationController.getOrCreateAndWait( messageDescriptor.id, messageDescriptor.type diff --git a/js/models/conversations.js b/js/models/conversations.js index fc4dbd3b774..72ff8239460 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -10,7 +10,7 @@ window.Whisper = window.Whisper || {}; const { Attachment, Message } = window.Signal.Types; - const { context: migrationContext } = window.Signal.Migrations; + const { upgradeMessageSchema, loadAttachmentData } = window.Signal.Migrations; // TODO: Factor out private and group subclasses of Conversation @@ -618,7 +618,7 @@ now ); - const messageWithSchema = await Message.upgradeSchema({ + const messageWithSchema = await upgradeMessageSchema({ type: 'outgoing', body, conversationId: this.id, @@ -627,7 +627,7 @@ received_at: now, expireTimer: this.get('expireTimer'), recipients: this.getRecipients(), - }, migrationContext); + }); const message = this.messageCollection.add(messageWithSchema); if (this.isPrivate()) { message.set({ destination: this.id }); @@ -657,9 +657,8 @@ profileKey = storage.get('profileKey'); } - const loadData = Attachment.loadData(migrationContext.readAttachmentData); const attachmentsWithData = - await Promise.all(messageWithSchema.attachments.map(loadData)); + await Promise.all(messageWithSchema.attachments.map(loadAttachmentData)); message.send(sendFunction( this.get('id'), body, diff --git a/js/models/messages.js b/js/models/messages.js index fdbcc98e7d1..1022c14280f 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -5,7 +5,7 @@ window.Whisper = window.Whisper || {}; const { Attachment, Message: TypedMessage } = window.Signal.Types; - const { context: migrationContext } = window.Signal.Migrations; + const { deleteAttachmentData } = window.Signal.Migrations; var Message = window.Whisper.Message = Backbone.Model.extend({ database : Whisper.Database, @@ -147,9 +147,7 @@ async onDestroy() { this.revokeImageUrl(); const attachments = this.get('attachments'); - const deleteData = - Attachment.deleteData(migrationContext.deleteAttachmentData); - await Promise.all(attachments.map(deleteData)); + await Promise.all(attachments.map(deleteAttachmentData)); }, /* jshint ignore:end */ /* eslint-disable */ diff --git a/js/views/message_view.js b/js/views/message_view.js index fcde0c155c1..866cba27a8a 100644 --- a/js/views/message_view.js +++ b/js/views/message_view.js @@ -7,7 +7,7 @@ window.Whisper = window.Whisper || {}; const { Attachment } = window.Signal.Types; - const { context: migrationContext } = window.Signal.Migrations; + const { loadAttachmentData } = window.Signal.Migrations; var URL_REGEX = /(^|[\s\n]|)((?:https?|ftp):\/\/[\-A-Z0-9\u00A0-\uD7FF\uE000-\uFDCF\uFDF0-\uFFFD+\u0026\u2019@#\/%?=()~_|!:,.;]*[\-A-Z0-9+\u0026@#\/%=~()_|])/gi; @@ -416,11 +416,10 @@ return this.loadedAttachmentViews; } - const loadData = Attachment.loadData(migrationContext.readAttachmentData); const attachments = this.model.get('attachments') || []; const loadedAttachmentViews = Promise.all(attachments.map(attachment => new Promise(async (resolve) => { - const attachmentWithData = await loadData(attachment); + const attachmentWithData = await loadAttachmentData(attachment); const view = new Whisper.AttachmentView({ model: attachmentWithData, timestamp: this.model.get('sent_at'), diff --git a/preload.js b/preload.js index cc30a4b4e14..15185624259 100644 --- a/preload.js +++ b/preload.js @@ -4,7 +4,9 @@ console.log('preload'); const electron = require('electron'); + const Attachment = require('./js/modules/types/attachment'); const Attachments = require('./app/attachments'); + const Message = require('./js/modules/types/message'); const { app } = electron.remote; @@ -113,25 +115,27 @@ const readAttachmentData = Attachments.readData(attachmentsPath); const writeAttachmentData = Attachments.writeData(attachmentsPath); + // Injected context functions to keep `Message` agnostic from Electron: + const upgradeSchemaContext = { + writeAttachmentData, + }; + const upgradeMessageSchema = message => + Message.upgradeSchema(message, upgradeSchemaContext); + window.Signal = window.Signal || {}; window.Signal.Logs = require('./js/modules/logs'); window.Signal.OS = require('./js/modules/os'); window.Signal.Backup = require('./js/modules/backup'); window.Signal.Crypto = require('./js/modules/crypto'); - - window.Signal.Migrations = window.Signal.Migrations || {}; - // Injected context functions to keep `Message` agnostic from Electron: - window.Signal.Migrations.context = { - deleteAttachmentData, - readAttachmentData, - writeAttachmentData, - }; + window.Signal.Migrations = {}; + window.Signal.Migrations.loadAttachmentData = Attachment.loadData(readAttachmentData); + window.Signal.Migrations.deleteAttachmentData = Attachment.deleteData(deleteAttachmentData); + window.Signal.Migrations.upgradeMessageSchema = upgradeMessageSchema; window.Signal.Migrations.V17 = require('./js/modules/migrations/17'); - window.Signal.Types = window.Signal.Types || {}; - window.Signal.Types.Attachment = require('./js/modules/types/attachment'); + window.Signal.Types.Attachment = Attachment; window.Signal.Types.Errors = require('./js/modules/types/errors'); - window.Signal.Types.Message = require('./js/modules/types/message'); + window.Signal.Types.Message = Message; window.Signal.Types.MIME = require('./js/modules/types/mime'); window.Signal.Types.Settings = require('./js/modules/types/settings');