Skip to content
This repository was archived by the owner on Dec 2, 2025. It is now read-only.

Commit 402b295

Browse files
authored
Merge pull request #795 from oxen-io/dev
Release 2.2.8
2 parents 06a3886 + 723d8a7 commit 402b295

81 files changed

Lines changed: 1221 additions & 339 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

Session.xcodeproj/project.pbxproj

Lines changed: 24 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -113,6 +113,7 @@
113113
7B4C75CB26B37E0F0000AC89 /* UnsendRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C75CA26B37E0F0000AC89 /* UnsendRequest.swift */; };
114114
7B4C75CD26BB92060000AC89 /* DeletedMessageView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B4C75CC26BB92060000AC89 /* DeletedMessageView.swift */; };
115115
7B50D64D28AC7CF80086CCEC /* silence.aiff in Resources */ = {isa = PBXBuildFile; fileRef = 7B50D64C28AC7CF80086CCEC /* silence.aiff */; };
116+
7B521E0829BFEAFF00C3C36A /* _012_AddFTSIfNeeded.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B521E0729BFEAFF00C3C36A /* _012_AddFTSIfNeeded.swift */; };
116117
7B7037432834B81F000DCF35 /* ReactionContainerView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7037422834B81F000DCF35 /* ReactionContainerView.swift */; };
117118
7B7037452834BCC0000DCF35 /* ReactionView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7037442834BCC0000DCF35 /* ReactionView.swift */; };
118119
7B7CB18E270D066F0079FF93 /* IncomingCallBanner.swift in Sources */ = {isa = PBXBuildFile; fileRef = 7B7CB18D270D066F0079FF93 /* IncomingCallBanner.swift */; };
@@ -651,6 +652,8 @@
651652
FD3C907127E445E500CD579F /* MessageReceiverDecryptionSpec.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD3C907027E445E500CD579F /* MessageReceiverDecryptionSpec.swift */; };
652653
FD3E0C84283B5835002A425C /* SessionThreadViewModel.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD3E0C83283B5835002A425C /* SessionThreadViewModel.swift */; };
653654
FD42F9A8285064B800A0C77D /* PushNotificationAPI.swift in Sources */ = {isa = PBXBuildFile; fileRef = C33FDBDE255A581900E217F9 /* PushNotificationAPI.swift */; };
655+
FD432432299C6933008A0213 /* _011_AddPendingReadReceipts.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD432431299C6933008A0213 /* _011_AddPendingReadReceipts.swift */; };
656+
FD432434299C6985008A0213 /* PendingReadReceipt.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD432433299C6985008A0213 /* PendingReadReceipt.swift */; };
654657
FD4B200E283492210034334B /* InsetLockableTableView.swift in Sources */ = {isa = PBXBuildFile; fileRef = FD4B200D283492210034334B /* InsetLockableTableView.swift */; };
655658
FD52090028AF6153006098F6 /* OWSBackgroundTask.m in Sources */ = {isa = PBXBuildFile; fileRef = C33FDC1B255A581F00E217F9 /* OWSBackgroundTask.m */; };
656659
FD52090128AF61BA006098F6 /* OWSBackgroundTask.h in Headers */ = {isa = PBXBuildFile; fileRef = C33FDB38255A580B00E217F9 /* OWSBackgroundTask.h */; settings = {ATTRIBUTES = (Public, ); }; };
@@ -1179,6 +1182,7 @@
11791182
7B4C75CA26B37E0F0000AC89 /* UnsendRequest.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = UnsendRequest.swift; sourceTree = "<group>"; };
11801183
7B4C75CC26BB92060000AC89 /* DeletedMessageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = DeletedMessageView.swift; sourceTree = "<group>"; };
11811184
7B50D64C28AC7CF80086CCEC /* silence.aiff */ = {isa = PBXFileReference; lastKnownFileType = audio.aiff; path = silence.aiff; sourceTree = "<group>"; };
1185+
7B521E0729BFEAFF00C3C36A /* _012_AddFTSIfNeeded.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = _012_AddFTSIfNeeded.swift; sourceTree = "<group>"; };
11821186
7B7037422834B81F000DCF35 /* ReactionContainerView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionContainerView.swift; sourceTree = "<group>"; };
11831187
7B7037442834BCC0000DCF35 /* ReactionView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ReactionView.swift; sourceTree = "<group>"; };
11841188
7B7CB18D270D066F0079FF93 /* IncomingCallBanner.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = IncomingCallBanner.swift; sourceTree = "<group>"; };
@@ -1735,6 +1739,8 @@
17351739
FD3C907027E445E500CD579F /* MessageReceiverDecryptionSpec.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MessageReceiverDecryptionSpec.swift; sourceTree = "<group>"; };
17361740
FD3C907427E83AC200CD579F /* OpenGroupServerIdLookup.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = OpenGroupServerIdLookup.swift; sourceTree = "<group>"; };
17371741
FD3E0C83283B5835002A425C /* SessionThreadViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SessionThreadViewModel.swift; sourceTree = "<group>"; };
1742+
FD432431299C6933008A0213 /* _011_AddPendingReadReceipts.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = _011_AddPendingReadReceipts.swift; sourceTree = "<group>"; };
1743+
FD432433299C6985008A0213 /* PendingReadReceipt.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PendingReadReceipt.swift; sourceTree = "<group>"; };
17381744
FD4B200D283492210034334B /* InsetLockableTableView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = InsetLockableTableView.swift; sourceTree = "<group>"; };
17391745
FD52090228B4680F006098F6 /* RadioButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RadioButton.swift; sourceTree = "<group>"; };
17401746
FD52090428B4915F006098F6 /* PrivacySettingsViewModel.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = PrivacySettingsViewModel.swift; sourceTree = "<group>"; };
@@ -3524,6 +3530,7 @@
35243530
FDE77F6A280FEB28002CFC5D /* ControlMessageProcessRecord.swift */,
35253531
FD5C7308285007920029977D /* BlindedIdLookup.swift */,
35263532
FD09B7E6288670FD00ED0B66 /* Reaction.swift */,
3533+
FD432433299C6985008A0213 /* PendingReadReceipt.swift */,
35273534
);
35283535
path = Models;
35293536
sourceTree = "<group>";
@@ -3541,6 +3548,8 @@
35413548
FD09B7E4288670BB00ED0B66 /* _008_EmojiReacts.swift */,
35423549
7BAA7B6528D2DE4700AE1489 /* _009_OpenGroupPermission.swift */,
35433550
FD7115F128C6CB3900B47552 /* _010_AddThreadIdToFTS.swift */,
3551+
FD432431299C6933008A0213 /* _011_AddPendingReadReceipts.swift */,
3552+
7B521E0729BFEAFF00C3C36A /* _012_AddFTSIfNeeded.swift */,
35443553
);
35453554
path = Migrations;
35463555
sourceTree = "<group>";
@@ -5426,6 +5435,7 @@
54265435
FD09797527FAB64300936362 /* ProfileManager.swift in Sources */,
54275436
FD245C57285065F100B966DD /* Poller.swift in Sources */,
54285437
FDA8EAFE280E8B78002B68E5 /* FailedMessageSendsJob.swift in Sources */,
5438+
7B521E0829BFEAFF00C3C36A /* _012_AddFTSIfNeeded.swift in Sources */,
54295439
FD245C6A2850666F00B966DD /* FileServerAPI.swift in Sources */,
54305440
FDC4386927B4E6B800C60D73 /* String+Utlities.swift in Sources */,
54315441
FD716E6628502EE200C96BF4 /* CurrentCallProtocol.swift in Sources */,
@@ -5490,6 +5500,7 @@
54905500
FD716E6428502DDD00C96BF4 /* CallManagerProtocol.swift in Sources */,
54915501
FDC438C727BB6DF000C60D73 /* DirectMessage.swift in Sources */,
54925502
FDC4384F27B4804F00C60D73 /* Header.swift in Sources */,
5503+
FD432434299C6985008A0213 /* PendingReadReceipt.swift in Sources */,
54935504
FDC4381727B32EC700C60D73 /* Personalization.swift in Sources */,
54945505
FD245C51285065CC00B966DD /* MessageReceiver.swift in Sources */,
54955506
FD245C652850665400B966DD /* ClosedGroupControlMessage.swift in Sources */,
@@ -5551,6 +5562,7 @@
55515562
FDC438C127BB4E6800C60D73 /* SMKDependencies.swift in Sources */,
55525563
FDC4383827B3863200C60D73 /* VersionResponse.swift in Sources */,
55535564
B806ECA126C4A7E4008BDA44 /* WebRTCSession+UI.swift in Sources */,
5565+
FD432432299C6933008A0213 /* _011_AddPendingReadReceipts.swift in Sources */,
55545566
7BCD116C27016062006330F1 /* WebRTCSession+DataChannel.swift in Sources */,
55555567
FD5C72F9284F0E880029977D /* MessageReceiver+TypingIndicators.swift in Sources */,
55565568
FD5C7303284F0FA50029977D /* MessageReceiver+Calls.swift in Sources */,
@@ -6032,7 +6044,7 @@
60326044
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
60336045
CODE_SIGN_STYLE = Automatic;
60346046
COPY_PHASE_STRIP = NO;
6035-
CURRENT_PROJECT_VERSION = 392;
6047+
CURRENT_PROJECT_VERSION = 397;
60366048
DEBUG_INFORMATION_FORMAT = dwarf;
60376049
DEVELOPMENT_TEAM = SUQ8J2PCT7;
60386050
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -6057,7 +6069,7 @@
60576069
"@executable_path/Frameworks",
60586070
"@executable_path/../../Frameworks",
60596071
);
6060-
MARKETING_VERSION = 2.2.7;
6072+
MARKETING_VERSION = 2.2.8;
60616073
MTL_ENABLE_DEBUG_INFO = YES;
60626074
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.ShareExtension";
60636075
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -6105,7 +6117,7 @@
61056117
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
61066118
CODE_SIGN_STYLE = Automatic;
61076119
COPY_PHASE_STRIP = NO;
6108-
CURRENT_PROJECT_VERSION = 392;
6120+
CURRENT_PROJECT_VERSION = 397;
61096121
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
61106122
DEVELOPMENT_TEAM = SUQ8J2PCT7;
61116123
ENABLE_NS_ASSERTIONS = NO;
@@ -6135,7 +6147,7 @@
61356147
"@executable_path/Frameworks",
61366148
"@executable_path/../../Frameworks",
61376149
);
6138-
MARKETING_VERSION = 2.2.7;
6150+
MARKETING_VERSION = 2.2.8;
61396151
MTL_ENABLE_DEBUG_INFO = NO;
61406152
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.ShareExtension";
61416153
PRODUCT_NAME = "$(TARGET_NAME)";
@@ -6171,7 +6183,7 @@
61716183
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
61726184
CODE_SIGN_STYLE = Automatic;
61736185
COPY_PHASE_STRIP = NO;
6174-
CURRENT_PROJECT_VERSION = 392;
6186+
CURRENT_PROJECT_VERSION = 397;
61756187
DEBUG_INFORMATION_FORMAT = dwarf;
61766188
DEVELOPMENT_TEAM = SUQ8J2PCT7;
61776189
FRAMEWORK_SEARCH_PATHS = "$(inherited)";
@@ -6194,7 +6206,7 @@
61946206
"@executable_path/Frameworks",
61956207
"@executable_path/../../Frameworks",
61966208
);
6197-
MARKETING_VERSION = 2.2.7;
6209+
MARKETING_VERSION = 2.2.8;
61986210
MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE;
61996211
MTL_FAST_MATH = YES;
62006212
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.NotificationServiceExtension";
@@ -6245,7 +6257,7 @@
62456257
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
62466258
CODE_SIGN_STYLE = Automatic;
62476259
COPY_PHASE_STRIP = NO;
6248-
CURRENT_PROJECT_VERSION = 392;
6260+
CURRENT_PROJECT_VERSION = 397;
62496261
DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym";
62506262
DEVELOPMENT_TEAM = SUQ8J2PCT7;
62516263
ENABLE_NS_ASSERTIONS = NO;
@@ -6273,7 +6285,7 @@
62736285
"@executable_path/Frameworks",
62746286
"@executable_path/../../Frameworks",
62756287
);
6276-
MARKETING_VERSION = 2.2.7;
6288+
MARKETING_VERSION = 2.2.8;
62776289
MTL_ENABLE_DEBUG_INFO = NO;
62786290
MTL_FAST_MATH = YES;
62796291
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger.NotificationServiceExtension";
@@ -7173,7 +7185,7 @@
71737185
CODE_SIGN_ENTITLEMENTS = Session/Meta/Signal.entitlements;
71747186
CODE_SIGN_IDENTITY = "iPhone Developer";
71757187
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
7176-
CURRENT_PROJECT_VERSION = 392;
7188+
CURRENT_PROJECT_VERSION = 397;
71777189
DEVELOPMENT_TEAM = SUQ8J2PCT7;
71787190
FRAMEWORK_SEARCH_PATHS = (
71797191
"$(inherited)",
@@ -7212,7 +7224,7 @@
72127224
"$(SRCROOT)",
72137225
);
72147226
LLVM_LTO = NO;
7215-
MARKETING_VERSION = 2.2.7;
7227+
MARKETING_VERSION = 2.2.8;
72167228
OTHER_LDFLAGS = "$(inherited)";
72177229
OTHER_SWIFT_FLAGS = "$(inherited) \"-D\" \"COCOAPODS\" \"-DDEBUG\"";
72187230
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger";
@@ -7245,7 +7257,7 @@
72457257
CODE_SIGN_ENTITLEMENTS = Session/Meta/Signal.entitlements;
72467258
CODE_SIGN_IDENTITY = "iPhone Developer";
72477259
"CODE_SIGN_IDENTITY[sdk=iphoneos*]" = "iPhone Developer";
7248-
CURRENT_PROJECT_VERSION = 392;
7260+
CURRENT_PROJECT_VERSION = 397;
72497261
DEVELOPMENT_TEAM = SUQ8J2PCT7;
72507262
FRAMEWORK_SEARCH_PATHS = (
72517263
"$(inherited)",
@@ -7284,7 +7296,7 @@
72847296
"$(SRCROOT)",
72857297
);
72867298
LLVM_LTO = NO;
7287-
MARKETING_VERSION = 2.2.7;
7299+
MARKETING_VERSION = 2.2.8;
72887300
OTHER_LDFLAGS = "$(inherited)";
72897301
PRODUCT_BUNDLE_IDENTIFIER = "com.loki-project.loki-messenger";
72907302
PRODUCT_NAME = Session;

Session/Conversations/Context Menu/ContextMenuVC+Action.swift

Lines changed: 32 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,17 @@ extension ContextMenuVC {
3434
}
3535

3636
// MARK: - Actions
37+
38+
static func retry(_ cellViewModel: MessageViewModel, _ delegate: ContextMenuActionDelegate?) -> Action {
39+
return Action(
40+
icon: UIImage(systemName: "arrow.triangle.2.circlepath"),
41+
title: (cellViewModel.state == .failedToSync ?
42+
"context_menu_resync".localized() :
43+
"context_menu_resend".localized()
44+
),
45+
accessibilityLabel: (cellViewModel.state == .failedToSync ? "Resync message" : "Resend message")
46+
) { delegate?.retry(cellViewModel) }
47+
}
3748

3849
static func reply(_ cellViewModel: MessageViewModel, _ delegate: ContextMenuActionDelegate?) -> Action {
3950
return Action(
@@ -46,14 +57,17 @@ extension ContextMenuVC {
4657
static func copy(_ cellViewModel: MessageViewModel, _ delegate: ContextMenuActionDelegate?) -> Action {
4758
return Action(
4859
icon: UIImage(named: "ic_copy"),
49-
title: "copy".localized()
60+
title: "copy".localized(),
61+
accessibilityLabel: "Copy text"
5062
) { delegate?.copy(cellViewModel) }
5163
}
5264

5365
static func copySessionID(_ cellViewModel: MessageViewModel, _ delegate: ContextMenuActionDelegate?) -> Action {
5466
return Action(
5567
icon: UIImage(named: "ic_copy"),
56-
title: "vc_conversation_settings_copy_session_id_button_title".localized()
68+
title: "vc_conversation_settings_copy_session_id_button_title".localized(),
69+
accessibilityLabel: "Copy Session ID"
70+
5771
) { delegate?.copySessionID(cellViewModel) }
5872
}
5973

@@ -76,14 +90,16 @@ extension ContextMenuVC {
7690
static func ban(_ cellViewModel: MessageViewModel, _ delegate: ContextMenuActionDelegate?) -> Action {
7791
return Action(
7892
icon: UIImage(named: "ic_block"),
79-
title: "context_menu_ban_user".localized()
93+
title: "context_menu_ban_user".localized(),
94+
accessibilityLabel: "Ban user"
8095
) { delegate?.ban(cellViewModel) }
8196
}
8297

8398
static func banAndDeleteAllMessages(_ cellViewModel: MessageViewModel, _ delegate: ContextMenuActionDelegate?) -> Action {
8499
return Action(
85100
icon: UIImage(named: "ic_block"),
86-
title: "context_menu_ban_and_delete_all".localized()
101+
title: "context_menu_ban_and_delete_all".localized(),
102+
accessibilityLabel: "Ban user and delete"
87103
) { delegate?.banAndDeleteAllMessages(cellViewModel) }
88104
}
89105

@@ -96,7 +112,8 @@ extension ContextMenuVC {
96112

97113
static func emojiPlusButton(_ cellViewModel: MessageViewModel, _ delegate: ContextMenuActionDelegate?) -> Action {
98114
return Action(
99-
isEmojiPlus: true
115+
isEmojiPlus: true,
116+
accessibilityLabel: "Add emoji"
100117
) { delegate?.showFullEmojiKeyboard(cellViewModel) }
101118
}
102119

@@ -127,6 +144,14 @@ extension ContextMenuVC {
127144
case .standardOutgoing, .standardIncoming: break
128145
}
129146

147+
let canRetry: Bool = (
148+
cellViewModel.variant == .standardOutgoing && (
149+
cellViewModel.state == .failed || (
150+
cellViewModel.threadVariant == .contact &&
151+
cellViewModel.state == .failedToSync
152+
)
153+
)
154+
)
130155
let canReply: Bool = (
131156
cellViewModel.variant != .standardOutgoing || (
132157
cellViewModel.state != .failed &&
@@ -182,6 +207,7 @@ extension ContextMenuVC {
182207
}()
183208

184209
let generatedActions: [Action] = [
210+
(canRetry ? Action.retry(cellViewModel, delegate) : nil),
185211
(canReply ? Action.reply(cellViewModel, delegate) : nil),
186212
(canCopy ? Action.copy(cellViewModel, delegate) : nil),
187213
(canSave ? Action.save(cellViewModel, delegate) : nil),
@@ -203,6 +229,7 @@ extension ContextMenuVC {
203229
// MARK: - Delegate
204230

205231
protocol ContextMenuActionDelegate {
232+
func retry(_ cellViewModel: MessageViewModel)
206233
func reply(_ cellViewModel: MessageViewModel)
207234
func copy(_ cellViewModel: MessageViewModel)
208235
func copySessionID(_ cellViewModel: MessageViewModel)

0 commit comments

Comments
 (0)