From b1c6a5fe197bb3c73bfbc530f12cbb4aad61577c Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Wed, 1 Aug 2018 12:38:48 -0700 Subject: [PATCH] When updating message schema pre-SQLCipher, use legacy save --- js/background.js | 24 ++++++++++++------------ js/models/messages.js | 3 +++ js/modules/data.js | 7 +++++++ 3 files changed, 22 insertions(+), 12 deletions(-) diff --git a/js/background.js b/js/background.js index d6e18405f..9766e7e38 100644 --- a/js/background.js +++ b/js/background.js @@ -230,7 +230,7 @@ upgradeMessageSchema, maxVersion: MINIMUM_VERSION, BackboneMessage: Whisper.Message, - saveMessage: window.Signal.Data.saveMessage, + saveMessage: window.Signal.Data.saveLegacyMessage, } ); window.log.info( @@ -251,7 +251,7 @@ upgradeMessageSchema, getMessagesNeedingUpgrade: window.Signal.Data.getLegacyMessagesNeedingUpgrade, - saveMessage: window.Signal.Data.saveMessage, + saveMessage: window.Signal.Data.saveLegacyMessage, maxVersion: MINIMUM_VERSION, }); window.log.info('upgradeMessages: upgrade with index', batchWithIndex); @@ -264,6 +264,16 @@ await upgradeMessages(); + const db = await Whisper.Database.open(); + await window.Signal.migrateToSQL({ + db, + clearStores: Whisper.Database.clearStores, + handleDOMException: Whisper.Database.handleDOMException, + }); + + // Note: We are not invoking the second set of IndexedDB migrations because it is + // likely that any future migrations will simply extracting things from IndexedDB. + idleDetector = new IdleDetector(); let isMigrationWithIndexComplete = false; window.log.info( @@ -296,16 +306,6 @@ } }); - const db = await Whisper.Database.open(); - await window.Signal.migrateToSQL({ - db, - clearStores: Whisper.Database.clearStores, - handleDOMException: Whisper.Database.handleDOMException, - }); - - // Note: We are not invoking the second set of IndexedDB migrations because it is - // likely that any future migrations will simply extracting things from IndexedDB. - // These make key operations available to IPC handlers created in preload.js window.Events = { getDeviceName: () => textsecure.storage.user.getDeviceName(), diff --git a/js/models/messages.js b/js/models/messages.js index f77af1a50..400906a69 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -56,6 +56,9 @@ window.hasSignalAccount = number => window.AccountCache[number]; window.Whisper.Message = Backbone.Model.extend({ + // Keeping this for legacy upgrade pre-migrate to SQLCipher + database: Whisper.Database, + storeName: 'messages', initialize(attributes) { if (_.isObject(attributes)) { this.set( diff --git a/js/modules/data.js b/js/modules/data.js index 18a83e51e..e0cc6838d 100644 --- a/js/modules/data.js +++ b/js/modules/data.js @@ -35,6 +35,7 @@ module.exports = { removeDB, saveMessage, + saveLegacyMessage, saveMessages, removeMessage, _removeMessages, @@ -205,6 +206,12 @@ async function saveMessage(data, { forceSave } = {}) { return id; } +async function saveLegacyMessage(data, { Message }) { + const message = new Message(data); + await deferredToPromise(message.save()); + return message.id; +} + async function saveMessages(arrayOfMessages, { forceSave } = {}) { await channels.saveMessages(_cleanData(arrayOfMessages), { forceSave }); }