From 5f73cb8069c0e47b2c66d2e14f888170d1a558bd Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Tue, 23 Jan 2018 13:57:03 -0800 Subject: [PATCH 1/6] v1.2.0 _Note: This release is equivalent to [v1.2.0-beta.2](https://github.com/WhisperSystems/Signal-Desktop/releases/tag/v1.2.0-beta.2). Listed below are the changes from the previous production release: [v1.1.0](https://github.com/WhisperSystems/Signal-Desktop/releases/tag/v1.1.0)_ Update to Electron 1.7.10 (#1919) Fixed: clicking Windows notification would break window out of aero-snap location (#1918) Fixed: forwarded video would not play (#1977) Fixed: conversation was inaccessible if group member had invalid phone number (#1968) Fixed: powershell warning caused cert validation of downloaded update to fail on windows (#1976) Fixed: 'Missing signed prekey' errors after re-link (#1979) Fixed: data older than three days would persist in logs dir (#1945) Fixed: in the middle of send, disabled send field could be edited after click (#1937) Update strings (#1921) Add badge with unread count to the tray icon - thanks @m-pilia (#1934) _Note:_ to try this test feature out, use the `--use-tray-icon` and `--start-in-tray` command-line arguments Dev: - Additional logging for unexpected situations during sort of conversation list (#1969) - Dependency updates, fixes required for successful release (#1966 and #1976) - Log more info along with http errors (#1968) - Fix error to console when verifying contact in standalone mode (#1961) - Remove all built assets from repo (#1955) - Log out information from DOMException when import fails (#1923) - Log clearer messages regarding prekey/signed prekey fetches (#1961) - Make errors more debuggable; capture correct stack, include name (#1944) - Add eslint/mocha with code coverage for non-browser code (#1945) - Revamped github issue and pull request templates, updates to contributing.md/readme.md (#1955 and #1956) - Document building/testing releases in Contributing.md, thanks @veggiedefender (#1867) - Update a number of dependencies to the latest: builder, websocket, spellcheck (#1920) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index e01a4e8a20..e8ade8e93f 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "Signal", "description": "Private messaging from your desktop", "repository": "https://github.com/WhisperSystems/Signal-Desktop.git", - "version": "1.2.0-beta.2", + "version": "1.2.0", "license": "GPL-3.0", "author": { "name": "Open Whisper Systems", From 56932ead998f56aa77ff1889b1d075407cad6d11 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Tue, 30 Jan 2018 14:28:55 -0800 Subject: [PATCH 2/6] v1.3.0 Update to Electron 1.7.11 (#1996) Fixed: Crash during input via Chinese IME on Mac (#1996) Fixed: Expired disappearing messages would sometimes remain in conversation (#1983) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index d2294b80b3..42f6a02b67 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "Signal", "description": "Private messaging from your desktop", "repository": "https://github.com/WhisperSystems/Signal-Desktop.git", - "version": "1.3.0-beta.1", + "version": "1.3.0", "license": "GPL-3.0", "author": { "name": "Open Whisper Systems", From 65787918bc51c912b19fed6433c082997502a381 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Mon, 26 Feb 2018 16:11:45 -0800 Subject: [PATCH 3/6] v1.5.0 _Note: Includes fixes from 1.4.0-beta.1 (never released to production), 1.5.0-beta.1, and one additional pull request (#2072)_ Update electron to 1.7.12 (#2029) New design for import and install flows (#2053) Support for 'light' imports, which bring just messages, contacts and groups (#2053, #2072) Set conversation disappearing messages state and contact block state on initial link (#1980) 'Restart' -> 'Restart Signal' button in update dialog, thanks @StevenXL (#2024) Fixed: If app started offline, conversations would not open (#2064) Fixed: Attached images would sometimes show up rotated improperly (#2040) Fixed: Uncaught Exception: TypeError; 'getSize' (#2061) Fixed: File paths with special characters could be shown in misleading way Fixed: incoming messages sometimes didn't appear at all (#2050) Fixed: 'Cannot find module ./app/locale' error popup when attempting to start another instance of the app on Windows (#2017) Fixed: Setting NODE_ENV environment variable to 'development' would point it at staging servers (#2010) Dev: - Move ESLint environment configuration into `.eslintrc` (#2051) - Sync Protocol Buffers with `libsignal-service-java` (#2046) - Update to libsignal-protocol-javascript v1.3.0 (#2050) - Make our binary comparisons constant time (#2047) - Fix typo in issue template (#2020) - Update to new signal branding (#2018) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 440617cf80..102c854d16 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "Signal", "description": "Private messaging from your desktop", "repository": "https://github.com/signalapp/Signal-Desktop.git", - "version": "1.5.0-beta.1", + "version": "1.5.0", "license": "GPL-3.0", "author": { "name": "Open Whisper Systems", From caa579f3b833fb07fe6928166ade07cc9fbf1287 Mon Sep 17 00:00:00 2001 From: Daniel Gasienica Date: Wed, 28 Feb 2018 20:02:17 -0500 Subject: [PATCH 4/6] Hotfix: Ignore iOS group expire timer sync resets (#2086) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Hotfix: Ignore invalid expire timer sync resets iOS omits `expireTimer` protobuf property to denote disappearing messages have been turned off. However, that doesn’t allow us to distinguish it from old clients that are not aware of this property. This change ignores these invalid values until we consistently use `0` to denote disabled disappearing messages (as Android does). - [x] Ignore non-numeric `expireTimer` values during contact sync. Long-term, we’ll use `0` to denote turning off expire timers. - [x] Log what value `expireTimer` is set to. - [x] Log changes to `expireTimer` in `handleDataMessage` until it uses `ConversationController::updateExpirationTimer`. --- js/background.js | 49 +++++++++++++++++++++++++------------- js/models/conversations.js | 2 ++ js/models/messages.js | 15 ++++++++++++ 3 files changed, 49 insertions(+), 17 deletions(-) diff --git a/js/background.js b/js/background.js index 42d74b8df1..0788764ac9 100644 --- a/js/background.js +++ b/js/background.js @@ -438,17 +438,24 @@ color: details.color, active_at: activeAt, })).then(function() { - // this needs to be inline to get access to conversation model - if (typeof details.expireTimer !== 'undefined') { - var source = textsecure.storage.user.getNumber(); - var receivedAt = Date.now(); - return conversation.updateExpirationTimer( - details.expireTimer, - source, - receivedAt, - {fromSync: true} + const { expireTimer } = details; + const isValidExpireTimer = typeof expireTimer === 'number'; + if (!isValidExpireTimer) { + console.log( + 'Ignore invalid expire timer.', + 'Expected numeric `expireTimer`, got:', expireTimer ); + return; } + + var source = textsecure.storage.user.getNumber(); + var receivedAt = Date.now(); + return conversation.updateExpirationTimer( + expireTimer, + source, + receivedAt, + {fromSync: true} + ); }); }) .then(function() { @@ -498,16 +505,24 @@ } return wrapDeferred(conversation.save(updates)).then(function() { - if (typeof details.expireTimer !== 'undefined') { - var source = textsecure.storage.user.getNumber(); - var receivedAt = Date.now(); - return conversation.updateExpirationTimer( - details.expireTimer, - source, - receivedAt, - {fromSync: true} + const { expireTimer } = details; + const isValidExpireTimer = typeof expireTimer === 'number'; + if (!isValidExpireTimer) { + console.log( + 'Ignore invalid expire timer.', + 'Expected numeric `expireTimer`, got:', expireTimer ); + return; } + + var source = textsecure.storage.user.getNumber(); + var receivedAt = Date.now(); + return conversation.updateExpirationTimer( + expireTimer, + source, + receivedAt, + {fromSync: true} + ); }).then(ev.confirm); }); } diff --git a/js/models/conversations.js b/js/models/conversations.js index 6ed49da82f..63e244ac1f 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -707,6 +707,8 @@ console.log( 'Updating expireTimer for conversation', this.idForLogging(), + 'to', + expireTimer, 'via', source ); diff --git a/js/models/messages.js b/js/models/messages.js index dbde2dd90b..3e7ea0a701 100644 --- a/js/models/messages.js +++ b/js/models/messages.js @@ -457,6 +457,21 @@ message.set({expireTimer: dataMessage.expireTimer}); } + // NOTE: Remove once the above uses + // `Conversation::updateExpirationTimer`: + const { expireTimer } = dataMessage; + const shouldLogExpireTimerChange = + message.isExpirationTimerUpdate() || expireTimer; + if (shouldLogExpireTimerChange) { + console.log( + 'Updating expireTimer for conversation', + conversation.idForLogging(), + 'to', + expireTimer, + 'via `handleDataMessage`' + ); + } + if (!message.isEndSession() && !message.isGroupUpdate()) { if (dataMessage.expireTimer) { if (dataMessage.expireTimer !== conversation.get('expireTimer')) { From 634f1ae9f4ebbcaadb5f077bfe68013b156558e8 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Wed, 28 Feb 2018 17:26:41 -0800 Subject: [PATCH 5/6] Don't pop conversations with timer change to top (#2084) * Don't re-sort conversation list after expiration timer change Now that we respond to the expiration timer included in contact and group sync messages, we need to ensure that this doesn't pop conversations to the top of the list. * Introduce explaining variable for updateLastMessage filter --- js/models/conversations.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/js/models/conversations.js b/js/models/conversations.js index 63e244ac1f..cfb935f866 100644 --- a/js/models/conversations.js +++ b/js/models/conversations.js @@ -675,7 +675,9 @@ return collection.fetchConversation(this.id, 1).then(function() { var lastMessage = collection.at(0); if (lastMessage) { - if (lastMessage.get('type') === 'verified-change') { + var type = lastMessage.get('type'); + var shouldSkipUpdate = type === 'verified-change' || lastMessage.get('expirationTimerUpdate'); + if (shouldSkipUpdate) { return; } this.set({ From e66cdf86e4fe07d2d541f390f1cc61381b803105 Mon Sep 17 00:00:00 2001 From: Scott Nonnenberg Date: Wed, 28 Feb 2018 17:38:48 -0800 Subject: [PATCH 6/6] v1.5.1 Fixed: In some cases contact/group syncs would turn off disappearing messages in all conversations (#2086) Fixed: On initial setup, conversations with disappearing messages enabled would be at the top of the conversation list (#2084) --- package.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/package.json b/package.json index 102c854d16..af82f92bb5 100644 --- a/package.json +++ b/package.json @@ -3,7 +3,7 @@ "productName": "Signal", "description": "Private messaging from your desktop", "repository": "https://github.com/signalapp/Signal-Desktop.git", - "version": "1.5.0", + "version": "1.5.1", "license": "GPL-3.0", "author": { "name": "Open Whisper Systems",