element-ios/Riot/Modules/Rendezvous/RendezvousService.swift
ismailgulek e4a1fb0a51
Release 1.9.9 (#6924)
* Login with QR UI components (#6790)

* Display QR button on login screen if HS supports

* Create start screen

* Add build flag

* Connect start screen to the login

* QR display screen

* Move `LabelledDividerView` into separate file

* Show display QR screen on button tap

* Add swift concurreny to CameraAccessManager

* Introduce `QRLoginServiceProtocol`

* Use new service in screens

* Introduce scan QR code screen

* Remove hardcoded service availability

* Remove unnecessary import

* Add confirmation screen

* Add loading screen

* Fix ZXingObjc targets

* Add failure screen

* Add strings

* Various UI tweaks, navigation according to the service state

* Fix tests

* Add string for invalid QR error

* Add QR login service mode

* dark mode support almost completed

* 'View all' button in other sessions list

* Changelog

* Only use device type name as fallback for session display name

* Add changelog

* Revert translation changes

* Fix copyright year

* updated the package and added a circle background to the + button

* QR login from device manager (#6818)

* Add link device button into the sessions overview screen

* Run Swift format

* Fix tests

* Fix a crash in tests

* Fix PR remark

* Bring back English string for now to unbreak the build

* pr comment addressed

* Fix composer resizing animations

* Remove prefix from tests

* Add back generated user session name string

* Fixed swiftformat warnings

* Remove current app name from device type name

* updated package version

* QR Login additional flags (#6825)

* Include app name in default session display name

* Add changelog

* edit is displayed in the WYSIWYG, but the send button still sends a new message instead of correcting the edit

* Move composer send media selection to it's own coordinator and us e ioS 15 api for sheet

* fix newline in pod lockfile

* fix newline

* Add labs flag and strings

* Translated using Weblate (Italian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Estonian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (German)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Icelandic)

Currently translated at 86.0% (1919 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/is/

* Split out models, add some tests and fix some formatting.

* Fixed formatting

* Expose AuthenticationRestClient async login token generation method (MSC3882)

* Only update the nav bar from the top SwiftUI view.

* Bugfix: Element freezes after searching in a room #6762

* Tidy-up formatting.

* Hide Maximise button as animations not working correctly

* Remove the ffmpeg pod.

* created the replace formatted text function

* Fix authentication tests.

* Translated using Weblate (Swedish)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/sv/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translations update from Weblate (#6843)

* Translated using Weblate (Italian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Estonian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (German)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Icelandic)

Currently translated at 86.0% (1919 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/is/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2229 of 2229 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Thomas Schmidt <thomas@thsmdt.com>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Weblate <noreply@weblate.org>

* Translations update from Weblate (#6844)

* Translated using Weblate (Icelandic)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/is/

* Translated using Weblate (Swedish)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/sv/

Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: LinAGKar <linus.kardell@gmail.com>
Co-authored-by: Weblate <noreply@weblate.org>

* edit works functionally (no UI changes yet)

* package update

* formatted reply support

* error logging improvement

* code improvements

* improving code

* improving overall code

* Filter button

* Verified sessions

* reverting the xcscheme file

* revert

* todo reminder

* Ignore OS version from web based sessions (PSG-826) (#6852)

* Ignore OS version from web based sessions

* Add changelog

* Clear filter button

* Device Manager: Rename Session (#6826)

* Publish the user sessions overview data.
* Add UserSessionName screen.
* Update logout action to match Figma more closely.

* UI and unit tests

* Device Manager: Verify session (#6832)

* Initial implementation
* Add verificationState to UserSessionInfo
* Listen for changes device changes in the service.

* Remove loader for static location sharing

* Remove loader for live location sharing

* Move completions around

* Add changelog.d file

* edit mode changes the send button

* right assets

* color improvements and implementing the cancel callback

* implemented cancel, but I need to actually need to solve a problem where the previous text is not stored in case of cancel of the reply/edit

* edit reply completed, just need to polish the UI a bit more.

* Renamed  OtherUserSessionsFilter  to UserOtherSessionsFilter

* Changelog

* Formating

* some UI tweaks

* Add voice broadcast state event (#6785)

* Tidy up TabBarCoordinator now that AllChatsCoordinator exists.

* Update Riot/Assets/en.lproj/Vector.strings

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Update RiotSwiftUI/Modules/UserSessions/UserOtherSessions/UserOtherSessionsModels.swift

Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>

* Single scale image

* Renamed filerWasChanged to filterWasChanged

* Revert collections update

* Added accessibility label to filter menu

* pr comment + some design improvements

* should now be aligned to the designs

* get rid of additional UIHostingController. Cleanup and comments.

* legacy sendMode code separation to have RiotSwiftUI be able to build.

* Added last activity item to session details screen

* fix

* More comments

* Update strings for unknown sessions.

* Fix RiotTests.

* code improvements

* wiftlint

* Remove verify session button for other sessions when the current session is unverified

* Implement login with scanned QR code flows

* Fix initiator flows and e2e tests

* Add missing rendezvousServerBaseURL buildSetting

* Add changelog

* Remove extra step as no longer required

* Fix typo

* Remove now unnecessary creator public key publishing. Rebuilt flows and fixed tests

* Fix UI tests for features currently disabled

* composer code improvement

* improving code

* unit tests

* Tests completed! The only doubt I have left is about testing the string content considering the localisations in tests

* code improvement

* code improvement

* ui tests should now work on CI

* ui test should work now

* ui tests fix on ci

* ui test improvements

* Correct verificationStatusAdditionalInfoText for other session

* Changelog

* Correct label for other verified session

* Formating fixes

* Update enhancement issue template

Link to discussions for cross-platform and feature requests

* Updates based on comments.

* more comment updates

* unit tests improved!

* improved UI tests

* Add a SignOutFlowPresenter. (#6854)

Used in AllChats, UserSessions and Settings.
(TabBarCoordinator is unnecessary as signout will be removed from there).

* Additional translations and accessiblity labels

* Added E2EE support on sessions created through QR code login

* Fixed various SwiftFormat warnings

* Remove unnecessary private key requests as it already happens automatically when marking the existing device as verified

* Allow the login with qr button to be shown on the login screen if the currently selected homeserver supports it

* Check login intents match between QR code and current flow

* Fix authentication unit tests

* Login against the homeserver provided through the QR code

* Navigating to session overview goes to session details

* Changelog

* Fix typo

* custom tint + blinking dark theme text color issue fix

* Identify inactive sessions

* Changelog

* Translated using Weblate (German)

Currently translated at 100.0% (2269 of 2269 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (French)

Currently translated at 100.0% (2269 of 2269 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/fr/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2269 of 2269 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2269 of 2269 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2269 of 2269 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2269 of 2269 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2269 of 2269 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* opacity transition implemented

* 0.15 animation

* updated UI tests

* project yml with the latest working version of the package

* "Notifications on this device" not refreshed in user settings screen

* Update tools.

• Un-pin versions to update tools on each release.
• Switch to SwiftFormat as a pod.

* All chats shows no rooms in the list

- Fixed

* added the grabber and the corner radius

* the right corner radius value

* ios 16 custom detent

* height value

* Revert "height value"

This reverts commit fae63c6f76.

* Revert "ios 16 custom detent"

This reverts commit 758dacc00e.

* better padding

* Update Wysiwyg dep and use new focused param on WysiwygComposerView

* Filter out application section if needed

* Add changelog.d file

* design improvements!

* designs are perfect now

* Fix bubble cell visibility (#6893)

* updated the swiftpm

* package resolved

* Set inputAccessoryViewForKeyboard so that interactive dismissal works.

* [Voice Broadcast] Aggregate the chunks of voice messages in room timeline (#6891)

* Add missing changelogs

* changelog

* changelog

* changelog linked to an issue

* Add weak self reference to closure

* spacing improved further

* Use unstable prefixes for QR code login

* Changelog

* Force update client information

* Changelog

* Fix incorrect Task creation for processing scanned qr codes

* Check and mark the received MSK as trusted before locally verifying the existing device

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

* Translations update from Weblate (#6908)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

* Translations update from Weblate (#6909)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (49 of 49 strings)

Translation: Element iOS/Element iOS (Push)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-push/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

* Translations update from Weblate (#6908)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

* Translations update from Weblate (#6910)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translations update from Weblate (#6908)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

* Translations update from Weblate (#6909)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (49 of 49 strings)

Translation: Element iOS/Element iOS (Push)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-push/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

* Translations update from Weblate (#6908)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

* Translations update from Weblate (#6911)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/bg/

* Translations update from Weblate (#6909)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (49 of 49 strings)

Translation: Element iOS/Element iOS (Push)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-push/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

* Translations update from Weblate (#6908)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

* Translations update from Weblate (#6910)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translations update from Weblate (#6908)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

* Translations update from Weblate (#6909)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (49 of 49 strings)

Translation: Element iOS/Element iOS (Push)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-push/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

* Translations update from Weblate (#6908)

* Translated using Weblate (Bulgarian)

Currently translated at 100.0% (8 of 8 strings)

Translation: Element iOS/Element iOS (Dialogs)
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios-dialogs/bg/

* Translations update from Weblate (#6907)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>

* Translations update from Weblate (#6915)

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (German)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/de/

* Translated using Weblate (Russian)

Currently translated at 81.2% (1870 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/ru/

* Translated using Weblate (Hungarian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/hu/

* Translated using Weblate (Bulgarian)

Currently translated at 66.4% (1529 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/bg/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

* Translated using Weblate (Portuguese (Brazil))

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/pt_BR/

* Translated using Weblate (Ukrainian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/uk/

* Translated using Weblate (Estonian)

Currently translated at 97.5% (2245 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/et/

* Translated using Weblate (Indonesian)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/id/

* Translated using Weblate (Slovak)

Currently translated at 100.0% (2301 of 2301 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/sk/

* Translated using Weblate (Italian)

Currently translated at 100.0% (2302 of 2302 strings)

Translation: Element iOS/Element iOS
Translate-URL: https://translate.element.io/projects/riot-ios/riot-ios/it/

Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Weblate <noreply@weblate.org>

* Missing change from fix

* changelog

* Only running alpha builds when PR labeled with `Trigger-PR-Build`

* Configure codecov flags and have them be carried forward

* Add pull request change types for triggering alpha builds

* changelog.d: Upgrade MatrixSDK version ([v0.24.1](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.24.1)).

* version++

Co-authored-by: Anderas <andyuhnak@gmail.com>
Co-authored-by: Mauro Romito <mauro.romito@element.io>
Co-authored-by: Aleksandrs Proskurins <paleksandrs@gmail.com>
Co-authored-by: Johannes Marbach <johannesm@element.io>
Co-authored-by: aringenbach <arnaudr@element.io>
Co-authored-by: David Langley <langley.dave@gmail.com>
Co-authored-by: random <dictionary@tutamail.com>
Co-authored-by: Jozef Gaal <preklady@mayday.sk>
Co-authored-by: Linerly <linerly@protonmail.com>
Co-authored-by: Priit Jõerüüt <riot@joeruut.com>
Co-authored-by: Ihor Hordiichuk <igor_ck@outlook.com>
Co-authored-by: Vri <element@vrifox.cc>
Co-authored-by: Thomas Schmidt <thomas@thsmdt.com>
Co-authored-by: Sveinn í Felli <sv1@fellsnet.is>
Co-authored-by: Stefan Ceriu <stefanc@matrix.org>
Co-authored-by: Aleksandrs Proskurins <aleksandrsp@element.io>
Co-authored-by: Doug <douglase@element.io>
Co-authored-by: Doug <6060466+pixlwave@users.noreply.github.com>
Co-authored-by: Shunmugaraj <toshanmugaraj@gmail.com>
Co-authored-by: LinAGKar <linus.kardell@gmail.com>
Co-authored-by: lvre <7uu3qrbvm@relay.firefox.com>
Co-authored-by: Weblate <noreply@weblate.org>
Co-authored-by: Element Translate Bot <admin@riot.im>
Co-authored-by: Alfonso Grillo <alfogrillo@gmail.com>
Co-authored-by: Alfonso Grillo <alfogrillo@element.io>
Co-authored-by: Yoan Pintas <y.pintas@gmail.com>
Co-authored-by: Gil Eluard <gile@element.io>
Co-authored-by: Hugh Nimmo-Smith <hughns@element.io>
Co-authored-by: Kat Gerasimova <ekaterinag@element.io>
Co-authored-by: Velin92 <34335419+Velin92@users.noreply.github.com>
Co-authored-by: Thibault Martin <mail@thibaultmart.in>
Co-authored-by: Johannes Marbach <n0-0ne+github@mailbox.org>
Co-authored-by: Nui Harime <harime.nui@yandex.ru>
Co-authored-by: Szimszon <github@oregpreshaz.eu>
Co-authored-by: Slavi Pantaleev <slavi@devture.com>
Co-authored-by: gulekismail <ismailgulek0@gmail.com>
2022-10-18 16:09:06 +03:00

274 lines
12 KiB
Swift

//
// Copyright 2022 New Vector Ltd
//
// 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 Foundation
import CryptoKit
import Combine
import MatrixSDK
enum RendezvousServiceError: Error {
case invalidInterlocutorKey
case decodingError
case internalError
case channelNotReady
case transportError(RendezvousTransportError)
}
/// Algorithm name as per MSC3903
enum RendezvousChannelAlgorithm: String {
case ECDH_V1 = "org.matrix.msc3903.rendezvous.v1.curve25519-aes-sha256"
}
/// Allows communication through a secure channel. Based on MSC3886 and MSC3903
@MainActor
class RendezvousService {
private let transport: RendezvousTransportProtocol
private var privateKey: Curve25519.KeyAgreement.PrivateKey!
private var interlocutorPublicKey: Curve25519.KeyAgreement.PublicKey?
private var symmetricKey: SymmetricKey?
init(transport: RendezvousTransportProtocol) {
self.transport = transport
}
/// Creates a new rendezvous endpoint and publishes the creator's public key
func createRendezvous() async -> Result<RendezvousDetails, RendezvousServiceError> {
privateKey = Curve25519.KeyAgreement.PrivateKey()
let publicKeyString = privateKey.publicKey.rawRepresentation.base64EncodedString()
let details = RendezvousDetails(algorithm: RendezvousChannelAlgorithm.ECDH_V1.rawValue)
switch await transport.create(body: details) {
case .failure(let transportError):
return .failure(.transportError(transportError))
case .success:
guard let rendezvousURL = transport.rendezvousURL else {
return .failure(.transportError(.rendezvousURLInvalid))
}
let fullDetails = RendezvousDetails(algorithm: RendezvousChannelAlgorithm.ECDH_V1.rawValue,
transport: RendezvousTransportDetails(type: "org.matrix.msc3886.http.v1",
uri: rendezvousURL.absoluteString),
key: publicKeyString)
return .success(fullDetails)
}
}
/// After creation we need to wait for the pair to publish its public key as well
/// At the end of this a symmetric key will be available for encryption
func waitForInterlocutor() async -> Result<String, RendezvousServiceError> {
switch await transport.get() {
case .failure(let error):
return .failure(.transportError(error))
case .success(let data):
guard let response = try? JSONDecoder().decode(RendezvousDetails.self, from: data) else {
return .failure(.decodingError)
}
guard let key = response.key,
let interlocutorPublicKeyData = Data(base64Encoded: key),
let interlocutorPublicKey = try? Curve25519.KeyAgreement.PublicKey(rawRepresentation: interlocutorPublicKeyData) else {
return .failure(.invalidInterlocutorKey)
}
self.interlocutorPublicKey = interlocutorPublicKey
guard let sharedSecret = try? privateKey.sharedSecretFromKeyAgreement(with: interlocutorPublicKey) else {
return .failure(.internalError)
}
self.symmetricKey = generateSymmetricKeyFrom(sharedSecret: sharedSecret,
initiatorPublicKey: privateKey.publicKey,
recipientPublicKey: interlocutorPublicKey)
let validationCode = generateValidationCodeFrom(symmetricKey: generateSymmetricKeyFrom(sharedSecret: sharedSecret,
initiatorPublicKey: privateKey.publicKey,
recipientPublicKey: interlocutorPublicKey,
byteCount: 5))
return .success(validationCode)
}
}
/// Joins an existing rendezvous and publishes the joiner's public key
/// At the end of this a symmetric key will be available for encryption
func joinRendezvous(withPublicKey publicKey: String) async -> Result<String, RendezvousServiceError> {
guard let interlocutorPublicKeyData = Data(base64Encoded: publicKey),
let interlocutorPublicKey = try? Curve25519.KeyAgreement.PublicKey(rawRepresentation: interlocutorPublicKeyData) else {
MXLog.debug("[RendezvousService] Invalid interlocutor data")
return .failure(.invalidInterlocutorKey)
}
privateKey = Curve25519.KeyAgreement.PrivateKey()
let publicKeyString = privateKey.publicKey.rawRepresentation.base64EncodedString()
let payload = RendezvousDetails(algorithm: RendezvousChannelAlgorithm.ECDH_V1.rawValue,
key: publicKeyString)
guard case .success = await transport.send(body: payload) else {
return .failure(.internalError)
}
self.interlocutorPublicKey = interlocutorPublicKey
guard let sharedSecret = try? privateKey.sharedSecretFromKeyAgreement(with: interlocutorPublicKey) else {
MXLog.debug("[RendezvousService] Couldn't create shared secret")
return .failure(.internalError)
}
symmetricKey = generateSymmetricKeyFrom(sharedSecret: sharedSecret,
initiatorPublicKey: interlocutorPublicKey,
recipientPublicKey: privateKey.publicKey)
let validationCode = generateValidationCodeFrom(symmetricKey: generateSymmetricKeyFrom(sharedSecret: sharedSecret,
initiatorPublicKey: interlocutorPublicKey,
recipientPublicKey: privateKey.publicKey,
byteCount: 5))
return .success(validationCode)
}
/// Send arbitrary data over the secure channel
/// This will use the previously generated symmetric key to AES encrypt the payload
/// - Parameter data: the data to be encrypted and sent
/// - Returns: nothing if succeeded or a RendezvousServiceError failure
func send(data: Data) async -> Result<(), RendezvousServiceError> {
guard let symmetricKey = symmetricKey else {
return .failure(.channelNotReady)
}
// Generate a custom random 256 bit nonce/iv as per MSC3903. The default one is 96 bit.
guard let nonce = try? AES.GCM.Nonce(data: generateRandomData(ofLength: 32)),
let sealedBox = try? AES.GCM.seal(data, using: symmetricKey, nonce: nonce) else {
return .failure(.internalError)
}
// The resulting cipher text needs to contain both the message and the authentication tag
// in order to play nicely with other platforms
var ciphertext = sealedBox.ciphertext
ciphertext.append(contentsOf: sealedBox.tag)
let body = RendezvousMessage(iv: Data(nonce).base64EncodedString(),
ciphertext: ciphertext.base64EncodedString())
switch await transport.send(body: body) {
case .failure(let transportError):
return .failure(.transportError(transportError))
case .success:
return .success(())
}
}
/// Waits for and returns newly available rendezvous channel data
/// - Returns: The unencrypted data or a RendezvousServiceError
func receive() async -> Result<Data, RendezvousServiceError> {
guard let symmetricKey = symmetricKey else {
return .failure(.channelNotReady)
}
switch await transport.get() {
case.failure(let transportError):
return .failure(.transportError(transportError))
case .success(let data):
guard let response = try? JSONDecoder().decode(RendezvousMessage.self, from: data) else {
return .failure(.decodingError)
}
MXLog.debug("Received rendezvous response: \(response)")
guard let ciphertextData = Data(base64Encoded: response.ciphertext),
let nonceData = Data(base64Encoded: response.iv),
let nonce = try? AES.GCM.Nonce(data: nonceData) else {
return .failure(.decodingError)
}
// Split the ciphertext into the message and authentication tag data
let messageData = ciphertextData.dropLast(16) // The last 16 bytes are the tag
let tagData = ciphertextData.dropFirst(messageData.count)
guard let sealedBox = try? AES.GCM.SealedBox(nonce: nonce, ciphertext: messageData, tag: tagData),
let messageData = try? AES.GCM.open(sealedBox, using: symmetricKey) else {
return .failure(.decodingError)
}
return .success(messageData)
}
}
func tearDown() async -> Result<(), RendezvousServiceError> {
switch await transport.tearDown() {
case .failure(let error):
return .failure(.transportError(error))
case .success:
privateKey = nil
interlocutorPublicKey = nil
symmetricKey = nil
return .success(())
}
}
// MARK: - Private
private func generateValidationCodeFrom(symmetricKey: SymmetricKey) -> String {
let bytes = symmetricKey.withUnsafeBytes {
return Data(Array($0))
}.map { UInt($0) }
let first = (bytes[0] << 5 | bytes[1] >> 3) + 1000
let secondPart1 = UInt(bytes[1] & 0x7) << 10
let secondPart2 = bytes[2] << 2 | bytes[3] >> 6
let second = (secondPart1 | secondPart2) + 1000
let third = ((bytes[3] & 0x3f) << 7 | bytes[4] >> 1) + 1000
return "\(first)-\(second)-\(third)"
}
private func generateSymmetricKeyFrom(sharedSecret: SharedSecret,
initiatorPublicKey: Curve25519.KeyAgreement.PublicKey,
recipientPublicKey: Curve25519.KeyAgreement.PublicKey,
byteCount: Int = SHA256Digest.byteCount) -> SymmetricKey {
guard let sharedInfoData = [RendezvousChannelAlgorithm.ECDH_V1.rawValue,
initiatorPublicKey.rawRepresentation.base64EncodedString(),
recipientPublicKey.rawRepresentation.base64EncodedString()]
.joined(separator: "|")
.data(using: .utf8) else {
fatalError("[RendezvousService] Failed creating symmetric key shared data")
}
// MSC3903 asks for a 8 zero byte salt when deriving the keys
let salt = Data(repeating: 0, count: 8)
return sharedSecret.hkdfDerivedSymmetricKey(using: SHA256.self,
salt: salt,
sharedInfo: sharedInfoData,
outputByteCount: byteCount)
}
private func generateRandomData(ofLength length: Int) -> Data {
var data = Data(count: length)
_ = data.withUnsafeMutableBytes { pointer -> Int32 in
if let baseAddress = pointer.baseAddress {
return SecRandomCopyBytes(kSecRandomDefault, length, baseAddress)
}
return 0
}
return data
}
}