Skip to content

Commit e999a8a

Browse files
committed
Merge branch 'release/1.11.10/master'
2 parents b8fd06c + 4e45dd1 commit e999a8a

File tree

13 files changed

+699
-53
lines changed

13 files changed

+699
-53
lines changed

CHANGES.md

Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,14 @@
1+
## Changes in 1.11.10 (2024-05-01)
2+
3+
🙌 Improvements
4+
5+
- Upgrade MatrixSDK version ([v0.27.7](https://github.com/matrix-org/matrix-ios-sdk/releases/tag/v0.27.7)).
6+
7+
Others
8+
9+
- Improvements to reporting of decryption failures.
10+
11+
112
## Changes in 1.11.9 (2024-04-02)
213

314
Others

Config/AppVersion.xcconfig

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,5 +15,5 @@
1515
//
1616

1717
// Version
18-
MARKETING_VERSION = 1.11.9
19-
CURRENT_PROJECT_VERSION = 1.11.9
18+
MARKETING_VERSION = 1.11.10
19+
CURRENT_PROJECT_VERSION = 1.11.10

Podfile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ use_frameworks!
1616
# - `{ :specHash => {sdk spec hash}` to depend on specific pod options (:git => …, :podspec => …) for MatrixSDK repo. Used by Fastfile during CI
1717
#
1818
# Warning: our internal tooling depends on the name of this variable name, so be sure not to change it
19-
$matrixSDKVersion = '= 0.27.6'
19+
$matrixSDKVersion = '= 0.27.7'
2020
# $matrixSDKVersion = :local
2121
# $matrixSDKVersion = { :branch => 'develop'}
2222
# $matrixSDKVersion = { :specHash => { git: 'https://git.io/fork123', branch: 'fix' } }

Podfile.lock

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -39,17 +39,17 @@ PODS:
3939
- LoggerAPI (1.9.200):
4040
- Logging (~> 1.1)
4141
- Logging (1.4.0)
42-
- MatrixSDK (0.27.6):
43-
- MatrixSDK/Core (= 0.27.6)
44-
- MatrixSDK/Core (0.27.6):
42+
- MatrixSDK (0.27.7):
43+
- MatrixSDK/Core (= 0.27.7)
44+
- MatrixSDK/Core (0.27.7):
4545
- AFNetworking (~> 4.0.0)
4646
- GZIP (~> 1.3.0)
4747
- libbase58 (~> 0.1.4)
4848
- MatrixSDKCrypto (= 0.3.13)
4949
- OLMKit (~> 3.2.5)
5050
- Realm (= 10.27.0)
5151
- SwiftyBeaver (= 1.9.5)
52-
- MatrixSDK/JingleCallStack (0.27.6):
52+
- MatrixSDK/JingleCallStack (0.27.7):
5353
- JitsiMeetSDKLite (= 8.1.2-lite)
5454
- MatrixSDK/Core
5555
- MatrixSDKCrypto (0.3.13)
@@ -102,8 +102,8 @@ DEPENDENCIES:
102102
- KeychainAccess (~> 4.2.2)
103103
- KTCenterFlowLayout (~> 1.3.1)
104104
- libPhoneNumber-iOS (~> 0.9.13)
105-
- MatrixSDK (= 0.27.6)
106-
- MatrixSDK/JingleCallStack (= 0.27.6)
105+
- MatrixSDK (= 0.27.7)
106+
- MatrixSDK/JingleCallStack (= 0.27.7)
107107
- OLMKit
108108
- PostHog (~> 2.0.0)
109109
- ReadMoreTextView (~> 3.0.1)
@@ -187,7 +187,7 @@ SPEC CHECKSUMS:
187187
libPhoneNumber-iOS: 0a32a9525cf8744fe02c5206eb30d571e38f7d75
188188
LoggerAPI: ad9c4a6f1e32f518fdb43a1347ac14d765ab5e3d
189189
Logging: beeb016c9c80cf77042d62e83495816847ef108b
190-
MatrixSDK: 4129ab9c0acda1d0aad50b1c9765bd795b8d70b9
190+
MatrixSDK: e07b2309f3c6498c1df987441da7006d099c47a4
191191
MatrixSDKCrypto: bf08b72f2cd015d8749420a2b8b92fc0536bedf4
192192
OLMKit: da115f16582e47626616874e20f7bb92222c7a51
193193
PostHog: 660ec6c9d80cec17b685e148f17f6785a88b597d
@@ -208,6 +208,6 @@ SPEC CHECKSUMS:
208208
zxcvbn-ios: fef98b7c80f1512ff0eec47ac1fa399fc00f7e3c
209209
ZXingObjC: 8898711ab495761b2dbbdec76d90164a6d7e14c5
210210

211-
PODFILE CHECKSUM: c87b532985dd755b373732f841e3bcfe616f4e4f
211+
PODFILE CHECKSUM: 1197abec9c5affbef652747dd5cd6aaf00ef3a47
212212

213213
COCOAPODS: 1.14.3

Riot/Assets/fa.lproj/Vector.strings

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -97,7 +97,7 @@
9797
"contacts_address_book_matrix_users_toggle" = "فقط کاربران ماتریس";
9898
"directory_search_results_more_than" = ">%tu نتیجه برای %@ یافت شد";
9999
"directory_search_results" = "%tu نتیجه برای %@ یافت شد";
100-
"search_in_progress" = "در حال جست وجو";
100+
"search_in_progress" = "جوییدن…";
101101
"search_no_result" = "نتیچه ای یافت نشد";
102102
"search_people_placeholder" = "جستجو بر اساس شناسه کاربری، نام یا آدرس ایمیل";
103103
"search_default_placeholder" = "جست و جو";
@@ -246,7 +246,7 @@
246246
"room_accessibility_search" = "جستجو";
247247
"room_message_edits_history_title" = "ویرایش های پیام";
248248
"room_resource_usage_limit_reached_message_2" = "برخی از کاربران نمی توانند وارد سیستم شوند.";
249-
"room_resource_limit_exceeded_message_contact_3" = " برای ادامه استفاده از این سرویس";
249+
"room_resource_limit_exceeded_message_contact_3" = " برای ادامه استفاده از این خدمت.";
250250
"room_resource_limit_exceeded_message_contact_2_link" = "با سرپرست سرویس خود تماس بگیرید";
251251
"room_resource_limit_exceeded_message_contact_1" = " لطفا ";
252252
"room_predecessor_link" = "برای دیدن پیام‌های قدیمی‌تر به اینجاضربه بزنید.";
@@ -416,7 +416,7 @@
416416
"event_formatter_call_retry" = "تلاش مجدد";
417417
"event_formatter_call_answer" = "پاسخ";
418418
"event_formatter_call_decline" = "رد تماس";
419-
"event_formatter_call_back" = "تماس";
419+
"event_formatter_call_back" = "پاسخ تماس";
420420
"event_formatter_call_connection_failed" = "ارتباط ناموفق بود";
421421
"event_formatter_call_missed_video" = "تماس ویدیویی از دست رفته";
422422
"event_formatter_call_missed_voice" = "تماس صوتی از دست رفته";
@@ -464,7 +464,7 @@
464464
"group_participants_invited_section" = "دعوت شده";
465465
"group_participants_invite_malformed_id_title" = "خطای دعوت";
466466
"group_participants_invite_another_user" = "جستجو / دعوت با شناسه کاربری یا نام";
467-
"group_participants_filter_members" = "اعضای انجمن را فیلتر کنید";
467+
"group_participants_filter_members" = "پالایش اعضای اجتماع";
468468
"group_participants_invite_prompt_msg" = "آیا مطمئنید که می خواهید %@ را به این گروه دعوت کنید؟";
469469
"group_participants_invite_prompt_title" = "تایید";
470470
"group_participants_remove_prompt_msg" = "آیا مطمئنید که می خواهید %@ را از این گروه حذف کنید؟";
@@ -570,7 +570,7 @@
570570
"room_details_files" = "بارگذاری شده ها";
571571
"room_details_people" = "اعضا";
572572
"room_details_title_for_dm" = "جزییات";
573-
"identity_server_settings_alert_disconnect_still_sharing_3pid_button" = "به هر حال قطع کن";
573+
"identity_server_settings_alert_disconnect_still_sharing_3pid_button" = "قطع شدن به هر روی";
574574
"identity_server_settings_alert_disconnect_button" = "قطع کردن";
575575
"identity_server_settings_disconnect" = "قطع کردن";
576576
"identity_server_settings_change" = "تغییر دادن";
@@ -652,7 +652,7 @@
652652
"settings_confirm_password" = "تایید رمز";
653653
"settings_new_password" = "رمز جدید";
654654
"settings_old_password" = "رمز قدیمی";
655-
"settings_third_party_notices" = "اعلامیه های شخص ثالث";
655+
"settings_third_party_notices" = "یادآوری‌های سوم‌شخص";
656656
"settings_privacy_policy" = "سیاست حفظ حریم خصوصی";
657657
"settings_term_conditions" = "شرایط و ضوابط";
658658
"settings_copyright" = "کپی رایت";
@@ -684,7 +684,7 @@
684684
"settings_room_upgrades" = "ارتقاء اتاق";
685685
"settings_messages_by_a_bot" = "پیام های ربات";
686686
"settings_call_invitations" = "دعوت نامه های تماس";
687-
"settings_room_invitations" = "دعوت نامه های اتاق";
687+
"settings_room_invitations" = "دعوت‌های اتاق";
688688
"settings_messages_containing_keywords" = "کلمات کلیدی";
689689
"settings_messages_containing_at_room" = "@ اتاق";
690690
"settings_messages_containing_user_name" = "نام کاربری من";
@@ -694,13 +694,13 @@
694694
"settings_encrypted_direct_messages" = "پیام های مستقیم رمزگذاری شده";
695695
"settings_direct_messages" = "پیام مستقیم";
696696
"settings_notify_me_for" = "به من اطلاع بده برای";
697-
"settings_mentions_and_keywords" = "ذکر و کلمات کلیدی";
697+
"settings_mentions_and_keywords" = "نام‌بری و کلیدواژگان";
698698
"settings_default" = "اعلان های پیش فرض";
699699
"settings_notifications_disabled_alert_message" = "برای فعال کردن اعلان‌ها، به تنظیمات دستگاه خود بروید.";
700700
"settings_notifications_disabled_alert_title" = "غیر فعال کردن اعلان ها";
701701
"settings_pin_rooms_with_missed_notif" = "پین کردن اتاق هایی با اعلان های از دست رفته";
702702
"settings_pin_rooms_with_unread" = "پین کردن اتاق هایی با پیام های خوانده نشده";
703-
"settings_global_settings_info" = "تنظیمات اعلان جهانی در سرویس گیرنده وب %@ شما موجود است";
703+
"settings_global_settings_info" = "تنظیمات آگاهی عمومی در کارخواه وب %@تان موجود است";
704704
"settings_show_decrypted_content" = "نمایش محتوای رمزگشایی شده";
705705
"settings_device_notifications" = "اعلان های دستگاه";
706706
"settings_enable_push_notif" = "اعلان ها در این دستگاه";
@@ -1346,3 +1346,4 @@
13461346
"onboarding_splash_page_2_title" = "تحت کنترل شماست.";
13471347
"onboarding_splash_page_1_message" = "یک ارتباط امن و مستقل که سطح حریم شخصی آن دقیقا مشابه ارتباط رو در رو در منزل شماست.";
13481348
"accessibility_selected" = "انتخاب شده";
1349+
"room_title_members" = "%@ عضو";

Riot/Assets/hu.lproj/Vector.strings

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2740,3 +2740,18 @@
27402740

27412741
"key_verification_self_verify_security_upgrade_alert_title" = "Alkalmazás frissítve";
27422742
"settings_acceptable_use" = "Elfogadható felhasználói feltételek";
2743+
"room_creation_user_not_found_prompt_title" = "Megerősítés";
2744+
"room_creation_user_not_found_prompt_message" = "Nem található profil ehhez a Matrix-azonosítóhoz. Mindenképp elindítja a privát csevegést?";
2745+
"room_creation_user_not_found_prompt_invite_action" = "Privát csevegés mindenképp";
2746+
"room_participants_invite_unknown_participant_prompt_to_msg" = "Nem található profil ehhez a Matrix-azonosítóhoz. Mindenképp meghívja %@ felhasználót a(z) %@ szobába?";
2747+
"room_participants_invite_anyway" = "Meghívás mindenképp";
2748+
2749+
// Room commands descriptions
2750+
"room_command_change_display_name_description" = "Megváltoztatja a megjelenítendő becenevét";
2751+
"room_command_emote_description" = "Megjeleníti a műveletet";
2752+
"room_command_join_room_description" = "Csatlakozik a megadott című szobához";
2753+
"room_command_part_room_description" = "Elhagyja a szobát";
2754+
"room_command_invite_user_description" = "Meghívja az adott azonosítójú felhasználót a jelenlegi szobába";
2755+
"room_command_kick_user_description" = "Eltávolítja az adott azonosítójú felhasználót ebből a szobából";
2756+
"room_command_ban_user_description" = "Kitiltja az adott azonosítójú felhasználót";
2757+
"room_command_unban_user_description" = "Feloldja az adott azonosítójú felhasználó kitiltását";
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1 +1,77 @@
11

2+
3+
// String for App Store
4+
"store_short_description" = "უსაფრთხო დეცენტრალიზებული ჩატი/ვოიპი";
5+
6+
// Titles
7+
"title_home" = "მთავარი";
8+
"title_favourites" = "ფავორიტები";
9+
"title_people" = "ხალხი";
10+
"title_rooms" = "ოთახები";
11+
"title_groups" = "თემები";
12+
"warning" = "გაფრთხილება";
13+
14+
// Actions
15+
"view" = "ხედი";
16+
"next" = "შემდეგი";
17+
"back" = "უკან";
18+
"continue" = "გაგრძელება";
19+
"create" = "შექმნა";
20+
"start" = "აწყება";
21+
"leave" = "დატოვება";
22+
"remove" = "წაშლა";
23+
"retry" = "გამეორება";
24+
"on" = "ჩართული";
25+
"off" = "გამორთული";
26+
"enable" = "ჩართვა";
27+
"save" = "შენახვა";
28+
"join" = "შეუერთდება";
29+
"decline" = "უარყოფა";
30+
"accept" = "მიღება";
31+
"camera" = "კამერა";
32+
"voice" = "ხმა";
33+
"video" = "ვიდეო";
34+
"active_call" = "აქტიური ზარი";
35+
"later" = "შემდეგ";
36+
"rename" = "გადარქმევა";
37+
"collapse" = "ჩაკეცვა";
38+
"send_to" = "გაგზავნა %@-ს";
39+
"close" = "დახურვა";
40+
"skip" = "გამოტოვება";
41+
"joined" = "შეუერთდა";
42+
"switch" = "გადართვა";
43+
"more" = "მეტი";
44+
"less" = "ნაკლები";
45+
"open" = "გახსნა";
46+
"private" = "ირადი";
47+
"public" = "საჯარო";
48+
"stop" = "შეჩერება";
49+
"new_word" = "ახალი";
50+
"existing" = "არსებული";
51+
"add" = "დამატება";
52+
"ok" = "კარგი";
53+
"error" = "შეცდომა";
54+
"suggest" = "შესთავაზება";
55+
"confirm" = "დადასტურება";
56+
"invite_to" = "მიწვევა %@-ში";
57+
58+
// Activities
59+
"loading" = "ჩატვირთვა";
60+
"sending" = "გაგზავნა";
61+
"callbar_active_and_single_paused" = "1 აქტიური ზარი (%@) · 1 შეჩერებული ზარი";
62+
"callbar_active_and_multiple_paused" = "1 აქტიური ზარი (%@) · %@ შეჩერებული ზარები";
63+
"callbar_only_single_paused" = "შეჩერებული ზარი";
64+
"callbar_return" = "დაბრუნება";
65+
"store_promotional_text" = "კონფიდენციალობის დაცვით ჩატისა და თანამშრომლობის აპლიკაცია, ღია ქსელზე. დეცენტრალიზებული, რათა მართვა გადაგიცემათ. არაა დათამაინინგი, არაა უკანა კარები და არაა მესამე მხარის წვდომა.";
66+
"invite" = "მიწვევა";
67+
"cancel" = "გაუქმება";
68+
"preview" = "წინასწარი ხილვა";
69+
"active_call_details" = "აქტიური ზარი (%@)";
70+
"joining" = "შეერთება";
71+
"done" = "დასრულებული";
72+
"edit" = "რედაქტირება";
73+
"saving" = "შენახვა";
74+
75+
// Call Bar
76+
"callbar_only_single_active" = "შეეხეთ, რომ დაბრუნდეთ ზარში (%@)";
77+
"callbar_only_multiple_paused" = "%@ შეჩერებული ზარები";

Riot/Modules/Analytics/DecryptionFailure+Analytics.swift

Lines changed: 19 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -21,24 +21,34 @@ extension DecryptionFailure {
2121

2222
public func toAnalyticsEvent() -> AnalyticsEvent.Error {
2323

24-
let timeToDecryptMillis: Int = if self.timeToDecrypt != nil {
25-
Int(self.timeToDecrypt! * 1000)
24+
let timeToDecryptMillis: Int = if let ttd = self.timeToDecrypt {
25+
Int(ttd * 1000)
2626
} else {
2727
-1
2828
}
29+
30+
let isHistoricalEvent = if let localAge = self.eventLocalAgeMillis {
31+
localAge < 0
32+
} else { false }
33+
34+
let errorName = if isHistoricalEvent && self.trustOwnIdentityAtTimeOfFailure == false {
35+
AnalyticsEvent.Error.Name.HistoricalMessage
36+
} else {
37+
self.reason.errorName
38+
}
39+
2940
return AnalyticsEvent.Error(
3041
context: self.context,
3142
cryptoModule: .Rust,
3243
cryptoSDK: .Rust,
3344
domain: .E2EE,
34-
35-
eventLocalAgeMillis: nil,
36-
isFederated: nil,
37-
isMatrixDotOrg: nil,
38-
name: self.reason.errorName,
45+
eventLocalAgeMillis: self.eventLocalAgeMillis,
46+
isFederated: self.isFederated,
47+
isMatrixDotOrg: self.isMatrixOrg,
48+
name: errorName,
3949
timeToDecryptMillis: timeToDecryptMillis,
40-
userTrustsOwnIdentity: nil,
41-
wasVisibleToUser: nil
50+
userTrustsOwnIdentity: self.trustOwnIdentityAtTimeOfFailure,
51+
wasVisibleToUser: self.wasVisibleToUser
4252
)
4353
}
4454
}

Riot/Modules/Analytics/DecryptionFailure.swift

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,19 @@ import AnalyticsEvents
4747
/// UTDs can be permanent or temporary. If temporary, this field will contain the time it took to decrypt the message in milliseconds. If permanent should be nil
4848
var timeToDecrypt: TimeInterval?
4949

50+
/// Was the current cross-signing identity trusted at the time of decryption
51+
var trustOwnIdentityAtTimeOfFailure: Bool?
52+
53+
var eventLocalAgeMillis: Int?
54+
55+
/// Is the current user on matrix org
56+
var isMatrixOrg: Bool?
57+
/// Are the sender and recipient on the same homeserver
58+
var isFederated: Bool?
59+
60+
/// As for now the ios App only reports UTDs visible to user (error are reported from EventFormatter
61+
var wasVisibleToUser: Bool = true
62+
5063
init(failedEventId: String, reason: DecryptionFailureReason, context: String, ts: TimeInterval) {
5164
self.failedEventId = failedEventId
5265
self.reason = reason

Riot/Modules/Analytics/DecryptionFailureTracker.swift

Lines changed: 26 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -62,14 +62,14 @@ class DecryptionFailureTracker: NSObject {
6262
selector: #selector(eventDidDecrypt(_:)),
6363
name: .mxEventDidDecrypt,
6464
object: nil)
65-
6665
}
6766

6867
@objc
69-
func reportUnableToDecryptError(forEvent event: MXEvent, withRoomState roomState: MXRoomState, myUser userId: String) {
68+
func reportUnableToDecryptError(forEvent event: MXEvent, withRoomState roomState: MXRoomState, mySession: MXSession) {
7069
if reportedFailures[event.eventId] != nil || trackedEvents.contains(event.eventId) {
7170
return
7271
}
72+
guard let userId = mySession.myUserId else { return }
7373

7474
// Filter out "expected" UTDs
7575
// We cannot decrypt messages sent before the user joined the room
@@ -82,6 +82,12 @@ class DecryptionFailureTracker: NSObject {
8282

8383
guard let error = event.decryptionError as? NSError else { return }
8484

85+
let eventOrigin = event.originServerTs
86+
let deviceTimestamp = mySession.crypto.deviceCreationTs
87+
// If negative it's an historical event relative to the current session
88+
let eventRelativeAgeMillis = Int(eventOrigin) - Int(deviceTimestamp)
89+
let isSessionVerified = mySession.crypto.crossSigning.canTrustCrossSigning
90+
8591
var reason = DecryptionFailureReason.unspecified
8692

8793
if error.code == MXDecryptingErrorUnknownInboundSessionIdCode.rawValue {
@@ -92,7 +98,24 @@ class DecryptionFailureTracker: NSObject {
9298

9399
let context = String(format: "code: %ld, description: %@", error.code, event.decryptionError.localizedDescription)
94100

95-
reportedFailures[failedEventId] = DecryptionFailure(failedEventId: failedEventId, reason: reason, context: context, ts: self.timeProvider.nowTs())
101+
let failure = DecryptionFailure(failedEventId: failedEventId, reason: reason, context: context, ts: self.timeProvider.nowTs())
102+
103+
failure.eventLocalAgeMillis = Int(exactly: eventRelativeAgeMillis)
104+
failure.trustOwnIdentityAtTimeOfFailure = isSessionVerified
105+
106+
let myDomain = userId.components(separatedBy: ":").last
107+
failure.isMatrixOrg = myDomain == "matrix.org"
108+
109+
if MXTools.isMatrixUserIdentifier(event.sender) {
110+
let senderDomain = event.sender.components(separatedBy: ":").last
111+
failure.isFederated = senderDomain != nil && senderDomain != myDomain
112+
}
113+
114+
/// XXX for future work, as for now only the event formatter reports UTDs. That means that it's only UTD ~visible to users
115+
failure.wasVisibleToUser = true
116+
117+
reportedFailures[failedEventId] = failure
118+
96119

97120
// Start the ticker if needed. There is no need to have a ticker if no failures are tracked
98121
if checkFailuresTimer == nil {

0 commit comments

Comments
 (0)