Fixed an issue where subscribing to a new legacy group wouldn't have worked

pull/856/head
Morgan Pretty 2 years ago
parent 01d77a515c
commit c7d090251a

@ -192,11 +192,22 @@ extension MessageReceiver {
// Start polling // Start polling
ClosedGroupPoller.shared.startIfNeeded(for: groupPublicKey) ClosedGroupPoller.shared.startIfNeeded(for: groupPublicKey)
// Subscribe for push notifications // Resubscribe for group push notifications
let currentUserPublicKey: String = getUserHexEncodedPublicKey(db)
PushNotificationAPI PushNotificationAPI
.subscribeToLegacyGroup( .subscribeToLegacyGroups(
legacyGroupId: groupPublicKey, currentUserPublicKey: currentUserPublicKey,
currentUserPublicKey: getUserHexEncodedPublicKey(db) legacyGroupIds: try ClosedGroup
.select(.threadId)
.filter(!ClosedGroup.Columns.threadId.like("\(SessionId.Prefix.group.rawValue)%"))
.joining(
required: ClosedGroup.members
.filter(GroupMember.Columns.profileId == currentUserPublicKey)
)
.asRequest(of: String.self)
.fetchSet(db)
.inserting(groupPublicKey) // Insert the new key just to be sure
) )
.sinkUntilComplete() .sinkUntilComplete()
} }

@ -118,9 +118,18 @@ extension MessageSender {
.map { MessageSender.sendImmediate(preparedSendData: $0) } .map { MessageSender.sendImmediate(preparedSendData: $0) }
.appending( .appending(
// Subscribe for push notifications (if enabled) // Subscribe for push notifications (if enabled)
PushNotificationAPI.subscribeToLegacyGroup( PushNotificationAPI.subscribeToLegacyGroups(
legacyGroupId: groupPublicKey, currentUserPublicKey: userPublicKey,
currentUserPublicKey: userPublicKey legacyGroupIds: try ClosedGroup
.select(.threadId)
.filter(!ClosedGroup.Columns.threadId.like("\(SessionId.Prefix.group.rawValue)%"))
.joining(
required: ClosedGroup.members
.filter(GroupMember.Columns.profileId == userPublicKey)
)
.asRequest(of: String.self)
.fetchSet(db)
.inserting(groupPublicKey) // Insert the new key just to be sure
) )
) )
) )

@ -79,7 +79,7 @@ public enum PushNotificationAPI {
.filter(!ClosedGroup.Columns.threadId.like("\(SessionId.Prefix.group.rawValue)%")) .filter(!ClosedGroup.Columns.threadId.like("\(SessionId.Prefix.group.rawValue)%"))
.joining( .joining(
required: ClosedGroup.members required: ClosedGroup.members
.filter(GroupMember.Columns.profileId == getUserHexEncodedPublicKey(db)) .filter(GroupMember.Columns.profileId == currentUserPublicKey)
) )
.asRequest(of: String.self) .asRequest(of: String.self)
.fetchSet(db) .fetchSet(db)
@ -118,35 +118,12 @@ public enum PushNotificationAPI {
.map { _ in () } .map { _ in () }
.eraseToAnyPublisher(), .eraseToAnyPublisher(),
// FIXME: Remove this once legacy groups are deprecated // FIXME: Remove this once legacy groups are deprecated
PushNotificationAPI PushNotificationAPI.subscribeToLegacyGroups(
.send( forced: true,
request: PushNotificationAPIRequest( token: hexEncodedToken,
endpoint: .legacyGroupsOnlySubscribe, currentUserPublicKey: currentUserPublicKey,
body: LegacyGroupOnlyRequest( legacyGroupIds: legacyGroupIds
token: hexEncodedToken, )
pubKey: currentUserPublicKey,
device: "ios",
legacyGroupPublicKeys: legacyGroupIds
)
)
)
.decoded(as: LegacyPushServerResponse.self, using: dependencies)
.retry(maxRetryCount)
.handleEvents(
receiveOutput: { _, response in
guard response.code != 0 else {
return SNLog("Couldn't subscribe for legacy groups due to error: \(response.message ?? "nil").")
}
},
receiveCompletion: { result in
switch result {
case .finished: break
case .failure: SNLog("Couldn't subscribe for legacy groups.")
}
}
)
.map { _ in () }
.eraseToAnyPublisher()
] ]
) )
.collect() .collect()
@ -284,14 +261,20 @@ public enum PushNotificationAPI {
// MARK: - Legacy Groups // MARK: - Legacy Groups
// FIXME: Remove this once legacy groups are deprecated // FIXME: Remove this once legacy groups are deprecated
public static func subscribeToLegacyGroup( public static func subscribeToLegacyGroups(
legacyGroupId: String, forced: Bool = false,
token: String? = nil,
currentUserPublicKey: String, currentUserPublicKey: String,
legacyGroupIds: Set<String>,
using dependencies: SSKDependencies = SSKDependencies() using dependencies: SSKDependencies = SSKDependencies()
) -> AnyPublisher<Void, Error> { ) -> AnyPublisher<Void, Error> {
let isUsingFullAPNs = UserDefaults.standard[.isUsingFullAPNs] let isUsingFullAPNs = UserDefaults.standard[.isUsingFullAPNs]
guard isUsingFullAPNs else { // Only continue if PNs are enabled and we have a device token
guard
(forced || isUsingFullAPNs),
let deviceToken: String = (token ?? UserDefaults.standard[.deviceToken])
else {
return Just(()) return Just(())
.setFailureType(to: Error.self) .setFailureType(to: Error.self)
.eraseToAnyPublisher() .eraseToAnyPublisher()
@ -300,10 +283,12 @@ public enum PushNotificationAPI {
return PushNotificationAPI return PushNotificationAPI
.send( .send(
request: PushNotificationAPIRequest( request: PushNotificationAPIRequest(
endpoint: .legacyGroupSubscribe, endpoint: .legacyGroupsOnlySubscribe,
body: LegacyGroupRequest( body: LegacyGroupOnlyRequest(
token: deviceToken,
pubKey: currentUserPublicKey, pubKey: currentUserPublicKey,
closedGroupPublicKey: legacyGroupId device: "ios",
legacyGroupPublicKeys: legacyGroupIds
) )
) )
) )
@ -312,13 +297,13 @@ public enum PushNotificationAPI {
.handleEvents( .handleEvents(
receiveOutput: { _, response in receiveOutput: { _, response in
guard response.code != 0 else { guard response.code != 0 else {
return SNLog("Couldn't subscribe for legacy group: \(legacyGroupId) due to error: \(response.message ?? "nil").") return SNLog("Couldn't subscribe for legacy groups due to error: \(response.message ?? "nil").")
} }
}, },
receiveCompletion: { result in receiveCompletion: { result in
switch result { switch result {
case .finished: break case .finished: break
case .failure: SNLog("Couldn't subscribe for legacy group: \(legacyGroupId).") case .failure: SNLog("Couldn't subscribe for legacy groups.")
} }
} }
) )
@ -332,8 +317,6 @@ public enum PushNotificationAPI {
currentUserPublicKey: String, currentUserPublicKey: String,
using dependencies: SSKDependencies = SSKDependencies() using dependencies: SSKDependencies = SSKDependencies()
) -> AnyPublisher<Void, Error> { ) -> AnyPublisher<Void, Error> {
let isUsingFullAPNs = UserDefaults.standard[.isUsingFullAPNs]
return PushNotificationAPI return PushNotificationAPI
.send( .send(
request: PushNotificationAPIRequest( request: PushNotificationAPIRequest(

Loading…
Cancel
Save