mirror of
https://github.com/vector-im/element-ios.git
synced 2024-09-28 23:32:41 +00:00
Merge pull request #7643 from vector-im/release/1.11.0/release
Release 1.11.0
This commit is contained in:
commit
3a2bdabbf8
35 changed files with 333 additions and 256 deletions
17
CHANGES.md
17
CHANGES.md
|
@ -1,3 +1,20 @@
|
|||
## Changes in 1.11.0 (2023-08-15)
|
||||
|
||||
✨ Features
|
||||
|
||||
- Integrate Device Dehydration v2 through the Crypto SDK ([#7630](https://github.com/vector-im/element-ios/pull/7630))
|
||||
|
||||
🙌 Improvements
|
||||
|
||||
- Upgrade MatrixSDK version ([v0.27.0](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.27.0)).
|
||||
- Disable Siri, Share and Reply (from NSE) Extensions. ([#7618](https://github.com/vector-im/element-ios/issues/7618))
|
||||
|
||||
🐛 Bugfixes
|
||||
|
||||
- Fix bug in SSO URL generation that was non-compliant with the spec. ([#7639](https://github.com/vector-im/element-ios/pull/7639))
|
||||
- Fix a crash when opening v11 rooms. ([#7633](https://github.com/vector-im/element-ios/issues/7633))
|
||||
|
||||
|
||||
## Changes in 1.10.14 (2023-06-21)
|
||||
|
||||
🙌 Improvements
|
||||
|
|
|
@ -15,5 +15,5 @@
|
|||
//
|
||||
|
||||
// Version
|
||||
MARKETING_VERSION = 1.10.14
|
||||
CURRENT_PROJECT_VERSION = 1.10.14
|
||||
MARKETING_VERSION = 1.11.0
|
||||
CURRENT_PROJECT_VERSION = 1.11.0
|
||||
|
|
|
@ -192,7 +192,7 @@ final class BuildSettings: NSObject {
|
|||
#else
|
||||
/// The configuration to use for analytics. Set `isEnabled` to false to disable analytics.
|
||||
static let analyticsConfiguration = AnalyticsConfiguration(isEnabled: BuildSettings.baseBundleIdentifier.starts(with: "im.vector.app"),
|
||||
host: "https://posthog.hss.element.io",
|
||||
host: "https://posthog.element.io",
|
||||
apiKey: "phc_Jzsm6DTm6V2705zeU5dcNvQDlonOR68XvX2sh1sEOHO",
|
||||
termsURL: URL(string: "https://element.io/cookie-policy")!)
|
||||
#endif
|
||||
|
|
26
Podfile
26
Podfile
|
@ -16,7 +16,7 @@ use_frameworks!
|
|||
# - `{ :specHash => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for MatrixSDK repo. Used by Fastfile during CI
|
||||
#
|
||||
# Warning: our internal tooling depends on the name of this variable name, so be sure not to change it
|
||||
$matrixSDKVersion = '= 0.26.12'
|
||||
$matrixSDKVersion = '= 0.27.0'
|
||||
# $matrixSDKVersion = :local
|
||||
# $matrixSDKVersion = { :branch => 'develop'}
|
||||
# $matrixSDKVersion = { :specHash => { git: 'https://git.io/fork123', branch: 'fix' } }
|
||||
|
@ -104,22 +104,12 @@ abstract_target 'RiotPods' do
|
|||
end
|
||||
end
|
||||
|
||||
target "RiotShareExtension" do
|
||||
import_MatrixSDK
|
||||
import_MatrixKit_pods
|
||||
end
|
||||
|
||||
target "RiotSwiftUI" do
|
||||
import_SwiftUI_pods
|
||||
end
|
||||
end
|
||||
|
||||
target "RiotSwiftUITests" do
|
||||
import_SwiftUI_pods
|
||||
end
|
||||
|
||||
target "SiriIntents" do
|
||||
import_MatrixSDK
|
||||
import_MatrixKit_pods
|
||||
end
|
||||
|
||||
target "RiotNSE" do
|
||||
|
@ -131,6 +121,18 @@ abstract_target 'RiotPods' do
|
|||
import_MatrixSDK
|
||||
end
|
||||
|
||||
# Disabled due to crypto corruption issues.
|
||||
# https://github.com/vector-im/element-ios/issues/7618
|
||||
# target "RiotShareExtension" do
|
||||
# import_MatrixSDK
|
||||
# import_MatrixKit_pods
|
||||
# end
|
||||
#
|
||||
# target "SiriIntents" do
|
||||
# import_MatrixSDK
|
||||
# import_MatrixKit_pods
|
||||
# end
|
||||
|
||||
end
|
||||
|
||||
post_install do |installer|
|
||||
|
|
|
@ -208,6 +208,6 @@ SPEC CHECKSUMS:
|
|||
zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c
|
||||
ZXingObjC: fdbb269f25dd2032da343e06f10224d62f537bdb
|
||||
|
||||
PODFILE CHECKSUM: 0e7e10f516d40d9df60cb874170b91603c632118
|
||||
PODFILE CHECKSUM: f8d711a31048bfd5981d17b00487a85996b62983
|
||||
|
||||
COCOAPODS: 1.11.3
|
||||
|
|
|
@ -406,8 +406,8 @@
|
|||
"settings_ui_language" = "Sprache";
|
||||
// Events formatter
|
||||
"event_formatter_member_updates" = "%tu Änderungen der Mitgliedschaft";
|
||||
"contacts_user_directory_section" = "NUTZER VERZEICHNIS";
|
||||
"contacts_user_directory_offline_section" = "NUTZER VERZEICHNIS (offline)";
|
||||
"contacts_user_directory_section" = "NUTZERVERZEICHNIS";
|
||||
"contacts_user_directory_offline_section" = "NUTZERVERZEICHNIS (offline)";
|
||||
"auth_home_server_placeholder" = "URL (z.B. https://matrix.org)";
|
||||
"auth_identity_server_placeholder" = "URL (z. B. https://vector.im)";
|
||||
"room_ongoing_conference_call_close" = "Schließen";
|
||||
|
@ -2396,12 +2396,12 @@
|
|||
"room_suggestion_settings_screen_nav_title" = "Raum vorschlagen";
|
||||
"room_access_space_chooser_other_spaces_section_info" = "Diese sind vermutlich Dinge, zu denen andere Admins von %@ gehören.";
|
||||
"room_access_space_chooser_other_spaces_section" = "Andere Spaces oder Räume";
|
||||
"room_access_settings_screen_setting_room_access" = "Lege Raumzugriff fest";
|
||||
"room_access_settings_screen_upgrade_alert_upgrading" = "Raum upgraden";
|
||||
"room_access_settings_screen_setting_room_access" = "Raumzutritt festlegen";
|
||||
"room_access_settings_screen_upgrade_alert_upgrading" = "Raum aktualisieren";
|
||||
"room_access_settings_screen_upgrade_alert_upgrade_button" = "Aktualisieren";
|
||||
"room_access_settings_screen_upgrade_alert_auto_invite_switch" = "Mitglieder automatisch zu neuem Raum einladen";
|
||||
"room_access_settings_screen_upgrade_alert_message" = "Jeder in %@ kann diesen Raum finden und ihm beitreten - jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern.";
|
||||
"room_access_settings_screen_upgrade_alert_title" = "Raum upgraden";
|
||||
"room_access_settings_screen_upgrade_alert_message" = "Jeder in %@ kann diesen Raum finden und ihm beitreten – jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern.";
|
||||
"room_access_settings_screen_upgrade_alert_title" = "Raum aktualisieren";
|
||||
"room_access_settings_screen_edit_spaces" = "Spaces bearbeiten";
|
||||
"room_access_settings_screen_upgrade_required" = "Upgrade erforderlich";
|
||||
"room_access_settings_screen_message" = "Lege fest, wer %@ finden und beitreten kann.";
|
||||
|
@ -2461,13 +2461,13 @@
|
|||
"threads_discourage_information_1" = "Dein Heimserver unterstützt aktuell keine Threads, weshalb diese Funktion unzuverlässig sein könnte. Manche Thread-Nachrichten könnten nicht zuverlässig verfügbar sein. ";
|
||||
"all_chats_nothing_found_placeholder_title" = "Nichts gefunden.";
|
||||
"spaces_create_subspace_title" = "Sub-Space erstellen";
|
||||
"room_access_settings_screen_upgrade_alert_note" = "Bitte beachte, dass das Upgrade eine neue Version dieses Raums erstellt. Alle aktuellen Nachrichten bleiben in diesem archivierten Raum.";
|
||||
"room_access_settings_screen_upgrade_alert_note" = "Bitte beachte, dass die Aktualisierung eine neue Version dieses Raums erstellt. Alle aktuellen Nachrichten bleiben in diesem archivierten Raum.";
|
||||
"invite_to" = "Zu %@ einladen";
|
||||
"all_chats_empty_unreads_placeholder_message" = "Hier werden deine ungelesenen Nachrichten erscheinen, wenn du welche hast.";
|
||||
"all_chats_edit_layout_show_recents" = "Historie anzeigen";
|
||||
"all_chats_empty_list_placeholder_title" = "Du bist auf dem neuesten Stand.";
|
||||
"spaces_explore_rooms_format" = "%@ erkunden";
|
||||
"room_access_settings_screen_upgrade_alert_message_no_param" = "Jeder in einem übergeordneten Space kann diesen Raum finden und ihm beitreten - jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern.";
|
||||
"room_access_settings_screen_upgrade_alert_message_no_param" = "Jeder in einem übergeordneten Space kann diesen Raum finden und ihm beitreten – jeden manuell einzuladen ist nicht nötig. Du kannst diese Einstellung jederzeit ändern.";
|
||||
"room_access_settings_screen_public_message" = "Sichtbar und zugänglich für jeden.";
|
||||
"room_access_settings_screen_restricted_message" = "Sichtbar und betretbar für jeden Nutzer in einem Space.\nDu wählst, für welche Spaces dies gilt.";
|
||||
"room_access_settings_screen_private_message" = "Nur sichtbar und betretbar für eingeladene Personen.";
|
||||
|
@ -2771,3 +2771,8 @@
|
|||
"notice_display_name_changed_to" = "%@ hat den Anzeigenamen zu %@ geändert";
|
||||
"poll_timeline_loading" = "Lade …";
|
||||
"room_command_discard_session_description" = "Erzwingt das Verferfen der aktuell ausgehende Gruppensitzung in einem verschlüsseltem Raum";
|
||||
"room_creation_user_not_found_prompt_title" = "Bestätigung";
|
||||
"room_creation_user_not_found_prompt_message" = "Wir konnten kein Profil für diese Matrix-ID finden. Möchtest du dennoch eine Direktnachricht beginnen?";
|
||||
"room_creation_user_not_found_prompt_invite_action" = "Dennoch DM beginnen";
|
||||
"room_participants_invite_unknown_participant_prompt_to_msg" = "Wir konnten kein Profil für diese Matrix-ID finden. Möchtest du wirklich %@ nach %@ einladen?";
|
||||
"room_participants_invite_anyway" = "Dennoch einladen";
|
||||
|
|
|
@ -1968,7 +1968,7 @@
|
|||
"notice_encrypted_message" = "Ĉifrita mesaĝo";
|
||||
"notice_room_related_groups" = "Grupoj rilataj al ĉi tiu ĉambro estas: %@";
|
||||
"notice_room_aliases_for_dm" = "La kromnomoj estas: %@";
|
||||
"notice_room_aliases" = "Kromnomoj de la ĉamrbo estas: %@";
|
||||
"notice_room_aliases" = "Kromnomoj de la ĉambro estas: %@";
|
||||
"notice_room_power_level_event_requirement" = "La minimumaj povniveloj rilataj al okazoj estas:";
|
||||
"notice_room_power_level_acting_requirement" = "La minimuma povnivelo, kiun uzanto bezonas antaŭ agi, estas:";
|
||||
"notice_room_power_level_intro_for_dm" = "La povniveloj de ĉambranoj estas:";
|
||||
|
|
|
@ -2709,3 +2709,8 @@
|
|||
"room_command_change_display_name_description" = "Muudab sinu kuvatavat nime";
|
||||
"notice_display_name_changed_to" = "%@ muutis oma kuvatavaks nimeks %@";
|
||||
"poll_timeline_loading" = "Laadin...";
|
||||
"room_creation_user_not_found_prompt_title" = "Kinnitus";
|
||||
"room_creation_user_not_found_prompt_invite_action" = "Ikkagi alusta vestlust";
|
||||
"room_creation_user_not_found_prompt_message" = "Sellele Matrix'i kasutajatunnuse profiili ei leidu. Kas sa ikkagi tahaksid temaga vestlust alustada?";
|
||||
"room_participants_invite_unknown_participant_prompt_to_msg" = "Sellele Matrix'i kasutajatunnuse profiili ei leidu. Kas sa ikkagi tahaksid saata kutset kasutajale %@ jututuppa %@?";
|
||||
"room_participants_invite_anyway" = "Kutsu siiski";
|
||||
|
|
|
@ -274,7 +274,7 @@
|
|||
"room_title_members" = "%@ membri";
|
||||
"room_title_one_member" = "1 membro";
|
||||
// Room Preview
|
||||
"room_preview_invitation_format" = "Sei stato invitato ad entrare in questa stanza da %@";
|
||||
"room_preview_invitation_format" = "Sei stato/a invitato/a ad entrare in questa stanza da %@";
|
||||
"room_preview_subtitle" = "Questa è l'anteprima della stanza. Le interazioni sono disabilitate.";
|
||||
"room_preview_unlinked_email_warning" = "Questo invito è stato spedito a %@, che non è associato a questo account. Puoi aggiungere questa email al tuo account o provare ad accedere con un account differente.";
|
||||
"room_preview_try_join_an_unknown_room" = "Stai provando ad accedere a %@. Desideri entrare per partecipare alla discussione?";
|
||||
|
@ -457,7 +457,7 @@
|
|||
"group_home_multi_members_format" = "%tu membri";
|
||||
"group_home_one_room_format" = "1 stanza";
|
||||
"group_home_multi_rooms_format" = "%tu stanze";
|
||||
"group_invitation_format" = "%@ ti ha invitato ad unirti a questa comunità";
|
||||
"group_invitation_format" = "%@ ti ha invitato/a ad unirti a questa comunità";
|
||||
// Group participants
|
||||
"group_participants_add_participant" = "Aggiungi membri";
|
||||
"group_participants_leave_prompt_title" = "Lascia la stanza";
|
||||
|
@ -649,7 +649,7 @@
|
|||
"sign_out_key_backup_in_progress_alert_cancel_action" = "Attendo";
|
||||
"close" = "Chiudi";
|
||||
"auth_forgot_password_error_no_configured_identity_server" = "Non è stato configurato alcun server d'identità: aggiungine uno per ripristinare la password dell'account Matrix.";
|
||||
"auth_softlogout_signed_out" = "Sei uscito";
|
||||
"auth_softlogout_signed_out" = "Sei disconnesso/a";
|
||||
"auth_softlogout_sign_in" = "Accedi";
|
||||
"auth_softlogout_reason" = "L'amministratore dell'Home Server (%1$@) ti ha disconnesso dal tuo account %2$@ (%3$@).";
|
||||
"auth_softlogout_recover_encryption_keys" = "Accedi per recuperare le chiavi crittografiche archiviate su questo dispositivo. Le chiavi ti servono per poter leggere i tuoi messaggi cifrati su altri dispositivi.";
|
||||
|
@ -1164,7 +1164,7 @@
|
|||
"biometrics_cant_unlocked_alert_message_login" = "Riaccedi";
|
||||
"biometrics_cant_unlocked_alert_message_retry" = "Riprova";
|
||||
"device_verification_self_verify_wait_recover_secrets_checking_availability" = "Controllo di altre possibilità di verifica...";
|
||||
"joined" = "Entrato";
|
||||
"joined" = "Entrato/a";
|
||||
"switch" = "Cambia";
|
||||
"more" = "Altro";
|
||||
"pin_protection_choose_pin_welcome_after_login" = "Bentornato/a.";
|
||||
|
@ -1832,7 +1832,7 @@
|
|||
"room_error_cannot_load_timeline" = "Caricamento storico dei messaggi fallito";
|
||||
"room_error_timeline_event_not_found_title" = "Caricamento della posizione nello storico fallito";
|
||||
"room_error_timeline_event_not_found" = "L'applicazione ha cercato di caricare un punto specifico dello storico dei messaggi in questo canale, ma non è riuscita a trovarlo";
|
||||
"room_left" = "Sei uscito dalla stanza";
|
||||
"room_left" = "Sei uscito/a dalla stanza";
|
||||
"room_no_power_to_create_conference_call" = "Hai bisogno del permesso per invitare a iniziare una conferenza in questo canale";
|
||||
"room_no_conference_call_in_encrypted_rooms" = "Le chiamate in conferenza non sono supportate nei canali criptati";
|
||||
// Reply to message
|
||||
|
@ -1906,7 +1906,7 @@
|
|||
// Language picker
|
||||
"language_picker_title" = "Scegli una lingua";
|
||||
"language_picker_default_language" = "Predefinito (%@)";
|
||||
"notice_room_invite" = "%@ invitato %@";
|
||||
"notice_room_invite" = "%@ ha invitato %@";
|
||||
"notice_room_third_party_invite" = "%@ ha invitato %@ a unirsi al canale";
|
||||
"notice_room_third_party_registered_invite" = "%@ ha accettato l'invito per %@";
|
||||
"notice_room_third_party_revoked_invite" = "%@ ha ritirato l'invito per %@ a unirsi al canale";
|
||||
|
@ -1944,7 +1944,7 @@
|
|||
"login" = "Entra";
|
||||
"create_account" = "Crea utente";
|
||||
"membership_invite" = "Invitati";
|
||||
"membership_leave" = "Uscito";
|
||||
"membership_leave" = "Uscito/a";
|
||||
"membership_ban" = "Espulso";
|
||||
"num_members_one" = "%@ utente";
|
||||
"num_members_other" = "%@ utenti";
|
||||
|
@ -1979,7 +1979,7 @@
|
|||
"notification_settings_contain_my_user_name" = "Notifica con un suono i messaggi che contengono il mio nome utente";
|
||||
"notification_settings_contain_my_display_name" = "Notifica con un suono i messaggi che contengono il mio nome completo";
|
||||
"notification_settings_just_sent_to_me" = "Notifica con un suono i messaggi inviati solo a me";
|
||||
"notification_settings_invite_to_a_new_room" = "Notifica quando sono invitato in un nuovo canale";
|
||||
"notification_settings_invite_to_a_new_room" = "Avvisami quando sono invitato/a in una nuova stanza";
|
||||
"notification_settings_people_join_leave_rooms" = "Notifica quando gli utenti entrano o escono dai canali";
|
||||
"notification_settings_receive_a_call" = "Notifica quando ricevo una chiamata";
|
||||
"notification_settings_suppress_from_bots" = "Sopprimi le notifiche dai bot";
|
||||
|
@ -2009,12 +2009,12 @@
|
|||
"notice_encryption_enabled_unknown_algorithm" = "%1$@ ha attivato la crittografia end-to-end (algoritmo %2$@ non riconosciuto).";
|
||||
// Notice Events with "You"
|
||||
"notice_room_invite_by_you" = "Hai invitato %@";
|
||||
"notice_room_invite_you" = "%@ ti ha invitato";
|
||||
"notice_room_invite_you" = "%@ ti ha invitato/a";
|
||||
"notice_room_third_party_invite_by_you" = "Hai mandato un invito a %@ a unirsi alla stanza";
|
||||
"notice_room_third_party_registered_invite_by_you" = "Hai accettato l'invito per %@";
|
||||
"notice_room_third_party_revoked_invite_by_you" = "Hai revocato l'invito per %@ a unirsi alla stanza";
|
||||
"notice_room_join_by_you" = "Sei entrato";
|
||||
"notice_room_leave_by_you" = "Sei uscito";
|
||||
"notice_room_join_by_you" = "Sei entrato/a";
|
||||
"notice_room_leave_by_you" = "Sei uscito/a";
|
||||
"notice_room_reject_by_you" = "Hai rifiutato l'invito";
|
||||
"notice_room_kick_by_you" = "Hai rimosso %@";
|
||||
"notice_room_unban_by_you" = "Hai riammesso %@";
|
||||
|
@ -2049,7 +2049,7 @@
|
|||
"notice_room_join_rule_public" = "%@ ha reso la stanza pubblica.";
|
||||
"notice_room_join_rule_public_by_you" = "Hai reso la stanza pubblica.";
|
||||
"notice_room_name_removed_for_dm" = "%@ ha rimosso il nome";
|
||||
"notice_room_created_for_dm" = "%@ è entrato.";
|
||||
"notice_room_created_for_dm" = "%@ è entrato/a.";
|
||||
"notice_room_join_rule_invite_for_dm" = "%@ l'ha resa solo su invito.";
|
||||
"notice_room_join_rule_invite_by_you_for_dm" = "L'hai resa solo su invito.";
|
||||
"notice_room_join_rule_public_for_dm" = "%@ l'ha resa pubblica.";
|
||||
|
@ -2059,7 +2059,7 @@
|
|||
"notice_room_history_visible_to_members_for_dm" = "%@ ha reso visibili i messaggi futuri a tutti i membri della stanza.";
|
||||
"notice_room_history_visible_to_members_from_invited_point_for_dm" = "%@ ha reso visibili i messaggi futuri a chiunque, dal momento dell'invito.";
|
||||
"notice_room_history_visible_to_members_from_joined_point_for_dm" = "%@ ha reso visibili i messaggi futuri a chiunque, dal momento dell'entrata.";
|
||||
"room_left_for_dm" = "Sei uscito";
|
||||
"room_left_for_dm" = "Sei uscito/a";
|
||||
"notice_room_third_party_invite_for_dm" = "%@ ha invitato %@";
|
||||
"notice_room_third_party_revoked_invite_for_dm" = "%@ ha revocato l'invito per %@";
|
||||
"notice_room_name_changed_for_dm" = "%@ ha cambiato il nome in %@.";
|
||||
|
@ -2067,7 +2067,7 @@
|
|||
"notice_room_third_party_revoked_invite_by_you_for_dm" = "Hai revocato l'invito per %@";
|
||||
"notice_room_name_changed_by_you_for_dm" = "Hai cambiato il nome in %@.";
|
||||
"notice_room_name_removed_by_you_for_dm" = "Hai rimosso il nome";
|
||||
"notice_room_created_by_you_for_dm" = "Sei entrato.";
|
||||
"notice_room_created_by_you_for_dm" = "Sei entrato/a.";
|
||||
"notice_room_history_visible_to_members_by_you_for_dm" = "Hai reso visibili i messaggi futuri a tutti i membri della stanza.";
|
||||
"notice_room_history_visible_to_members_from_invited_point_by_you_for_dm" = "Hai reso visibili i messaggi futuri a chiunque, dal momento dell'invito.";
|
||||
"notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "Hai reso visibili i messaggi futuri a chiunque, dal momento dell'entrata.";
|
||||
|
@ -2096,7 +2096,7 @@
|
|||
"attachment_small_with_resolution" = "Piccolo %@ (~%@)";
|
||||
"attachment_size_prompt_message" = "Puoi disattivarlo nelle impostazioni.";
|
||||
"attachment_size_prompt_title" = "Conferma dimensione da inviare";
|
||||
"room_displayname_all_other_members_left" = "%@ (Uscito)";
|
||||
"room_displayname_all_other_members_left" = "%@ (Uscito/a)";
|
||||
"attachment_unsupported_preview_message" = "Questo tipo di file non è supportato.";
|
||||
"attachment_unsupported_preview_title" = "Anteprima non disponibile";
|
||||
"message_reply_to_sender_sent_their_location" = "ha condiviso la sua posizione.";
|
||||
|
@ -2273,7 +2273,7 @@
|
|||
"location_sharing_live_list_item_last_update_invalid" = "Ultimo aggiornamento sconosciuto";
|
||||
"location_sharing_live_list_item_last_update" = "Aggiornato %@ fa";
|
||||
"location_sharing_live_list_item_sharing_expired" = "Condivisione scaduta";
|
||||
"location_sharing_live_list_item_time_left" = "%@ è uscito";
|
||||
"location_sharing_live_list_item_time_left" = "%@ è uscito/a";
|
||||
"location_sharing_live_viewer_title" = "Posizione";
|
||||
"location_sharing_live_map_callout_title" = "Condividi posizione";
|
||||
"bug_report_logs_description" = "Per diagnosticare i problemi, i registri di questo client verranno inviati con questo rapporto di errore. Se preferisci inviare solo il testo soprastante, deseleziona:";
|
||||
|
@ -2737,3 +2737,8 @@
|
|||
"room_command_change_display_name_description" = "Cambia il tuo nome visualizzato";
|
||||
"notice_display_name_changed_to" = "%@ ha cambiato il suo nome visualizzato in %@";
|
||||
"poll_timeline_loading" = "Caricamento...";
|
||||
"room_creation_user_not_found_prompt_title" = "Conferma";
|
||||
"room_creation_user_not_found_prompt_invite_action" = "Inizia il messaggio lo stesso";
|
||||
"room_participants_invite_anyway" = "Invita lo stesso";
|
||||
"room_participants_invite_unknown_participant_prompt_to_msg" = "Impossibile trovare profili con questo ID Matrix. Vuoi davvero invitare %@ in %@?";
|
||||
"room_creation_user_not_found_prompt_message" = "Impossibile trovare profili con questo ID Matrix. Vuoi comunque iniziare un messaggio diretto?";
|
||||
|
|
|
@ -2265,3 +2265,91 @@
|
|||
// Room Access Settings
|
||||
"room_access_settings_screen_nav_title" = "Доступ к комнате";
|
||||
"spaces_coming_soon_detail" = "Эта функция еще не реализована здесь, но она в разработке. На данный момент вы можете сделать это с помощью %@ на своем компьютере.";
|
||||
|
||||
// Unverified sessions
|
||||
"key_verification_alert_title" = "У вас есть не подтвержденные сессии";
|
||||
"key_verification_scan_qr_code_title" = "Сканируйте QR-код";
|
||||
"home_context_menu_favourite" = "Любимые";
|
||||
"spaces_add_space_title" = "Создать пространство";
|
||||
"room_details_promote_room_title" = "Продвигать комнату";
|
||||
"room_suggestion_settings_screen_title" = "Сделать комнату предлагаемой в пространстве";
|
||||
"analytics_prompt_terms_link_new_user" = "здесь";
|
||||
"create_room_suggest_room" = "Предложения для пользователей пространства";
|
||||
"room_info_back_button_title" = "Информация о комнате";
|
||||
"home_context_menu_make_dm" = "Перейти к людям";
|
||||
"create_room_processing" = "Создание комнаты";
|
||||
"home_context_menu_unmute" = "Снять заглушку";
|
||||
|
||||
// MARK: - Room invite
|
||||
|
||||
"room_invite_to_space_option_title" = "К %@";
|
||||
"analytics_prompt_yes" = "Да, все классно";
|
||||
"create_room_section_footer_type_private" = "Только приглашенные люди могут искать и вступать.";
|
||||
"home_context_menu_make_room" = "Перейти к комнатам";
|
||||
"create_room_suggest_room_footer" = "Предлагаемые комнаты выдвинуты для участников как лучший выбор для вступления.";
|
||||
"home_context_menu_notifications" = "Уведомления";
|
||||
"analytics_prompt_terms_link_upgrade" = "здесь";
|
||||
"device_verification_self_verify_open_on_other_device_title" = "Откройте %@ на другом вашем устройстве";
|
||||
"create_room_section_footer_type_public" = "Только приглашенные люди могут искать и вступать, не только люди из пространства.";
|
||||
"home_context_menu_unfavourite" = "Удалить из любимых";
|
||||
"home_context_menu_normal_priority" = "Нормальный приоритет";
|
||||
"home_context_menu_mute" = "Заглушить";
|
||||
"room_access_settings_screen_upgrade_alert_upgrading" = "Улучшение комнаты";
|
||||
"room_access_settings_screen_upgrade_alert_upgrade_button" = "Улучшить";
|
||||
"key_backup_recover_from_private_key_progress" = "%@%% закончено";
|
||||
"room_access_settings_screen_upgrade_alert_title" = "Улучшить комнату";
|
||||
"share_extension_low_quality_video_message" = "Отправьте в %@ для лучшего качества или отправьте в пониженном качестве.";
|
||||
"settings_acceptable_use" = "Принимаемые политики пользования";
|
||||
"room_suggestion_settings_screen_message" = "Предлагаемые комнаты рекламируются среди участников пространства как подходящие для присоединения.";
|
||||
/* Note: The placeholder is for the contents of analytics_prompt_terms_link_new_user */
|
||||
"analytics_prompt_terms_new_user" = "Вы можете прочитать все наши условия %@.";
|
||||
"key_verification_alert_body" = "Перепроверьте надежность сохранности аккаунта.";
|
||||
|
||||
// MARK: - Launch loading
|
||||
|
||||
"launch_loading_generic" = "Синхронизация ваших разговоров";
|
||||
"home_context_menu_mark_as_unread" = "Пометить как непрочитанное";
|
||||
|
||||
// MARK: Sign out warning
|
||||
|
||||
"sign_out" = "Выйти";
|
||||
"room_command_unban_user_description" = "Разблокирует пользователя с указанным ID";
|
||||
"device_verification_self_verify_open_on_other_device_information" = "Вам нужно подтвердить эту сессию для того, чтобы прочитать защищенную историю сообщений\n\nОткройте Element на одном из ваших прочих устройств и действуйте по инструкции.";
|
||||
"room_command_change_room_topic_description" = "Указывает тему комнаты";
|
||||
"room_access_settings_screen_upgrade_required" = "Требуется улучшение";
|
||||
"key_verification_scan_qr_code_information_other_user" = "Наведите камеру на QR-код, отображенном на вашем устройстве для подтверждения ваших сессий";
|
||||
|
||||
// Room suggestion Settings
|
||||
"room_suggestion_settings_screen_nav_title" = "Предложить комнату";
|
||||
/* Note: The placeholder is for the contents of analytics_prompt_terms_link_upgrade */
|
||||
"analytics_prompt_terms_upgrade" = "Прочитать все наши условия %@. Они подходят?";
|
||||
"key_verification_scan_qr_code_information_other_session" = "Наведите камеру на QR-код, отображенном на другом вашем устройстве для подтверждения вашей сессии";
|
||||
"key_verification_scan_qr_code_information_other_device" = "Наведите камеру на QR-код, отображенном на другом вашем устройстве для подтверждения этой сессии";
|
||||
"create_room_type_restricted" = "Участники пространства";
|
||||
"home_context_menu_low_priority" = "Низкий приоритет";
|
||||
"share_invite_link_space_text" = "Хэй, вступай в это пространство на %@";
|
||||
"create_room_promotion_header" = "ПРОДВИЖЕНИЕ";
|
||||
"create_room_show_in_directory_footer" = "Это может помочь людям искать и вступать.";
|
||||
"space_invite_not_enough_permission" = "У вас нет разрешения для приглашения людей в это пространство";
|
||||
|
||||
// Room commands descriptions
|
||||
"room_command_change_display_name_description" = "Изменяет отображаемое имя пользователя";
|
||||
"room_command_emote_description" = "Отображает действие";
|
||||
"room_command_join_room_description" = "Присоединяться к комнате с указанным адресом";
|
||||
"room_command_part_room_description" = "Покинуть комнату";
|
||||
"room_command_invite_user_description" = "Добавляет пользователя с указанным ID в текущую комнату";
|
||||
"room_command_kick_user_description" = "Удаляет пользователя с указанным ID из этой комнаты";
|
||||
"room_command_ban_user_description" = "Блокирует пользователя с указанным ID";
|
||||
"room_command_set_user_power_level_description" = "Назначает уровень силы пользователя";
|
||||
"room_command_reset_user_power_level_description" = "Разжалует пользователя с указанным ID";
|
||||
"room_command_discard_session_description" = "Принудительно отбрасывает текущий исходящий групповой сеанс в зашифрованной комнате";
|
||||
"room_command_error_unknown_command" = "Некорректная или необработанная команда";
|
||||
|
||||
// Legacy to Rust security upgrade
|
||||
|
||||
"key_verification_self_verify_security_upgrade_alert_title" = "Приложение обновлено";
|
||||
"key_verification_self_verify_security_upgrade_alert_message" = "Безопасное общение может быть улучшено с новым обновлением. Пожалуйста, проверьте ваше устройство.";
|
||||
"device_verification_self_verify_wait_recover_secrets_additional_help" = "Нет доступа к существующей %@ сессии?";
|
||||
"key_verification_scan_qr_code_information_new_session" = "Наведите камеру на QR-код, отображенном на другом вашем устройстве для подтверждения вашей новой сессии";
|
||||
"create_room_section_footer_type_restricted" = "Все в пространстве могут искать и вступать.";
|
||||
"launch_loading_delay_warning" = "Это может занимать больше времени.\nСпасибо за терпение.";
|
||||
|
|
|
@ -2960,3 +2960,8 @@
|
|||
"room_command_change_display_name_description" = "Mení vaše zobrazované meno / prezývku";
|
||||
"notice_display_name_changed_to" = "%@ zmenil/a svoje zobrazované meno na %@";
|
||||
"poll_timeline_loading" = "Načítavanie…";
|
||||
"room_creation_user_not_found_prompt_title" = "Potvrdenie";
|
||||
"room_creation_user_not_found_prompt_invite_action" = "Spustiť konverzáciu aj tak";
|
||||
"room_participants_invite_anyway" = "Napriek tomu pozvať";
|
||||
"room_creation_user_not_found_prompt_message" = "Nie je možné nájsť používateľské profily pre toto Matrix ID. Chcete aj tak poslať priamu správu?";
|
||||
"room_participants_invite_unknown_participant_prompt_to_msg" = "Nie je možné nájsť profily pre toto Matrix ID. Ste si istí, že chcete pozvať %@ do %@?";
|
||||
|
|
|
@ -2676,3 +2676,31 @@
|
|||
"room_command_change_room_topic_description" = "Sätter rummets ämne";
|
||||
"room_command_discard_session_description" = "Tvingar den aktuella utgående gruppsessionen i ett krypterat rum att kasseras";
|
||||
"room_command_error_unknown_command" = "Ogiltigt eller obehandlat kommando";
|
||||
|
||||
// Legacy to Rust security upgrade
|
||||
|
||||
"key_verification_self_verify_security_upgrade_alert_title" = "App uppdaterad";
|
||||
"key_verification_self_verify_security_upgrade_alert_message" = "Säker meddelandehantering har förbättrats med den senaste uppdateringen. Vänligen verifiera din enhet igen.";
|
||||
"device_verification_self_verify_open_on_other_device_title" = "Öppna %@ på din andra enhet";
|
||||
"device_verification_self_verify_wait_recover_secrets_additional_help" = "Kan du inte komma åt en befintlig %@-session?";
|
||||
"key_verification_scan_qr_code_title" = "Skanna QR-kod";
|
||||
"device_verification_self_verify_open_on_other_device_information" = "Du behöver verifiera den här sessionen för att kunna läsa din säkra meddelandehistorik.\n\nÖppna Element på en av dina andra enheter och följ instruktionerna.";
|
||||
"key_verification_scan_qr_code_information_other_user" = "Rikta kameran mot QR-koden som visas på deras enhet för att verifiera deras session";
|
||||
"room_waiting_other_participants_title" = "Väntar på att användare ska gå med i %@";
|
||||
"pill_message_from" = "Meddelande från %@";
|
||||
"pill_message_in" = "Meddelande i %@";
|
||||
"notice_display_name_changed_to" = "%@ bytte sitt visningsnamn till %@";
|
||||
|
||||
// MARK: - Launch loading
|
||||
|
||||
"launch_loading_generic" = "Synkar dina konversationer";
|
||||
"launch_loading_delay_warning" = "Detta kan ta lite längre tid.\nTack för ditt tålamod.";
|
||||
"key_verification_scan_qr_code_information_other_device" = "Rikta kameran mot QR-koden som visas på din andra enhet för att verifiera den här sessionen";
|
||||
"room_waiting_other_participants_message" = "När inbjudna användare har gått med i %@ kommer du att kunna chatta och rummet kommer att totalsträckskrypteras";
|
||||
"poll_timeline_loading" = "Laddar …";
|
||||
|
||||
// Pills
|
||||
"pill_room_fallback_display_name" = "Utrymme/rum";
|
||||
"pill_message" = "Meddelande";
|
||||
"key_verification_scan_qr_code_information_new_session" = "Rikta kameran mot QR-koden som visas på din andra enhet för att verifiera din nya session";
|
||||
"key_verification_scan_qr_code_information_other_session" = "Rikta kameran mot QR-koden som visas på din andra enhet för att verifiera din session";
|
||||
|
|
|
@ -184,7 +184,7 @@
|
|||
"settings_remove_prompt_title" = "Підтвердження";
|
||||
"settings_surname" = "Прізвище";
|
||||
"settings_first_name" = "Ім’я";
|
||||
"settings_display_name" = "Показуване ім’я";
|
||||
"settings_display_name" = "Псевдонім";
|
||||
"settings_profile_picture" = "Зображення профілю";
|
||||
"settings_sign_out_e2e_warn" = "Ви втратите всі ваші ключі наскрізного шифрування. Це означає що ви більше не будете мати змогу читати старі повідомлення у зашифрованих кімнатах на цьому пристрої.";
|
||||
"settings_sign_out_confirmation" = "Ви впевнені?";
|
||||
|
@ -433,7 +433,7 @@
|
|||
"room_widget_permission_theme_permission" = "Ваша тема";
|
||||
"room_widget_permission_user_id_permission" = "Ваш ID користувача";
|
||||
"room_widget_permission_avatar_url_permission" = "URL-адреса вашого аватара";
|
||||
"room_widget_permission_display_name_permission" = "Ваше показуване імʼя";
|
||||
"room_widget_permission_display_name_permission" = "Ваш псевдонім";
|
||||
"room_widget_permission_creator_info_title" = "Цей віджет додано:";
|
||||
|
||||
// Room widget permissions
|
||||
|
@ -1129,7 +1129,7 @@
|
|||
"settings_show_url_previews" = "Попередній перегляд вебсайтів";
|
||||
"settings_ui_theme_picker_message_match_system_theme" = "«Авто» застосовує тему вашого пристрою";
|
||||
"settings_ui_theme_picker_message_invert_colours" = "«Авто» застосовує налаштування вашого пристрою «Інвертувати кольори»";
|
||||
"settings_messages_containing_display_name" = "Моє показуване імʼя";
|
||||
"settings_messages_containing_display_name" = "Мій псевдонім";
|
||||
"settings_discovery_three_pid_details_title_phone_number" = "Керувати номером телефону";
|
||||
"settings_discovery_three_pid_details_title_email" = "Керувати е-поштою";
|
||||
"settings_discovery_error_message" = "Сталася помилка. Повторіть спробу.";
|
||||
|
@ -1866,7 +1866,7 @@
|
|||
"login_prompt_email_token" = "Введіть ключ підтвердження електронної пошти:";
|
||||
"login_email_placeholder" = "Адреса е-пошти";
|
||||
"login_email_info" = "Вкажіть адресу електронної пошти, щоб інші користувачі могли легше знаходити вас на Matrix і надання вам можливості відновити пароль у майбутньому.";
|
||||
"login_display_name_placeholder" = "Видиме ім'я (наприклад Bob Obson)";
|
||||
"login_display_name_placeholder" = "Псевдонім (наприклад Bob Obson)";
|
||||
"login_optional_field" = "необов'язково";
|
||||
"login_password_placeholder" = "Пароль";
|
||||
"login_user_id_placeholder" = "Ідентифікатор Matrix (наприклад @bob:matrix.org або bob)";
|
||||
|
@ -2113,10 +2113,10 @@
|
|||
"notice_room_history_visible_to_members_from_joined_point_for_dm" = "%@ робить майбутню історію повідомлень видимою всім від часу їхнього приєднання.";
|
||||
"notice_room_history_visible_to_members_from_joined_point" = "%@ робить майбутню історію кімнати видимою всім учасникам кімнати від часу їхнього приєднання.";
|
||||
"notice_room_history_visible_to_members_from_invited_point_for_dm" = "%@ робить майбутню історію повідомлень видимою всім від часу їхнього запрошення.";
|
||||
"notice_room_history_visible_to_members_from_invited_point" = "%@ робить майбутню історію кімнати видимою усім учасникам кімнати від часу їхнього запрошення.";
|
||||
"notice_room_history_visible_to_members_for_dm" = "%@ робить майбутню історію повідомлень видимою усім учасникам кімнати.";
|
||||
"notice_room_history_visible_to_members" = "%@ робить майбутню історію кімнати видимою усім учасникам кімнати.";
|
||||
"notice_room_history_visible_to_anyone" = "%@ робить майбутню історію кімнати видимою усім.";
|
||||
"notice_room_history_visible_to_members_from_invited_point" = "%@ робить майбутню історію кімнати видимою всім учасникам кімнати від часу їхнього запрошення.";
|
||||
"notice_room_history_visible_to_members_for_dm" = "%@ робить майбутню історію повідомлень видимою всім учасникам кімнати.";
|
||||
"notice_room_history_visible_to_members" = "%@ робить майбутню історію кімнати видимою всім учасникам кімнати.";
|
||||
"notice_room_history_visible_to_anyone" = "%@ робить майбутню історію кімнати видимою всім.";
|
||||
"notice_redaction" = "%@ редагує подію (id: %@)";
|
||||
"notice_feedback" = "Подія відгуку (id: %@): %@";
|
||||
"notice_room_related_groups" = "Групи пов'язані з цією кімнатою: %@";
|
||||
|
@ -2136,9 +2136,9 @@
|
|||
"notice_room_name_changed_for_dm" = "%@ змінює назву на %@.";
|
||||
"notice_room_name_changed" = "%@ змінює назву кімнати на %@.";
|
||||
"notice_topic_changed" = "%@ змінює тему на «%@».";
|
||||
"notice_display_name_removed" = "%@ вилучає своє показуване ім'я";
|
||||
"notice_display_name_changed_from" = "%@ змінює своє показуване ім'я з %@ на %@";
|
||||
"notice_display_name_set" = "%@ встановлює своїм показуваним іменем %@";
|
||||
"notice_display_name_removed" = "%@ вилучає свій псевдонім";
|
||||
"notice_display_name_changed_from" = "%@ змінює свій псевдонім з %@ на %@";
|
||||
"notice_display_name_set" = "%@ встановлює своїм псевдонімом %@";
|
||||
"notice_room_withdraw" = "%@ анульовує запрошення для %@";
|
||||
"notice_room_kick" = "%@ вилучає %@";
|
||||
"notice_room_reject" = "%@ відхиляє запрошення";
|
||||
|
@ -2194,7 +2194,7 @@
|
|||
"notification_settings_per_room_notifications" = "Сповіщення від кожної кімнати";
|
||||
"notification_settings_per_sender_notifications" = "Сповіщення про кожного відправника";
|
||||
"notification_settings_contain_my_user_name" = "Сповіщати звуком про повідомлення, що містять моє ім'я користиувача";
|
||||
"notification_settings_contain_my_display_name" = "Сповіщати звуком про повідомлення, що містять моє показуване ім'я";
|
||||
"notification_settings_contain_my_display_name" = "Сповіщати звуком про повідомлення з моїм псевдонімом";
|
||||
"notification_settings_just_sent_to_me" = "Сповіщати звуком про надіслані лише мені повідомлення";
|
||||
"notification_settings_invite_to_a_new_room" = "Сповіщати про запрошення до нових кімнат";
|
||||
"notification_settings_people_join_leave_rooms" = "Сповіщати, коли люди приєднуються чи виходять з кімнат";
|
||||
|
@ -2209,7 +2209,7 @@
|
|||
"account_error_email_wrong_title" = "Неправильна адреса е-пошти";
|
||||
"account_error_matrix_session_is_not_opened" = "Сеанс Matrix не відкрито";
|
||||
"account_error_picture_change_failed" = "Не вдалося змінити зображення";
|
||||
"account_error_display_name_change_failed" = "Не вдалося змінити показуване ім'я";
|
||||
"account_error_display_name_change_failed" = "Не вдалося змінити псевдонім";
|
||||
"account_msisdn_validation_error" = "Не вдалося перевірити номер телефону.";
|
||||
"account_email_validation_title" = "Очікування перевірки";
|
||||
"account_msisdn_validation_title" = "Очікування перевірки";
|
||||
|
@ -2241,12 +2241,12 @@
|
|||
"e2e_passphrase_enter" = "Введіть парольну фразу";
|
||||
"e2e_passphrase_empty" = "Парольна фраза не повинна бути порожньою";
|
||||
"e2e_passphrase_confirm" = "Підтвердити парольну фразу";
|
||||
"notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими будь-кому від часу їхнього приєднання.";
|
||||
"notice_room_history_visible_to_members_from_joined_point_by_you" = "Ви зробили майбутню історію кімнати видимою усім учасникам кімнати від часу їхнього приєднання.";
|
||||
"notice_room_history_visible_to_members_from_joined_point_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими всім від часу їхнього приєднання.";
|
||||
"notice_room_history_visible_to_members_from_joined_point_by_you" = "Ви зробили майбутню історію кімнати видимою всім учасникам кімнати від часу їхнього приєднання.";
|
||||
"notice_room_history_visible_to_members_from_invited_point_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими будь-кому від часу запрошення їх.";
|
||||
"notice_room_history_visible_to_members_from_invited_point_by_you" = "Ви зробили майбутню історію кімнати видимою усім учасникам кімнати від часу запрошення їх.";
|
||||
"notice_room_history_visible_to_members_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими усім учасникам кімнати.";
|
||||
"notice_room_history_visible_to_members_by_you" = "Ви зробили майбутню історію кімнати видимою усім учасникам кімнати.";
|
||||
"notice_room_history_visible_to_members_from_invited_point_by_you" = "Ви зробили майбутню історію кімнати видимою всім учасникам кімнати від часу запрошення їх.";
|
||||
"notice_room_history_visible_to_members_by_you_for_dm" = "Ви зробили майбутні повідомлення кімнати видимими всім учасникам кімнати.";
|
||||
"notice_room_history_visible_to_members_by_you" = "Ви зробили майбутню історію кімнати видимою всім учасникам кімнати.";
|
||||
"notice_room_history_visible_to_anyone_by_you" = "Ви зробили майбутню історію кімнати видимою будь-кому.";
|
||||
"notice_room_created_by_you" = "Ви створили й сконфігурували кімнату.";
|
||||
"notice_profile_change_redacted_by_you" = "Ви оновили свій профіль %@";
|
||||
|
@ -2261,9 +2261,9 @@
|
|||
"notice_room_name_changed_by_you_for_dm" = "Ви змінили назву на %@.";
|
||||
"notice_room_name_changed_by_you" = "Ви змінили назву кімнати на %@.";
|
||||
"notice_topic_changed_by_you" = "Ви змінили тему на «%@».";
|
||||
"notice_display_name_removed_by_you" = "Ви вилучили показуване ім'я";
|
||||
"notice_display_name_changed_from_by_you" = "Ви змінили показуване ім'я з %@ на %@";
|
||||
"notice_display_name_set_by_you" = "Ви вказали показуваним іменем %@";
|
||||
"notice_display_name_removed_by_you" = "Ви вилучили псевдонім";
|
||||
"notice_display_name_changed_from_by_you" = "Ви змінили псевдонім з %@ на %@";
|
||||
"notice_display_name_set_by_you" = "Ви налаштували псевдонімом %@";
|
||||
"notice_conference_call_finished" = "Голосовий груповий виклик завершено";
|
||||
"notice_conference_call_started" = "Груповий голосовий виклик розпочато";
|
||||
"notice_conference_call_request" = "%@ запрошує до групового голосового виклику";
|
||||
|
@ -2467,11 +2467,11 @@
|
|||
"onboarding_avatar_accessibility_label" = "Зображення профілю";
|
||||
"onboarding_avatar_message" = "Час додати обличчя до імені";
|
||||
"onboarding_avatar_title" = "Додати зображення профілю";
|
||||
"onboarding_display_name_max_length" = "Ваше показуване ім'я повинно складатися з менш ніж 256 символів";
|
||||
"onboarding_display_name_max_length" = "Ваш псевдонім повинен складатися з менш ніж 256 символів";
|
||||
"onboarding_display_name_hint" = "Ви можете змінити його пізніше";
|
||||
"onboarding_display_name_placeholder" = "Показуване ім'я";
|
||||
"onboarding_display_name_placeholder" = "Псевдонім";
|
||||
"onboarding_display_name_message" = "Його буде показано у надісланих повідомленнях.";
|
||||
"onboarding_display_name_title" = "Виберіть показуване ім'я";
|
||||
"onboarding_display_name_title" = "Оберіть псевдонім";
|
||||
"onboarding_personalization_skip" = "Пропустити цей крок";
|
||||
"onboarding_personalization_save" = "Зберегти й продовжити";
|
||||
"onboarding_congratulations_home_button" = "На головну";
|
||||
|
@ -2960,5 +2960,10 @@
|
|||
|
||||
// Room commands descriptions
|
||||
"room_command_change_display_name_description" = "Змінює ваш нік";
|
||||
"notice_display_name_changed_to" = "%@ змінили своє показуване ім'я на %@";
|
||||
"notice_display_name_changed_to" = "%@ змінили свій псевдонім на %@";
|
||||
"poll_timeline_loading" = "Завантаження...";
|
||||
"room_creation_user_not_found_prompt_invite_action" = "Усе одно розпочати приватну бесіду";
|
||||
"room_participants_invite_anyway" = "Усе одно запросити";
|
||||
"room_creation_user_not_found_prompt_title" = "Підтвердження";
|
||||
"room_creation_user_not_found_prompt_message" = "Не вдалося знайти профілі для цього Matrix ID. Усе одно хочете розпочати приватну бесіду?";
|
||||
"room_participants_invite_unknown_participant_prompt_to_msg" = "Не вдалося знайти профілі для цього Matrix ID. Ви впевнені, що хочете запросити %@ до %@?";
|
||||
|
|
|
@ -50,11 +50,14 @@ final class HomeserverConfigurationBuilder: NSObject {
|
|||
} else {
|
||||
secureBackupSetupMethods = VectorWellKnownBackupSetupMethod.allCases
|
||||
}
|
||||
|
||||
let deviceDehydrationEnabled = wellKnown?.jsonDictionary()["org.matrix.msc3814"] as? Bool == true
|
||||
|
||||
let encryptionConfiguration = HomeserverEncryptionConfiguration(isE2EEByDefaultEnabled: isE2EEByDefaultEnabled,
|
||||
isSecureBackupRequired: isSecureBackupRequired,
|
||||
secureBackupSetupMethods: secureBackupSetupMethods,
|
||||
outboundKeysPreSharingMode: outboundKeysPreSharingMode)
|
||||
outboundKeysPreSharingMode: outboundKeysPreSharingMode,
|
||||
deviceDehydrationEnabled: deviceDehydrationEnabled)
|
||||
|
||||
// Jitsi configuration
|
||||
let jitsiPreferredDomain: String?
|
||||
|
|
|
@ -23,15 +23,18 @@ final class HomeserverEncryptionConfiguration: NSObject {
|
|||
let isSecureBackupRequired: Bool
|
||||
let secureBackupSetupMethods: [VectorWellKnownBackupSetupMethod]
|
||||
let outboundKeysPreSharingMode: MXKKeyPreSharingStrategy
|
||||
let deviceDehydrationEnabled: Bool
|
||||
|
||||
init(isE2EEByDefaultEnabled: Bool,
|
||||
isSecureBackupRequired: Bool,
|
||||
secureBackupSetupMethods: [VectorWellKnownBackupSetupMethod],
|
||||
outboundKeysPreSharingMode: MXKKeyPreSharingStrategy) {
|
||||
outboundKeysPreSharingMode: MXKKeyPreSharingStrategy,
|
||||
deviceDehydrationEnabled: Bool) {
|
||||
self.isE2EEByDefaultEnabled = isE2EEByDefaultEnabled
|
||||
self.isSecureBackupRequired = isSecureBackupRequired
|
||||
self.outboundKeysPreSharingMode = outboundKeysPreSharingMode
|
||||
self.secureBackupSetupMethods = secureBackupSetupMethods
|
||||
self.deviceDehydrationEnabled = deviceDehydrationEnabled
|
||||
|
||||
super.init()
|
||||
}
|
||||
|
|
|
@ -50,7 +50,7 @@ final class SSOAuthenticationService: NSObject {
|
|||
|
||||
var ssoRedirectPath = SSOURLConstants.Paths.redirect
|
||||
|
||||
if let identityProvider = identityProvider {
|
||||
if let identityProvider = identityProvider, !identityProvider.isEmpty {
|
||||
ssoRedirectPath.append("/\(identityProvider)")
|
||||
}
|
||||
|
||||
|
|
|
@ -305,15 +305,5 @@
|
|||
*/
|
||||
- (void)showAuthenticationFallBackView;
|
||||
|
||||
#pragma mark - Device rehydration
|
||||
|
||||
/**
|
||||
Call this method at an appropriate time to attempt rehydrating from an existing dehydrated device
|
||||
@param keyData Secret key data
|
||||
@param credentials Account credentials
|
||||
*/
|
||||
|
||||
- (void)attemptDeviceRehydrationWithKeyData:(NSData *)keyData credentials:(MXCredentials *)credentials;
|
||||
|
||||
@end
|
||||
|
||||
|
|
|
@ -1495,68 +1495,6 @@
|
|||
[self _createAccountWithCredentials:credentials];
|
||||
}
|
||||
|
||||
- (void)attemptDeviceRehydrationWithKeyData:(NSData *)keyData
|
||||
credentials:(MXCredentials *)credentials
|
||||
{
|
||||
[self attemptDeviceRehydrationWithKeyData:keyData
|
||||
credentials:credentials
|
||||
retry:YES];
|
||||
}
|
||||
|
||||
- (void)attemptDeviceRehydrationWithKeyData:(NSData *)keyData
|
||||
credentials:(MXCredentials *)credentials
|
||||
retry:(BOOL)retry
|
||||
{
|
||||
MXLogDebug(@"[MXKAuthenticationViewController] attemptDeviceRehydration: starting device rehydration");
|
||||
|
||||
if (keyData == nil)
|
||||
{
|
||||
MXLogError(@"[MXKAuthenticationViewController] attemptDeviceRehydration: no key provided for device rehydration");
|
||||
[self _createAccountWithCredentials:credentials];
|
||||
return;
|
||||
}
|
||||
|
||||
MXRestClient *mxRestClient = [[MXRestClient alloc] initWithCredentials:credentials andOnUnrecognizedCertificateBlock:^BOOL(NSData *certificate) {
|
||||
return NO;
|
||||
} andPersistentTokenDataHandler:^(void (^handler)(NSArray<MXCredentials *> *credentials, void (^completion)(BOOL didUpdateCredentials))) {
|
||||
[[MXKAccountManager sharedManager] readAndWriteCredentials:handler];
|
||||
} andUnauthenticatedHandler: nil];
|
||||
|
||||
MXWeakify(self);
|
||||
[[MXKAccountManager sharedManager].dehydrationService rehydrateDeviceWithMatrixRestClient:mxRestClient dehydrationKey:keyData success:^(NSString * deviceId) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
if (deviceId)
|
||||
{
|
||||
MXLogDebug(@"[MXKAuthenticationViewController] attemptDeviceRehydration: device %@ rehydrated successfully.", deviceId);
|
||||
credentials.deviceId = deviceId;
|
||||
}
|
||||
else
|
||||
{
|
||||
MXLogDebug(@"[MXKAuthenticationViewController] attemptDeviceRehydration: device rehydration has been canceled.");
|
||||
}
|
||||
|
||||
[self _createAccountWithCredentials:credentials];
|
||||
} failure:^(NSError *error) {
|
||||
MXStrongifyAndReturnIfNil(self);
|
||||
|
||||
if (retry)
|
||||
{
|
||||
MXLogErrorDetails(@"[MXKAuthenticationViewController] attemptDeviceRehydration: device rehydration failed due to error: Retrying", @{
|
||||
@"error": error ?: @"unknown"
|
||||
});
|
||||
[self attemptDeviceRehydrationWithKeyData:keyData credentials:credentials retry:NO];
|
||||
return;
|
||||
}
|
||||
|
||||
MXLogErrorDetails(@"[MXKAuthenticationViewController] attemptDeviceRehydration: device rehydration failed due to error", @{
|
||||
@"error": error ?: @"unknown"
|
||||
});
|
||||
|
||||
[self _createAccountWithCredentials:credentials];
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)_createAccountWithCredentials:(MXCredentials *)credentials
|
||||
{
|
||||
MXKAccount *account = [[MXKAccount alloc] initWithCredentials:credentials];
|
||||
|
|
|
@ -360,13 +360,6 @@ typedef BOOL (^MXKAccountOnCertificateChange)(MXKAccount *mxAccount, NSData *cer
|
|||
|
||||
#pragma mark - Sync filter
|
||||
|
||||
/**
|
||||
Call this method at an appropriate time to attempt dehydrating to a new backup device
|
||||
*/
|
||||
- (void)attemptDeviceDehydrationWithKeyData:(NSData *)keyData
|
||||
success:(void (^)(void))success
|
||||
failure:(void (^)(NSError *error))failure;
|
||||
|
||||
/**
|
||||
Handle unauthenticated errors from the server triggering hard/soft logouts as appropriate.
|
||||
*/
|
||||
|
|
|
@ -1715,70 +1715,6 @@ static NSArray<NSNumber*> *initialSyncSilentErrorsHTTPStatusCodes;
|
|||
}];
|
||||
}
|
||||
|
||||
- (void)attemptDeviceDehydrationWithKeyData:(NSData *)keyData
|
||||
success:(void (^)(void))success
|
||||
failure:(void (^)(NSError *error))failure
|
||||
{
|
||||
[self attemptDeviceDehydrationWithKeyData:keyData retry:YES success:success failure:failure];
|
||||
}
|
||||
|
||||
- (void)attemptDeviceDehydrationWithKeyData:(NSData *)keyData
|
||||
retry:(BOOL)retry
|
||||
success:(void (^)(void))success
|
||||
failure:(void (^)(NSError *error))failure
|
||||
{
|
||||
if (keyData == nil)
|
||||
{
|
||||
MXLogWarning(@"[MXKAccount] attemptDeviceDehydrationWithRetry: no key provided for device dehydration");
|
||||
|
||||
if (failure)
|
||||
{
|
||||
failure(nil);
|
||||
}
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
if (![mxSession.crypto.crossSigning isKindOfClass:[MXLegacyCrossSigning class]]) {
|
||||
MXLogFailure(@"Device dehydratation is currently only supported by legacy cross signing, add support to all implementations");
|
||||
if (failure)
|
||||
{
|
||||
failure(nil);
|
||||
}
|
||||
return;
|
||||
}
|
||||
MXLegacyCrossSigning *crossSigning = (MXLegacyCrossSigning *)mxSession.crypto.crossSigning;;
|
||||
|
||||
MXLogDebug(@"[MXKAccount] attemptDeviceDehydrationWithRetry: starting device dehydration");
|
||||
[[MXKAccountManager sharedManager].dehydrationService dehydrateDeviceWithMatrixRestClient:mxRestClient crossSigning:crossSigning dehydrationKey:keyData success:^(NSString *deviceId) {
|
||||
MXLogDebug(@"[MXKAccount] attemptDeviceDehydrationWithRetry: device successfully dehydrated");
|
||||
|
||||
if (success)
|
||||
{
|
||||
success();
|
||||
}
|
||||
} failure:^(NSError *error) {
|
||||
if (retry)
|
||||
{
|
||||
[self attemptDeviceDehydrationWithKeyData:keyData retry:NO success:success failure:failure];
|
||||
MXLogErrorDetails(@"[MXKAccount] attemptDeviceDehydrationWithRetry: device dehydration failed due to error: Retrying.", @{
|
||||
@"error": error ?: @"unknown"
|
||||
});
|
||||
}
|
||||
else
|
||||
{
|
||||
MXLogErrorDetails(@"[MXKAccount] attemptDeviceDehydrationWithRetry: device dehydration failed due to error", @{
|
||||
@"error": error ?: @"unknown"
|
||||
});
|
||||
|
||||
if (failure)
|
||||
{
|
||||
failure(error);
|
||||
}
|
||||
}
|
||||
}];
|
||||
}
|
||||
|
||||
- (void)onMatrixSessionStateChange
|
||||
{
|
||||
// Check if pause has been requested
|
||||
|
|
|
@ -104,8 +104,6 @@ extern NSString *const MXKAccountManagerDataType;
|
|||
*/
|
||||
@property (nonatomic) BOOL isPushAvailable;
|
||||
|
||||
@property (nonatomic, readonly) MXDehydrationService *dehydrationService;
|
||||
|
||||
/**
|
||||
Retrieve the MXKAccounts manager.
|
||||
|
||||
|
|
|
@ -71,7 +71,6 @@ NSString *const MXKAccountManagerDataType = @"org.matrix.kit.MXKAccountManagerDa
|
|||
if (self)
|
||||
{
|
||||
_storeClass = [MXFileStore class];
|
||||
_dehydrationService = [MXDehydrationService new];
|
||||
_savingAccountsEnabled = YES;
|
||||
|
||||
// Migrate old account file to new format
|
||||
|
|
|
@ -830,38 +830,37 @@ static NSString *const kRepliedTextPattern = @"<mx-reply>.*<blockquote>.*<br>(.*
|
|||
}
|
||||
case MXEventTypeRoomCreate:
|
||||
{
|
||||
NSString *creatorId;
|
||||
MXJSONModelSetString(creatorId, event.content[@"creator"]);
|
||||
// Room version 11 removes `creator` in favour of `sender`.
|
||||
// https://github.com/matrix-org/matrix-spec-proposals/pull/2175
|
||||
// Just use the sender as it is possible to create a v11 room and spoof the `creator`.
|
||||
NSString *creatorId = event.sender;
|
||||
|
||||
if (creatorId)
|
||||
if ([creatorId isEqualToString:mxSession.myUserId])
|
||||
{
|
||||
if ([creatorId isEqualToString:mxSession.myUserId])
|
||||
if (isRoomDirect)
|
||||
{
|
||||
if (isRoomDirect)
|
||||
{
|
||||
displayText = [VectorL10n noticeRoomCreatedByYouForDm];
|
||||
}
|
||||
else
|
||||
{
|
||||
displayText = [VectorL10n noticeRoomCreatedByYou];
|
||||
}
|
||||
displayText = [VectorL10n noticeRoomCreatedByYouForDm];
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isRoomDirect)
|
||||
{
|
||||
displayText = [VectorL10n noticeRoomCreatedForDm:(roomState ? [roomState.members memberName:creatorId] : creatorId)];
|
||||
}
|
||||
else
|
||||
{
|
||||
displayText = [VectorL10n noticeRoomCreated:(roomState ? [roomState.members memberName:creatorId] : creatorId)];
|
||||
}
|
||||
displayText = [VectorL10n noticeRoomCreatedByYou];
|
||||
}
|
||||
// Append redacted info if any
|
||||
if (redactedInfo)
|
||||
}
|
||||
else
|
||||
{
|
||||
if (isRoomDirect)
|
||||
{
|
||||
displayText = [NSString stringWithFormat:@"%@ %@", displayText, redactedInfo];
|
||||
displayText = [VectorL10n noticeRoomCreatedForDm:(roomState ? [roomState.members memberName:creatorId] : creatorId)];
|
||||
}
|
||||
else
|
||||
{
|
||||
displayText = [VectorL10n noticeRoomCreated:(roomState ? [roomState.members memberName:creatorId] : creatorId)];
|
||||
}
|
||||
}
|
||||
// Append redacted info if any
|
||||
if (redactedInfo)
|
||||
{
|
||||
displayText = [NSString stringWithFormat:@"%@ %@", displayText, redactedInfo];
|
||||
}
|
||||
break;
|
||||
}
|
||||
|
|
|
@ -34,9 +34,9 @@ final class SecretsRecoveryWithKeyCoordinator: SecretsRecoveryWithKeyCoordinator
|
|||
|
||||
// MARK: - Setup
|
||||
|
||||
init(recoveryService: MXRecoveryService, recoveryGoal: SecretsRecoveryGoal, cancellable: Bool) {
|
||||
init(recoveryService: MXRecoveryService, recoveryGoal: SecretsRecoveryGoal, cancellable: Bool, dehydrationService: DehydrationService?) {
|
||||
|
||||
let secretsRecoveryWithKeyViewModel = SecretsRecoveryWithKeyViewModel(recoveryService: recoveryService, recoveryGoal: recoveryGoal)
|
||||
let secretsRecoveryWithKeyViewModel = SecretsRecoveryWithKeyViewModel(recoveryService: recoveryService, recoveryGoal: recoveryGoal, dehydrationService: dehydrationService)
|
||||
let secretsRecoveryWithKeyViewController = SecretsRecoveryWithKeyViewController.instantiate(with: secretsRecoveryWithKeyViewModel, cancellable: cancellable)
|
||||
self.secretsRecoveryWithKeyViewController = secretsRecoveryWithKeyViewController
|
||||
self.secretsRecoveryWithKeyViewModel = secretsRecoveryWithKeyViewModel
|
||||
|
|
|
@ -24,6 +24,8 @@ final class SecretsRecoveryWithKeyViewModel: SecretsRecoveryWithKeyViewModelType
|
|||
|
||||
private let recoveryService: MXRecoveryService
|
||||
|
||||
private let dehydrationService: DehydrationService?
|
||||
|
||||
// MARK: Public
|
||||
|
||||
let recoveryGoal: SecretsRecoveryGoal
|
||||
|
@ -39,8 +41,9 @@ final class SecretsRecoveryWithKeyViewModel: SecretsRecoveryWithKeyViewModelType
|
|||
|
||||
// MARK: - Setup
|
||||
|
||||
init(recoveryService: MXRecoveryService, recoveryGoal: SecretsRecoveryGoal) {
|
||||
init(recoveryService: MXRecoveryService, recoveryGoal: SecretsRecoveryGoal, dehydrationService: DehydrationService?) {
|
||||
self.recoveryService = recoveryService
|
||||
self.dehydrationService = dehydrationService
|
||||
self.recoveryGoal = recoveryGoal
|
||||
}
|
||||
|
||||
|
@ -83,6 +86,10 @@ final class SecretsRecoveryWithKeyViewModel: SecretsRecoveryWithKeyViewModelType
|
|||
}
|
||||
self.update(viewState: .loaded)
|
||||
self.coordinatorDelegate?.secretsRecoveryWithKeyViewModelDidRecover(self)
|
||||
|
||||
Task {
|
||||
await self.dehydrationService?.runDeviceDehydrationFlow(privateKeyData: privateKey)
|
||||
}
|
||||
}, failure: { [weak self] error in
|
||||
guard let self = self else {
|
||||
return
|
||||
|
|
|
@ -34,8 +34,8 @@ final class SecretsRecoveryWithPassphraseCoordinator: SecretsRecoveryWithPassphr
|
|||
|
||||
// MARK: - Setup
|
||||
|
||||
init(recoveryService: MXRecoveryService, recoveryGoal: SecretsRecoveryGoal, cancellable: Bool) {
|
||||
let secretsRecoveryWithPassphraseViewModel = SecretsRecoveryWithPassphraseViewModel(recoveryService: recoveryService, recoveryGoal: recoveryGoal)
|
||||
init(recoveryService: MXRecoveryService, recoveryGoal: SecretsRecoveryGoal, cancellable: Bool, dehydrationService: DehydrationService?) {
|
||||
let secretsRecoveryWithPassphraseViewModel = SecretsRecoveryWithPassphraseViewModel(recoveryService: recoveryService, recoveryGoal: recoveryGoal, dehydrationService: dehydrationService)
|
||||
let secretsRecoveryWithPassphraseViewController = SecretsRecoveryWithPassphraseViewController.instantiate(with: secretsRecoveryWithPassphraseViewModel, cancellable: cancellable)
|
||||
self.secretsRecoveryWithPassphraseViewController = secretsRecoveryWithPassphraseViewController
|
||||
self.secretsRecoveryWithPassphraseViewModel = secretsRecoveryWithPassphraseViewModel
|
||||
|
|
|
@ -24,6 +24,8 @@ final class SecretsRecoveryWithPassphraseViewModel: SecretsRecoveryWithPassphras
|
|||
|
||||
private let recoveryService: MXRecoveryService
|
||||
|
||||
private let dehydrationService: DehydrationService?
|
||||
|
||||
// MARK: Public
|
||||
|
||||
let recoveryGoal: SecretsRecoveryGoal
|
||||
|
@ -39,8 +41,9 @@ final class SecretsRecoveryWithPassphraseViewModel: SecretsRecoveryWithPassphras
|
|||
|
||||
// MARK: - Setup
|
||||
|
||||
init(recoveryService: MXRecoveryService, recoveryGoal: SecretsRecoveryGoal) {
|
||||
init(recoveryService: MXRecoveryService, recoveryGoal: SecretsRecoveryGoal, dehydrationService: DehydrationService?) {
|
||||
self.recoveryService = recoveryService
|
||||
self.dehydrationService = dehydrationService
|
||||
self.recoveryGoal = recoveryGoal
|
||||
}
|
||||
|
||||
|
@ -103,6 +106,10 @@ final class SecretsRecoveryWithPassphraseViewModel: SecretsRecoveryWithPassphras
|
|||
}
|
||||
self.update(viewState: .loaded)
|
||||
self.coordinatorDelegate?.secretsRecoveryWithPassphraseViewModelDidRecover(self)
|
||||
|
||||
Task {
|
||||
await self.dehydrationService?.runDeviceDehydrationFlow(privateKeyData: privateKey)
|
||||
}
|
||||
}, failure: { [weak self] error in
|
||||
guard let self = self else {
|
||||
return
|
||||
|
|
|
@ -85,14 +85,28 @@ final class SecretsRecoveryCoordinator: SecretsRecoveryCoordinatorType {
|
|||
|
||||
// MARK: - Private
|
||||
|
||||
private var dehydrationService: DehydrationService? {
|
||||
if self.session.vc_homeserverConfiguration().encryption.deviceDehydrationEnabled {
|
||||
return self.session.crypto.dehydrationService
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
private func createRecoverFromKeyCoordinator() -> SecretsRecoveryWithKeyCoordinator {
|
||||
let coordinator = SecretsRecoveryWithKeyCoordinator(recoveryService: self.session.crypto.recoveryService, recoveryGoal: self.recoveryGoal, cancellable: self.cancellable)
|
||||
let coordinator = SecretsRecoveryWithKeyCoordinator(recoveryService: self.session.crypto.recoveryService,
|
||||
recoveryGoal: self.recoveryGoal,
|
||||
cancellable: self.cancellable,
|
||||
dehydrationService: dehydrationService)
|
||||
coordinator.delegate = self
|
||||
return coordinator
|
||||
}
|
||||
|
||||
private func createRecoverFromPassphraseCoordinator() -> SecretsRecoveryWithPassphraseCoordinator {
|
||||
let coordinator = SecretsRecoveryWithPassphraseCoordinator(recoveryService: self.session.crypto.recoveryService, recoveryGoal: self.recoveryGoal, cancellable: self.cancellable)
|
||||
let coordinator = SecretsRecoveryWithPassphraseCoordinator(recoveryService: self.session.crypto.recoveryService,
|
||||
recoveryGoal: self.recoveryGoal,
|
||||
cancellable: self.cancellable,
|
||||
dehydrationService: dehydrationService)
|
||||
coordinator.delegate = self
|
||||
return coordinator
|
||||
}
|
||||
|
|
|
@ -42,8 +42,13 @@ final class SecretsSetupRecoveryKeyCoordinator: SecretsSetupRecoveryKeyCoordinat
|
|||
passphrase: String?,
|
||||
passphraseOnly: Bool,
|
||||
allowOverwrite: Bool = false,
|
||||
cancellable: Bool) {
|
||||
let secretsSetupRecoveryKeyViewModel = SecretsSetupRecoveryKeyViewModel(recoveryService: recoveryService, passphrase: passphrase, passphraseOnly: passphraseOnly, allowOverwrite: allowOverwrite)
|
||||
cancellable: Bool,
|
||||
dehydrationService: DehydrationService?) {
|
||||
let secretsSetupRecoveryKeyViewModel = SecretsSetupRecoveryKeyViewModel(recoveryService: recoveryService,
|
||||
passphrase: passphrase,
|
||||
passphraseOnly: passphraseOnly,
|
||||
allowOverwrite: allowOverwrite,
|
||||
dehydrationService: dehydrationService)
|
||||
let secretsSetupRecoveryKeyViewController = SecretsSetupRecoveryKeyViewController.instantiate(with: secretsSetupRecoveryKeyViewModel, cancellable: cancellable)
|
||||
self.secretsSetupRecoveryKeyViewModel = secretsSetupRecoveryKeyViewModel
|
||||
self.secretsSetupRecoveryKeyViewController = secretsSetupRecoveryKeyViewController
|
||||
|
|
|
@ -28,6 +28,7 @@ final class SecretsSetupRecoveryKeyViewModel: SecretsSetupRecoveryKeyViewModelTy
|
|||
private let passphrase: String?
|
||||
private let passphraseOnly: Bool
|
||||
private let allowOverwrite: Bool
|
||||
private let dehydrationService: DehydrationService?
|
||||
|
||||
// MARK: Public
|
||||
|
||||
|
@ -36,11 +37,12 @@ final class SecretsSetupRecoveryKeyViewModel: SecretsSetupRecoveryKeyViewModelTy
|
|||
|
||||
// MARK: - Setup
|
||||
|
||||
init(recoveryService: MXRecoveryService, passphrase: String?, passphraseOnly: Bool, allowOverwrite: Bool = false) {
|
||||
init(recoveryService: MXRecoveryService, passphrase: String?, passphraseOnly: Bool, allowOverwrite: Bool = false, dehydrationService: DehydrationService?) {
|
||||
self.recoveryService = recoveryService
|
||||
self.passphrase = passphrase
|
||||
self.passphraseOnly = passphraseOnly
|
||||
self.allowOverwrite = allowOverwrite
|
||||
self.dehydrationService = dehydrationService
|
||||
}
|
||||
|
||||
// MARK: - Public
|
||||
|
@ -76,6 +78,10 @@ final class SecretsSetupRecoveryKeyViewModel: SecretsSetupRecoveryKeyViewModelTy
|
|||
|
||||
self.recoveryService.createRecovery(forSecrets: nil, withPassphrase: self.passphrase, createServicesBackups: true, success: { secretStorageKeyCreationInfo in
|
||||
self.update(viewState: .recoveryCreated(secretStorageKeyCreationInfo.recoveryKey))
|
||||
|
||||
Task {
|
||||
await self.dehydrationService?.runDeviceDehydrationFlow(privateKeyData: secretStorageKeyCreationInfo.privateKey)
|
||||
}
|
||||
}, failure: { error in
|
||||
self.update(viewState: .error(error))
|
||||
})
|
||||
|
|
|
@ -104,8 +104,21 @@ final class SecureBackupSetupCoordinator: SecureBackupSetupCoordinatorType {
|
|||
return introViewController
|
||||
}
|
||||
|
||||
private var dehydrationService: DehydrationService? {
|
||||
if self.session.vc_homeserverConfiguration().encryption.deviceDehydrationEnabled {
|
||||
return self.session.crypto.dehydrationService
|
||||
}
|
||||
|
||||
return nil
|
||||
}
|
||||
|
||||
private func showSetupKey(passphraseOnly: Bool, passphrase: String? = nil) {
|
||||
let coordinator = SecretsSetupRecoveryKeyCoordinator(recoveryService: self.recoveryService, passphrase: passphrase, passphraseOnly: passphraseOnly, allowOverwrite: allowOverwrite, cancellable: self.cancellable)
|
||||
let coordinator = SecretsSetupRecoveryKeyCoordinator(recoveryService: self.recoveryService,
|
||||
passphrase: passphrase,
|
||||
passphraseOnly: passphraseOnly,
|
||||
allowOverwrite: allowOverwrite,
|
||||
cancellable: self.cancellable,
|
||||
dehydrationService: dehydrationService)
|
||||
coordinator.delegate = self
|
||||
coordinator.start()
|
||||
|
||||
|
|
|
@ -44,7 +44,7 @@
|
|||
#import "ContactDetailsViewController.h"
|
||||
#import "RoomInputToolbarView.h"
|
||||
#import "NSArray+Element.h"
|
||||
#import "ShareItemSender.h"
|
||||
#import "ShareItemSenderProtocol.h"
|
||||
#import "Contact.h"
|
||||
#import "RoomTimelineCellProvider.h"
|
||||
#import "PlainRoomTimelineCellProvider.h"
|
||||
|
|
|
@ -34,8 +34,10 @@ targets:
|
|||
platform: iOS
|
||||
|
||||
dependencies:
|
||||
- target: RiotShareExtension
|
||||
- target: SiriIntents
|
||||
# Disabled due to crypto corruption issues.
|
||||
# https://github.com/vector-im/element-ios/issues/7618
|
||||
# - target: RiotShareExtension
|
||||
# - target: SiriIntents
|
||||
- target: RiotNSE
|
||||
- target: BroadcastUploadExtension
|
||||
- target: DesignKit
|
||||
|
|
|
@ -799,7 +799,9 @@ class NotificationService: UNNotificationServiceExtension {
|
|||
return Constants.toBeRemovedNotificationCategoryIdentifier
|
||||
}
|
||||
|
||||
return "QUICK_REPLY"
|
||||
// Don't return QUICK_REPLY here as there is an issue
|
||||
// with crypto corruption when sending from extensions.
|
||||
return nil
|
||||
}
|
||||
|
||||
/// Attempts to send trigger a VoIP push for the given event
|
||||
|
|
|
@ -29,8 +29,6 @@ options:
|
|||
include:
|
||||
- path: Riot/target.yml
|
||||
- path: RiotTests/target.yml
|
||||
- path: RiotShareExtension/target.yml
|
||||
- path: SiriIntents/target.yml
|
||||
- path: RiotNSE/target.yml
|
||||
- path: BroadcastUploadExtension/target.yml
|
||||
- path: DesignKit/target.yml
|
||||
|
@ -39,6 +37,10 @@ include:
|
|||
- path: RiotSwiftUI/targetUITests.yml
|
||||
- path: CommonKit/target.yml
|
||||
- path: CommonKit/targetUnitTests.yml
|
||||
# Disabled due to crypto corruption issues.
|
||||
# https://github.com/vector-im/element-ios/issues/7618
|
||||
# - path: RiotShareExtension/target.yml
|
||||
# - path: SiriIntents/target.yml
|
||||
|
||||
packages:
|
||||
AnalyticsEvents:
|
||||
|
|
Loading…
Reference in a new issue