From d2ef6ba3f52395b93f38833b87b2d50d1962c89f Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 20 Jan 2020 14:27:19 +0000
Subject: [PATCH 01/61] js-sdk 4.0.0-rc.1
---
package.json | 2 +-
yarn.lock | 8 ++++----
2 files changed, 5 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index d4e58c80e4..d24fcd1777 100644
--- a/package.json
+++ b/package.json
@@ -78,7 +78,7 @@
"is-ip": "^2.0.0",
"linkifyjs": "^2.1.6",
"lodash": "^4.17.14",
- "matrix-js-sdk": "3.0.0",
+ "matrix-js-sdk": "4.0.0-rc.1",
"pako": "^1.0.5",
"png-chunks-extract": "^1.0.0",
"prop-types": "^15.5.8",
diff --git a/yarn.lock b/yarn.lock
index 0177629cd8..808721a188 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5732,10 +5732,10 @@ mathml-tag-names@^2.0.1:
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc"
integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==
-matrix-js-sdk@3.0.0:
- version "3.0.0"
- resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-3.0.0.tgz#97908f9eda9eeb3ba0333b7e474c45f2b258e50c"
- integrity sha512-lzUMwJAZHw7Dk0K+rubqe6kEpy4+pJ+qCp8n6lisfdKfMDJXdNCkjiiXRnakM1ZD4PFYK8ju89+NfxlyhAAd4A==
+matrix-js-sdk@4.0.0-rc.1:
+ version "4.0.0-rc.1"
+ resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-4.0.0-rc.1.tgz#160d445364aa8ff36ae4fffb0ebc944f680afa4e"
+ integrity sha512-1tP9fUCU5I4bXQQHuVlKHbpySh71aM6sugVC6L8ikG1ebZuKkAc2tXf1tiHizp3hZadHoTZ1PGH19ZFlKDZ8Qw==
dependencies:
another-json "^0.2.0"
browser-request "^0.3.3"
From 6c8f20df60f2cb1b9dfbe2de434d1c63f89ee9be Mon Sep 17 00:00:00 2001
From: RiotRobot
Date: Mon, 20 Jan 2020 14:34:07 +0000
Subject: [PATCH 02/61] Prepare changelog for v2.0.0-rc.1
---
CHANGELOG.md | 156 +++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 156 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 3ae2711e25..eda0e0e911 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,159 @@
+Changes in [2.0.0-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.0.0-rc.1) (2020-01-20)
+=============================================================================================================
+[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v1.7.6...v2.0.0-rc.1)
+
+BREAKING CHANGES
+================
+ * The react-sdk node module now exports ES6 rather than ES5. If you
+ wish to supports target that aren't compatible with ES6, you
+ will need to transpile the react-sdk to a suitable dialect.
+
+All Changes
+===========
+ * Fix arrows keys moving through edit history
+ [\#3874](https://github.com/matrix-org/matrix-react-sdk/pull/3874)
+ * Fix error about MessagePanel not being available for read markers
+ [\#3867](https://github.com/matrix-org/matrix-react-sdk/pull/3867)
+ * Adjust secret storage to work before sync
+ [\#3864](https://github.com/matrix-org/matrix-react-sdk/pull/3864)
+ * Update from Weblate
+ [\#3872](https://github.com/matrix-org/matrix-react-sdk/pull/3872)
+ * Remove unused deps and dev-deps
+ [\#3870](https://github.com/matrix-org/matrix-react-sdk/pull/3870)
+ * Tidy Jest test stuff and dependencies
+ [\#3869](https://github.com/matrix-org/matrix-react-sdk/pull/3869)
+ * Move feature flag check for new session toast
+ [\#3865](https://github.com/matrix-org/matrix-react-sdk/pull/3865)
+ * Catch exception in checkTerms if no ID server
+ [\#3863](https://github.com/matrix-org/matrix-react-sdk/pull/3863)
+ * Catch exception if passphrase dialog cancelled
+ [\#3862](https://github.com/matrix-org/matrix-react-sdk/pull/3862)
+ * Disable key request dialogs with cross-signing
+ [\#3860](https://github.com/matrix-org/matrix-react-sdk/pull/3860)
+ * Toasts for new, unverified sessions
+ [\#3859](https://github.com/matrix-org/matrix-react-sdk/pull/3859)
+ * Check for a matrixclient before trying to use it
+ [\#3861](https://github.com/matrix-org/matrix-react-sdk/pull/3861)
+ * Room header & message box shields now reflect cross-signing state
+ [\#3850](https://github.com/matrix-org/matrix-react-sdk/pull/3850)
+ * Fix Array.concat undefined
+ [\#3857](https://github.com/matrix-org/matrix-react-sdk/pull/3857)
+ * Update chokidar to fix reskindex not working
+ [\#3856](https://github.com/matrix-org/matrix-react-sdk/pull/3856)
+ * Make the new DM invite dialog work for regular invites too
+ [\#3854](https://github.com/matrix-org/matrix-react-sdk/pull/3854)
+ * Fix event handler leak in MemberStatusMessageAvatar
+ [\#3855](https://github.com/matrix-org/matrix-react-sdk/pull/3855)
+ * Move DM creation logic into DMInviteDialog
+ [\#3843](https://github.com/matrix-org/matrix-react-sdk/pull/3843)
+ * Remove all text when cutting in the composer
+ [\#3848](https://github.com/matrix-org/matrix-react-sdk/pull/3848)
+ * Add a ToastStore
+ [\#3853](https://github.com/matrix-org/matrix-react-sdk/pull/3853)
+ * 'Members' button always toggle the right panel
+ [\#3804](https://github.com/matrix-org/matrix-react-sdk/pull/3804)
+ * Fix timing of when Composer considers itself to be modified
+ [\#3842](https://github.com/matrix-org/matrix-react-sdk/pull/3842)
+ * Compute download file icon immediately
+ [\#3851](https://github.com/matrix-org/matrix-react-sdk/pull/3851)
+ * Fix not being able to open profiles from the timeline
+ [\#3852](https://github.com/matrix-org/matrix-react-sdk/pull/3852)
+ * Add post-login complete security flow
+ [\#3847](https://github.com/matrix-org/matrix-react-sdk/pull/3847)
+ * Added cut/copy and pasting user pills from editor.
+ [\#3828](https://github.com/matrix-org/matrix-react-sdk/pull/3828)
+ * Fix imports for help & support tab
+ [\#3846](https://github.com/matrix-org/matrix-react-sdk/pull/3846)
+ * Humanize the recent DM rooms ourselves for translations
+ [\#3841](https://github.com/matrix-org/matrix-react-sdk/pull/3841)
+ * Improve the quality of invite suggestions by filtering out DMs
+ [\#3840](https://github.com/matrix-org/matrix-react-sdk/pull/3840)
+ * Fix linter and tests on develop
+ [\#3845](https://github.com/matrix-org/matrix-react-sdk/pull/3845)
+ * Fix sourcemaps by refactoring the build system
+ [\#3839](https://github.com/matrix-org/matrix-react-sdk/pull/3839)
+ * Don't error on unverified/unknown devices.
+ [\#3837](https://github.com/matrix-org/matrix-react-sdk/pull/3837)
+ * Padlock icons in room header
+ [\#3835](https://github.com/matrix-org/matrix-react-sdk/pull/3835)
+ * Don't allow upgrade from untrusted key backup.
+ [\#3822](https://github.com/matrix-org/matrix-react-sdk/pull/3822)
+ * Emoji verification: Change name of đ to lock
+ [\#3825](https://github.com/matrix-org/matrix-react-sdk/pull/3825)
+ * Room padlock decorations only if cross-signing is enabled
+ [\#3838](https://github.com/matrix-org/matrix-react-sdk/pull/3838)
+ * Enable end-to-end tests for sourcemaps (+Windows instructions)
+ [\#3827](https://github.com/matrix-org/matrix-react-sdk/pull/3827)
+ * Repair community member info panel
+ [\#3832](https://github.com/matrix-org/matrix-react-sdk/pull/3832)
+ * Add feature flag around the presence indicator in room list
+ [\#3831](https://github.com/matrix-org/matrix-react-sdk/pull/3831)
+ * Display a padlock icon beside invite-only rooms in the room list
+ [\#3821](https://github.com/matrix-org/matrix-react-sdk/pull/3821)
+ * Update from Weblate
+ [\#3830](https://github.com/matrix-org/matrix-react-sdk/pull/3830)
+ * Fix listener leak on RoomView
+ [\#3826](https://github.com/matrix-org/matrix-react-sdk/pull/3826)
+ * Regenerate i18n for sourcemaps branch
+ [\#3824](https://github.com/matrix-org/matrix-react-sdk/pull/3824)
+ * Fix tests for sourcemaps branch
+ [\#3823](https://github.com/matrix-org/matrix-react-sdk/pull/3823)
+ * Jest
+ [\#3724](https://github.com/matrix-org/matrix-react-sdk/pull/3724)
+ * Sourcemaps: develop -> feature branch
+ [\#3817](https://github.com/matrix-org/matrix-react-sdk/pull/3817)
+ * Support pasting a bunch of identifiers into the invite dialog
+ [\#3820](https://github.com/matrix-org/matrix-react-sdk/pull/3820)
+ * Support 3PIDs (email addresses) in the invite dialog
+ [\#3819](https://github.com/matrix-org/matrix-react-sdk/pull/3819)
+ * Placeholder PR for cleaner diffs: ES6
+ [\#3765](https://github.com/matrix-org/matrix-react-sdk/pull/3765)
+ * Misc fixes for ES6 imports/exports
+ [\#3766](https://github.com/matrix-org/matrix-react-sdk/pull/3766)
+ * Wire up the invite targets dialog to a real composer and show selections
+ [\#3815](https://github.com/matrix-org/matrix-react-sdk/pull/3815)
+ * Change ref handling in TextualBody to prevent it parsing generated nodes
+ [\#3711](https://github.com/matrix-org/matrix-react-sdk/pull/3711)
+ * Render encoded html entities in og:description
+ [\#3789](https://github.com/matrix-org/matrix-react-sdk/pull/3789)
+ * Update package.json for new build process + cosmetics
+ [\#3767](https://github.com/matrix-org/matrix-react-sdk/pull/3767)
+ * Convert CommonJS exports to ES6 exports
+ [\#3761](https://github.com/matrix-org/matrix-react-sdk/pull/3761)
+ * Round 2 of CommonJS to ES6 imports
+ [\#3764](https://github.com/matrix-org/matrix-react-sdk/pull/3764)
+ * Strip all variation selectors on emoji
+ [\#3814](https://github.com/matrix-org/matrix-react-sdk/pull/3814)
+ * Use the new js-sdk imports and import from src
+ [\#3763](https://github.com/matrix-org/matrix-react-sdk/pull/3763)
+ * Convert many imports to handle ES6 exports
+ [\#3762](https://github.com/matrix-org/matrix-react-sdk/pull/3762)
+ * Fix userinfo for users not in the room
+ [\#3812](https://github.com/matrix-org/matrix-react-sdk/pull/3812)
+ * Attempt to fix e2e tests
+ [\#3811](https://github.com/matrix-org/matrix-react-sdk/pull/3811)
+ * Add bunch of null-guards and similar to fix React Errors/complaints
+ [\#3752](https://github.com/matrix-org/matrix-react-sdk/pull/3752)
+ * Delegate all room alias validation to the RoomAliasField validator
+ [\#3807](https://github.com/matrix-org/matrix-react-sdk/pull/3807)
+ * Support filtering and searching for users to invite in DMs
+ [\#3802](https://github.com/matrix-org/matrix-react-sdk/pull/3802)
+ * Add suggestions for which users to invite to chat
+ [\#3801](https://github.com/matrix-org/matrix-react-sdk/pull/3801)
+ * Use `flex-start` instead of `start` for postcss
+ [\#3760](https://github.com/matrix-org/matrix-react-sdk/pull/3760)
+ * Define getLanguageFromBrowser() for LanguageDropdown
+ [\#3769](https://github.com/matrix-org/matrix-react-sdk/pull/3769)
+ * Introduce babel's export-default-from plugin to fix build errors
+ [\#3768](https://github.com/matrix-org/matrix-react-sdk/pull/3768)
+ * Add a bit of debugging to incorrect components in the Skinner
+ [\#3770](https://github.com/matrix-org/matrix-react-sdk/pull/3770)
+ * [BREAKING] Refactor the entire build process for babel@7 and TypeScript
+ (chunk 1 of many)
+ [\#3722](https://github.com/matrix-org/matrix-react-sdk/pull/3722)
+ * Implementation of new potential skinning mechanism
+ [\#3723](https://github.com/matrix-org/matrix-react-sdk/pull/3723)
+
Changes in [1.7.6](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v1.7.6) (2020-01-13)
===================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v1.7.6-rc.2...v1.7.6)
From 4ee2fce1f11946fa48f84eb300bdfa1b195d0009 Mon Sep 17 00:00:00 2001
From: RiotRobot
Date: Mon, 20 Jan 2020 14:34:07 +0000
Subject: [PATCH 03/61] v2.0.0-rc.1
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index d24fcd1777..b607ed04ca 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "matrix-react-sdk",
- "version": "1.7.6",
+ "version": "2.0.0-rc.1",
"description": "SDK for matrix.org using React",
"author": "matrix.org",
"repository": {
From 8df07334c34ca39898bddf02deb9af96ac0859b1 Mon Sep 17 00:00:00 2001
From: random
Date: Mon, 20 Jan 2020 11:00:28 +0000
Subject: [PATCH 04/61] Translated using Weblate (Italian)
Currently translated at 100.0% (2035 of 2035 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/
---
src/i18n/strings/it.json | 21 ++++++++++++++++++++-
1 file changed, 20 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json
index bb35bd6d69..a519c138b1 100644
--- a/src/i18n/strings/it.json
+++ b/src/i18n/strings/it.json
@@ -2055,5 +2055,24 @@
"Key Backup is enabled on your account but has not been set up from this session. To set up secret storage, restore your key backup.": "Il Backup Chiavi Ăš attivo sul tuo account ma non Ăš stato impostato da questa sessione. Per impostare un archivio segreto, ripristina il tuo backup chiavi.",
"Restore": "Ripristina",
"Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup": "L'archivio segreto verrĂ impostato usando i dettagli esistenti del backup chiavi. La password dell'archivio segreto e la chiave di recupero saranno le stesse del backup chiavi",
- "Restore your Key Backup": "Ripristina il tuo Backup Chiavi"
+ "Restore your Key Backup": "Ripristina il tuo Backup Chiavi",
+ "New Session": "Nuova sessione",
+ "New invite dialog": "Nuova finestra di invito",
+ "Other users may not trust it": "Altri utenti potrebbero non fidarsi",
+ "Later": "PiĂč tardi",
+ "Failed to invite the following users to chat: %(csvUsers)s": "Impossibile invitare i seguenti utenti alla chat: %(csvUsers)s",
+ "We couldn't create your DM. Please check the users you want to invite and try again.": "Impossibile creare il messaggio diretto. Ricontrolla gli utenti che vuoi invitare e riprova.",
+ "Something went wrong trying to invite the users.": "Qualcosa Ăš andato storto provando ad invitare gli utenti.",
+ "We couldn't invite those users. Please check the users you want to invite and try again.": "Impossibile invitare quegli utenti. Ricontrolla gli utenti che vuoi invitare e riprova.",
+ "Recently Direct Messaged": "Contattati direttamente di recente",
+ "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room .": "Se non riesci a trovare qualcuno, chiedi il nome utente (es. @utente:server.it) o condividi questa stanza .",
+ "Complete security": "Sicurezza completa",
+ "Verify this session to grant it access to encrypted messages.": "Verifica questa sessione per concederle accesso ai messaggi cifrati.",
+ "Start": "Inizia",
+ "Session verified": "Sessione verificata",
+ "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "La tua sessione ora Ăš verificata. Ha accesso ai tuoi messaggi cifrati e gli altri utenti la vedranno come fidata.",
+ "Done": "Fatto",
+ "Without completing security on this device, it wonât have access to encrypted messages.": "Se non completi la sicurezza su questo dispositivo, esso non avrĂ accesso ai messaggi cifrati.",
+ "Go Back": "Torna",
+ "Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup.": "L'archivio segreto verrĂ impostato usando i dettagli del backup chiavi esistente. La password dell'archivio segreto e la chiave di ripristino saranno le stesse del backup chiavi."
}
From d3ae65698f21950f9c4208441d2f3eff963bae8e Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 20 Jan 2020 15:26:34 +0000
Subject: [PATCH 05/61] Add prepublish script
https://github.com/matrix-org/matrix-react-sdk/pull/3723 removed
the prepare script which was how the SDK got built before being
published. Add it back as a more modern prepublish script.
---
package.json | 1 +
1 file changed, 1 insertion(+)
diff --git a/package.json b/package.json
index b607ed04ca..bc99e0eeda 100644
--- a/package.json
+++ b/package.json
@@ -31,6 +31,7 @@
"typings": "./lib/index.d.ts",
"matrix_src_main": "./src/index.js",
"scripts": {
+ "prepublish": "yarn build",
"i18n": "matrix-gen-i18n",
"prunei18n": "matrix-prune-i18n",
"diff-i18n": "cp src/i18n/strings/en_EN.json src/i18n/strings/en_EN_orig.json && ./scripts/gen-i18n.js && node scripts/compare-file.js src/i18n/strings/en_EN_orig.json src/i18n/strings/en_EN.json",
From 71f96770c6d494b8fd8a08ab304d25dc17d7185c Mon Sep 17 00:00:00 2001
From: RiotRobot
Date: Mon, 20 Jan 2020 17:27:00 +0000
Subject: [PATCH 06/61] Prepare changelog for v2.0.0-rc.2
---
CHANGELOG.md | 7 +++++++
1 file changed, 7 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index eda0e0e911..7630231615 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,10 @@
+Changes in [2.0.0-rc.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.0.0-rc.2) (2020-01-20)
+=============================================================================================================
+[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.0.0-rc.1...v2.0.0-rc.2)
+
+ * Add prepublish script
+ [\#3877](https://github.com/matrix-org/matrix-react-sdk/pull/3877)
+
Changes in [2.0.0-rc.1](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.0.0-rc.1) (2020-01-20)
=============================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v1.7.6...v2.0.0-rc.1)
From 4521ef1a7bed272288bf2e63fe673eeedeb0ea40 Mon Sep 17 00:00:00 2001
From: RiotRobot
Date: Mon, 20 Jan 2020 17:27:00 +0000
Subject: [PATCH 07/61] v2.0.0-rc.2
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index bc99e0eeda..9203b20bfa 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "matrix-react-sdk",
- "version": "2.0.0-rc.1",
+ "version": "2.0.0-rc.2",
"description": "SDK for matrix.org using React",
"author": "matrix.org",
"repository": {
From 996d0f1d2074ef76e5c2d111569dd888cb01ab00 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Tue, 21 Jan 2020 08:05:43 +0000
Subject: [PATCH 08/61] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2039 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/
---
src/i18n/strings/zh_Hant.json | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json
index dbd8319b8a..b459fb9306 100644
--- a/src/i18n/strings/zh_Hant.json
+++ b/src/i18n/strings/zh_Hant.json
@@ -2075,5 +2075,9 @@
"Something went wrong trying to invite the users.": "ćšćè©Šéè«äœżçšè
æçŒçéŻèȘ€ă",
"We couldn't invite those users. Please check the users you want to invite and try again.": "æćçĄæłéè«éŁäșäœżçšè
ăè«æȘąæ„æšæłèŠéè«çäœżçšè
䞊ćè©ŠäžæŹĄă",
"Recently Direct Messaged": "æèżćłééçŽæ„èšæŻ",
- "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room .": "ćŠææšæŸäžć°æäșșïŒè«è©ąćä»ćçäœżçšè
ćçš±ïŒçŻäŸïŒ@user:server.comïŒæćäș«æ€è怩柀 ă"
+ "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room .": "ćŠææšæŸäžć°æäșșïŒè«è©ąćä»ćçäœżçšè
ćçš±ïŒçŻäŸïŒ@user:server.comïŒæćäș«æ€è怩柀 ă",
+ "Verify User": "é©èäœżçšè
",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "çșäșæé«ćźć
šæ§ïŒè«ééæȘąæ„æšć
©ćèŁçœźäžçäžæŹĄæ§ä»ŁçąŒäŸé©èæ€äœżçšè
ă",
+ "For maximum security, do this in person.": "çșäșććŸæćŒ·çćźć
šæ§ïŒè«èŠȘèȘéČèĄă",
+ "Start Verification": "éć§é©è"
}
From 961f52924e0c84020b55a3ca45e065541933ec0f Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20C?=
Date: Tue, 21 Jan 2020 10:26:12 +0000
Subject: [PATCH 09/61] Translated using Weblate (French)
Currently translated at 100.0% (2039 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/
---
src/i18n/strings/fr.json | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index d1c4f7379c..abe05e9812 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -2075,5 +2075,9 @@
"Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup.": "Le coffre secret sera configurĂ© en utilisant les dĂ©tails existants de votre sauvegarde de clĂ©s. Votre phrase de passe et votre clĂ© de rĂ©cupĂ©ration seront les mĂȘmes que celles de votre sauvegarde de clĂ©s.",
"New Session": "Nouvelle session",
"Other users may not trust it": "Dâautres utilisateurs pourraient ne pas lui faire confiance",
- "Later": "Plus tard"
+ "Later": "Plus tard",
+ "Verify User": "VĂ©rifier lâutilisateur",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "Pour une meilleure sécurité, vérifiez cet utilisateur en comparant un code à usage unique sur vos deux appareils.",
+ "For maximum security, do this in person.": "Pour une sécurité maximale, faites-le en personne.",
+ "Start Verification": "Commencer la vérification"
}
From 21dea189855ec027cd4bf8a3f1768aca62f83c52 Mon Sep 17 00:00:00 2001
From: Szimszon
Date: Mon, 20 Jan 2020 20:29:42 +0000
Subject: [PATCH 10/61] Translated using Weblate (Hungarian)
Currently translated at 100.0% (2039 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/
---
src/i18n/strings/hu.json | 8 ++++++--
1 file changed, 6 insertions(+), 2 deletions(-)
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index e5b9f637f1..c5334c1592 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -1156,7 +1156,7 @@
"Show avatars in user and room mentions": "ProfilkĂ©p mutatĂĄsa a felhasznĂĄlĂł Ă©s szoba emlĂtĂ©seknĂ©l",
"Enable big emoji in chat": "Nagy Emojik engedélyezése a csevegésekben",
"Send typing notifications": "GĂ©pelĂ©s visszajelzĂ©s kĂŒldĂ©se",
- "Enable Community Filter Panel": "KözössĂ©gi szƱrĆ panel engedĂ©lyezĂ©se",
+ "Enable Community Filter Panel": "KözössĂ©gi szƱrĆ panel bekapcsolĂĄsa",
"Messages containing my username": "Ăzenetek amik a nevemet tartalmazzĂĄk",
"The other party cancelled the verification.": "A mĂĄsik fĂ©l törölte az ellenĆrzĂ©st.",
"Verified!": "EllenĆrizve!",
@@ -2076,5 +2076,9 @@
"Something went wrong trying to invite the users.": "Valami nem sikerĂŒlt a felhasznĂĄlĂłk meghĂvĂĄsĂĄval.",
"We couldn't invite those users. Please check the users you want to invite and try again.": "Ezeket a felhasznĂĄlĂłkat nem tudtuk meghĂvni. EllenĆrizd azokat a felhasznĂĄlĂłkat akiket meg szeretnĂ©l hĂvni Ă©s prĂłbĂĄld Ășjra.",
"Recently Direct Messaged": "NemrĂ©g kĂŒldött Közvetlen Ăzenetek",
- "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room .": "Ha nem talålsz valakit, akkor kérdezd meg a felhasznålói nevét (pl.: @felhasznåló:szerver.com) vagy oszd meg ezt a szobåt ."
+ "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room .": "Ha nem talålsz valakit, akkor kérdezd meg a felhasznålói nevét (pl.: @felhasznåló:szerver.com) vagy oszd meg ezt a szobåt .",
+ "Verify User": "FelhasznĂĄlĂł ellenĆrzĂ©se",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "A biztonsĂĄg fokozĂĄsĂĄĂ©rt ellenĆrizd ezt a felhasznĂĄlĂłt egy egyszeri kĂłd egyeztetĂ©sĂ©vel mindkettĆtök kĂ©szĂŒlĂ©kĂ©n.",
+ "For maximum security, do this in person.": "A legnagyobb biztonsåg érdekében ezt személyesen tedd meg.",
+ "Start Verification": "EllenĆrzĂ©s elindĂtĂĄsa"
}
From 46f2c1f29b3a5ec9551b302a29e9aff317f120a5 Mon Sep 17 00:00:00 2001
From: Makoto Kato
Date: Tue, 21 Jan 2020 06:51:42 +0000
Subject: [PATCH 11/61] Translated using Weblate (Japanese)
Currently translated at 60.1% (1226 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/ja/
---
src/i18n/strings/ja.json | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/i18n/strings/ja.json b/src/i18n/strings/ja.json
index 55cc8782ef..787dcbc4ca 100644
--- a/src/i18n/strings/ja.json
+++ b/src/i18n/strings/ja.json
@@ -601,7 +601,7 @@
"Copied!": "ăłăăŒăăăŸăă!",
"Failed to copy": "ăłăăŒă«ć€±æăăŸăă",
"Add an Integration": "ç”±ćăèżœć ăă",
- "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "ă”ăŒăăăŒăăŁăźă”ă€ăă«ç§»ćăăŠă%(integationsUrl)s ă§äœżçšăăăăă«ăąă«ăŠăłăăèȘ蚌ă§ăăăăă«ăȘăăŸăăç¶èĄăăŸăăïŒ",
+ "You are about to be taken to a third-party site so you can authenticate your account for use with %(integrationsUrl)s. Do you wish to continue?": "ă”ăŒăăăŒăăŁăźă”ă€ăă«ç§»ćăăŠă%(integrationsUrl)s ă§äœżçšăăăăă«ăąă«ăŠăłăăèȘ蚌ă§ăăăăă«ăȘăăŸăăç¶èĄăăŸăăïŒ",
"Removed or unknown message type": "ćé€ăăăăŸăăŻæȘç„ăźăĄăă»ăŒăžăżă€ă",
"Message removed by %(userId)s": "%(userId)s ă«ăăŁăŠăĄăă»ăŒăžăćé€ăăăŸăă",
"Message removed": "ăĄăă»ăŒăžăćé€ăăă",
@@ -630,7 +630,7 @@
"Are you sure you want to remove '%(roomName)s' from %(groupId)s?": "%(roomName)s ă %(groupId)s ăăćé€ăăŠăăăăăă§ăă?",
"Removing a room from the community will also remove it from the community page.": "ăłăă„ăăăŁăăéšć±ăćé€ăăăšăăłăă„ăăăŁăăŒăžăăăăăźéšć±ăćé€ăăăŸăă",
"Failed to remove room from community": "ăłăă„ăăăŁăăăźéšć±ăźćé€ă«ć€±æăăŸăă",
- "Failed to remove '%(roomName)s' from %(groupId)s": "%(groupName)s ăă '%(roomName)s' ăćé€ă§ăăŸăăă§ăă",
+ "Failed to remove '%(roomName)s' from %(groupId)s": "%(groupId)s ăă '%(roomName)s' ăćé€ă§ăăŸăăă§ăă",
"Something went wrong!": "äœăăééăŁăŠăă!",
"The visibility of '%(roomName)s' in %(groupId)s could not be updated.": "%(groupId)s ăź '%(roomName)s' ăźèĄšç€șăæŽæ°ă§ăăŸăăă§ăăă",
"Visibility in Room List": "ă«ăŒă ăȘăčăăźćŻèŠæ§",
@@ -668,7 +668,7 @@
"%(severalUsers)sjoined %(count)s times|one": "%(severalUsers)s ăćć ăăŸăă",
"%(oneUser)sjoined %(count)s times|other": "%(oneUser)s ă %(count)s ććć ăăŸăă",
"%(oneUser)sjoined %(count)s times|one": "%(oneUser)s ăćć ăăŸăă",
- "%(severalUsers)sleft %(count)s times|other": "%(severalUers)s 㯠%(count)s ćéćșăăŸăă",
+ "%(severalUsers)sleft %(count)s times|other": "%(severalUsers)s 㯠%(count)s ćéćșăăŸăă",
"%(severalUsers)sleft %(count)s times|one": "%(severalUsers)s ăŻéćșăăŸăă",
"%(oneUser)sleft %(count)s times|other": "%(oneUser)s 㯠%(count)s ćéćșăăŸăă",
"%(oneUser)sleft %(count)s times|one": "%(oneUser)s ăŻéćșăăŸăă",
From b5d5f4e13a8291d27479eb01d39e12ab2948ab6f Mon Sep 17 00:00:00 2001
From: catborise
Date: Mon, 20 Jan 2020 18:09:12 +0000
Subject: [PATCH 12/61] Translated using Weblate (Turkish)
Currently translated at 70.0% (1428 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/
---
src/i18n/strings/tr.json | 20 +++++++++++++++++++-
1 file changed, 19 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json
index 81f0522922..1e92d28586 100644
--- a/src/i18n/strings/tr.json
+++ b/src/i18n/strings/tr.json
@@ -1422,5 +1422,23 @@
"Enable Community Filter Panel": "Toluluk Filtre Panelini Aç",
"Match system theme": "Sistem temasıyla eĆle",
"Allow Peer-to-Peer for 1:1 calls": "1:1 çaÄrılar için eĆten-eĆe izin ver",
- "Missing media permissions, click the button below to request.": "Medya izinleri eksik, alttaki butona tıkayarak talep edin."
+ "Missing media permissions, click the button below to request.": "Medya izinleri eksik, alttaki butona tıkayarak talep edin.",
+ "Credits": "Katkıda Bulunanlar",
+ "Clear cache and reload": "BelleÄi temizle ve yeniden yĂŒkle",
+ "Customise your experience with experimental labs features. Learn more .": "Deneysel laboratuar özellikler ile deneyiminizi özelleĆtirebilirsiniz. Daha fazla .",
+ "Ignored/Blocked": "Yoksayılan/Bloklanan",
+ "Error adding ignored user/server": "Yoksayılan kullanıcı/sunucu eklenirken hata",
+ "Error subscribing to list": "Listeye abone olunurken hata",
+ "Error removing ignored user/server": "Yoksayılan kullanıcı/sunucu silinirken hata",
+ "Error unsubscribing from list": "Listeden abonelikten çıkılırken hata",
+ "You are not subscribed to any lists": "Herhangi bir listeye aboneliÄiniz bulunmuyor",
+ "â These settings are meant for advanced users.": "â Bu ayarlar ileri dĂŒzey kullanıcılar içindir.",
+ "Unignore": "Yoksayma",
+ "This bridge was provisioned by ": "Bu körpĂŒ tarafından provize edildi",
+ "Connected to on ": " aÄındaki kanala baÄlandı",
+ "Below is a list of bridges connected to this room.": "Bu odaya baÄlanmÄ±Ć köprĂŒlerin bir listesi alttadır.",
+ "Change room avatar": "Oda resmini deÄiĆtir",
+ "Members only (since the point in time of selecting this option)": "Sadece ĂŒyeler ( bu seçeneÄi seçtiÄinizden itibaren)",
+ "Unable to revoke sharing for email address": "E-posta adresi paylaĆımı kaldırılamadı",
+ "Unable to revoke sharing for phone number": "Telefon numarası paylaĆımı kaldırılamıyor"
}
From 931c0885de5db562d24a5c3fc451a4296fbaf69f Mon Sep 17 00:00:00 2001
From: catborise
Date: Tue, 21 Jan 2020 17:06:26 +0000
Subject: [PATCH 13/61] Translated using Weblate (Turkish)
Currently translated at 70.7% (1440 of 2038 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/
---
src/i18n/strings/tr.json | 14 +++++++++++++-
1 file changed, 13 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json
index 1e92d28586..5d83ff5b06 100644
--- a/src/i18n/strings/tr.json
+++ b/src/i18n/strings/tr.json
@@ -1440,5 +1440,17 @@
"Change room avatar": "Oda resmini deÄiĆtir",
"Members only (since the point in time of selecting this option)": "Sadece ĂŒyeler ( bu seçeneÄi seçtiÄinizden itibaren)",
"Unable to revoke sharing for email address": "E-posta adresi paylaĆımı kaldırılamadı",
- "Unable to revoke sharing for phone number": "Telefon numarası paylaĆımı kaldırılamıyor"
+ "Unable to revoke sharing for phone number": "Telefon numarası paylaĆımı kaldırılamıyor",
+ "Where this page includes identifiable information, such as a room, user or group ID, that data is removed before being sent to the server.": "Bu sayfadaki oda, kullanıcı veya grup ID si gibi betimleyici bilgiler sunucuya gönderilmeden önce silindi.",
+ "Please ask the administrator of your homeserver (%(homeserverDomain)s
) to configure a TURN server in order for calls to work reliably.": "ĂaÄrıların saÄlıklı bir Ćekide yapılabilmesi için lĂŒtfen anasunucunuzun (%(homeserverDomain)s
) yöneticisinden bir TURN sunucusu yapılandırmasını isteyin.",
+ "%(severalUsers)schanged their name %(count)s times|other": "%(severalUsers)s kullanıcıları isimlerini %(count)s kez deÄiĆtirdiler",
+ "%(oneUser)schanged their name %(count)s times|other": "%(oneUser)s ismini %(count)s kez deÄiĆtirdi",
+ "%(severalUsers)smade no changes %(count)s times|one": "%(severalUsers)s deÄiĆiklik yapmadı",
+ "%(oneUser)smade no changes %(count)s times|other": "%(oneUser)s %(count)s kez deÄiĆiklik yapmadı",
+ "%(oneUser)smade no changes %(count)s times|one": "%(oneUser)s deÄiĆiklik yapmadı",
+ "Room alias": "Oda lakabı",
+ "Please provide a room alias": "LĂŒtfen bir oda lakabı belirtin",
+ "This alias is available to use": "Bu lakap kullanmaya uygun",
+ "This alias is already in use": "Bu lakap zaten kullanımda",
+ "And %(count)s more...|other": "ve %(count)s kez daha..."
}
From 78f7622fc59e3a393f9485e82fd5c8da179065db Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Wed, 22 Jan 2020 01:55:12 +0000
Subject: [PATCH 14/61] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2039 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/
---
src/i18n/strings/zh_Hant.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json
index b459fb9306..694d5e3d84 100644
--- a/src/i18n/strings/zh_Hant.json
+++ b/src/i18n/strings/zh_Hant.json
@@ -2079,5 +2079,6 @@
"Verify User": "é©èäœżçšè
",
"For extra security, verify this user by checking a one-time code on both of your devices.": "çșäșæé«ćźć
šæ§ïŒè«ééæȘąæ„æšć
©ćèŁçœźäžçäžæŹĄæ§ä»ŁçąŒäŸé©èæ€äœżçšè
ă",
"For maximum security, do this in person.": "çșäșććŸæćŒ·çćźć
šæ§ïŒè«èŠȘèȘéČèĄă",
- "Start Verification": "éć§é©è"
+ "Start Verification": "éć§é©è",
+ "Encrypted by a deleted device": "èą«ć·ČćȘé€çèŁçœźć ćŻ"
}
From d92ddebe5a1a8f5b24c40800e1fdaae5fbec7910 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20C?=
Date: Wed, 22 Jan 2020 07:34:43 +0000
Subject: [PATCH 15/61] Translated using Weblate (French)
Currently translated at 100.0% (2039 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/
---
src/i18n/strings/fr.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index abe05e9812..8fda9e458e 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -2079,5 +2079,6 @@
"Verify User": "VĂ©rifier lâutilisateur",
"For extra security, verify this user by checking a one-time code on both of your devices.": "Pour une meilleure sécurité, vérifiez cet utilisateur en comparant un code à usage unique sur vos deux appareils.",
"For maximum security, do this in person.": "Pour une sécurité maximale, faites-le en personne.",
- "Start Verification": "Commencer la vérification"
+ "Start Verification": "Commencer la vérification",
+ "Encrypted by a deleted device": "Chiffré par un appareil supprimé"
}
From e923fdb1498e5cf3effcdbf2da3101510042dde1 Mon Sep 17 00:00:00 2001
From: Szimszon
Date: Tue, 21 Jan 2020 20:54:31 +0000
Subject: [PATCH 16/61] Translated using Weblate (Hungarian)
Currently translated at 100.0% (2039 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/
---
src/i18n/strings/hu.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index c5334c1592..f6c85e1674 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -2080,5 +2080,6 @@
"Verify User": "FelhasznĂĄlĂł ellenĆrzĂ©se",
"For extra security, verify this user by checking a one-time code on both of your devices.": "A biztonsĂĄg fokozĂĄsĂĄĂ©rt ellenĆrizd ezt a felhasznĂĄlĂłt egy egyszeri kĂłd egyeztetĂ©sĂ©vel mindkettĆtök kĂ©szĂŒlĂ©kĂ©n.",
"For maximum security, do this in person.": "A legnagyobb biztonsåg érdekében ezt személyesen tedd meg.",
- "Start Verification": "EllenĆrzĂ©s elindĂtĂĄsa"
+ "Start Verification": "EllenĆrzĂ©s elindĂtĂĄsa",
+ "Encrypted by a deleted device": "Egy mĂĄr törölt eszköz titkosĂtotta"
}
From 5571164fe0c842fce6b0701b8f54622a0e09e52e Mon Sep 17 00:00:00 2001
From: random
Date: Wed, 22 Jan 2020 11:29:25 +0000
Subject: [PATCH 17/61] Translated using Weblate (Italian)
Currently translated at 100.0% (2039 of 2039 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/
---
src/i18n/strings/it.json | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json
index a519c138b1..d6ebc985fb 100644
--- a/src/i18n/strings/it.json
+++ b/src/i18n/strings/it.json
@@ -2074,5 +2074,10 @@
"Done": "Fatto",
"Without completing security on this device, it wonât have access to encrypted messages.": "Se non completi la sicurezza su questo dispositivo, esso non avrĂ accesso ai messaggi cifrati.",
"Go Back": "Torna",
- "Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup.": "L'archivio segreto verrĂ impostato usando i dettagli del backup chiavi esistente. La password dell'archivio segreto e la chiave di ripristino saranno le stesse del backup chiavi."
+ "Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup.": "L'archivio segreto verrĂ impostato usando i dettagli del backup chiavi esistente. La password dell'archivio segreto e la chiave di ripristino saranno le stesse del backup chiavi.",
+ "Encrypted by a deleted device": "Cifrato da un dispositivo eliminato",
+ "Verify User": "Verifica utente",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "Per maggiore sicurezza, verifica questo utente controllando un codice univoco sui vostri dispositivi.",
+ "For maximum security, do this in person.": "Per massima sicurezza, fatelo di persona.",
+ "Start Verification": "Inizia la verifica"
}
From cf5673be17de09afecc33450fb5b769ed967ab0d Mon Sep 17 00:00:00 2001
From: Szimszon
Date: Wed, 22 Jan 2020 16:04:17 +0000
Subject: [PATCH 18/61] Translated using Weblate (Hungarian)
Currently translated at 100.0% (2042 of 2042 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/
---
src/i18n/strings/hu.json | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index f6c85e1674..fa7528a397 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -2081,5 +2081,10 @@
"For extra security, verify this user by checking a one-time code on both of your devices.": "A biztonsĂĄg fokozĂĄsĂĄĂ©rt ellenĆrizd ezt a felhasznĂĄlĂłt egy egyszeri kĂłd egyeztetĂ©sĂ©vel mindkettĆtök kĂ©szĂŒlĂ©kĂ©n.",
"For maximum security, do this in person.": "A legnagyobb biztonsåg érdekében ezt személyesen tedd meg.",
"Start Verification": "EllenĆrzĂ©s elindĂtĂĄsa",
- "Encrypted by a deleted device": "Egy mĂĄr törölt eszköz titkosĂtotta"
+ "Encrypted by a deleted device": "Egy mĂĄr törölt eszköz titkosĂtotta",
+ "Unknown Command": "Ismeretlen Parancs",
+ "Unrecognised command: %(commandText)s": "Ismeretlen parancs: %(commandText)s",
+ "You can use /help
to list available commands. Did you mean to send this as a message?": "HasznĂĄlhatod a /help
-et az elĂ©rhetĆ parancsok kilistĂĄzĂĄsĂĄhoz. Ezt ĂŒzenetkĂ©nt akartad kĂŒldeni?",
+ "Hint: Begin your message with //
to start it with a slash.": "Tipp: Ez ĂŒzenetedet kezd ezzel: //
, ha perjellel szeretnéd kezdeni.",
+ "Send as message": "Ăzenet kĂŒldĂ©se"
}
From 78ed8019d49426ee0c80406cc281f256a7b93cf1 Mon Sep 17 00:00:00 2001
From: catborise
Date: Wed, 22 Jan 2020 18:29:10 +0000
Subject: [PATCH 19/61] Translated using Weblate (Turkish)
Currently translated at 72.6% (1482 of 2042 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/
---
src/i18n/strings/tr.json | 46 +++++++++++++++++++++++++++++++++++++++-
1 file changed, 45 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json
index 5d83ff5b06..21ccf03a46 100644
--- a/src/i18n/strings/tr.json
+++ b/src/i18n/strings/tr.json
@@ -1452,5 +1452,49 @@
"Please provide a room alias": "LĂŒtfen bir oda lakabı belirtin",
"This alias is available to use": "Bu lakap kullanmaya uygun",
"This alias is already in use": "Bu lakap zaten kullanımda",
- "And %(count)s more...|other": "ve %(count)s kez daha..."
+ "And %(count)s more...|other": "ve %(count)s kez daha...",
+ "Alternatively, you can try to use the public server at turn.matrix.org
, but this will not be as reliable, and it will share your IP address with that server. You can also manage this in Settings.": "Alternatif olarak,turn.matrix.org
adresindeki herkese açık sunucuyu kullanmayı deneyebilirsiniz. Fakat bu gĂŒvenilir olmayabilir. IP adresiniz bu sunucu ile paylaĆılacaktır. Ayarlardan yönetebilirsiniz.",
+ "An error ocurred whilst trying to remove the widget from the room": "Görsel bileĆen odadan silinmeye çalıĆılırken bir hata oluĆtu",
+ "Minimize apps": "Uygulamaları kĂŒĂ§ĂŒlt",
+ "Maximize apps": "Uygulamaları bĂŒyĂŒlt",
+ "Popout widget": "Görsel bileĆeni göster",
+ "Please create a new issue on GitHub so that we can investigate this bug.": "LĂŒtfen GitHubâda Yeni bir talep oluĆturun ki bu hatayı inceleyebilelim.",
+ "Rotate counter-clockwise": "Saat yönĂŒnĂŒn tersine döndĂŒr",
+ "Language Dropdown": "Dil Listesi",
+ "%(severalUsers)sleft %(count)s times|other": "%(severalUsers)s, %(count)s kez ayrıldı",
+ "%(oneUser)sleft %(count)s times|other": "%(oneUser)s %(count)s kez ayrıldı",
+ "%(severalUsers)sjoined and left %(count)s times|other": "%(severalUsers)s %(count)s kez katılıp ve ayrıldı",
+ "%(oneUser)sjoined and left %(count)s times|other": "%(oneUser)s %(count)s kez katıldı ve ayrıldı",
+ "%(severalUsers)sleft and rejoined %(count)s times|one": "%(severalUsers)s ayrıldı ve yeniden katıldı",
+ "%(severalUsers)srejected their invitations %(count)s times|other": "%(severalUsers)s %(count)s kez davetlerini reddetti",
+ "%(severalUsers)srejected their invitations %(count)s times|one": "%(severalUsers)s davetlerini reddetti",
+ "%(oneUser)srejected their invitation %(count)s times|one": "%(oneUser)s davetlerini reddetti",
+ "%(severalUsers)shad their invitations withdrawn %(count)s times|one": "%(severalUsers)s davetlerini geri çekti",
+ "%(oneUser)shad their invitation withdrawn %(count)s times|other": "%(oneUser)s davetini %(count)s kez geri çekti",
+ "%(oneUser)shad their invitation withdrawn %(count)s times|one": "%(oneUser)s davetini geri çekti",
+ "were banned %(count)s times|other": "%(count)s kez yasaklandı",
+ "were banned %(count)s times|one": "yasaklandı",
+ "was banned %(count)s times|other": "%(count)s kez yasaklandı",
+ "was banned %(count)s times|one": "yasaklandı",
+ "were unbanned %(count)s times|other": "%(count)s kez yasak kaldırıldı",
+ "were unbanned %(count)s times|one": "yasak kaldırıldı",
+ "was unbanned %(count)s times|other": "%(count)s kez yasak kaldırıldı",
+ "was unbanned %(count)s times|one": "yasak kaldırıldı",
+ "%(severalUsers)schanged their avatar %(count)s times|one": "%(severalUsers)s resimlerini deÄiĆtirdiler",
+ "%(oneUser)schanged their avatar %(count)s times|other": "%(oneUser)s %(count)s kez resmini deÄiĆtirdi",
+ "%(oneUser)schanged their avatar %(count)s times|one": "%(oneUser)s resmini deÄiĆtirdi",
+ "%(severalUsers)smade no changes %(count)s times|other": "%(severalUsers)s %(count)s kez hiç bir deÄiĆiklik yapmadı",
+ "Try using one of the following valid address types: %(validTypesList)s.": "Takip eden geçerli adres tiplerinden birini kullanmayı deneyin: %(validTypesList)s.",
+ "Use an identity server to invite by email. Use the default (%(defaultIdentityServerName)s) or manage in Settings .": "E-posta ile davet etmek için bir kimlik sunucusu kullan. Varsayılanı kullan (%(defaultIdentityServerName)s ya da Ayarlar kullanarak yönetin.",
+ "Use an identity server to invite by email. Manage in Settings .": "E-posta ile davet için bir kimlik sunucu kullan. Ayarlar dan yönet.",
+ "The following users may not exist": "Belirtilen kullanıcılar mevcut olmayabilir",
+ "Unable to find profiles for the Matrix IDs listed below - would you like to invite them anyway?": "Altta belirtilen Matrix ID li profiller bulunamıyor - Onları yinede davet etmek ister misiniz?",
+ "Please tell us what went wrong or, better, create a GitHub issue that describes the problem.": "LĂŒtfen neyin yanlÄ±Ć gittiÄini bize bildirin ya da en gĂŒzeli problemi tanımlayan bir GitHub talebi oluĆturun.",
+ "Before submitting logs, you must create a GitHub issue to describe your problem.": "Logları göndermeden önce, probleminizi betimleyen bir GitHub talebi oluĆturun .",
+ "Community IDs may only contain characters a-z, 0-9, or '=_-./'": "Topluluk ID leri sadece a-z, 0-9 ya da '=_-./' karakterlerini içerebilir",
+ "Set a room alias to easily share your room with other people.": "Odanızı diÄer kiĆilerle kolayca paylaĆabilmek için bir oda lakabı ayarların.",
+ "Create a public room": "Halka açık bir oda oluĆturun",
+ "Make this room public": "Bu odayı halka açık yap",
+ "To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Sohbet tarihçesini kaybetmemek için, çıkmadan önce odanızın anahtarlarını dıĆarıya aktarın. Bunu yapabilmek için Riotun daha yeni sĂŒrĂŒmĂŒ gerekli. UlaĆmak için geri gitmeye ihtiyacınız var",
+ "Continue With Encryption Disabled": "Ćifreleme Kapalı Ćekilde Devam Et"
}
From 8218962c37308c472989372e5343fb1f63e113f2 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Thu, 23 Jan 2020 03:45:50 +0000
Subject: [PATCH 20/61] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2042 of 2042 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/
---
src/i18n/strings/zh_Hant.json | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json
index 694d5e3d84..03fbe6f61b 100644
--- a/src/i18n/strings/zh_Hant.json
+++ b/src/i18n/strings/zh_Hant.json
@@ -2080,5 +2080,10 @@
"For extra security, verify this user by checking a one-time code on both of your devices.": "çșäșæé«ćźć
šæ§ïŒè«ééæȘąæ„æšć
©ćèŁçœźäžçäžæŹĄæ§ä»ŁçąŒäŸé©èæ€äœżçšè
ă",
"For maximum security, do this in person.": "çșäșććŸæćŒ·çćźć
šæ§ïŒè«èŠȘèȘéČèĄă",
"Start Verification": "éć§é©è",
- "Encrypted by a deleted device": "èą«ć·ČćȘé€çèŁçœźć ćŻ"
+ "Encrypted by a deleted device": "èą«ć·ČćȘé€çèŁçœźć ćŻ",
+ "Unknown Command": "æȘç„çæ什",
+ "Unrecognised command: %(commandText)s": "çĄæłèć„çæ什ïŒ%(commandText)s",
+ "You can use /help
to list available commands. Did you mean to send this as a message?": "æšćŻä»„äœżçš /help
äŸććșćŻçšçæ什ăæšæŻèŠćłéæ€èšæŻćïŒ",
+ "Hint: Begin your message with //
to start it with a slash.": "æç€șïŒä»„ //
éé èźæšçèšæŻćłéæćŻä»„çšæç·éé ă",
+ "Send as message": "仄èšæŻćłé"
}
From f7ca8a1b845a1ea133a5b715b598f8c3c8323fec Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20C?=
Date: Thu, 23 Jan 2020 08:11:37 +0000
Subject: [PATCH 21/61] Translated using Weblate (French)
Currently translated at 100.0% (2042 of 2042 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/
---
src/i18n/strings/fr.json | 7 ++++++-
1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index 8fda9e458e..472cd02e6f 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -2080,5 +2080,10 @@
"For extra security, verify this user by checking a one-time code on both of your devices.": "Pour une meilleure sécurité, vérifiez cet utilisateur en comparant un code à usage unique sur vos deux appareils.",
"For maximum security, do this in person.": "Pour une sécurité maximale, faites-le en personne.",
"Start Verification": "Commencer la vérification",
- "Encrypted by a deleted device": "Chiffré par un appareil supprimé"
+ "Encrypted by a deleted device": "Chiffré par un appareil supprimé",
+ "Unknown Command": "Commande inconnue",
+ "Unrecognised command: %(commandText)s": "Commande non reconnue : %(commandText)s",
+ "You can use /help
to list available commands. Did you mean to send this as a message?": "Vous pouvez utiliser /help
pour obtenir la liste des commandes disponibles. Vouliez-vous envoyer un message ?",
+ "Hint: Begin your message with //
to start it with a slash.": "Astuce : Votre message doit démarrer par //
pour commencer par une barre oblique.",
+ "Send as message": "Envoyer comme message"
}
From 5d8249507cd685402ce2612d5b94565548022dd3 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Bal=C3=A1zs=20Mesk=C3=B3?=
Date: Thu, 23 Jan 2020 10:11:27 +0000
Subject: [PATCH 22/61] Translated using Weblate (Hungarian)
Currently translated at 100.0% (2042 of 2042 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/
---
src/i18n/strings/hu.json | 10 +++++-----
1 file changed, 5 insertions(+), 5 deletions(-)
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index fa7528a397..da2c015335 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -138,7 +138,7 @@
"Failed to toggle moderator status": "ModerĂĄtor stĂĄtuszt nem sikerĂŒlt ĂĄtĂĄllĂtani",
"Failed to unban": "KizĂĄrĂĄs visszavonĂĄsa sikertelen",
"Failed to upload profile picture!": "Profil kép feltöltése sikertelen!",
- "Failed to verify email address: make sure you clicked the link in the email": "E-mail cĂm ellenĆrzĂ©se sikertelen: ellenĆrizd, hogy az e-mailnĂ©l lĂ©vĆ linkre rĂĄkattintottĂĄl",
+ "Failed to verify email address: make sure you clicked the link in the email": "E-mail cĂm ellenĆrzĂ©se sikertelen: ellenĆrizd, hogy az e-mailben lĂ©vĆ hivatkozĂĄsra kattintottĂĄl",
"Failure to create room": "Szoba létrehozåsa sikertelen",
"Favourites": "Kedvencek",
"Fill screen": "KĂ©pernyĆ kitöltĂ©se",
@@ -355,7 +355,7 @@
"You need to be able to invite users to do that.": "Hogy ezt csinĂĄlhasd meg kell tudnod hĂvni felhasznĂĄlĂłkat.",
"You need to be logged in.": "Be kell jelentkezz.",
"Your email address does not appear to be associated with a Matrix ID on this Homeserver.": "Ez az e-mail cĂm, Ășgy nĂ©z ki, nincs összekötve a Matrix azonosĂtĂłval ezen a Matrix szerveren.",
- "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "A jelszavadat sikeresen megvĂĄltoztattuk. Nem kapsz \"push\" Ă©rtesĂtĂ©seket amĂg a többi eszközön vissza nem jelentkezel",
+ "Your password was successfully changed. You will not receive push notifications on other devices until you log back in to them": "A jelszavadat sikeresen megvĂĄltoztattuk. Addig nem fogsz lekĂŒldĂ©ses Ă©rtesĂtĂ©seket kapni, amĂg a többi eszközön vissza nem jelentkezel",
"You seem to be in a call, are you sure you want to quit?": "Ăgy tƱnik hĂvĂĄsban vagy, biztosan kilĂ©psz?",
"You seem to be uploading files, are you sure you want to quit?": "Ăgy tƱnik fĂĄjlokat töltesz fel, biztosan kilĂ©psz?",
"You will not be able to undo this change as you are promoting the user to have the same power level as yourself.": "Nem leszel képes visszavonni ezt a våltoztatåst mivel a felhasznålót ugyanarra a szintre emeled amin te vagy.",
@@ -451,7 +451,7 @@
"Username available": "Szabad felhasznålói név",
"Username not available": "A felhasznålói név foglalt",
"Something went wrong!": "Valami tönkrement!",
- "If you already have a Matrix account you can log in instead.": "Ha mår van Matrix fiókod akkor beléphetsz helyette.",
+ "If you already have a Matrix account you can log in instead.": "Ha mår van Matrix fiókod, akkor beléphetsz helyette.",
"Your browser does not support the required cryptography extensions": "A böngĂ©szĆd nem tĂĄmogatja a szĂŒksĂ©ges titkosĂtĂĄsi kiterjesztĂ©st",
"Not a valid Riot keyfile": "Nem érvényes Riot kulcsfåjl",
"Authentication check failed: incorrect password?": "AzonosĂtĂĄs sikertelen: hibĂĄs jelszĂł?",
@@ -929,7 +929,7 @@
"To continue using the %(homeserverDomain)s homeserver you must review and agree to our terms and conditions.": "A %(homeserverDomain)s szerver hasznĂĄlatĂĄnak folytatĂĄsĂĄhoz el kell olvasnod Ă©s el kell fogadnod az ĂĄltalĂĄnos szerzĆdĂ©si feltĂ©teleket.",
"Review terms and conditions": "ĂltalĂĄnos SzerzĆdĂ©si FeltĂ©telek elolvasĂĄsa",
"To continue, please enter your password:": "FolytatĂĄshoz add meg a jelszavad:",
- "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible. ": "Ez vĂ©gleg hasznĂĄlhatatlannĂĄ teszi a fiĂłkodat. EzutĂĄn nem fogsz tudni bejelentkezni, Ă©s mĂĄs sem tud majd ezzel az azonosĂtĂłval fiĂłkot lĂ©trehozni. Minden szobĂĄbĂłl amibe belĂ©ptĂ©l ki fogsz lĂ©pni, Ă©s törölni fogja minden fiĂłk adatod az \"identity\" szerverrĆl. Ez a mƱvelet visszafordĂthatatlan. ",
+ "This will make your account permanently unusable. You will not be able to log in, and no one will be able to re-register the same user ID. This will cause your account to leave all rooms it is participating in, and it will remove your account details from your identity server. This action is irreversible. ": "Ez vĂ©gleg hasznĂĄlhatatlannĂĄ teszi a fiĂłkodat. EzutĂĄn nem fogsz tudni bejelentkezni, Ă©s mĂĄs sem tud majd ezzel az azonosĂtĂłval fiĂłkot lĂ©trehozni. Minden szobĂĄbĂłl amibe belĂ©ptĂ©l ki fogsz lĂ©pni, Ă©s törölni fogja minden fiĂłk adatod az szemĂ©lyazonossĂĄgod biztosĂtĂł szerverrĆl. Ez a mƱvelet visszafordĂthatatlan. ",
"Deactivating your account does not by default cause us to forget messages you have sent. If you would like us to forget your messages, please tick the box below.": "A fiĂłkod felfĂŒggesztĂ©se nem jelenti alapĂ©rtelmezetten azt, hogy az ĂĄltalad kĂŒldött ĂŒzenetek elfelejtĆdnek. Ha törölni szeretnĂ©d az ĂĄltalad kĂŒldött ĂŒzeneteket, pipĂĄld be a jelölĆnĂ©gyzetet alul.",
"Message visibility in Matrix is similar to email. Our forgetting your messages means that messages you have sent will not be shared with any new or unregistered users, but registered users who already have access to these messages will still have access to their copy.": "Az ĂŒzenetek lĂĄthatĂłsĂĄga a Matrix-ban hasonlĂt az emailhez. Az ĂĄltalad kĂŒldött ĂŒzenet törlĂ©se azt jelenti, hogy nem osztjuk meg Ășj-, vagy vendĂ©g felhasznĂĄlĂłval de a mĂĄr regisztrĂĄlt felhasznĂĄlĂłk akik mĂĄr hozzĂĄfĂ©rtek az ĂŒzenethez tovĂĄbbra is elĂ©rik a sajĂĄt mĂĄsolatukat.",
"Please forget all messages I have sent when my account is deactivated (Warning: this will cause future users to see an incomplete view of conversations)": "KĂ©rlek töröld az összes ĂĄltalam kĂŒldött ĂŒzenetet amikor a fiĂłkomat felfĂŒggesztem (Figyelem: ez azt eredmĂ©nyezheti, hogy a jövĆbeni felhasznĂĄlĂłk csak rĂ©szleges beszĂ©lgetĂ©st lĂĄtnak majd)",
@@ -1053,7 +1053,7 @@
"Print it and store it somewhere safe": "Nyomtad ki Ă©s tĂĄrold biztonsĂĄgos helyen",
"Save it on a USB key or backup drive": "Mentsd el egy Pendrive-ra vagy a biztonsågi mentésekhez",
"Copy it to your personal cloud storage": "MĂĄsold fel a szemĂ©lyes felhĆdbe",
- "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another device.": "A BiztonsĂĄgos Ăzenet VisszaĂĄllĂtĂĄs beĂĄllĂtĂĄsa nĂ©lkĂŒl ha kijelentkezel vagy mĂĄsik eszközt hasznĂĄlsz, akkor nem tudod visszaĂĄllĂtani a rĂ©gi titkosĂtott ĂŒzeneteidet.",
+ "Without setting up Secure Message Recovery, you won't be able to restore your encrypted message history if you log out or use another device.": "A BiztonsĂĄgos ĂŒzenet-visszaĂĄllĂtĂĄs beĂĄllĂtĂĄsa nĂ©lkĂŒl ha kijelentkezel vagy mĂĄsik eszközt hasznĂĄlsz, akkor nem tudod visszaĂĄllĂtani a rĂ©gi titkosĂtott ĂŒzeneteidet.",
"Set up Secure Message Recovery": "BiztonsĂĄgos Ăzenet VisszaĂĄllĂtĂĄs beĂĄllĂtĂĄsa",
"Keep it safe": "Tartsd biztonsĂĄgban",
"Create Key Backup": "Kulcs mentĂ©s kĂ©szĂtĂ©se",
From 4cff50a11e0e4d4a7c008ac38835010e63aacff4 Mon Sep 17 00:00:00 2001
From: catborise
Date: Thu, 23 Jan 2020 18:29:15 +0000
Subject: [PATCH 23/61] Translated using Weblate (Turkish)
Currently translated at 72.9% (1494 of 2050 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/
---
src/i18n/strings/tr.json | 16 +++++++++++++++-
1 file changed, 15 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json
index 21ccf03a46..2656b00593 100644
--- a/src/i18n/strings/tr.json
+++ b/src/i18n/strings/tr.json
@@ -1496,5 +1496,19 @@
"Create a public room": "Halka açık bir oda oluĆturun",
"Make this room public": "Bu odayı halka açık yap",
"To avoid losing your chat history, you must export your room keys before logging out. You will need to go back to the newer version of Riot to do this": "Sohbet tarihçesini kaybetmemek için, çıkmadan önce odanızın anahtarlarını dıĆarıya aktarın. Bunu yapabilmek için Riotun daha yeni sĂŒrĂŒmĂŒ gerekli. UlaĆmak için geri gitmeye ihtiyacınız var",
- "Continue With Encryption Disabled": "Ćifreleme Kapalı Ćekilde Devam Et"
+ "Continue With Encryption Disabled": "Ćifreleme Kapalı Ćekilde Devam Et",
+ "The file '%(fileName)s' exceeds this homeserver's size limit for uploads": "%(fileName)s dosyası anasunucunun yĂŒkleme boyutu limitini aĆıyor",
+ "Double check that your server supports the room version chosen and try again.": "SeçtiÄiniz oda sĂŒrĂŒmĂŒnĂŒn sunucunuz tarafından desteklenip desteklenmediÄini iki kez kontrol edin ve yeniden deneyin.",
+ "Changes your avatar in this current room only": "Sadece bu odadaki resminizi deÄiĆtirin",
+ "Please supply a https:// or http:// widget URL": "LĂŒtfen bir https:// ya da http:// olarak bir görsel bileĆen URL i belirtin",
+ "Sends the given emote coloured as a rainbow": "Verilen ifadeyi bir gökkuĆaÄı gibi renklendirilmiĆ olarak gönderin",
+ "%(oldDisplayName)s changed their display name to %(displayName)s.": "%(oldDisplayName)s ekran adını %(displayName)s olarak deÄiĆtirdi.",
+ "%(senderDisplayName)s made the room public to whoever knows the link.": "%(senderDisplayName)s odayı adresi bilen herkesin girebileceÄi Ćekilde halka açık hale getirdi.",
+ "%(senderDisplayName)s changed the join rule to %(rule)s": "%(senderDisplayName)s katılma kuralını %(rule)s Ćeklinde deÄiĆtirdi",
+ "%(senderDisplayName)s changed guest access to %(rule)s": "%(senderDisplayName)s misafir eriĆim kuralını %(rule)s Ćeklinde deÄiĆtirdi",
+ "%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s bu odanın ana adresini %(address)s olarak ayarladı.",
+ "%(senderName)s placed a voice call.": "%(senderName)s bir çaÄrı yaptı.",
+ "%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s bir çaÄrı baĆlattı. (Bu tarayıcı tarafından desteklenmiyor)",
+ "%(senderName)s placed a video call.": "%(senderName)s bir görĂŒntĂŒlĂŒ çaÄrı yaptı.",
+ "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s bir görĂŒntĂŒlĂŒ çaÄrı yaptı. (bu tarayıcı tarafından desteklenmiyor)"
}
From 6f6d149a7077064cfa953b33e9ec02891f55dd13 Mon Sep 17 00:00:00 2001
From: Travis Ralston
Date: Thu, 23 Jan 2020 14:59:52 -0700
Subject: [PATCH 24/61] Don't list every single alias when there's many
---
src/TextForEvent.js | 24 ++++++++++++++++++++++++
src/i18n/strings/en_EN.json | 3 +++
2 files changed, 27 insertions(+)
diff --git a/src/TextForEvent.js b/src/TextForEvent.js
index a0d088affb..6a2744109b 100644
--- a/src/TextForEvent.js
+++ b/src/TextForEvent.js
@@ -275,6 +275,8 @@ function textForRoomAliasesEvent(ev) {
// This feels a bit overkill though, and it's not clear the i18n really needs it
// so instead it's landing as a simple textual event.
+ const maxShown = 3;
+
const senderName = ev.sender && ev.sender.name ? ev.sender.name : ev.getSender();
const oldAliases = ev.getPrevContent().aliases || [];
const newAliases = ev.getContent().aliases || [];
@@ -287,18 +289,40 @@ function textForRoomAliasesEvent(ev) {
}
if (addedAliases.length && !removedAliases.length) {
+ if (addedAliases.length > maxShown) {
+ return _t("%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room", {
+ senderName: senderName,
+ count: addedAliases.length - maxShown,
+ addedAddresses: addedAliases.slice(0, maxShown).join(', '),
+ });
+ }
return _t('%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.', {
senderName: senderName,
count: addedAliases.length,
addedAddresses: addedAliases.join(', '),
});
} else if (!addedAliases.length && removedAliases.length) {
+ if (removedAliases.length > maxShown) {
+ return _t("%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room", {
+ senderName: senderName,
+ count: removedAliases.length - maxShown,
+ removedAddresses: removedAliases.slice(0, maxShown).join(', '),
+ });
+ }
return _t('%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.', {
senderName: senderName,
count: removedAliases.length,
removedAddresses: removedAliases.join(', '),
});
} else {
+ const combined = addedAliases.length + removedAliases.length;
+ if (combined > maxShown) {
+ return _t("%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room", {
+ senderName: senderName,
+ countAdded: addedAliases.length,
+ countRemoved: removedAliases.length,
+ });
+ }
return _t(
'%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.', {
senderName: senderName,
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 4af203177c..853cd1f744 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -236,10 +236,13 @@
"%(senderDisplayName)s disabled flair for %(groups)s in this room.": "%(senderDisplayName)s disabled flair for %(groups)s in this room.",
"%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.": "%(senderDisplayName)s enabled flair for %(newGroups)s and disabled flair for %(oldGroups)s in this room.",
"%(senderDisplayName)s sent an image.": "%(senderDisplayName)s sent an image.",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room",
"%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|other": "%(senderName)s added %(addedAddresses)s as addresses for this room.",
"%(senderName)s added %(count)s %(addedAddresses)s as addresses for this room.|one": "%(senderName)s added %(addedAddresses)s as an address for this room.",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room",
"%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|other": "%(senderName)s removed %(removedAddresses)s as addresses for this room.",
"%(senderName)s removed %(count)s %(removedAddresses)s as addresses for this room.|one": "%(senderName)s removed %(removedAddresses)s as an address for this room.",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room",
"%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.": "%(senderName)s added %(addedAddresses)s and removed %(removedAddresses)s as addresses for this room.",
"%(senderName)s set the main address for this room to %(address)s.": "%(senderName)s set the main address for this room to %(address)s.",
"%(senderName)s removed the main address for this room.": "%(senderName)s removed the main address for this room.",
From a330ee186aafd758cc4f6ed274b92f7afe764c65 Mon Sep 17 00:00:00 2001
From: Travis Ralston
Date: Thu, 23 Jan 2020 15:38:06 -0700
Subject: [PATCH 25/61] Move & upgrade babel runtime into dependencies (like it
wants)
https://babeljs.io/docs/en/babel-runtime
---
package.json | 4 ++--
yarn.lock | 42 +++++++++++++++++++++++++++++++++++-------
2 files changed, 37 insertions(+), 9 deletions(-)
diff --git a/package.json b/package.json
index 9203b20bfa..dc619e50ef 100644
--- a/package.json
+++ b/package.json
@@ -54,6 +54,7 @@
"test:e2e": "./test/end-to-end-tests/run.sh --riot-url http://localhost:8080"
},
"dependencies": {
+ "@babel/runtime": "^7.8.3",
"blueimp-canvas-to-blob": "^3.5.0",
"browser-encrypt-attachment": "^0.3.0",
"browser-request": "^0.3.3",
@@ -108,13 +109,12 @@
"@babel/plugin-proposal-numeric-separator": "^7.7.4",
"@babel/plugin-proposal-object-rest-spread": "^7.7.4",
"@babel/plugin-transform-flow-comments": "^7.7.4",
- "@babel/plugin-transform-runtime": "^7.7.6",
+ "@babel/plugin-transform-runtime": "^7.8.3",
"@babel/preset-env": "^7.7.6",
"@babel/preset-flow": "^7.7.4",
"@babel/preset-react": "^7.7.4",
"@babel/preset-typescript": "^7.7.4",
"@babel/register": "^7.7.4",
- "@babel/runtime": "^7.7.6",
"@peculiar/webcrypto": "^1.0.22",
"babel-eslint": "^10.0.3",
"babel-jest": "^24.9.0",
diff --git a/yarn.lock b/yarn.lock
index 808721a188..75c5af6a1d 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -211,6 +211,13 @@
dependencies:
"@babel/types" "^7.7.4"
+"@babel/helper-module-imports@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.8.3.tgz#7fe39589b39c016331b6b8c3f441e8f0b1419498"
+ integrity sha512-R0Bx3jippsbAEtzkpZ/6FIiuzOURPcMjHp+Z6xPe6DtApDJx+w7UYyOLanZqO8+wKR9G10s/FmHXvxaMd9s6Kg==
+ dependencies:
+ "@babel/types" "^7.8.3"
+
"@babel/helper-module-transforms@^7.7.4", "@babel/helper-module-transforms@^7.7.5":
version "7.7.5"
resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.7.5.tgz#d044da7ffd91ec967db25cd6748f704b6b244835"
@@ -235,6 +242,11 @@
resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.0.0.tgz#bbb3fbee98661c569034237cc03967ba99b4f250"
integrity sha512-CYAOUCARwExnEixLdB6sDm2dIJ/YgEAKDM1MOeMeZu9Ld/bDgVo8aiWrXwcY7OBh+1Ea2uUcVRcxKk0GJvW7QA==
+"@babel/helper-plugin-utils@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.8.3.tgz#9ea293be19babc0f52ff8ca88b34c3611b208670"
+ integrity sha512-j+fq49Xds2smCUNYmEHF9kGNkhbet6yVIBp4e6oeQpH1RUs/Ir06xUKzDjDkGcaaokPiTNs2JBWHjaE4csUkZQ==
+
"@babel/helper-regex@^7.0.0", "@babel/helper-regex@^7.4.4":
version "7.5.5"
resolved "https://registry.yarnpkg.com/@babel/helper-regex/-/helper-regex-7.5.5.tgz#0aa6824f7100a2e0e89c1527c23936c152cab351"
@@ -735,13 +747,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.0.0"
-"@babel/plugin-transform-runtime@^7.7.6":
- version "7.7.6"
- resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.7.6.tgz#4f2b548c88922fb98ec1c242afd4733ee3e12f61"
- integrity sha512-tajQY+YmXR7JjTwRvwL4HePqoL3DYxpYXIHKVvrOIvJmeHe2y1w4tz5qz9ObUDC9m76rCzIMPyn4eERuwA4a4A==
+"@babel/plugin-transform-runtime@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/plugin-transform-runtime/-/plugin-transform-runtime-7.8.3.tgz#c0153bc0a5375ebc1f1591cb7eea223adea9f169"
+ integrity sha512-/vqUt5Yh+cgPZXXjmaG9NT8aVfThKk7G4OqkVhrXqwsC5soMn/qTCxs36rZ2QFhpfTJcjw4SNDIZ4RUb8OL4jQ==
dependencies:
- "@babel/helper-module-imports" "^7.7.4"
- "@babel/helper-plugin-utils" "^7.0.0"
+ "@babel/helper-module-imports" "^7.8.3"
+ "@babel/helper-plugin-utils" "^7.8.3"
resolve "^1.8.1"
semver "^5.5.1"
@@ -894,7 +906,7 @@
pirates "^4.0.0"
source-map-support "^0.5.16"
-"@babel/runtime@^7.0.0", "@babel/runtime@^7.7.6":
+"@babel/runtime@^7.0.0":
version "7.7.6"
resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.7.6.tgz#d18c511121aff1b4f2cd1d452f1bac9601dd830f"
integrity sha512-BWAJxpNVa0QlE5gZdWjSxXtemZyZ9RmrmVozxt3NUXeZhVIJ5ANyqmMc0JDrivBZyxUuQvFxlvH4OWWOogGfUw==
@@ -908,6 +920,13 @@
dependencies:
regenerator-runtime "^0.13.2"
+"@babel/runtime@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.8.3.tgz#0811944f73a6c926bb2ad35e918dcc1bfab279f1"
+ integrity sha512-fVHx1rzEmwB130VTkLnxR+HmxcTjGzH12LYQcFFoBwakMd3aOMD4OsRN7tGG/UOYE2ektgFrS8uACAoRk1CY0w==
+ dependencies:
+ regenerator-runtime "^0.13.2"
+
"@babel/template@^7.4.0", "@babel/template@^7.7.4":
version "7.7.4"
resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.7.4.tgz#428a7d9eecffe27deac0a98e23bf8e3675d2a77b"
@@ -941,6 +960,15 @@
lodash "^4.17.13"
to-fast-properties "^2.0.0"
+"@babel/types@^7.8.3":
+ version "7.8.3"
+ resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.8.3.tgz#5a383dffa5416db1b73dedffd311ffd0788fb31c"
+ integrity sha512-jBD+G8+LWpMBBWvVcdr4QysjUE4mU/syrhN17o1u3gx0/WzJB1kwiVZAXRtWbsIPOwW8pF/YJV5+nmetPzepXg==
+ dependencies:
+ esutils "^2.0.2"
+ lodash "^4.17.13"
+ to-fast-properties "^2.0.0"
+
"@cnakazawa/watch@^1.0.3":
version "1.0.3"
resolved "https://registry.yarnpkg.com/@cnakazawa/watch/-/watch-1.0.3.tgz#099139eaec7ebf07a27c1786a3ff64f39464d2ef"
From 6adfa35445e3514c1f2323674949bce242b50da4 Mon Sep 17 00:00:00 2001
From: Travis Ralston
Date: Thu, 23 Jan 2020 15:53:32 -0700
Subject: [PATCH 26/61] Ensure a plaintext version of the composer ends up on
the clipboard
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
Fixes ï»żhttps://github.com/vector-im/riot-web/issues/12018
---
src/components/views/rooms/BasicMessageComposer.js | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/components/views/rooms/BasicMessageComposer.js b/src/components/views/rooms/BasicMessageComposer.js
index 94904242c3..3c67b4ed60 100644
--- a/src/components/views/rooms/BasicMessageComposer.js
+++ b/src/components/views/rooms/BasicMessageComposer.js
@@ -208,6 +208,7 @@ export default class BasicMessageEditor extends React.Component {
const range = getRangeForSelection(this._editorRef, model, selection);
const selectedParts = range.parts.map(p => p.serialize());
event.clipboardData.setData("application/x-riot-composer", JSON.stringify(selectedParts));
+ event.clipboardData.setData("text/plain", text); // so plain copy/paste works
if (type === "cut") {
// Remove the text, updating the model as appropriate
this._modifiedFlag = true;
From 169852adec208ce8451072ff9a08c5e9021920b8 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20C?=
Date: Fri, 24 Jan 2020 08:23:03 +0000
Subject: [PATCH 27/61] Translated using Weblate (French)
Currently translated at 100.0% (2053 of 2053 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/
---
src/i18n/strings/fr.json | 19 ++++++++++++++++++-
1 file changed, 18 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index 472cd02e6f..5d02717b0c 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -2085,5 +2085,22 @@
"Unrecognised command: %(commandText)s": "Commande non reconnue : %(commandText)s",
"You can use /help
to list available commands. Did you mean to send this as a message?": "Vous pouvez utiliser /help
pour obtenir la liste des commandes disponibles. Vouliez-vous envoyer un message ?",
"Hint: Begin your message with //
to start it with a slash.": "Astuce : Votre message doit démarrer par //
pour commencer par une barre oblique.",
- "Send as message": "Envoyer comme message"
+ "Send as message": "Envoyer comme message",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s a ajouté %(addedAddresses)s et %(count)s autres adresses à ce salon",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s a supprimé %(removedAddresses)s et %(count)s autres adresses de ce salon",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s a supprimé %(countRemoved)s et ajouté %(countAdded)s adresses à ce salon",
+ "Reject & Ignore user": "Rejeter et ignorer lâutilisateur",
+ "Enter your account password to confirm the upgrade:": "Saisissez le mot de passe de votre compte pour confirmer la mise à niveau :",
+ "You'll need to authenticate with the server to confirm the upgrade.": "Vous devrez vous identifier avec le serveur pour confirmer la mise Ă niveau.",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Mettez Ă niveau cet appareil pour lui permettre de vĂ©rifier dâautres appareils, qui pourront alors accĂ©der aux messages chiffrĂ©s et seront vus comme fiables par les autres utilisateurs.",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Configurez le chiffrement sur cet appareil pour lui permettre de vĂ©rifier dâautres appareils, qui pourront alors accĂ©der aux messages chiffrĂ©s et seront vus comme fiables par les autres utilisateurs.",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "SĂ©curisez vos clĂ©s de chiffrement avec une phrase de passe. Pour une sĂ©curitĂ© maximale, elle devrait ĂȘtre diffĂ©rente du mot de passe de votre compte :",
+ "Enter a passphrase": "Saisissez une phrase de passe",
+ "Enter your passphrase a second time to confirm it.": "Saisissez votre phrase de passe une seconde fois pour la confirmer.",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Cet appareil peut Ă prĂ©sent vĂ©rifier dâautres appareils, qui pourront alors accĂ©der aux messages chiffrĂ©s et seront vus comme fiables par les autres utilisateurs.",
+ "Verify other users in their profile.": "VĂ©rifiez dâautres utilisateurs dans leur profil.",
+ "Upgrade your encryption": "Mettre Ă niveau votre chiffrement",
+ "Set up encryption": "Configurer le chiffrement",
+ "Encryption upgraded": "Chiffrement mis Ă niveau",
+ "Encryption setup complete": "Configuration du chiffrement terminé"
}
From 6ebeb0a376f9fab634f48c731b82740e5921af11 Mon Sep 17 00:00:00 2001
From: random
Date: Fri, 24 Jan 2020 13:30:03 +0000
Subject: [PATCH 28/61] Translated using Weblate (Italian)
Currently translated at 98.7% (2031 of 2057 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/
---
src/i18n/strings/it.json | 4 +++-
1 file changed, 3 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json
index d6ebc985fb..6a021e8ab7 100644
--- a/src/i18n/strings/it.json
+++ b/src/i18n/strings/it.json
@@ -2079,5 +2079,7 @@
"Verify User": "Verifica utente",
"For extra security, verify this user by checking a one-time code on both of your devices.": "Per maggiore sicurezza, verifica questo utente controllando un codice univoco sui vostri dispositivi.",
"For maximum security, do this in person.": "Per massima sicurezza, fatelo di persona.",
- "Start Verification": "Inizia la verifica"
+ "Start Verification": "Inizia la verifica",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s ha aggiunto %(addedAddresses)s e %(count)s altri indirizzi a questa stanza",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s ha rimosso %(removedAddresses)s e %(count)s altri indirizzi da questa stanza"
}
From be98f24051f212f5b9d7cda96aba00f697b019ff Mon Sep 17 00:00:00 2001
From: random
Date: Fri, 24 Jan 2020 13:31:06 +0000
Subject: [PATCH 29/61] Translated using Weblate (Italian)
Currently translated at 98.8% (2032 of 2057 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/
---
src/i18n/strings/it.json | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json
index 6a021e8ab7..c9a6c27221 100644
--- a/src/i18n/strings/it.json
+++ b/src/i18n/strings/it.json
@@ -2081,5 +2081,6 @@
"For maximum security, do this in person.": "Per massima sicurezza, fatelo di persona.",
"Start Verification": "Inizia la verifica",
"%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s ha aggiunto %(addedAddresses)s e %(count)s altri indirizzi a questa stanza",
- "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s ha rimosso %(removedAddresses)s e %(count)s altri indirizzi da questa stanza"
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s ha rimosso %(removedAddresses)s e %(count)s altri indirizzi da questa stanza",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s ha rimosso %(countRemoved)s e aggiunto %(countAdded)s indirizzi a questa stanza"
}
From a46646105f29cb68714e0c0794136b452b37833d Mon Sep 17 00:00:00 2001
From: random
Date: Fri, 24 Jan 2020 13:31:48 +0000
Subject: [PATCH 30/61] Translated using Weblate (Italian)
Currently translated at 100.0% (2057 of 2057 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/it/
---
src/i18n/strings/it.json | 27 ++++++++++++++++++++++++++-
1 file changed, 26 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/it.json b/src/i18n/strings/it.json
index c9a6c27221..c8844fb2bb 100644
--- a/src/i18n/strings/it.json
+++ b/src/i18n/strings/it.json
@@ -2082,5 +2082,30 @@
"Start Verification": "Inizia la verifica",
"%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s ha aggiunto %(addedAddresses)s e %(count)s altri indirizzi a questa stanza",
"%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s ha rimosso %(removedAddresses)s e %(count)s altri indirizzi da questa stanza",
- "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s ha rimosso %(countRemoved)s e aggiunto %(countAdded)s indirizzi a questa stanza"
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s ha rimosso %(countRemoved)s e aggiunto %(countAdded)s indirizzi a questa stanza",
+ "Someone is using an unknown device": "Qualcuno sta usando un dispositivo sconosciuto",
+ "This room is end-to-end encrypted": "Questa stanza Ăš cifrata end-to-end",
+ "Everyone in this room is verified": "Tutti in questa stanza sono verificati",
+ "Invite only": "Solo a invito",
+ "Send a replyâŠ": "Invia rispostaâŠ",
+ "Send a messageâŠ": "Invia un messaggioâŠ",
+ "Reject & Ignore user": "Rifiuta e ignora l'utente",
+ "Unknown Command": "Comando sconosciuto",
+ "Unrecognised command: %(commandText)s": "Comando non riconosciuto: %(commandText)s",
+ "You can use /help
to list available commands. Did you mean to send this as a message?": "Puoi usare /help
per elencare i comandi disponibili. Volevo forse inviarlo come messaggio?",
+ "Hint: Begin your message with //
to start it with a slash.": "Suggerimento: anteponi al tuo messaggio //
per farlo iniziare con uno slash.",
+ "Send as message": "Invia come messaggio",
+ "Enter your account password to confirm the upgrade:": "Inserisci la password del tuo account per confermare l'aggiornamento:",
+ "You'll need to authenticate with the server to confirm the upgrade.": "Dovrai autenticarti con il server per confermare l'aggiornamento.",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Aggiorna il dispositivo per consentirgli di verificare altri dispositivi, dando loro accesso ai messaggi cifrati e contrassegnandoli come fidati per gli altri utenti.",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Imposta la cifratura sul dispositivo per consentirgli di verificare altri dispositivi, dando loro accesso ai messaggi cifrati e contrassegnandoli come fidati per gli altri utenti.",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Proteggi le chiavi di cifratura con una password. Per massima sicurezza questa dovrebbe essere diversa da quella del tuo account:",
+ "Enter a passphrase": "Inserisci una password",
+ "Enter your passphrase a second time to confirm it.": "Inserisci di nuovo la tua password per confermarla.",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Questo dispositivo ora puĂČ verificare altri dispositivi, dando loro accesso ai messaggi cifrati e contrassegnandoli come fidati per gli altri utenti.",
+ "Verify other users in their profile.": "Verifica gli altri utenti nel loro profilo.",
+ "Upgrade your encryption": "Aggiorna la tua cifratura",
+ "Set up encryption": "Imposta la cifratura",
+ "Encryption upgraded": "Cifratura aggiornata",
+ "Encryption setup complete": "Impostazione cifratura completata"
}
From f8e0dcf26437c03c384ace261b53f06cb5a2293d Mon Sep 17 00:00:00 2001
From: Travis Ralston
Date: Fri, 24 Jan 2020 09:33:55 -0700
Subject: [PATCH 31/61] Add null check for cross-signing info in verification
panel
---
src/components/views/right_panel/VerificationPanel.js | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/components/views/right_panel/VerificationPanel.js b/src/components/views/right_panel/VerificationPanel.js
index a29546c8f7..70ef8486bd 100644
--- a/src/components/views/right_panel/VerificationPanel.js
+++ b/src/components/views/right_panel/VerificationPanel.js
@@ -49,12 +49,12 @@ export default class VerificationPanel extends React.PureComponent {
Verify by emoji
;
- if (request.requestEvent && request.requestEvent.getId()) {
+ const crossSigningInfo = MatrixClientPeg.get().getStoredCrossSigningForUser(request.otherUserId);
+ if (request.requestEvent && request.requestEvent.getId() && crossSigningInfo) {
const qrCodeKeys = [
[MatrixClientPeg.get().getDeviceId(), MatrixClientPeg.get().getDeviceEd25519Key()],
[MatrixClientPeg.get().getCrossSigningId(), MatrixClientPeg.get().getCrossSigningId()],
];
- const crossSigningInfo = MatrixClientPeg.get().getStoredCrossSigningForUser(request.otherUserId);
const qrCode =
Date: Fri, 24 Jan 2020 09:37:12 -0700
Subject: [PATCH 32/61] Also check for our own key ID
---
src/components/views/right_panel/VerificationPanel.js | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/src/components/views/right_panel/VerificationPanel.js b/src/components/views/right_panel/VerificationPanel.js
index 70ef8486bd..403cff818c 100644
--- a/src/components/views/right_panel/VerificationPanel.js
+++ b/src/components/views/right_panel/VerificationPanel.js
@@ -50,10 +50,11 @@ export default class VerificationPanel extends React.PureComponent {
;
const crossSigningInfo = MatrixClientPeg.get().getStoredCrossSigningForUser(request.otherUserId);
+ const myKeyId = MatrixClientPeg.get().getCrossSigningId();
if (request.requestEvent && request.requestEvent.getId() && crossSigningInfo) {
const qrCodeKeys = [
[MatrixClientPeg.get().getDeviceId(), MatrixClientPeg.get().getDeviceEd25519Key()],
- [MatrixClientPeg.get().getCrossSigningId(), MatrixClientPeg.get().getCrossSigningId()],
+ [myKeyId, MatrixClientPeg.get().getCrossSigningId()],
];
const qrCode =
Date: Fri, 24 Jan 2020 09:41:47 -0700
Subject: [PATCH 33/61] less duplication
---
src/components/views/right_panel/VerificationPanel.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/components/views/right_panel/VerificationPanel.js b/src/components/views/right_panel/VerificationPanel.js
index 403cff818c..a75afd154a 100644
--- a/src/components/views/right_panel/VerificationPanel.js
+++ b/src/components/views/right_panel/VerificationPanel.js
@@ -54,7 +54,7 @@ export default class VerificationPanel extends React.PureComponent {
if (request.requestEvent && request.requestEvent.getId() && crossSigningInfo) {
const qrCodeKeys = [
[MatrixClientPeg.get().getDeviceId(), MatrixClientPeg.get().getDeviceEd25519Key()],
- [myKeyId, MatrixClientPeg.get().getCrossSigningId()],
+ [myKeyId, myKeyId],
];
const qrCode =
Date: Fri, 24 Jan 2020 17:31:00 +0000
Subject: [PATCH 34/61] Update profile avatar letter size
Fixes https://github.com/vector-im/riot-web/issues/12042
---
res/css/views/right_panel/_UserInfo.scss | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/res/css/views/right_panel/_UserInfo.scss b/res/css/views/right_panel/_UserInfo.scss
index d2d9d12c6d..ad6254f57c 100644
--- a/res/css/views/right_panel/_UserInfo.scss
+++ b/res/css/views/right_panel/_UserInfo.scss
@@ -103,7 +103,7 @@ limitations under the License.
justify-content: center;
// override the calculated sizes so that the letter isn't HUGE
- font-size: 26px !important;
+ font-size: 56px !important;
width: 100% !important;
}
From bf0e1efce8441d8b8bd06243255617da76a11ffc Mon Sep 17 00:00:00 2001
From: "J. Ryan Stinnett"
Date: Fri, 24 Jan 2020 17:53:30 +0000
Subject: [PATCH 35/61] Hide default encryption algorithm
When the default encryption algorithm is used, we hide it to remove some jargon
from the app. For any other algorithm, we continue showing it and add
"unrecognised".
Fixes https://github.com/vector-im/riot-web/issues/8829
---
src/TextForEvent.js | 17 +++++++++++++----
src/i18n/strings/en_EN.json | 3 ++-
2 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/src/TextForEvent.js b/src/TextForEvent.js
index 6a2744109b..cdfea45ad7 100644
--- a/src/TextForEvent.js
+++ b/src/TextForEvent.js
@@ -444,10 +444,19 @@ function textForHistoryVisibilityEvent(event) {
function textForEncryptionEvent(event) {
const senderName = event.sender ? event.sender.name : event.getSender();
- return _t('%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).', {
- senderName,
- algorithm: event.getContent().algorithm,
- });
+ if (event.getContent().algorithm === "m.megolm.v1.aes-sha2") {
+ return _t('%(senderName)s turned on end-to-end encryption.', {
+ senderName,
+ });
+ }
+ return _t(
+ '%(senderName)s turned on end-to-end encryption ' +
+ '(unrecognised algorithm %(algorithm)s).',
+ {
+ senderName,
+ algorithm: event.getContent().algorithm,
+ },
+ );
}
// Currently will only display a change if a user's power level is changed
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index c3ad3d1901..79f5731aed 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -256,7 +256,8 @@
"%(senderName)s made future room history visible to all room members.": "%(senderName)s made future room history visible to all room members.",
"%(senderName)s made future room history visible to anyone.": "%(senderName)s made future room history visible to anyone.",
"%(senderName)s made future room history visible to unknown (%(visibility)s).": "%(senderName)s made future room history visible to unknown (%(visibility)s).",
- "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).": "%(senderName)s turned on end-to-end encryption (algorithm %(algorithm)s).",
+ "%(senderName)s turned on end-to-end encryption.": "%(senderName)s turned on end-to-end encryption.",
+ "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).",
"%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s": "%(userId)s from %(fromPowerLevel)s to %(toPowerLevel)s",
"%(senderName)s changed the power level of %(powerLevelDiffText)s.": "%(senderName)s changed the power level of %(powerLevelDiffText)s.",
"%(senderName)s changed the pinned messages for the room.": "%(senderName)s changed the pinned messages for the room.",
From 3d7137d4adeb4fa69742605e1828c53dabb5a2e2 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Fri, 24 Jan 2020 19:11:57 +0000
Subject: [PATCH 36/61] Setup flow for cross-signing on login / registration
Still outstanding:
* Keep password from login / registration
* Confirmation on skip button
Fixes https://github.com/vector-im/riot-web/issues/11902
---
res/css/_common.scss | 18 ++++---
res/css/views/auth/_AuthBody.scss | 9 ++--
.../_CreateSecretStorageDialog.scss | 4 ++
.../CreateSecretStorageDialog.js | 39 +++++++++++----
src/components/structures/MatrixChat.js | 35 +++++++++++---
src/components/structures/RoomView.js | 2 +-
src/components/structures/auth/E2eSetup.js | 48 +++++++++++++++++++
src/components/views/auth/AuthBody.js | 4 ++
.../keybackup/RestoreKeyBackupDialog.js | 25 ++++++++++
9 files changed, 159 insertions(+), 25 deletions(-)
create mode 100644 src/components/structures/auth/E2eSetup.js
diff --git a/res/css/_common.scss b/res/css/_common.scss
index abc57a95ed..b92a618504 100644
--- a/res/css/_common.scss
+++ b/res/css/_common.scss
@@ -386,7 +386,13 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus {
text-align: right;
}
-.mx_Dialog button, .mx_Dialog input[type="submit"] {
+/* XXX: Our button style are a mess: buttons that happen to appear in dialogs get special styles applied
+ * to them that no button anywhere else in the app gets by default. In practice, buttons in other places
+ * in the app look the same by being AccessibleButtons, or possibly by having explict button classes.
+ * We should go through and have one consistent set of styles for buttons throughout the app.
+ * For now, I am duplicating the selectors here for mx_Dialog and mx_DialogButtons.
+ */
+.mx_Dialog button, .mx_Dialog input[type="submit"], .mx_Dialog_buttons button, .mx_Dialog_buttons input[type="submit"] {
@mixin mx_DialogButton;
margin-left: 0px;
margin-right: 8px;
@@ -402,27 +408,27 @@ input[type=text]:focus, input[type=password]:focus, textarea:focus {
margin-right: 0px;
}
-.mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover {
+.mx_Dialog button:hover, .mx_Dialog input[type="submit"]:hover, .mx_Dialog_buttons button:hover, .mx_Dialog_buttons input[type="submit"]:hover {
@mixin mx_DialogButton_hover;
}
-.mx_Dialog button:focus, .mx_Dialog input[type="submit"]:focus {
+.mx_Dialog button:focus, .mx_Dialog input[type="submit"]:focus, .mx_Dialog_buttons button:focus, .mx_Dialog_buttons input[type="submit"]:focus {
filter: brightness($focus-brightness);
}
-.mx_Dialog button.mx_Dialog_primary, .mx_Dialog input[type="submit"].mx_Dialog_primary {
+.mx_Dialog button.mx_Dialog_primary, .mx_Dialog input[type="submit"].mx_Dialog_primary, .mx_Dialog_buttons button.mx_Dialog_primary, .mx_Dialog_buttons input[type="submit"].mx_Dialog_primary {
color: $accent-fg-color;
background-color: $accent-color;
min-width: 156px;
}
-.mx_Dialog button.danger, .mx_Dialog input[type="submit"].danger {
+.mx_Dialog button.danger, .mx_Dialog input[type="submit"].danger, .mx_Dialog_buttons button.danger, .mx_Dialog_buttons input[type="submit"].danger {
background-color: $warning-color;
border: solid 1px $warning-color;
color: $accent-fg-color;
}
-.mx_Dialog button:disabled, .mx_Dialog input[type="submit"]:disabled {
+.mx_Dialog button:disabled, .mx_Dialog input[type="submit"]:disabled, .mx_Dialog_buttons button:disabled, .mx_Dialog_buttons input[type="submit"]:disabled {
background-color: $light-fg-color;
border: solid 1px $light-fg-color;
opacity: 0.7;
diff --git a/res/css/views/auth/_AuthBody.scss b/res/css/views/auth/_AuthBody.scss
index d342de6d75..51b9775811 100644
--- a/res/css/views/auth/_AuthBody.scss
+++ b/res/css/views/auth/_AuthBody.scss
@@ -15,13 +15,10 @@ limitations under the License.
*/
.mx_AuthBody {
- width: 500px;
background-color: $authpage-body-bg-color;
border-radius: 0 4px 4px 0;
padding: 25px 60px;
box-sizing: border-box;
- font-size: 12px;
- color: $authpage-secondary-color;
h2 {
font-size: 24px;
@@ -99,6 +96,12 @@ limitations under the License.
border-radius: 4px;
}
+.mx_AuthBody_loginRegister {
+ width: 500px;
+ font-size: 12px;
+ color: $authpage-secondary-color;
+}
+
.mx_AuthBody_editServerDetails {
padding-left: 1em;
font-size: 12px;
diff --git a/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss b/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss
index ed5aaa05a3..53e82670e1 100644
--- a/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss
+++ b/res/css/views/dialogs/secretstorage/_CreateSecretStorageDialog.scss
@@ -78,6 +78,10 @@ limitations under the License.
align-items: center;
}
+.mx_CreateSecretStorageDialog_recoveryKeyButtons .mx_AccessibleButton {
+ margin-right: 10px;
+}
+
.mx_CreateSecretStorageDialog_recoveryKeyButtons button {
flex: 1;
white-space: nowrap;
diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
index 8fd881fc32..92ede334d0 100644
--- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
+++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
@@ -16,6 +16,7 @@ limitations under the License.
*/
import React from 'react';
+import PropTypes from 'prop-types';
import * as sdk from '../../../../index';
import {MatrixClientPeg} from '../../../../MatrixClientPeg';
import { scorePassword } from '../../../../utils/PasswordScorer';
@@ -52,6 +53,14 @@ function selectText(target) {
* Secret Storage in account data.
*/
export default class CreateSecretStorageDialog extends React.PureComponent {
+ static propTypes = {
+ hasCancel: PropTypes.bool,
+ };
+
+ defaultProps = {
+ hasCancel: true,
+ };
+
constructor(props) {
super(props);
@@ -82,9 +91,12 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
this._fetchBackupInfo();
this._queryKeyUploadAuth();
+
+ MatrixClientPeg.get().on('crypto.keyBackupStatus', this._onKeyBackupStatusChange);
}
componentWillUnmount() {
+ MatrixClientPeg.get().removeListener('crypto.keyBackupStatus', this._onKeyBackupStatusChange);
if (this._setZxcvbnResultTimeout !== null) {
clearTimeout(this._setZxcvbnResultTimeout);
}
@@ -92,7 +104,10 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
async _fetchBackupInfo() {
const backupInfo = await MatrixClientPeg.get().getKeyBackupVersion();
- const backupSigStatus = await MatrixClientPeg.get().isKeyBackupTrusted(backupInfo);
+ const backupSigStatus = (
+ // we may not have started crypto yet, in which case we definitely don't trust the backup
+ MatrixClientPeg.get().isCryptoEnabled() && await MatrixClientPeg.get().isKeyBackupTrusted(backupInfo)
+ );
const phase = backupInfo ?
(backupSigStatus.usable ? PHASE_MIGRATE : PHASE_RESTORE_KEY_BACKUP) :
@@ -127,6 +142,10 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
}
}
+ _onKeyBackupStatusChange = () => {
+ this._fetchBackupInfo();
+ }
+
_collectRecoveryKeyNode = (n) => {
this._recoveryKeyNode = n;
}
@@ -229,7 +248,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
_onRestoreKeyBackupClick = () => {
const RestoreKeyBackupDialog = sdk.getComponent('dialogs.keybackup.RestoreKeyBackupDialog');
Modal.createTrackedDialog(
- 'Restore Backup', '', RestoreKeyBackupDialog, null, null,
+ 'Restore Backup', '', RestoreKeyBackupDialog, {showSummary: false}, null,
/* priority = */ false, /* static = */ true,
);
}
@@ -411,6 +430,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
_renderPhasePassPhrase() {
const DialogButtons = sdk.getComponent('views.elements.DialogButtons');
const Field = sdk.getComponent('views.elements.Field');
+ const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
let strengthMeter;
let helpText;
@@ -472,9 +492,9 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
{_t("Advanced")}
-
+
{_t("Set up with a recovery key")}
-
+
;
}
@@ -554,6 +574,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
);
}
+ const AccessibleButton = sdk.getComponent('elements.AccessibleButton');
return
{_t(
"Your recovery key is a safety net - you can use it to restore " +
@@ -572,12 +593,12 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
{this._encodedRecoveryKey}
-
+
{_t("Copy to clipboard")}
-
-
+
+
{_t("Download")}
-
+
@@ -740,7 +761,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
onFinished={this.props.onFinished}
title={this._titleForPhase(this.state.phase)}
headerImage={headerImage}
- hasCancel={[PHASE_PASSPHRASE].includes(this.state.phase)}
+ hasCancel={this.props.hasCancel && [PHASE_PASSPHRASE].includes(this.state.phase)}
>
{content}
diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js
index 0486ce764c..b4b38d7617 100644
--- a/src/components/structures/MatrixChat.js
+++ b/src/components/structures/MatrixChat.js
@@ -89,12 +89,15 @@ export const VIEWS = {
// showing flow to trust this new device with cross-signing
COMPLETE_SECURITY: 6,
+ // flow to setup SSSS / cross-signing on this account
+ E2E_SETUP: 7,
+
// we are logged in with an active matrix client.
- LOGGED_IN: 7,
+ LOGGED_IN: 8,
// We are logged out (invalid token) but have our local state again. The user
// should log back in to rehydrate the client.
- SOFT_LOGOUT: 8,
+ SOFT_LOGOUT: 9,
};
// Actions that are redirected through the onboarding process prior to being
@@ -657,7 +660,9 @@ export default createReactClass({
if (
!Lifecycle.isSoftLogout() &&
this.state.view !== VIEWS.LOGIN &&
- this.state.view !== VIEWS.COMPLETE_SECURITY
+ this.state.view !== VIEWS.REGISTER &&
+ this.state.view !== VIEWS.COMPLETE_SECURITY &&
+ this.state.view !== VIEWS.E2E_SETUP
) {
this._onLoggedIn();
}
@@ -1724,6 +1729,11 @@ export default createReactClass({
this.showScreen("forgot_password");
},
+ onRegisterFlowComplete: function(credentials) {
+ this.onUserCompletedLoginFlow();
+ return this.onRegistered(credentials);
+ },
+
// returns a promise which resolves to the new MatrixClient
onRegistered: function(credentials) {
return Lifecycle.setLoggedIn(credentials);
@@ -1847,12 +1857,18 @@ export default createReactClass({
if (masterKeyInStorage) {
this.setStateForNewView({ view: VIEWS.COMPLETE_SECURITY });
+ } else if (SettingsStore.isFeatureEnabled("feature_cross_signing")) {
+ // This will only work if the feature is set to 'enable' in the config,
+ // since it's too early in the lifecycle for users to have turned the
+ // labs flag on.
+ this.setStateForNewView({ view: VIEWS.E2E_SETUP });
} else {
this._onLoggedIn();
}
},
- onCompleteSecurityFinished() {
+ // complete security / e2e setup has finished
+ onCompleteSecurityE2eSetupFinished() {
this._onLoggedIn();
},
@@ -1872,7 +1888,14 @@ export default createReactClass({
const CompleteSecurity = sdk.getComponent('structures.auth.CompleteSecurity');
view = (
+ );
+ } else if (this.state.view === VIEWS.E2E_SETUP) {
+ const E2eSetup = sdk.getComponent('structures.auth.E2eSetup');
+ view = (
+
);
} else if (this.state.view === VIEWS.POST_REGISTRATION) {
@@ -1939,7 +1962,7 @@ export default createReactClass({
email={this.props.startingFragmentQueryParams.email}
brand={this.props.config.brand}
makeRegistrationUrl={this._makeRegistrationUrl}
- onLoggedIn={this.onRegistered}
+ onLoggedIn={this.onRegisterFlowComplete}
onLoginClick={this.onLoginClick}
onServerConfigChange={this.onServerConfigChange}
{...this.getServerProperties()}
diff --git a/src/components/structures/RoomView.js b/src/components/structures/RoomView.js
index 5c243f04bc..60fff5f1e3 100644
--- a/src/components/structures/RoomView.js
+++ b/src/components/structures/RoomView.js
@@ -766,7 +766,7 @@ export default createReactClass({
onUserVerificationChanged: function(userId, _trustStatus) {
const room = this.state.room;
- if (!room.currentState.getMember(userId)) {
+ if (!room || !room.currentState.getMember(userId)) {
return;
}
this._updateE2EStatus(room);
diff --git a/src/components/structures/auth/E2eSetup.js b/src/components/structures/auth/E2eSetup.js
new file mode 100644
index 0000000000..a5f4ff933b
--- /dev/null
+++ b/src/components/structures/auth/E2eSetup.js
@@ -0,0 +1,48 @@
+/*
+Copyright 2020 The Matrix.org Foundation C.I.C.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+ http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import AsyncWrapper from '../../../AsyncWrapper';
+import * as sdk from '../../../index';
+
+export default class E2eSetup extends React.Component {
+ static propTypes = {
+ onFinished: PropTypes.func.isRequired,
+ };
+
+ constructor() {
+ super();
+ // awkwardly indented because https://github.com/eslint/eslint/issues/11310
+ this._createStorageDialogPromise =
+ import("../../../async-components/views/dialogs/secretstorage/CreateSecretStorageDialog");
+ }
+
+ render() {
+ const AuthPage = sdk.getComponent("auth.AuthPage");
+ const AuthBody = sdk.getComponent("auth.AuthBody");
+ return (
+
+
+
+
+
+ );
+ }
+}
diff --git a/src/components/views/auth/AuthBody.js b/src/components/views/auth/AuthBody.js
index fe20d76afb..b74b7d866a 100644
--- a/src/components/views/auth/AuthBody.js
+++ b/src/components/views/auth/AuthBody.js
@@ -33,6 +33,10 @@ export default class AuthBody extends React.PureComponent {
const classes = {
'mx_AuthBody': true,
'mx_AuthBody_noHeader': !this.props.header,
+ // XXX The login pages all use a smaller fonts size but we don't want this
+ // for subsequent auth screens like the e2e setup. Doing this a terrible way
+ // for now.
+ 'mx_AuthBody_loginRegister': this.props.header,
};
return
diff --git a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js
index 77fdee5e8a..0c432ba542 100644
--- a/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js
+++ b/src/components/views/dialogs/keybackup/RestoreKeyBackupDialog.js
@@ -16,6 +16,7 @@ limitations under the License.
*/
import React from 'react';
+import PropTypes from 'prop-types';
import * as sdk from '../../../../index';
import {MatrixClientPeg} from '../../../../MatrixClientPeg';
import { MatrixClient } from 'matrix-js-sdk';
@@ -32,6 +33,16 @@ const RESTORE_TYPE_SECRET_STORAGE = 2;
* Dialog for restoring e2e keys from a backup and the user's recovery key
*/
export default class RestoreKeyBackupDialog extends React.PureComponent {
+ static propTypes = {
+ // if false, will close the dialog as soon as the restore completes succesfully
+ // default: true
+ showSummary: PropTypes.bool,
+ };
+
+ defaultProps = {
+ showSummary: true,
+ };
+
constructor(props) {
super(props);
this.state = {
@@ -96,6 +107,10 @@ export default class RestoreKeyBackupDialog extends React.PureComponent {
const recoverInfo = await MatrixClientPeg.get().restoreKeyBackupWithPassword(
this.state.passPhrase, undefined, undefined, this.state.backupInfo,
);
+ if (!this.props.showSummary) {
+ this.props.onFinished(true);
+ return;
+ }
this.setState({
loading: false,
recoverInfo,
@@ -119,6 +134,10 @@ export default class RestoreKeyBackupDialog extends React.PureComponent {
const recoverInfo = await MatrixClientPeg.get().restoreKeyBackupWithRecoveryKey(
this.state.recoveryKey, undefined, undefined, this.state.backupInfo,
);
+ if (!this.props.showSummary) {
+ this.props.onFinished(true);
+ return;
+ }
this.setState({
loading: false,
recoverInfo,
@@ -253,6 +272,7 @@ export default class RestoreKeyBackupDialog extends React.PureComponent {
title = _t("Error");
content = _t("No backup found!");
} else if (this.state.recoverInfo) {
+ const DialogButtons = sdk.getComponent('views.elements.DialogButtons');
title = _t("Backup Restored");
let failedToDecrypt;
if (this.state.recoverInfo.total > this.state.recoverInfo.imported) {
@@ -264,6 +284,11 @@ export default class RestoreKeyBackupDialog extends React.PureComponent {
content =
{_t("Restored %(sessionCount)s session keys", {sessionCount: this.state.recoverInfo.imported})}
{failedToDecrypt}
+
;
} else if (backupHasPassphrase && !this.state.forceRecoveryKey) {
const DialogButtons = sdk.getComponent('views.elements.DialogButtons');
From 9991a544aa2b413d00640bb6cb9262d831c80358 Mon Sep 17 00:00:00 2001
From: "J. Ryan Stinnett"
Date: Fri, 24 Jan 2020 22:26:28 +0000
Subject: [PATCH 37/61] Resolve default export warnings from Webpack
Webpack was printing several warnings about missing default exports,
particularly from components, where we auto-generate a default import via the
component index.
As part of this, the emoji picker recent handling (which is not a component) is
moved elsewhere to avoid the generated import.
---
src/components/structures/InteractiveAuth.js | 2 +-
src/components/structures/TopLeftMenuButton.js | 2 +-
src/components/views/auth/InteractiveAuthEntryComponents.js | 2 +-
src/components/views/context_menus/TopLeftMenu.js | 2 +-
src/components/views/emojipicker/EmojiPicker.js | 2 +-
src/{components/views => }/emojipicker/recent.js | 0
6 files changed, 5 insertions(+), 5 deletions(-)
rename src/{components/views => }/emojipicker/recent.js (100%)
diff --git a/src/components/structures/InteractiveAuth.js b/src/components/structures/InteractiveAuth.js
index 53bb990e26..3d63029b06 100644
--- a/src/components/structures/InteractiveAuth.js
+++ b/src/components/structures/InteractiveAuth.js
@@ -20,7 +20,7 @@ import React, {createRef} from 'react';
import createReactClass from 'create-react-class';
import PropTypes from 'prop-types';
-import {getEntryComponentForLoginType} from '../views/auth/InteractiveAuthEntryComponents';
+import getEntryComponentForLoginType from '../views/auth/InteractiveAuthEntryComponents';
import * as sdk from '../../index';
diff --git a/src/components/structures/TopLeftMenuButton.js b/src/components/structures/TopLeftMenuButton.js
index 967805d099..ebd7aaae89 100644
--- a/src/components/structures/TopLeftMenuButton.js
+++ b/src/components/structures/TopLeftMenuButton.js
@@ -17,7 +17,7 @@ limitations under the License.
import React from 'react';
import PropTypes from 'prop-types';
-import {TopLeftMenu} from '../views/context_menus/TopLeftMenu';
+import TopLeftMenu from '../views/context_menus/TopLeftMenu';
import BaseAvatar from '../views/avatars/BaseAvatar';
import {MatrixClientPeg} from '../../MatrixClientPeg';
import * as Avatar from '../../Avatar';
diff --git a/src/components/views/auth/InteractiveAuthEntryComponents.js b/src/components/views/auth/InteractiveAuthEntryComponents.js
index 869e81c1f7..801420da95 100644
--- a/src/components/views/auth/InteractiveAuthEntryComponents.js
+++ b/src/components/views/auth/InteractiveAuthEntryComponents.js
@@ -641,7 +641,7 @@ const AuthEntryComponents = [
TermsAuthEntry,
];
-export function getEntryComponentForLoginType(loginType) {
+export default function getEntryComponentForLoginType(loginType) {
for (const c of AuthEntryComponents) {
if (c.LOGIN_TYPE == loginType) {
return c;
diff --git a/src/components/views/context_menus/TopLeftMenu.js b/src/components/views/context_menus/TopLeftMenu.js
index 528e4790c2..51ec202b90 100644
--- a/src/components/views/context_menus/TopLeftMenu.js
+++ b/src/components/views/context_menus/TopLeftMenu.js
@@ -27,7 +27,7 @@ import {MatrixClientPeg} from '../../../MatrixClientPeg';
import {MenuItem} from "../../structures/ContextMenu";
import * as sdk from "../../../index";
-export class TopLeftMenu extends React.Component {
+export default class TopLeftMenu extends React.Component {
static propTypes = {
displayName: PropTypes.string.isRequired,
userId: PropTypes.string.isRequired,
diff --git a/src/components/views/emojipicker/EmojiPicker.js b/src/components/views/emojipicker/EmojiPicker.js
index 1f508ceedc..ca8f0c0565 100644
--- a/src/components/views/emojipicker/EmojiPicker.js
+++ b/src/components/views/emojipicker/EmojiPicker.js
@@ -20,7 +20,7 @@ import PropTypes from 'prop-types';
import * as sdk from '../../../index';
import { _t } from '../../../languageHandler';
-import * as recent from './recent';
+import * as recent from '../../../emojipicker/recent';
import {DATA_BY_CATEGORY, getEmojiFromUnicode} from "../../../emoji";
export const CATEGORY_HEADER_HEIGHT = 22;
diff --git a/src/components/views/emojipicker/recent.js b/src/emojipicker/recent.js
similarity index 100%
rename from src/components/views/emojipicker/recent.js
rename to src/emojipicker/recent.js
From 95df8b9bb7d4a2b40e65d079fb31bfca6767c57c Mon Sep 17 00:00:00 2001
From: Szimszon
Date: Fri, 24 Jan 2020 18:34:27 +0000
Subject: [PATCH 38/61] Translated using Weblate (Hungarian)
Currently translated at 99.8% (2052 of 2056 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/hu/
---
src/i18n/strings/hu.json | 52 +++++++++++++++++++++++++++-------------
1 file changed, 36 insertions(+), 16 deletions(-)
diff --git a/src/i18n/strings/hu.json b/src/i18n/strings/hu.json
index da2c015335..d2b877a8de 100644
--- a/src/i18n/strings/hu.json
+++ b/src/i18n/strings/hu.json
@@ -981,7 +981,7 @@
"Please contact your service administrator to get this limit increased.": "A korlåt emelése érdekében kérlek vedd fel a kapcsolatot a szolgåltatås adminisztråtoråval .",
"This homeserver has hit its Monthly Active User limit so some users will not be able to log in .": "Ez a Matrix szerver elĂ©rte a havi aktĂv felhasznĂĄlĂłi korlĂĄtjĂĄt nĂ©hĂĄny felhasznĂĄlĂł nem fog tudni bejelentkezni .",
"This homeserver has exceeded one of its resource limits so some users will not be able to log in .": "Ez a Matrix szerver tĂșllĂ©pte valamelyik erĆforrĂĄs korlĂĄtjĂĄt Ăgy nĂ©hĂĄny felhasznĂĄlĂł nem tud majd bejelentkezni .",
- "Upgrade Room Version": "Szoba verziĂłjĂĄnak frissĂtĂ©se",
+ "Upgrade Room Version": "Szoba verziójånak fejlesztése",
"Create a new room with the same name, description and avatar": "KĂ©szĂts egy Ășj szobĂĄt ugyanazzal a nĂ©vvel, leĂrĂĄssal Ă©s profilkĂ©ppel",
"Update any local room aliases to point to the new room": "ĂllĂts ĂĄt minden helyi alternatĂv nevet erre a szobĂĄra",
"Stop users from speaking in the old version of the room, and post a message advising users to move to the new room": "A felhasznĂĄlĂłknak tiltsd meg, hogy a rĂ©gi szobĂĄban beszĂ©lgessenek. KĂŒldj egy ĂŒzenetet amiben megkĂ©red a felhasznĂĄlĂłkat, hogy menjenek ĂĄt az Ășj szobĂĄba",
@@ -996,9 +996,9 @@
"The conversation continues here.": "A beszélgetés itt folytatódik.",
"This room is a continuation of another conversation.": "Ebben a szobåban folytatódik egy måsik beszélgetés.",
"Click here to see older messages.": "Ide kattintva megnĂ©zheted a rĂ©gi ĂŒzeneteket.",
- "Failed to upgrade room": "A szoba frissĂtĂ©se sikertelen",
- "The room upgrade could not be completed": "A szoba frissĂtĂ©sĂ©t nem sikerĂŒlt befejezni",
- "Upgrade this room to version %(version)s": "A szoba frissĂtĂ©se %(version)s verziĂłra",
+ "Failed to upgrade room": "A szoba fejlesztése sikertelen",
+ "The room upgrade could not be completed": "A szoba fejlesztĂ©sĂ©t nem sikerĂŒlt befejezni",
+ "Upgrade this room to version %(version)s": "A szoba fejlesztése %(version)s verzióra",
"Forces the current outbound group session in an encrypted room to be discarded": "A jelenlegi csoport munkamenet törlĂ©sĂ©t kikĂ©nyszerĂti a titkosĂtott szobĂĄban",
"Registration Required": "Regisztråciót igényel",
"You need to register to do this. Would you like to register now?": "Hogy ezt megtedd regisztrålnod kell. Szeretnél regisztrålni?",
@@ -1140,9 +1140,9 @@
"Invite anyway and never warn me again": "MindenkĂ©ppen meghĂv Ă©s ne figyelmeztess többet",
"Invite anyway": "MindenkĂ©ppen meghĂv",
"Whether or not you're logged in (we don't record your username)": "Se akkor ha bejelentkezel se akkor ha nem; mi nem tĂĄroljuk a felhasznĂĄlĂłi nevedet",
- "Upgrades a room to a new version": "Szoba frissĂtĂ©se Ășj verziĂłra",
+ "Upgrades a room to a new version": "Szoba fejlesztĂ©se Ășj verziĂłra",
"Sets the room name": "SzobanĂ©v beĂĄllĂtĂĄsa",
- "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s frissĂtette a szobĂĄt.",
+ "%(senderDisplayName)s upgraded this room.": "%(senderDisplayName)s fejlesztette a szobĂĄt.",
"%(displayName)s is typing âŠ": "%(displayName)s gĂ©pel âŠ",
"%(names)s and %(count)s others are typing âŠ|other": "%(names)s Ă©s %(count)s mĂĄsik gĂ©pelnek âŠ",
"%(names)s and %(count)s others are typing âŠ|one": "%(names)s Ă©s mĂ©g valaki gĂ©pelnek âŠ",
@@ -1460,9 +1460,9 @@
"%(senderName)s revoked the invitation for %(targetDisplayName)s to join the room.": "%(senderName)s visszavonta %(targetDisplayName)s a szobĂĄba valĂł belĂ©pĂ©sĂ©hez szĂŒksĂ©ges meghĂvĂłjĂĄt.",
"Enable desktop notifications for this device": "Asztali Ă©rtesĂtĂ©sek engedĂ©lyezĂ©se ehhez az eszközhöz",
"Enable audible notifications for this device": "HallhatĂł Ă©rtesĂtĂ©sek engedĂ©lyezĂ©se ehhez az eszközhöz",
- "Upgrade this room to the recommended room version": "A szoba frissĂtĂ©se a javasolt verziĂłra",
+ "Upgrade this room to the recommended room version": "A szoba fejlesztése a javasolt verzióra",
"This room is running room version , which this homeserver has marked as unstable .": "A szoba verziĂłja: , amit a Matrix szerver instabilnak tekint.",
- "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "A szoba frissĂtĂ©se bezĂĄrja ezt a szobĂĄt Ă©s Ășj, frissĂtett verziĂłval ugyanezen a nĂ©ven lĂ©trehoz egy Ășjat.",
+ "Upgrading this room will shut down the current instance of the room and create an upgraded room with the same name.": "A szoba fejlesztĂ©se bezĂĄrja ezt a szobĂĄt Ă©s Ășj, frissĂtett verziĂłval ugyanezen a nĂ©ven lĂ©trehoz egy Ășjat.",
"Failed to revoke invite": "A meghĂvĂł visszavonĂĄsa sikertelen",
"Could not revoke the invite. The server may be experiencing a temporary problem or you do not have sufficient permissions to revoke the invite.": "A meghĂvĂłt nem lehet visszavonni. Vagy a szervernek ĂĄtmenetileg problĂ©mĂĄi vannak vagy nincs megfelelĆ jogosultsĂĄgod a meghĂvĂł visszavonĂĄsĂĄhoz.",
"Revoke invite": "MeghĂvĂł visszavonĂĄsa",
@@ -1507,7 +1507,7 @@
"Sends the given message coloured as a rainbow": "A megadott ĂŒzenetet szivĂĄrvĂĄny szĂnben kĂŒldi el",
"Sends the given emote coloured as a rainbow": "A megadott hangulatjelet szivĂĄrvĂĄny szĂnben kĂŒldi el",
"The user's homeserver does not support the version of the room.": "A felhasznĂĄlĂł matrix szervere nem tĂĄmogatja a megadott szoba verziĂłt.",
- "When rooms are upgraded": "Ha a szobĂĄk frissĂŒltek",
+ "When rooms are upgraded": "Ha a szobĂĄk fejlesztĂ©sre kerĂŒlnek",
"This device is not backing up your keys , but you do have an existing backup you can restore from and add to going forward.": "Ez az eszköz nem menti el a kulcsaidat , de lĂ©tezik mentĂ©s amit visszaĂĄllĂthatsz Ă©s folytathatod.",
"Connect this device to key backup before signing out to avoid losing any keys that may only be on this device.": "Csatlakozz ezzel az eszközzel a kulcs mentĂ©shez kilĂ©pĂ©s elĆtt, hogy ne veszĂts el kulcsot ami esetleg csak ezen az eszközön van meg.",
"Connect this device to Key Backup": "Csatlakozz ezzel az eszközzel a Kulcs Mentéshez",
@@ -1538,7 +1538,7 @@
"This room doesn't exist. Are you sure you're at the right place?": "Ez a szoba nem létezik. Biztos, hogy jó helyen vagy?",
"Try again later, or ask a room admin to check if you have access.": "PrĂłbĂĄlkozz kĂ©sĆbb vagy kĂ©rd meg a szoba adminisztrĂĄtorĂĄt, hogy nĂ©zze meg van-e hozzĂĄfĂ©rĂ©sed.",
"%(errcode)s was returned while trying to access the room. If you think you're seeing this message in error, please submit a bug report .": "Amikor a szobĂĄt prĂłbĂĄltuk elĂ©rni ezt a hibaĂŒzenetet kaptuk: %(errcode)s. Ha Ășgy gondolod, hogy ez egy hiba lĂ©gy szĂvesnyiss egy hibajegyet .",
- "This room has already been upgraded.": "Ez a szoba mĂĄr frissĂŒlt.",
+ "This room has already been upgraded.": "Ez a szoba mĂĄr fejlesztve van.",
"Rotate Left": "Balra forgat",
"Rotate Right": "Jobbra forgat",
"View Servers in Room": "Szerverek megjelenĂtĂ©se a szobĂĄban",
@@ -1690,7 +1690,7 @@
"If you don't want to use to discover and be discoverable by existing contacts you know, enter another identity server below.": "Ha felkutatĂĄsra Ă©s, hogy mĂĄs ismerĆsök megtalĂĄlhassanak, nem akarod hasznĂĄlni ezt a szervert: , akkor adjĂĄl meg mĂĄsik azonosĂtĂĄsi szervert alĂĄbb.",
"Using an identity server is optional. If you choose not to use an identity server, you won't be discoverable by other users and you won't be able to invite others by email or phone.": "AzonosĂtĂĄsi szerver hasznĂĄlata nem kötelezĆ. Ha Ășgy döntesz, hogy az azonosĂtĂĄsi szervert nem hasznĂĄlod mĂĄs felhasznĂĄlĂłk nem talĂĄlnak rĂĄd Ă©s mĂĄsokat sem tudsz e-mail cĂm vagy telefonszĂĄm alapjĂĄn meghĂvni.",
"Do not use an identity server": "Az azonosĂtĂĄsi szerver mellĆzĂ©se",
- "Upgrade the room": "Szoba frissĂtĂ©se",
+ "Upgrade the room": "Szoba fejlesztése",
"Set an email for account recovery. Use email or phone to optionally be discoverable by existing contacts.": "E-mail cĂm beĂĄllĂtĂĄsa a fiĂłk visszaĂĄllĂtĂĄsĂĄhoz. E-mail cĂm vagy telefonszĂĄm, hogy ismerĆsök megtalĂĄlhassanak.",
"Set an email for account recovery. Use email to optionally be discoverable by existing contacts.": "E-mail cĂm beĂĄllĂtĂĄsa a fiĂłk visszaĂĄllĂtĂĄsĂĄhoz. E-mail cĂm, hogy ismerĆsök megtalĂĄlhassanak.",
"Enter your custom homeserver URL What does this mean? ": "Add meg a matrix szervered URL-jét Mit jelent ez? ",
@@ -1930,12 +1930,12 @@
"This message cannot be decrypted": "Ezt az ĂŒzenetet nem lehet visszafejteni",
"Unencrypted": "TitkosĂtatlan",
"Automatically invite users": "FelhasznĂĄlĂłk automatikus meghĂvĂĄsa",
- "Upgrade private room": "PrivĂĄt szoba frissĂtĂ©se",
- "Upgrade public room": "NyilvĂĄnos szoba frissĂtĂ©se",
+ "Upgrade private room": "Privåt szoba fejlesztése",
+ "Upgrade public room": "Nyilvånos szoba fejlesztése",
"Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "A szoba frissĂtĂ©se nem egyszerƱ mƱvelet, ĂĄltalĂĄban a szoba hibĂĄs mƱködĂ©se, hiĂĄnyzĂł funkciĂł vagy biztonsĂĄgi sĂ©rĂŒlĂ©kenysĂ©g esetĂ©n javasolt.",
"This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug .": "Ez ĂĄltalĂĄban a szoba szerver oldali kezelĂ©sĂ©ben jelent vĂĄltozĂĄst. Ha a Riotban van problĂ©mĂĄd, kĂ©rlek kĂŒldj egy hibajelentĂ©st .",
- "You'll upgrade this room from to .": " verziĂłrĂłl verziĂłra frissĂted a szobĂĄt.",
- "Upgrade": "FrissĂtĂ©s",
+ "You'll upgrade this room from to .": " verziĂłrĂłl verziĂłra fejleszted a szobĂĄt.",
+ "Upgrade": "Fejlesztés",
"Notification settings": "ĂrtesĂtĂ©sek beĂĄllĂtĂĄsa",
"User Status": "FelhasznĂĄlĂł ĂĄllapota",
"Reactions": "ReakciĂłk",
@@ -2086,5 +2086,25 @@
"Unrecognised command: %(commandText)s": "Ismeretlen parancs: %(commandText)s",
"You can use /help
to list available commands. Did you mean to send this as a message?": "HasznĂĄlhatod a /help
-et az elĂ©rhetĆ parancsok kilistĂĄzĂĄsĂĄhoz. Ezt ĂŒzenetkĂ©nt akartad kĂŒldeni?",
"Hint: Begin your message with //
to start it with a slash.": "Tipp: Ez ĂŒzenetedet kezd ezzel: //
, ha perjellel szeretnéd kezdeni.",
- "Send as message": "Ăzenet kĂŒldĂ©se"
+ "Send as message": "Ăzenet kĂŒldĂ©se",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s szoba cĂmnek, %(count)s mĂĄsikkal egyĂŒtt, hozzĂĄadta: %(addedAddresses)s",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s %(count)s mĂĄsikkal egyĂŒtt törölte a szoba cĂmek közĂŒl: %(removedAddresses)s",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s %(countRemoved)s darabot törölt Ă©s %(countAdded)s darabot hozzĂĄadott a szoba cĂmekhez",
+ "Someone is using an unknown device": "Valaki ismeretlen eszközt hasznål",
+ "This room is end-to-end encrypted": "Ez a szoba vĂ©gpontok közötti titkosĂtĂĄst hasznĂĄl",
+ "Everyone in this room is verified": "A szobĂĄba mindenki ellenĆrizve van",
+ "Invite only": "Csak meghĂvĂłval",
+ "Send a replyâŠ": "VĂĄlasz kĂŒldĂ©seâŠ",
+ "Send a messageâŠ": "Ăzenet kĂŒldĂ©seâŠ",
+ "Reject & Ignore user": "FelhasznĂĄlĂł elutasĂtĂĄsa Ă©s figyelmen kĂvĂŒl hagyĂĄsa",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link .": "Ha nem talålsz valakit, akkor kérdezd meg a felhasznålói nevét, åruld el neki a felhasznålói nevedet (%(userId)s) vagy a profil hivatkozåsodat .",
+ "Enter your account password to confirm the upgrade:": "A fejlesztĂ©s megerĆsĂtĂ©sĂ©hez add meg a fiĂłk jelszavadat:",
+ "You'll need to authenticate with the server to confirm the upgrade.": "AzonosĂtanod kell magad a szerveren a fejlesztĂ©s megerĆsĂtĂ©sĂ©hez.",
+ "Enter a passphrase": "Jelmondat bevitele",
+ "Enter your passphrase a second time to confirm it.": "Add meg a jelmondatot måsodszor is a biztonsåg kedvéért.",
+ "Verify other users in their profile.": "MĂĄs felhasznĂĄlĂłk ellenĆrzĂ©se a profiljukban.",
+ "Upgrade your encryption": "TitkosĂtĂĄsod fejlesztĂ©se",
+ "Set up encryption": "TitkosĂtĂĄs beĂĄllĂtĂĄsa",
+ "Encryption upgraded": "TitkosĂtĂĄs fejlesztve",
+ "Encryption setup complete": "TitkosĂtĂĄs beĂĄllĂtĂĄsa kĂ©sz"
}
From 662c723bf3401157e59601188d53ff008ae4d230 Mon Sep 17 00:00:00 2001
From: catborise
Date: Fri, 24 Jan 2020 18:48:00 +0000
Subject: [PATCH 39/61] Translated using Weblate (Turkish)
Currently translated at 73.7% (1515 of 2056 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/
---
src/i18n/strings/tr.json | 24 +++++++++++++++++++++++-
1 file changed, 23 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json
index 2656b00593..db43e96cea 100644
--- a/src/i18n/strings/tr.json
+++ b/src/i18n/strings/tr.json
@@ -1510,5 +1510,27 @@
"%(senderName)s placed a voice call.": "%(senderName)s bir çaÄrı yaptı.",
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s bir çaÄrı baĆlattı. (Bu tarayıcı tarafından desteklenmiyor)",
"%(senderName)s placed a video call.": "%(senderName)s bir görĂŒntĂŒlĂŒ çaÄrı yaptı.",
- "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s bir görĂŒntĂŒlĂŒ çaÄrı yaptı. (bu tarayıcı tarafından desteklenmiyor)"
+ "%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s bir görĂŒntĂŒlĂŒ çaÄrı yaptı. (bu tarayıcı tarafından desteklenmiyor)",
+ "Ask your Riot admin to check your config for incorrect or duplicate entries.": "Riot yöneticinize yapılandırmanızın hatalı ve mĂŒkerrer girdilerini kontrol etmesi için talepte bulunun.",
+ "You can register, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Kayıt olabilirsiniz, fakat kimlik sunucunuz çevrimiçi olana kadar bazı özellikler mevcut olmayacak. Bu uyarıyı sĂŒrekli görĂŒyorsanız, yapılandırmanızı kontrol edin veya sunucu yöneticinizle iletiĆime geçin.",
+ "You can reset your password, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Parolanızı sıfırlayabilirsiniz, fakat kimlik sunucunuz çevrimiçi olana kadar bazı özellikler mevcut olmayacak. Bu uyarıyı sĂŒrekli görĂŒyorsanız, yapılandırmanızı kontrol edin veya sunucu yöneticinizle iletiĆime geçin.",
+ "You can log in, but some features will be unavailable until the identity server is back online. If you keep seeing this warning, check your configuration or contact a server admin.": "Oturum açabilirsiniz, fakat kimlik sunucunuz çevrimiçi olana kadar bazı özellikler mevcut olmayacak. Bu uyarıyı sĂŒrekli görĂŒyorsanız, yapılandırmanızı kontrol edin veya sunucu yöneticinizle iletiĆime geçin.",
+ "a few seconds from now": "Ću andan itibaren bir kaç saniye",
+ "about a minute from now": "Ću andan itibaren yaklaĆık bir dakika",
+ "%(num)s minutes from now": "Ću andan itibaren %(num)s dakika",
+ "about an hour from now": "Ću andan itibaren yaklaĆık bir saat",
+ "%(num)s hours from now": "Ću andan itibaren %(num)s saat",
+ "about a day from now": "Ću andan itibaren yaklaĆık bir gĂŒn",
+ "%(num)s days from now": "Ću andan itibaren %(num)s gĂŒn",
+ "The user must be unbanned before they can be invited.": "Kullanıcının davet edilebilmesi için öncesinde yasaÄının kaldırılması gereklidir.",
+ "Repeats like \"abcabcabc\" are only slightly harder to guess than \"abc\"": "âabcabcabcâ gibi tekrarlar âabcâ yi tahmin etmekten çok az daha zor olur",
+ "Sequences like abc or 6543 are easy to guess": "abc veya 6543 gibi diziler tahmin için oldukça kolaydır",
+ "Common names and surnames are easy to guess": "Yaygın isimleri ve soyisimleri tahmin etmek oldukça kolay",
+ "Enable cross-signing to verify per-user instead of per-device (in development)": "Her cihaz yerine her kullanıcıyı doÄrulamak için çarpraz-imzalamayı aç (geliĆtiriliyor)",
+ "Show info about bridges in room settings": "Oda ayarlarındaki köprĂŒlerin bilgilerini göster",
+ "Show a placeholder for removed messages": "Silinen mesajlar için bir yer tutucu göster",
+ "Show display name changes": "Ekran isim deÄiĆikliklerini göster",
+ "Enable URL previews for this room (only affects you)": "Bu oda için URL önizlemeyi aç (sadece sizi etkiler)",
+ "Enable URL previews by default for participants in this room": "Bu odadaki katılımcılar için URL önizlemeyi varsayılan olarak açık hale getir",
+ "Enable widget screenshots on supported widgets": "Desteklenen görsel bileĆenlerde anlık görĂŒntĂŒleri aç"
}
From 440b3fd1fdefe69993ff1b73d1a7b0c6de7ff317 Mon Sep 17 00:00:00 2001
From: Osoitz
Date: Sat, 25 Jan 2020 11:39:29 +0000
Subject: [PATCH 40/61] Translated using Weblate (Basque)
Currently translated at 100.0% (2050 of 2050 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eu/
---
src/i18n/strings/eu.json | 40 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 38 insertions(+), 2 deletions(-)
diff --git a/src/i18n/strings/eu.json b/src/i18n/strings/eu.json
index 97cef0c70d..1ab4bd15b1 100644
--- a/src/i18n/strings/eu.json
+++ b/src/i18n/strings/eu.json
@@ -1617,7 +1617,7 @@
"Resend edit": "Birbidali edizioa",
"Resend %(unsentCount)s reaction(s)": "Birbidali %(unsentCount)s erreakzio",
"Resend removal": "Birbidali kentzeko agindua",
- "Forgotten your password?": "Pasahitza ahaztu duzu?",
+ "Forgotten your password?": "Pasahitza ahaztuta?",
"Sign in and regain access to your account.": "Hasi saioa eta berreskuratu zure kontua.",
"You're signed out": "Saioa amaitu duzu",
"Clear personal data": "Garbitu datu pertsonalak",
@@ -2074,5 +2074,41 @@
"Done": "Egina",
"Without completing security on this device, it wonât have access to encrypted messages.": "Gailu honetan segurtasuna osatu ezean, ez du zifratutako mezuetara sarbiderik izango.",
"Go Back": "Joan atzera",
- "Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup.": "Biltegi sekretua oraingo gakoen babeskopiaren xehetasunak erabiliz ezarriko da. Zure biltegi sekretuaren pasa-esaldia eta berreskuratze gakoa zure gakoen babes-kopiarako zenerabiltzanak izango dira."
+ "Secret Storage will be set up using your existing key backup details. Your secret storage passphrase and recovery key will be the same as they were for your key backup.": "Biltegi sekretua oraingo gakoen babeskopiaren xehetasunak erabiliz ezarriko da. Zure biltegi sekretuaren pasa-esaldia eta berreskuratze gakoa zure gakoen babes-kopiarako zenerabiltzanak izango dira.",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s erabiltzaileak %(addedAddresses)s helbideak eta beste %(count)s gehitu dizkio gela honi",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s erabiltzaileak %(removedAddresses)s helbideak eta beste %(count)s kendu dizkio gela honi",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s erabiltzaileak %(countRemoved)s helbide kendu eta %(countAdded)s gehitu dizkio gela honi",
+ "%(senderName)s turned on end-to-end encryption.": "%(senderName)s erabiltzaileak muturretik muturrera zifratzea aktibatu du.",
+ "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s erabiltzaileak muturretik muturrera zifratzea gaitu du (%(algorithm)s algoritmo ezezaguna).",
+ "Someone is using an unknown device": "Baten bat gailu ezezagun bat erabiltzen ari da",
+ "This room is end-to-end encrypted": "Gela hau muturretik muturrera zifratuta dago",
+ "Everyone in this room is verified": "Gelako guztiak egiaztatuta daude",
+ "Encrypted by a deleted device": "Ezabatutako gailu batek zifratua",
+ "Invite only": "Gonbidapenez besterik ez",
+ "Send a replyâŠ": "Bidali erantzunaâŠ",
+ "Send a messageâŠ": "Bidali mezuaâŠ",
+ "Reject & Ignore user": "Ukatu eta ezikusi erabiltzailea",
+ "Unknown Command": "Agindu ezezaguna",
+ "Unrecognised command: %(commandText)s": "Agindu ezezaguna: %(commandText)s",
+ "You can use /help
to list available commands. Did you mean to send this as a message?": "/help
erabili dezakezu agindu erabilgarrien zerrenda ikusteko. Ala mezu gisa bidali nahi zenuen hau?",
+ "Hint: Begin your message with //
to start it with a slash.": "Aholkua: Hasi zure mezua //
idatziz barra batekin hasi nahi baduzu.",
+ "Send as message": "Bidali mezu gisa",
+ "Verify User": "Egiaztatu erabiltzailea",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "Segurtasun gehiagorako, egiaztatu erabiltzaile hau aldi-bakarrerako kode bat bi gailuetan egiaztatuz.",
+ "For maximum security, do this in person.": "Segurtasun gorenerako, egin hau aurrez aurre.",
+ "Start Verification": "Hasi egiaztaketa",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link .": "Ez baduzu baten bat aurkitzen, eskatu bere erabiltzaile-izena, partekatu zurea (%(userId)s) edo partekatu profilaren esteka .",
+ "Enter your account password to confirm the upgrade:": "Sartu zure kontuaren pasa-hitza eguneraketa baieztatzeko:",
+ "You'll need to authenticate with the server to confirm the upgrade.": "Zerbitzariarekin autentifikatu beharko duzu eguneraketa baieztatzeko.",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Eguneratu gailu hau honek beste gailuak egiaztatu ahal izateko, horrela zifratutako mezuetara sarbidea emanez eta beste erabiltzaileentzat fidagarri gisa markatzeko.",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Ezarri zifratzea gailu honetan honek beste gailuak egiaztatu ahal izateko, horrela zifratutako mezuetara sarbidea emanez eta beste erabiltzaileentzat fidagarri gisa markatzeko.",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Babestu zure zifratze gakoak pasa-esaldi batekin. Segurtasun gorenerako hau eta zure kontuaren pasahitza desberdinak izan beharko lukete:",
+ "Enter a passphrase": "Sartu pasa-esaldia",
+ "Enter your passphrase a second time to confirm it.": "Sartu zure pasa-esaldia berriro hau baieztatzeko.",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Gailu honek beste gailuak egiaztatu ditzake, horrela zifratutako mezuetara sarbidea emanez eta beste erabiltzaileentzat fidagarri gisa markatuz.",
+ "Verify other users in their profile.": "Egiaztatu beste erabiltzaileak bere profiletan.",
+ "Upgrade your encryption": "Eguneratu zure zifratzea",
+ "Set up encryption": "Ezarri zifratzea",
+ "Encryption upgraded": "Zifratzea eguneratuta",
+ "Encryption setup complete": "Zifratzearen ezarpena egina"
}
From e710607a7244452aeb66f2c3204ccea62351bcd8 Mon Sep 17 00:00:00 2001
From: Jeff Huang
Date: Sat, 25 Jan 2020 08:22:40 +0000
Subject: [PATCH 41/61] Translated using Weblate (Chinese (Traditional))
Currently translated at 100.0% (2050 of 2050 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/zh_Hant/
---
src/i18n/strings/zh_Hant.json | 28 +++++++++++++++++++++++++++-
1 file changed, 27 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/zh_Hant.json b/src/i18n/strings/zh_Hant.json
index 03fbe6f61b..4a70441317 100644
--- a/src/i18n/strings/zh_Hant.json
+++ b/src/i18n/strings/zh_Hant.json
@@ -2085,5 +2085,31 @@
"Unrecognised command: %(commandText)s": "çĄæłèć„çæ什ïŒ%(commandText)s",
"You can use /help
to list available commands. Did you mean to send this as a message?": "æšćŻä»„äœżçš /help
äŸććșćŻçšçæ什ăæšæŻèŠćłéæ€èšæŻćïŒ",
"Hint: Begin your message with //
to start it with a slash.": "æç€șïŒä»„ //
éé èźæšçèšæŻćłéæćŻä»„çšæç·éé ă",
- "Send as message": "仄èšæŻćłé"
+ "Send as message": "仄èšæŻćłé",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s ćæ€è怩柀æ°ćąäș %(addedAddresses)s èć
¶ä» %(count)s ćć°ć",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s ćŸæ€è怩柀移é€äș %(removedAddresses)s èć
¶ä» %(count)s ćć°ć",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s ć°æ€è怩柀移é€äș %(countRemoved)s ć䞊æ°ćąäș %(countAdded)s ć°ćć°æ€è怩柀",
+ "%(senderName)s turned on end-to-end encryption.": "%(senderName)s éćäșç«Żć°ç«Żć ćŻă",
+ "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s éćäșç«Żć°ç«Żć ćŻïŒçĄæłèć„çæŒçźæł %(algorithm)sïŒă",
+ "Someone is using an unknown device": "æäșșæŁćšäœżçšæȘç„çèŁçœź",
+ "This room is end-to-end encrypted": "æ€è怩柀ć·Čç«Żć°ç«Żć ćŻ",
+ "Everyone in this room is verified": "æ€è怩柀äžæŻćäșșéœć·Čé©è",
+ "Invite only": "ć
éè«",
+ "Send a replyâŠ": "ćłéćèŠâŠâŠ",
+ "Send a messageâŠ": "ćłéèšæŻâŠâŠ",
+ "Reject & Ignore user": "ćç”äžŠćżœç„äœżçšè
",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link .": "ćŠææšæŸäžć°æäșșïŒè«è©ąćä»ć仄ććŸä»ćçäœżçšè
ćçš±ïŒćäș«æšçäœżçšè
ćçš± (%(userId)s) æç°Ąä»éŁç” ă",
+ "Enter your account password to confirm the upgrade:": "茞ć
„æšçćžłèćŻçąŒä»„çąșèȘćçŽïŒ",
+ "You'll need to authenticate with the server to confirm the upgrade.": "æšćż
é ééäŒșæćšé©è仄çąșèȘćçŽă",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "ćçŽæ€èŁçœźä»„ć
èš±ć
¶é©èć
¶ä»èŁçœźïŒäžŠć
èš±ććć ćŻèšæŻä»„ćć°ćźćæšèšçșćć
¶ä»äœżçšè
俥任ă",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "ćšæ€èŁçœźäžèšćźć ćŻä»„ć
èš±ć
¶é©èć
¶ä»èŁçœźïŒäžŠć
èš±ććć ćŻèšæŻä»„ćć°ćźćæšèšçșćć
¶ä»äœżçšè
俥任ă",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "äœżçšééćŻèȘäżè·æšçć ćŻéé°ăçșäșććŸæćŒ·çćźć
šæ§ïŒæ€ééćŻèȘæèæšçćžłèćŻçąŒäžćïŒ",
+ "Enter a passphrase": "茞ć
„ééćŻèȘ",
+ "Enter your passphrase a second time to confirm it.": "茞ć
„æšçééćŻèȘć
©æŹĄä»„çąșèȘă",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "æ€èŁçœźçŸćšćŻä»„é©èć
¶ä»èŁçœźïŒäžŠć
èš±ććć ćŻèšæŻä»„ćć°ćźćæšèšçșćć
¶ä»äœżçšè
俥任ă",
+ "Verify other users in their profile.": "ééä»ćçç°Ąä»é©èć
¶ä»äœżçšè
ă",
+ "Upgrade your encryption": "ćçŽæšçć ćŻ",
+ "Set up encryption": "èšćźć ćŻ",
+ "Encryption upgraded": "ć ćŻć·ČćçŽ",
+ "Encryption setup complete": "ć ćŻèšćźćźæ"
}
From c96f82cd8b742b9f863099a2d7a6c2de7275768e Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?K=C3=A9vin=20C?=
Date: Sat, 25 Jan 2020 08:09:22 +0000
Subject: [PATCH 42/61] Translated using Weblate (French)
Currently translated at 100.0% (2050 of 2050 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/fr/
---
src/i18n/strings/fr.json | 11 ++++++++++-
1 file changed, 10 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/fr.json b/src/i18n/strings/fr.json
index 5d02717b0c..1ddcc55544 100644
--- a/src/i18n/strings/fr.json
+++ b/src/i18n/strings/fr.json
@@ -2102,5 +2102,14 @@
"Upgrade your encryption": "Mettre Ă niveau votre chiffrement",
"Set up encryption": "Configurer le chiffrement",
"Encryption upgraded": "Chiffrement mis Ă niveau",
- "Encryption setup complete": "Configuration du chiffrement terminé"
+ "Encryption setup complete": "Configuration du chiffrement terminé",
+ "%(senderName)s turned on end-to-end encryption.": "%(senderName)s a activé le chiffrement de bout en bout.",
+ "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s a activé le chiffrement de bout en bout (algorithme %(algorithm)s non reconnu).",
+ "Someone is using an unknown device": "Quelqu'un utilise un appareil inconnu",
+ "This room is end-to-end encrypted": "Ce salon est chiffré de bout en bout",
+ "Everyone in this room is verified": "Tout le monde dans ce salon est vérifié",
+ "Invite only": "Uniquement sur invitation",
+ "Send a replyâŠ": "Envoyer une rĂ©ponseâŠ",
+ "Send a messageâŠ": "Envoyer un messageâŠ",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link .": "Si vous nâarrivez pas Ă trouver quelquâun, demandez-lui son nom dâutilisateur, partagez votre nom dâutilisateur (%(userId)s) ou votre lien de profil ."
}
From 437b45f8a65decdf6d83f5e61e484f345505f314 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Sat, 25 Jan 2020 15:28:06 +0000
Subject: [PATCH 43/61] Remember password for e2e bootstrapping
Fixes https://github.com/vector-im/riot-web/issues/12046
---
.../CreateSecretStorageDialog.js | 3 ++-
src/components/structures/MatrixChat.js | 24 +++++++++++++++----
src/components/structures/auth/E2eSetup.js | 2 ++
src/components/structures/auth/Login.js | 7 +++++-
.../structures/auth/Registration.js | 8 ++++++-
5 files changed, 36 insertions(+), 8 deletions(-)
diff --git a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
index 92ede334d0..0867cae6f4 100644
--- a/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
+++ b/src/async-components/views/dialogs/secretstorage/CreateSecretStorageDialog.js
@@ -55,6 +55,7 @@ function selectText(target) {
export default class CreateSecretStorageDialog extends React.PureComponent {
static propTypes = {
hasCancel: PropTypes.bool,
+ accountPassword: PropTypes.string,
};
defaultProps = {
@@ -82,7 +83,7 @@ export default class CreateSecretStorageDialog extends React.PureComponent {
// does the server offer a UI auth flow with just m.login.password
// for /keys/device_signing/upload?
canUploadKeysWithPasswordOnly: null,
- accountPassword: '',
+ accountPassword: props.accountPassword,
accountPasswordCorrect: null,
// set if we are 'upgrading' encryption (making an SSSS store from
// an existing key backup secret).
diff --git a/src/components/structures/MatrixChat.js b/src/components/structures/MatrixChat.js
index b4b38d7617..133d74db45 100644
--- a/src/components/structures/MatrixChat.js
+++ b/src/components/structures/MatrixChat.js
@@ -256,6 +256,9 @@ export default createReactClass({
// logout page.
Lifecycle.loadSession({});
}
+
+ this._accountPassword = null;
+ this._accountPasswordTimer = null;
},
componentDidMount: function() {
@@ -352,6 +355,8 @@ export default createReactClass({
window.removeEventListener("focus", this.onFocus);
window.removeEventListener('resize', this.handleResize);
this.state.resizeNotifier.removeListener("middlePanelResized", this._dispatchTimelineResize);
+
+ if (this._accountPasswordTimer !== null) clearTimeout(this._accountPasswordTimer);
},
componentWillUpdate: function(props, state) {
@@ -1729,9 +1734,8 @@ export default createReactClass({
this.showScreen("forgot_password");
},
- onRegisterFlowComplete: function(credentials) {
- this.onUserCompletedLoginFlow();
- return this.onRegistered(credentials);
+ onRegisterFlowComplete: function(credentials, password) {
+ return this.onUserCompletedLoginFlow(credentials, password);
},
// returns a promise which resolves to the new MatrixClient
@@ -1822,7 +1826,14 @@ export default createReactClass({
this._loggedInView = ref;
},
- async onUserCompletedLoginFlow(credentials) {
+ async onUserCompletedLoginFlow(credentials, password) {
+ this._accountPassword = password;
+ // self-destruct the password after 5mins
+ if (this._accountPasswordTimer !== null) clearTimeout(this._accountPasswordTimer);
+ this._accountPasswordTimer = setTimeout(() => {
+ this._accountPassword = null;
+ this._accountPasswordTimer = null;
+ }, 60 * 5 * 1000);
// Wait for the client to be logged in (but not started)
// which is enough to ask the server about account data.
const loggedIn = new Promise(resolve => {
@@ -1836,7 +1847,7 @@ export default createReactClass({
});
// Create and start the client in the background
- Lifecycle.setLoggedIn(credentials);
+ const setLoggedInPromise = Lifecycle.setLoggedIn(credentials);
await loggedIn;
const cli = MatrixClientPeg.get();
@@ -1865,6 +1876,8 @@ export default createReactClass({
} else {
this._onLoggedIn();
}
+
+ return setLoggedInPromise;
},
// complete security / e2e setup has finished
@@ -1896,6 +1909,7 @@ export default createReactClass({
view = (
);
} else if (this.state.view === VIEWS.POST_REGISTRATION) {
diff --git a/src/components/structures/auth/E2eSetup.js b/src/components/structures/auth/E2eSetup.js
index a5f4ff933b..29b4345761 100644
--- a/src/components/structures/auth/E2eSetup.js
+++ b/src/components/structures/auth/E2eSetup.js
@@ -22,6 +22,7 @@ import * as sdk from '../../../index';
export default class E2eSetup extends React.Component {
static propTypes = {
onFinished: PropTypes.func.isRequired,
+ accountPassword: PropTypes.string,
};
constructor() {
@@ -40,6 +41,7 @@ export default class E2eSetup extends React.Component {
diff --git a/src/components/structures/auth/Login.js b/src/components/structures/auth/Login.js
index 7bc2dbcbae..c8b2a1ea9c 100644
--- a/src/components/structures/auth/Login.js
+++ b/src/components/structures/auth/Login.js
@@ -58,6 +58,11 @@ export default createReactClass({
displayName: 'Login',
propTypes: {
+ // Called when the user has logged in. Params:
+ // - The object returned by the login API
+ // - The user's password, if applicable, (may be cached in memory for a
+ // short time so the user is not required to re-enter their password
+ // for operations like uploading cross-signing keys).
onLoggedIn: PropTypes.func.isRequired,
// If true, the component will consider itself busy.
@@ -181,7 +186,7 @@ export default createReactClass({
username, phoneCountry, phoneNumber, password,
).then((data) => {
this.setState({serverIsAlive: true}); // it must be, we logged in.
- this.props.onLoggedIn(data);
+ this.props.onLoggedIn(data, password);
}, (error) => {
if (this._unmounted) {
return;
diff --git a/src/components/structures/auth/Registration.js b/src/components/structures/auth/Registration.js
index fdf2f51e00..171d3ada26 100644
--- a/src/components/structures/auth/Registration.js
+++ b/src/components/structures/auth/Registration.js
@@ -45,7 +45,13 @@ export default createReactClass({
displayName: 'Registration',
propTypes: {
+ // Called when the user has logged in. Params:
+ // - object with userId, deviceId, homeserverUrl, identityServerUrl, accessToken
+ // - The user's password, if available and applicable (may be cached in memory
+ // for a short time so the user is not required to re-enter their password
+ // for operations like uploading cross-signing keys).
onLoggedIn: PropTypes.func.isRequired,
+
clientSecret: PropTypes.string,
sessionId: PropTypes.string,
makeRegistrationUrl: PropTypes.func.isRequired,
@@ -348,7 +354,7 @@ export default createReactClass({
homeserverUrl: this.state.matrixClient.getHomeserverUrl(),
identityServerUrl: this.state.matrixClient.getIdentityServerUrl(),
accessToken: response.access_token,
- });
+ }, this.state.formVals.password);
this._setupPushers(cli);
// we're still busy until we get unmounted: don't show the registration form again
From 8c5fd5c77e7110abba89412d41004149b6633918 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Sat, 25 Jan 2020 16:52:12 +0000
Subject: [PATCH 44/61] Verification nag toasts
Implement the three differenty cases for this session, and also fix
ones for other sessions which had the wrong copy.
Fixes https://github.com/vector-im/riot-web/issues/11220
---
src/DeviceListener.js | 87 +++++++++++++++++--
.../views/toasts/NewSessionToast.js | 6 +-
.../views/toasts/SetupEncryptionToast.js | 68 +++++++++++++++
src/i18n/strings/en_EN.json | 11 ++-
4 files changed, 160 insertions(+), 12 deletions(-)
create mode 100644 src/components/views/toasts/SetupEncryptionToast.js
diff --git a/src/DeviceListener.js b/src/DeviceListener.js
index a4c5785db4..dc066eb7cb 100644
--- a/src/DeviceListener.js
+++ b/src/DeviceListener.js
@@ -24,6 +24,9 @@ function toastKey(device) {
return 'newsession_' + device.deviceId;
}
+const KEY_BACKUP_POLL_INTERVAL = 5 * 60 * 1000;
+const THIS_DEVICE_TOAST_KEY = 'setupencryption';
+
export default class DeviceListener {
static sharedInstance() {
if (!global.mx_DeviceListener) global.mx_DeviceListener = new DeviceListener();
@@ -33,42 +36,114 @@ export default class DeviceListener {
constructor() {
// device IDs for which the user has dismissed the verify toast ('Later')
this._dismissed = new Set();
+ // has the user dismissed any of the various nag toasts to setup encryption on this device?
+ this._dismissedThisDeviceToast = false;
+
+ // cache of the key backup info
+ this._keyBackupInfo = null;
+ this._keyBackupFetchedAt = null;
}
start() {
MatrixClientPeg.get().on('crypto.devicesUpdated', this._onDevicesUpdated);
MatrixClientPeg.get().on('deviceVerificationChanged', this._onDeviceVerificationChanged);
- this.recheck();
+ MatrixClientPeg.get().on('userTrustStatusChanged', this._onUserTrustStatusChanged);
+ this._recheck();
}
stop() {
if (MatrixClientPeg.get()) {
MatrixClientPeg.get().removeListener('crypto.devicesUpdated', this._onDevicesUpdated);
MatrixClientPeg.get().removeListener('deviceVerificationChanged', this._onDeviceVerificationChanged);
+ MatrixClientPeg.get().removeListener('userTrustStatusChanged', this._onUserTrustStatusChanged);
}
this._dismissed.clear();
}
dismissVerification(deviceId) {
this._dismissed.add(deviceId);
- this.recheck();
+ this._recheck();
+ }
+
+ dismissEncryptionSetup() {
+ this._dismissedThisDeviceToast = true;
+ this._recheck();
}
_onDevicesUpdated = (users) => {
if (!users.includes(MatrixClientPeg.get().getUserId())) return;
- this.recheck();
+ this._recheck();
}
_onDeviceVerificationChanged = (users) => {
if (!users.includes(MatrixClientPeg.get().getUserId())) return;
- this.recheck();
+ this._recheck();
}
- async recheck() {
+ _onUserTrustStatusChanged = (userId, trustLevel) => {
+ if (userId !== MatrixClientPeg.get().getUserId()) return;
+ this._recheck();
+ }
+
+ // The server doesn't tell us when key backup is set up, so we poll
+ // & cache the result
+ async _getKeyBackupInfo() {
+ const now = (new Date()).getTime();
+ if (!this._keyBackupInfo || this._keyBackupFetchedAt < now - KEY_BACKUP_POLL_INTERVAL) {
+ this._keyBackupInfo = await MatrixClientPeg.get().getKeyBackupVersion();
+ this._keyBackupFetchedAt = now;
+ }
+ return this._keyBackupInfo;
+ }
+
+ async _recheck() {
if (!SettingsStore.isFeatureEnabled("feature_cross_signing")) return;
const cli = MatrixClientPeg.get();
- if (!cli.isCryptoEnabled()) return false;
+ if (!cli.isCryptoEnabled()) return;
+ if (!cli.getCrossSigningId()) {
+ if (this._dismissedThisDeviceToast) {
+ ToastStore.sharedInstance().dismissToast(THIS_DEVICE_TOAST_KEY);
+ return;
+ }
+
+ // cross signing isn't enabled - nag to enable it
+ // There 3 different toasts for:
+ if (cli.getStoredCrossSigningForUser(cli.getUserId())) {
+ // Cross-signing on account but this device doesn't trust the master key (verify this session)
+ ToastStore.sharedInstance().addOrReplaceToast({
+ key: THIS_DEVICE_TOAST_KEY,
+ title: _t("Verify this Session"),
+ icon: "verification_warning",
+ props: {kind: 'verify_this_session'},
+ component: sdk.getComponent("toasts.SetupEncryptionToast"),
+ });
+ } else {
+ const backupInfo = await this._getKeyBackupInfo();
+ if (backupInfo) {
+ // No cross-signing on account but key backup available (upgrade encryption)
+ ToastStore.sharedInstance().addOrReplaceToast({
+ key: THIS_DEVICE_TOAST_KEY,
+ title: _t("Encryption upgrade available"),
+ icon: "verification_warning",
+ props: {kind: 'upgrade_encryption'},
+ component: sdk.getComponent("toasts.SetupEncryptionToast"),
+ });
+ } else {
+ // No cross-signing or key backup on account (set up encryption)
+ ToastStore.sharedInstance().addOrReplaceToast({
+ key: THIS_DEVICE_TOAST_KEY,
+ title: _t("Set up encryption"),
+ icon: "verification_warning",
+ props: {kind: 'set_up_encryption'},
+ component: sdk.getComponent("toasts.SetupEncryptionToast"),
+ });
+ }
+ }
+ return;
+ } else {
+ ToastStore.sharedInstance().dismissToast(THIS_DEVICE_TOAST_KEY);
+ }
const devices = await cli.getStoredDevicesForUser(cli.getUserId());
for (const device of devices) {
diff --git a/src/components/views/toasts/NewSessionToast.js b/src/components/views/toasts/NewSessionToast.js
index f83326121b..3b60f59131 100644
--- a/src/components/views/toasts/NewSessionToast.js
+++ b/src/components/views/toasts/NewSessionToast.js
@@ -32,7 +32,7 @@ export default class VerifySessionToast extends React.PureComponent {
DeviceListener.sharedInstance().dismissVerification(this.props.deviceId);
};
- _onVerifyClick = async () => {
+ _onReviewClick = async () => {
const cli = MatrixClientPeg.get();
const DeviceVerifyDialog = sdk.getComponent('views.dialogs.DeviceVerifyDialog');
@@ -47,10 +47,10 @@ export default class VerifySessionToast extends React.PureComponent {
render() {
const FormButton = sdk.getComponent("elements.FormButton");
return (
-
{_t("Other users may not trust it")}
+
{_t("Review & verify your new session")}
-
+
);
}
diff --git a/src/components/views/toasts/SetupEncryptionToast.js b/src/components/views/toasts/SetupEncryptionToast.js
new file mode 100644
index 0000000000..841ee66ac7
--- /dev/null
+++ b/src/components/views/toasts/SetupEncryptionToast.js
@@ -0,0 +1,68 @@
+/*
+Copyright 2020 The Matrix.org Foundation C.I.C.
+
+Licensed under the Apache License, Version 2.0 (the "License");
+you may not use this file except in compliance with the License.
+You may obtain a copy of the License at
+
+http://www.apache.org/licenses/LICENSE-2.0
+
+Unless required by applicable law or agreed to in writing, software
+distributed under the License is distributed on an "AS IS" BASIS,
+WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+See the License for the specific language governing permissions and
+limitations under the License.
+*/
+
+import React from 'react';
+import PropTypes from 'prop-types';
+import * as sdk from "../../../index";
+import { _t } from '../../../languageHandler';
+import DeviceListener from '../../../DeviceListener';
+import { accessSecretStorage } from '../../../CrossSigningManager';
+
+export default class SetupEncryptionToast extends React.PureComponent {
+ static propTypes = {
+ toastKey: PropTypes.string.isRequired,
+ kind: PropTypes.oneOf(['set_up_encryption', 'verify_this_session', 'upgrade_encryption']).isRequired,
+ };
+
+ _onLaterClick = () => {
+ DeviceListener.sharedInstance().dismissEncryptionSetup();
+ };
+
+ _onSetupClick = async () => {
+ accessSecretStorage();
+ };
+
+ getDescription() {
+ switch (this.props.kind) {
+ case 'set_up_encryption':
+ case 'upgrade_encryption':
+ return _t('Verify your other devices easier');
+ case 'verify_this_session':
+ return _t('Other users may not trust it');
+ }
+ }
+
+ getSetupCaption() {
+ switch (this.props.kind) {
+ case 'set_up_encryption':
+ case 'upgrade_encryption':
+ return _t('Upgrade');
+ case 'verify_this_session':
+ return _t('Verify');
+ }
+ }
+
+ render() {
+ const FormButton = sdk.getComponent("elements.FormButton");
+ return (
+
{this.getDescription()}
+
+
+
+
+
);
+ }
+}
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 79f5731aed..0d033dff4d 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -88,6 +88,9 @@
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s",
+ "Verify this Session": "Verify this Session",
+ "Encryption upgrade available": "Encryption upgrade available",
+ "Set up encryption": "Set up encryption",
"New Session": "New Session",
"Who would you like to add to this community?": "Who would you like to add to this community?",
"Warning: any person you add to a community will be publicly visible to anyone who knows the community ID": "Warning: any person you add to a community will be publicly visible to anyone who knows the community ID",
@@ -509,8 +512,12 @@
"Headphones": "Headphones",
"Folder": "Folder",
"Pin": "Pin",
- "Other users may not trust it": "Other users may not trust it",
+ "Review & verify your new session": "Review & verify your new session",
"Later": "Later",
+ "Review": "Review",
+ "Verify your other devices easier": "Verify your other devices easier",
+ "Other users may not trust it": "Other users may not trust it",
+ "Upgrade": "Upgrade",
"Verify": "Verify",
"Decline (%(counter)s)": "Decline (%(counter)s)",
"Accept to continue:": "Accept to continue:",
@@ -1514,7 +1521,6 @@
"Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.": "Upgrading a room is an advanced action and is usually recommended when a room is unstable due to bugs, missing features or security vulnerabilities.",
"This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug .": "This usually only affects how the room is processed on the server. If you're having problems with your Riot, please report a bug .",
"You'll upgrade this room from to .": "You'll upgrade this room from to .",
- "Upgrade": "Upgrade",
"Sign out and remove encryption keys?": "Sign out and remove encryption keys?",
"Clear Storage and Sign Out": "Clear Storage and Sign Out",
"Send Logs": "Send Logs",
@@ -2008,7 +2014,6 @@
"Set up secret storage": "Set up secret storage",
"Restore your Key Backup": "Restore your Key Backup",
"Upgrade your encryption": "Upgrade your encryption",
- "Set up encryption": "Set up encryption",
"Recovery key": "Recovery key",
"Keep it safe": "Keep it safe",
"Storing secrets...": "Storing secrets...",
From 7169a8444959fe384504e99c5a0736408e9120ef Mon Sep 17 00:00:00 2001
From: David Baker
Date: Sat, 25 Jan 2020 17:08:31 +0000
Subject: [PATCH 45/61] Dismiss toasts for logged out devices
---
src/DeviceListener.js | 20 ++++++++++++++++----
1 file changed, 16 insertions(+), 4 deletions(-)
diff --git a/src/DeviceListener.js b/src/DeviceListener.js
index dc066eb7cb..3135e3d9a5 100644
--- a/src/DeviceListener.js
+++ b/src/DeviceListener.js
@@ -20,8 +20,8 @@ import * as sdk from './index';
import { _t } from './languageHandler';
import ToastStore from './stores/ToastStore';
-function toastKey(device) {
- return 'newsession_' + device.deviceId;
+function toastKey(deviceId) {
+ return 'newsession_' + deviceId;
}
const KEY_BACKUP_POLL_INTERVAL = 5 * 60 * 1000;
@@ -34,6 +34,8 @@ export default class DeviceListener {
}
constructor() {
+ // set of device ID's we're currently showing toasts for
+ this._activeNagToasts = new Set();
// device IDs for which the user has dismissed the verify toast ('Later')
this._dismissed = new Set();
// has the user dismissed any of the various nag toasts to setup encryption on this device?
@@ -145,22 +147,32 @@ export default class DeviceListener {
ToastStore.sharedInstance().dismissToast(THIS_DEVICE_TOAST_KEY);
}
+ const newActiveToasts = new Set();
+
const devices = await cli.getStoredDevicesForUser(cli.getUserId());
for (const device of devices) {
if (device.deviceId == cli.deviceId) continue;
const deviceTrust = await cli.checkDeviceTrust(cli.getUserId(), device.deviceId);
if (deviceTrust.isCrossSigningVerified() || this._dismissed.has(device.deviceId)) {
- ToastStore.sharedInstance().dismissToast(toastKey(device));
+ ToastStore.sharedInstance().dismissToast(toastKey(device.deviceId));
} else {
+ this._activeNagToasts.add(device.deviceId);
ToastStore.sharedInstance().addOrReplaceToast({
- key: toastKey(device),
+ key: toastKey(device.deviceId),
title: _t("New Session"),
icon: "verification_warning",
props: {deviceId: device.deviceId},
component: sdk.getComponent("toasts.NewSessionToast"),
});
+ newActiveToasts.add(device.deviceId);
}
}
+
+ // clear any other outstanding toasts (eg. logged out devices)
+ for (const deviceId of this._activeNagToasts) {
+ if (!newActiveToasts.has(deviceId)) ToastStore.sharedInstance().dismissToast(toastKey(deviceId));
+ }
+ this._activeNagToasts = newActiveToasts;
}
}
From 9e38c627913444f358939533c43fce2dc7754ebf Mon Sep 17 00:00:00 2001
From: David Baker
Date: Sat, 25 Jan 2020 20:42:45 +0000
Subject: [PATCH 46/61] Show incoming verification requests in the 'complete
security' phase
If you click to verify your new sign in on another device, actually
show the verification request on the 'complete security' screen.
---
.../structures/auth/CompleteSecurity.js | 40 ++++++++++++++++++-
1 file changed, 39 insertions(+), 1 deletion(-)
diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js
index 89711fcb1d..ce938bd2f8 100644
--- a/src/components/structures/auth/CompleteSecurity.js
+++ b/src/components/structures/auth/CompleteSecurity.js
@@ -35,7 +35,18 @@ export default class CompleteSecurity extends React.Component {
this.state = {
phase: PHASE_INTRO,
+ verificationRequest: null,
};
+ MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest);
+ }
+
+ componentWillUnmount() {
+ if (this.state.verificationRequest) {
+ this.state.verificationRequest.off("change", this.onVerificationRequestChange);
+ }
+ if (MatrixClientPeg.get()) {
+ MatrixClientPeg.get().removeListener("crypto.verification.request", this.onVerificationRequest);
+ }
}
onStartClick = async () => {
@@ -55,6 +66,27 @@ export default class CompleteSecurity extends React.Component {
}
}
+ onVerificationRequest = (request) => {
+ if (request.otherUserId !== MatrixClientPeg.get().getUserId()) return;
+
+ if (this.state.verificationRequest) {
+ this.state.verificationRequest.off("change", this.onVerificationRequestChange);
+ }
+ request.on("change", this.onVerificationRequestChange);
+ this.setState({
+ verificationRequest: request,
+ });
+ }
+
+ onVerificationRequestChange = () => {
+ if (this.state.verificationRequest.cancelled) {
+ this.state.verificationRequest.off("change", this.onVerificationRequestChange);
+ this.setState({
+ verificationRequest: null,
+ });
+ }
+ }
+
onSkipClick = () => {
this.setState({
phase: PHASE_CONFIRM_SKIP,
@@ -87,7 +119,13 @@ export default class CompleteSecurity extends React.Component {
let icon;
let title;
let body;
- if (phase === PHASE_INTRO) {
+
+ if (this.state.verificationRequest) {
+ const IncomingSasDialog = sdk.getComponent("views.dialogs.IncomingSasDialog");
+ body = ;
+ } else if (phase === PHASE_INTRO) {
icon = ;
title = _t("Complete security");
body = (
From f851f976e7e82017cc02955c3adf758664d85ccc Mon Sep 17 00:00:00 2001
From: David Baker
Date: Sat, 25 Jan 2020 21:26:43 +0000
Subject: [PATCH 47/61] Stop rogue verification toast if you verify during
login
Fixes https://github.com/vector-im/riot-web/issues/12057
---
src/components/structures/ToastContainer.js | 2 --
src/components/views/toasts/VerificationRequestToast.js | 7 +++++++
2 files changed, 7 insertions(+), 2 deletions(-)
diff --git a/src/components/structures/ToastContainer.js b/src/components/structures/ToastContainer.js
index 8a05f62e61..298c40e825 100644
--- a/src/components/structures/ToastContainer.js
+++ b/src/components/structures/ToastContainer.js
@@ -23,9 +23,7 @@ export default class ToastContainer extends React.Component {
constructor() {
super();
this.state = {toasts: ToastStore.sharedInstance().getToasts()};
- }
- componentDidMount() {
ToastStore.sharedInstance().on('update', this._onToastStoreUpdate);
}
diff --git a/src/components/views/toasts/VerificationRequestToast.js b/src/components/views/toasts/VerificationRequestToast.js
index f912984486..b2d1aaf59d 100644
--- a/src/components/views/toasts/VerificationRequestToast.js
+++ b/src/components/views/toasts/VerificationRequestToast.js
@@ -39,6 +39,13 @@ export default class VerificationRequestToast extends React.PureComponent {
this.setState({counter});
}, 1000);
request.on("change", this._checkRequestIsPending);
+ // We should probably have a separate class managing the active verification toasts,
+ // rather than monitoring this in the toast component itself, since we'll get problems
+ // like the toasdt not going away when the verification is cancelled unless it's the
+ // one on the top (ie. the one that's mounted).
+ // As a quick & dirty fix, check the toast is still relevant when it mounts (this prevents
+ // a toast hanging around after logging in if you did a verification as part of login).
+ this._checkRequestIsPending();
}
componentWillUnmount() {
From 086e43e58469e7dba0fb2443b241ca1f68f2fe17 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Sat, 25 Jan 2020 21:30:42 +0000
Subject: [PATCH 48/61] comments ftw
---
src/components/structures/ToastContainer.js | 4 ++++
1 file changed, 4 insertions(+)
diff --git a/src/components/structures/ToastContainer.js b/src/components/structures/ToastContainer.js
index 298c40e825..283fbdd96a 100644
--- a/src/components/structures/ToastContainer.js
+++ b/src/components/structures/ToastContainer.js
@@ -24,6 +24,10 @@ export default class ToastContainer extends React.Component {
super();
this.state = {toasts: ToastStore.sharedInstance().getToasts()};
+ // Start listening here rather than in componentDidMount because
+ // toasts may dismiss themselves in their didMount if they find
+ // they're already irrelevant by the time they're mounted, and
+ // our own componentDidMount is too late.
ToastStore.sharedInstance().on('update', this._onToastStoreUpdate);
}
From 49cdbc9ebe68da74e0099c4e598d851800ba7852 Mon Sep 17 00:00:00 2001
From: Besnik Bleta
Date: Sat, 25 Jan 2020 16:25:51 +0000
Subject: [PATCH 49/61] Translated using Weblate (Albanian)
Currently translated at 99.7% (2043 of 2050 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/sq/
---
src/i18n/strings/sq.json | 91 ++++++++++++++++++++++++++++++++++++++--
1 file changed, 87 insertions(+), 4 deletions(-)
diff --git a/src/i18n/strings/sq.json b/src/i18n/strings/sq.json
index e833009d59..3c04ff85c0 100644
--- a/src/i18n/strings/sq.json
+++ b/src/i18n/strings/sq.json
@@ -1917,11 +1917,11 @@
"%(senderName)s placed a voice call. (not supported by this browser)": "%(senderName)s bëri një thirrje zanore. (e pambuluar nga ky shfletues)",
"%(senderName)s placed a video call.": "%(senderName)s bëri një thirrje video.",
"%(senderName)s placed a video call. (not supported by this browser)": "%(senderName)s bëri një thirrje video. (e pambuluar nga ky shfletues)",
- "Enable cross-signing to verify per-user instead of per-device (in development)": "",
+ "Enable cross-signing to verify per-user instead of per-device (in development)": "Aktivizoni cross-signing për të verifikuar me bazë përdorues në vend se me bazë pajisje (në zhvillim)",
"Enable local event indexing and E2EE search (requires restart)": "Aktivizoni indeksim aktesh vendore dhe kërkim E2EE (lyp rinisje)",
"Match system theme": "Përputhe me temën e sistemit",
- "Send cross-signing keys to homeserver": "",
- "Cross-signing public keys:": "",
+ "Send cross-signing keys to homeserver": "Dërgo te shërbyesi Home kyçe cross-signing ",
+ "Cross-signing public keys:": "Kyçe publikë për cross-signing :",
"on device": "në pajisje",
"not found": "sâu gjet",
"in secret storage": "në depozitë të fshehtë",
@@ -2016,5 +2016,88 @@
"Connected to on ": "Lidhur me në ",
"Connected via %(protocolName)s": "Lidhur përmes %(protocolName)s",
"Bridge Info": "Të dhëna Ure",
- "Below is a list of bridges connected to this room.": "Më poshtë keni një listë urash të lidhura në këtë dhomë."
+ "Below is a list of bridges connected to this room.": "Më poshtë keni një listë urash të lidhura në këtë dhomë.",
+ "New Session": "Sesion i Ri",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s shtoi %(addedAddresses)s dhe dhe %(count)s adresa të tjera te kjo dhomë",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s hoqi %(removedAddresses)s dhe %(count)s adresa të tjera nga kjo dhomë",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s hoqi %(countRemoved)s dhe shtoi %(countAdded)s adresa te kjo dhomë",
+ "%(senderName)s turned on end-to-end encryption.": "%(senderName)s aktivizoi fshehtëzimin skaj-më-skaj.",
+ "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s aktivizoi fshehtëzimin skaj-më-skaj (algoritëm jo i pranuar %(algorithm)s).",
+ "a few seconds ago": "pak sekonda më parë",
+ "about a minute ago": "rreth një minutë më parë",
+ "%(num)s minutes ago": "%(num)s minuta më parë",
+ "about an hour ago": "rreth një orë më parë",
+ "%(num)s hours ago": "%(num)s orë më parë",
+ "about a day ago": "rreth një ditë më parë",
+ "%(num)s days ago": "%(num)s ditë më parë",
+ "a few seconds from now": "pak sekonda nga tani",
+ "about a minute from now": "rreth një minutë nga tani",
+ "%(num)s minutes from now": "%(num)s minuta nga tani",
+ "about an hour from now": "rreth një orë nga tani",
+ "%(num)s hours from now": "%(num)s orë nga tani",
+ "about a day from now": "rreth një ditë nga tani",
+ "%(num)s days from now": "%(num)s ditë nga tani",
+ "Show a presence dot next to DMs in the room list": "Shfaqni një pikë pranie në krah DM-sh te lista e dhomave",
+ "Other users may not trust it": "Përdorues të tjerë mund të mos e besojnë",
+ "Later": "Më vonë",
+ "Cross-signing and secret storage are enabled.": "Cross-signing dhe depozitimi i fshehtë janë aktivizuar.",
+ "Your account has a cross-signing identity in secret storage, but it is not yet trusted by this device.": "Llogaria juaj ka njĂ« identitet cross-signing nĂ« depozitĂ« tĂ« fshehtĂ«, por sâĂ«shtĂ« ende i besuar nĂ« kĂ«tĂ« pajisje.",
+ "Cross-signing and secret storage are not yet set up.": "Cross-signing dhe depozitimi i fshehtĂ« sâjanĂ« ujdisur ende.",
+ "Cross-signing private keys:": "Kyçe privatë për cross-signing :",
+ "Backup key stored in secret storage, but this feature is not enabled on this device. Please enable cross-signing in Labs to modify key backup state.": "Kyçi i kopjeruajtjeve u depozitua nĂ« depozitĂ« tĂ« fshehtĂ«, po kjo veçori sâĂ«shtĂ« e aktivizuar nĂ« kĂ«tĂ« pajisje. Ju lutemi, aktivizoni nĂ« Labs cross-signing qĂ« tĂ« modifikoni gjendje kopjeruatjeje kyçesh.",
+ "Labs": "Labs",
+ "Complete": "E plotë",
+ "Someone is using an unknown device": "Dikush po përdor një pajisje të panjohur",
+ "This room is end-to-end encrypted": "Kjo dhomë është e fshehtëzuar skaj-më-skaj",
+ "Everyone in this room is verified": "Gjithkush në këtë dhomë është verifikuar",
+ "Encrypted by a deleted device": "Fshehtëzuar nga një pajisje e fshirë",
+ "Invite only": "Vetëm me ftesa",
+ "Send a replyâŠ": "DĂ«rgoni njĂ« pĂ«rgjigjeâŠ",
+ "Send a messageâŠ": "DĂ«rgoni njĂ« mesazhâŠ",
+ "Reject & Ignore user": "Hidhe poshtë & Shpërfille përdoruesin",
+ "Unknown Command": "Urdhër i Panjohur",
+ "Unrecognised command: %(commandText)s": "Urdhër Jo i Pranuar: %(commandText)s",
+ "You can use /help
to list available commands. Did you mean to send this as a message?": "Mund të përdorni /help
që të shfaqen urdhrat e gatshëm. Donit vërtet ta dërgoni këtë si një mesazh?",
+ "Hint: Begin your message with //
to start it with a slash.": "Ndihmëz: Fillojeni mesazhin tuaj me //
që të nisë me një pjerrake.",
+ "Send as message": "Dërgoni një mesazh",
+ "Verify User": "Verifikoni PĂ«rdoruesin",
+ "For extra security, verify this user by checking a one-time code on both of your devices.": "Për siguri ekstra, verifikojeni këtë përdorues duke kontrolluar në të dyja pajisjet tuaja një kod njëpërdorimsh.",
+ "For maximum security, do this in person.": "Për siguri maksimum, bëjeni këtë ju vetë.",
+ "Start Verification": "Fillo Verifikimin",
+ "Failed to invite the following users to chat: %(csvUsers)s": "Sâu arrit tĂ« ftoheshin pĂ«r bisedĂ« pĂ«rdoruesit vijues: %(csvUsers)s",
+ "We couldn't create your DM. Please check the users you want to invite and try again.": "Sâe krijuam dot DM-nĂ« tuaj. Ju lutemi, kontrolloni pĂ«rdoruesit qĂ« doni tĂ« ftoni dhe riprovoni.",
+ "Something went wrong trying to invite the users.": "Diç shkoi ters teksa provohej të ftoheshin përdoruesit.",
+ "We couldn't invite those users. Please check the users you want to invite and try again.": "Sâi ftuam dot kĂ«ta pĂ«rdorues. Ju lutemi, kontrolloni pĂ«rdoruesit qĂ« doni tĂ« ftoni dhe riprovoni.",
+ "Failed to find the following users": "Sâu arrit tĂ« gjendeshin pĂ«rdoruesit vijues",
+ "The following users might not exist or are invalid, and cannot be invited: %(csvNames)s": "PĂ«rdoruesit vijues mund tĂ« mos ekzistojnĂ« ose janĂ« tĂ« pavlefshĂ«m, dhe sâmund tĂ« ftohen: %(csvNames)s",
+ "Suggestions": "Sugjerime",
+ "If you can't find someone, ask them for their username, share your username (%(userId)s) or profile link .": "NĂ«se sâgjeni dot dikĂ«, kĂ«rkojini emrin e tij tĂ« pĂ«rdoruesit, tregojuni emrin tuaj tĂ« pĂ«rdoruesit (%(userId)s) ose lidhjen e profilit .",
+ "If you can't find someone, ask them for their username (e.g. @user:server.com) or share this room .": "NĂ«se sâgjeni dot dikĂ«, kĂ«rkojini emrin e tij tĂ« pĂ«rdoruesit (p.sh., @pĂ«rdorues:shĂ«rbyes.com) ose tregojuni kĂ«tĂ« dhomĂ« .",
+ "Access your secure message history and your cross-signing identity for verifying other devices by entering your passphrase.": "Për verifikim pajisjesh të tjera përmes dhënies së frazëkalimit tuaj, hyni te historiku i mesazheve tuaj të sigurt dhe identiteti juaj për cross-signing .",
+ "Access your secure message history and your cross-signing identity for verifying other devices by entering your recovery key.": "Për verifikim pajisjesh të tjera përmes dhënies së kyçit tuaj të rimarrjes, hyni te historiku i mesazheve tuaj të sigurt dhe identiteti juaj për cross-signing .",
+ "Complete security": "Siguri të plotë",
+ "Verify this session to grant it access to encrypted messages.": "Verifikojeni kĂ«tĂ« sesion qĂ« tâi akordohet hyrje te mesazhe tĂ« fshehtĂ«zuar.",
+ "Start": "Nise",
+ "Session verified": "Sesion i verifikuar",
+ "Your new session is now verified. It has access to your encrypted messages, and other users will see it as trusted.": "Sesioni juaj i ri tani është i verifikuar. Ka hyrje te mesazhet tuaj të fshehtëzuar dhe përdoruesit e tjerë do ta shohin si të besuar.",
+ "Done": "U bë",
+ "Without completing security on this device, it wonât have access to encrypted messages.": "Pa plotĂ«suar sigurinĂ« nĂ« kĂ«tĂ« pajisje, sâdo tĂ« ketĂ« hyrje te mesazhe tĂ« fshehtĂ«zuar.",
+ "Go Back": "Shko Mbrapsht",
+ "Key Backup is enabled on your account but has not been set up from this session. To set up secret storage, restore your key backup.": "Kopjeruajtja e Kyçeve është e aktivizuar në llogarinë tuaj, por nuk është ujdisur që nga ky sesion. Që të ujdisni depozitim të fshehtë, riktheni kopjeruajtjen tuaj të kyçeve.",
+ "Restore": "Riktheje",
+ "Enter your account password to confirm the upgrade:": "Që të ripohohet përmirësimi, jepni fjalëkalimin e llogarisë tuaj:",
+ "You'll need to authenticate with the server to confirm the upgrade.": "Do tâju duhet tĂ« bĂ«ni mirĂ«filltĂ«simin me shĂ«rbyesin qĂ« tĂ« ripohohet pĂ«rmirĂ«simi.",
+ "Upgrade this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Përmirësojeni këtë pajisje për ta lejuar të verifikojë pajisje të tjera, duke u akorduar hyrje te mesazhe të fshehtëzuar dhe duke u vënë shenjë si të besuara për përdorues të tjerë.",
+ "Set up encryption on this device to allow it to verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Ujdisni fshehtëzim në këtë pajisje që ta lejoni të verifikojë pajisje të tjera, duke u akorduar atyre hyrje te mesazhe të fshehtëzuar dhe duke u vënë shenjë atyre si të besuara për përdorues të tjerë.",
+ "Secure your encryption keys with a passphrase. For maximum security this should be different to your account password:": "Sigurojini kyçet tuaj të fshehtëzimit me një frazëkalim. Për siguri maksimale, ky do të duhej të ishte i ndryshëm nga fjalëkalimi për llogarinë tuaj:",
+ "Enter a passphrase": "Jepni një frazëkalim",
+ "Enter your passphrase a second time to confirm it.": "Që të ripohohet, jepeni edhe një herë frazëkalimin tuaj.",
+ "This device can now verify other devices, granting them access to encrypted messages and marking them as trusted for other users.": "Kjo pajisje mund të verifikojë pajisje të tjera, duke u akorduar hyrje te mesazhe të fshehtëzuar dhe duke u vënë shenjë si të besuara për përdorues të tjerë.",
+ "Verify other users in their profile.": "Verifikoni përdorues të tjerë në profilin e tyre.",
+ "Without setting up secret storage, you won't be able to restore your access to encrypted messages or your cross-signing identity for verifying other devices if you log out or use another device.": "Pa ujdisur depozitim tĂ« fshehtĂ«, sâdo tĂ« jeni nĂ« gjendje tĂ« rimerrni hyrje te mesazhe tĂ« fshehtĂ«zuar apo te identiteti juaj cross-signing pĂ«r verifikim pajisjesh tĂ« tjera, nĂ«se dilni nga llogaria juaj ose pĂ«rdorni njĂ« pajisje tjetĂ«r.",
+ "Restore your Key Backup": "Riktheni Kopjeruajtjen tuaj të Kyçeve",
+ "Upgrade your encryption": "Përmirësoni fshehtëzimin tuaj",
+ "Set up encryption": "Ujdisni fshehtëzim",
+ "Encryption upgraded": "U përmirësua fshehtëzimi",
+ "Encryption setup complete": "Ujdisje fshehtëzimit e plotësuar"
}
From a4bbe2ba645d6f411313b4b87b38a6783feec4c5 Mon Sep 17 00:00:00 2001
From: Michael Telatynski <7t3chguy@gmail.com>
Date: Sun, 26 Jan 2020 22:15:44 +0000
Subject: [PATCH 50/61] fix compound emoji
---
src/emoji.js | 6 +++---
1 file changed, 3 insertions(+), 3 deletions(-)
diff --git a/src/emoji.js b/src/emoji.js
index 125864e381..20b05531ca 100644
--- a/src/emoji.js
+++ b/src/emoji.js
@@ -79,13 +79,13 @@ EMOJIBASE.forEach(emoji => {
});
/**
- * Strips variation selectors from a string
- * NB. Skin tone modifers are not variation selectors:
+ * Strips variation selectors from the end of given string
+ * NB. Skin tone modifiers are not variation selectors:
* this function does not touch them. (Should it?)
*
* @param {string} str string to strip
* @returns {string} stripped string
*/
function stripVariation(str) {
- return str.replace(/[\uFE00-\uFE0F]/, "");
+ return str.replace(/[\uFE00-\uFE0F]$/, "");
}
From 13ba90a05469b3b6f35133d90c2233b50d63c57b Mon Sep 17 00:00:00 2001
From: Tirifto
Date: Mon, 27 Jan 2020 09:33:34 +0000
Subject: [PATCH 51/61] Translated using Weblate (Esperanto)
Currently translated at 90.1% (1848 of 2050 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/eo/
---
src/i18n/strings/eo.json | 27 +++++++++++++++++++++++++--
1 file changed, 25 insertions(+), 2 deletions(-)
diff --git a/src/i18n/strings/eo.json b/src/i18n/strings/eo.json
index 4ac519d16a..243aebb52d 100644
--- a/src/i18n/strings/eo.json
+++ b/src/i18n/strings/eo.json
@@ -1851,7 +1851,7 @@
"Error unsubscribing from list": "Eraris malabono de la listo",
"Please try again or view your console for hints.": "Bonvolu reprovi aĆ serÄi helpilojn en via konzolo.",
"You have not ignored anyone.": "Vi neniun malatentis.",
- "You are not subscribed to any lists": "Vi neniun liston abonis.",
+ "You are not subscribed to any lists": "Vi neniun liston abonis",
"Unsubscribe": "Malaboni",
"View rules": "Montri regulojn",
"You are currently subscribed to:": "Vi nun abonas:",
@@ -1867,5 +1867,28 @@
"Widget ID": "Identigilo de fenestraĔo",
"Widgets do not use message encryption.": "FenestraÄ”oj ne uzas Äifradon de mesaÄoj.",
"Widget added by": "FenestraĔon aldonis",
- "This widget may use cookies.": "Äi tiu fenestraÄ”o povas uzi kuketojn."
+ "This widget may use cookies.": "Äi tiu fenestraÄ”o povas uzi kuketojn.",
+ "%(senderName)s added %(addedAddresses)s and %(count)s other addresses to this room|other": "%(senderName)s aldonis %(addedAddresses)s kaj %(count)s aliajn adresojn al Äi tiu Äambro",
+ "%(senderName)s removed %(removedAddresses)s and %(count)s other addresses from this room|other": "%(senderName)s forigis %(removedAddresses)s kaj %(count)s aliajn adresojn el Äi tiu Äambro",
+ "%(senderName)s removed %(countRemoved)s and added %(countAdded)s addresses to this room": "%(senderName)s forigis %(countRemoved)s kaj aldonis %(countAdded)s adresojn al Äi tiu Äambro",
+ "%(senderName)s turned on end-to-end encryption.": "%(senderName)s Ćaltis tutvojan Äifradon.",
+ "%(senderName)s turned on end-to-end encryption (unrecognised algorithm %(algorithm)s).": "%(senderName)s Ćaltis tutvojan Äifradon (nerekonita algoritmo %(algorithm)s).",
+ "a few seconds ago": "antaĆ kelkaj sekundoj",
+ "about a minute ago": "antaĆ ÄirkaĆ minuto",
+ "%(num)s minutes ago": "antaĆ %(num)s minutoj",
+ "about an hour ago": "antaĆ ÄirkaĆ horo",
+ "%(num)s hours ago": "antaĆ %(num)s horoj",
+ "about a day ago": "antaĆ ÄirkaĆ tago",
+ "%(num)s days ago": "antaĆ %(num)s tagoj",
+ "a few seconds from now": "kelkajn sekundojn de nun",
+ "about a minute from now": "ÄirkaĆ minuton de nun",
+ "%(num)s minutes from now": "%(num)s minutojn de nun",
+ "about an hour from now": "ÄirkaĆ horon de nun",
+ "%(num)s hours from now": "%(num)s horojn de nun",
+ "about a day from now": "ÄirkaĆ tagon de nun",
+ "%(num)s days from now": "%(num)s tagojn de nun",
+ "Lock": "Seruro",
+ "Other users may not trust it": "Aliaj uzantoj eble ne kredas Äin",
+ "Later": "Pli poste",
+ "Verify": "Kontroli"
}
From ca774f45fea0685b002f8bde37cae95cb7a51ece Mon Sep 17 00:00:00 2001
From: catborise
Date: Sun, 26 Jan 2020 19:49:59 +0000
Subject: [PATCH 52/61] Translated using Weblate (Turkish)
Currently translated at 73.8% (1513 of 2050 strings)
Translation: Riot Web/matrix-react-sdk
Translate-URL: https://translate.riot.im/projects/riot-web/matrix-react-sdk/tr/
---
src/i18n/strings/tr.json | 8 +++++++-
1 file changed, 7 insertions(+), 1 deletion(-)
diff --git a/src/i18n/strings/tr.json b/src/i18n/strings/tr.json
index db43e96cea..257cb27b42 100644
--- a/src/i18n/strings/tr.json
+++ b/src/i18n/strings/tr.json
@@ -1532,5 +1532,11 @@
"Show display name changes": "Ekran isim deÄiĆikliklerini göster",
"Enable URL previews for this room (only affects you)": "Bu oda için URL önizlemeyi aç (sadece sizi etkiler)",
"Enable URL previews by default for participants in this room": "Bu odadaki katılımcılar için URL önizlemeyi varsayılan olarak açık hale getir",
- "Enable widget screenshots on supported widgets": "Desteklenen görsel bileĆenlerde anlık görĂŒntĂŒleri aç"
+ "Enable widget screenshots on supported widgets": "Desteklenen görsel bileĆenlerde anlık görĂŒntĂŒleri aç",
+ "Show recently visited rooms above the room list": "En son ziyaret edilen odaları oda listesinin en ĂŒstĂŒnde göster",
+ "Show hidden events in timeline": "Zaman çizelgesinde gizli olayları göster",
+ "Encrypted messages in one-to-one chats": "Birebir sohbetlerdeki ĆifrelenmiĆ mesajlar",
+ "Encrypted messages in group chats": "Grup sohbetlerdeki ĆifrelenmiĆ mesajlar",
+ "This is your list of users/servers you have blocked - don't leave the room!": "Bu sizin engellediÄiniz kullanıcılar/sunucular listeniz - odadan ayrılmayın!",
+ "Got It": "AnlaĆıldı"
}
From ebb70ca9fb943317bb2bcb8e214de04797a8ea51 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 27 Jan 2020 09:44:12 +0000
Subject: [PATCH 53/61] English
Co-Authored-By: J. Ryan Stinnett
---
src/DeviceListener.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/DeviceListener.js b/src/DeviceListener.js
index dc066eb7cb..f503353145 100644
--- a/src/DeviceListener.js
+++ b/src/DeviceListener.js
@@ -108,7 +108,7 @@ export default class DeviceListener {
}
// cross signing isn't enabled - nag to enable it
- // There 3 different toasts for:
+ // There are 3 different toasts for:
if (cli.getStoredCrossSigningForUser(cli.getUserId())) {
// Cross-signing on account but this device doesn't trust the master key (verify this session)
ToastStore.sharedInstance().addOrReplaceToast({
From 43173824d3bbecda233d896f43b44d4a53828862 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 27 Jan 2020 09:44:39 +0000
Subject: [PATCH 54/61] Capitalisation
Co-Authored-By: J. Ryan Stinnett
---
src/DeviceListener.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/DeviceListener.js b/src/DeviceListener.js
index f503353145..32024d1d87 100644
--- a/src/DeviceListener.js
+++ b/src/DeviceListener.js
@@ -113,7 +113,7 @@ export default class DeviceListener {
// Cross-signing on account but this device doesn't trust the master key (verify this session)
ToastStore.sharedInstance().addOrReplaceToast({
key: THIS_DEVICE_TOAST_KEY,
- title: _t("Verify this Session"),
+ title: _t("Verify this session"),
icon: "verification_warning",
props: {kind: 'verify_this_session'},
component: sdk.getComponent("toasts.SetupEncryptionToast"),
From 8c4c79adde070766a14ad49d6b736104ca9a9ea4 Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 27 Jan 2020 10:05:42 +0000
Subject: [PATCH 55/61] i18n
---
src/i18n/strings/en_EN.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/i18n/strings/en_EN.json b/src/i18n/strings/en_EN.json
index 0d033dff4d..5c2f427c6a 100644
--- a/src/i18n/strings/en_EN.json
+++ b/src/i18n/strings/en_EN.json
@@ -88,7 +88,7 @@
"%(weekDayName)s, %(monthName)s %(day)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(time)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s",
"%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s": "%(weekDayName)s, %(monthName)s %(day)s %(fullYear)s %(time)s",
- "Verify this Session": "Verify this Session",
+ "Verify this session": "Verify this session",
"Encryption upgrade available": "Encryption upgrade available",
"Set up encryption": "Set up encryption",
"New Session": "New Session",
From e50ed95edff8e2d5b8bfebd1ec605b6dd196e23b Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 27 Jan 2020 10:17:16 +0000
Subject: [PATCH 56/61] English
Co-Authored-By: J. Ryan Stinnett
---
src/DeviceListener.js | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/DeviceListener.js b/src/DeviceListener.js
index 3135e3d9a5..331b68398b 100644
--- a/src/DeviceListener.js
+++ b/src/DeviceListener.js
@@ -34,7 +34,7 @@ export default class DeviceListener {
}
constructor() {
- // set of device ID's we're currently showing toasts for
+ // set of device IDs we're currently showing toasts for
this._activeNagToasts = new Set();
// device IDs for which the user has dismissed the verify toast ('Later')
this._dismissed = new Set();
From 11de92b9a90c6d847f6687d6c9808a24ca189fdd Mon Sep 17 00:00:00 2001
From: David Baker
Date: Mon, 27 Jan 2020 11:07:55 +0000
Subject: [PATCH 57/61] hopefully informative comment
---
src/components/structures/auth/CompleteSecurity.js | 3 +++
1 file changed, 3 insertions(+)
diff --git a/src/components/structures/auth/CompleteSecurity.js b/src/components/structures/auth/CompleteSecurity.js
index ce938bd2f8..206cdb743e 100644
--- a/src/components/structures/auth/CompleteSecurity.js
+++ b/src/components/structures/auth/CompleteSecurity.js
@@ -35,6 +35,9 @@ export default class CompleteSecurity extends React.Component {
this.state = {
phase: PHASE_INTRO,
+ // this serves dual purpose as the object for the request logic and
+ // the presence of it insidicating that we're in 'verify mode'.
+ // Because of the latter, it lives in the state.
verificationRequest: null,
};
MatrixClientPeg.get().on("crypto.verification.request", this.onVerificationRequest);
From 692c993a34a5a4947b6ea25142e8533d11852c07 Mon Sep 17 00:00:00 2001
From: RiotRobot
Date: Mon, 27 Jan 2020 11:40:05 +0000
Subject: [PATCH 58/61] js-sdk v4.0.0
---
package.json | 2 +-
yarn.lock | 9 +++++----
2 files changed, 6 insertions(+), 5 deletions(-)
diff --git a/package.json b/package.json
index dc619e50ef..901c0cec15 100644
--- a/package.json
+++ b/package.json
@@ -80,7 +80,7 @@
"is-ip": "^2.0.0",
"linkifyjs": "^2.1.6",
"lodash": "^4.17.14",
- "matrix-js-sdk": "4.0.0-rc.1",
+ "matrix-js-sdk": "4.0.0",
"pako": "^1.0.5",
"png-chunks-extract": "^1.0.0",
"prop-types": "^15.5.8",
diff --git a/yarn.lock b/yarn.lock
index 75c5af6a1d..232067a99f 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -5760,11 +5760,12 @@ mathml-tag-names@^2.0.1:
resolved "https://registry.yarnpkg.com/mathml-tag-names/-/mathml-tag-names-2.1.1.tgz#6dff66c99d55ecf739ca53c492e626f1d12a33cc"
integrity sha512-pWB896KPGSGkp1XtyzRBftpTzwSOL0Gfk0wLvxt4f2mgzjY19o0LxJ3U25vNWTzsh7da+KTbuXQoQ3lOJZ8WHw==
-matrix-js-sdk@4.0.0-rc.1:
- version "4.0.0-rc.1"
- resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-4.0.0-rc.1.tgz#160d445364aa8ff36ae4fffb0ebc944f680afa4e"
- integrity sha512-1tP9fUCU5I4bXQQHuVlKHbpySh71aM6sugVC6L8ikG1ebZuKkAc2tXf1tiHizp3hZadHoTZ1PGH19ZFlKDZ8Qw==
+matrix-js-sdk@4.0.0:
+ version "4.0.0"
+ resolved "https://registry.yarnpkg.com/matrix-js-sdk/-/matrix-js-sdk-4.0.0.tgz#c81bdc905af2ab1634527e5f542f2f15977d31cf"
+ integrity sha512-Xbe36xL443qtEBH4xk0k39JabolqZfloK7fwYGMb/PgWO26VOzvw94XWahnIr5w83oxBAF9nFmP+7EnPG6IHnA==
dependencies:
+ "@babel/runtime" "^7.8.3"
another-json "^0.2.0"
browser-request "^0.3.3"
bs58 "^4.0.1"
From 976ac328e12414e4b9af631a7c6ce18770defda4 Mon Sep 17 00:00:00 2001
From: RiotRobot
Date: Mon, 27 Jan 2020 11:44:10 +0000
Subject: [PATCH 59/61] Prepare changelog for v2.0.0
---
CHANGELOG.md | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 7630231615..881669a1a2 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,14 @@
+Changes in [2.0.0](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.0.0) (2020-01-27)
+===================================================================================================
+[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.0.0-rc.2...v2.0.0)
+
+ * Ensure a plaintext version of the composer ends up on the clipboard
+ [\#3923](https://github.com/matrix-org/matrix-react-sdk/pull/3923)
+ * Move & upgrade babel runtime into dependencies (like it wants)
+ [\#3921](https://github.com/matrix-org/matrix-react-sdk/pull/3921)
+ * Don't list every single alias when there's many
+ [\#3919](https://github.com/matrix-org/matrix-react-sdk/pull/3919)
+
Changes in [2.0.0-rc.2](https://github.com/matrix-org/matrix-react-sdk/releases/tag/v2.0.0-rc.2) (2020-01-20)
=============================================================================================================
[Full Changelog](https://github.com/matrix-org/matrix-react-sdk/compare/v2.0.0-rc.1...v2.0.0-rc.2)
From 8c56c59922b2c0df387bd8fafb51272cb447392a Mon Sep 17 00:00:00 2001
From: RiotRobot
Date: Mon, 27 Jan 2020 11:44:10 +0000
Subject: [PATCH 60/61] v2.0.0
---
package.json | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/package.json b/package.json
index 901c0cec15..fa017b223d 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
{
"name": "matrix-react-sdk",
- "version": "2.0.0-rc.2",
+ "version": "2.0.0",
"description": "SDK for matrix.org using React",
"author": "matrix.org",
"repository": {
From e224150190f2d2869951a03eebc76c2ebcc93b18 Mon Sep 17 00:00:00 2001
From: Zoe
Date: Mon, 27 Jan 2020 12:17:12 +0000
Subject: [PATCH 61/61] detail pass on DMs
---
src/components/views/rooms/RoomBreadcrumbs.js | 2 +-
src/components/views/rooms/RoomHeader.js | 5 ++++-
src/components/views/rooms/RoomTile.js | 5 +++--
3 files changed, 8 insertions(+), 4 deletions(-)
diff --git a/src/components/views/rooms/RoomBreadcrumbs.js b/src/components/views/rooms/RoomBreadcrumbs.js
index 5a15a7518b..f9408d3259 100644
--- a/src/components/views/rooms/RoomBreadcrumbs.js
+++ b/src/components/views/rooms/RoomBreadcrumbs.js
@@ -363,7 +363,7 @@ export default class RoomBreadcrumbs extends React.Component {
}
let dmIndicator;
- if (this._isDmRoom(r.room)) {
+ if (this._isDmRoom(r.room) && !SettingsStore.isFeatureEnabled("feature_cross_signing")) {
dmIndicator = :
undefined;
+ const dmUserId = DMRoomMap.shared().getUserIdForRoomId(this.props.room.roomId);
const joinRules = this.props.room && this.props.room.currentState.getStateEvents("m.room.join_rules", "");
const joinRule = joinRules && joinRules.getContent().join_rule;
let privateIcon;
- if (SettingsStore.isFeatureEnabled("feature_cross_signing")) {
+ // Don't show an invite-only icon for DMs. Users know they're invite-only.
+ if (!dmUserId && SettingsStore.isFeatureEnabled("feature_cross_signing")) {
if (joinRule == "invite") {
privateIcon = ;
}
diff --git a/src/components/views/rooms/RoomTile.js b/src/components/views/rooms/RoomTile.js
index 9d2334de82..41975fe7b8 100644
--- a/src/components/views/rooms/RoomTile.js
+++ b/src/components/views/rooms/RoomTile.js
@@ -478,8 +478,9 @@ export default createReactClass({
let dmIndicator;
let dmOnline;
- // If we can place a shield, do that instead
- if (dmUserId && !this.state.e2eStatus) {
+ /* Post-cross-signing we don't show DM indicators at all, instead relying on user
+ context to let them know when that is. */
+ if (dmUserId && !SettingsStore.isFeatureEnabled("feature_cross_signing")) {
dmIndicator =