Swiftify SignalRecipient.fetchOrCreate callers
This commit is contained in:
parent
a254819cc7
commit
3b751ebd50
@ -80,13 +80,8 @@ NS_DESIGNATED_INITIALIZER NS_SWIFT_NAME(init(grdbId:uniqueId:devices:recipientPh
|
||||
transaction:(SDSAnyReadTransaction *)transaction
|
||||
NS_SWIFT_NAME(get(address:mustHaveDevices:transaction:));
|
||||
|
||||
+ (void)updateWithAddress:(SignalServiceAddress *)address
|
||||
devicesToAdd:(nullable NSArray<NSNumber *> *)devicesToAdd
|
||||
devicesToRemove:(nullable NSArray<NSNumber *> *)devicesToRemove
|
||||
transaction:(SDSAnyWriteTransaction *)transaction;
|
||||
|
||||
- (void)updateWithDevicesToAdd:(nullable NSArray<NSNumber *> *)devicesToAdd
|
||||
devicesToRemove:(nullable NSArray<NSNumber *> *)devicesToRemove
|
||||
- (void)updateWithDevicesToAdd:(NSArray<NSNumber *> *)devicesToAdd
|
||||
devicesToRemove:(NSArray<NSNumber *> *)devicesToRemove
|
||||
transaction:(SDSAnyWriteTransaction *)transaction;
|
||||
|
||||
@property (nonatomic, nullable) NSString *recipientPhoneNumber;
|
||||
|
||||
@ -202,22 +202,8 @@ const uint64_t SignalRecipientDistantPastUnregisteredTimestamp = 1;
|
||||
}
|
||||
}
|
||||
|
||||
+ (void)updateWithAddress:(SignalServiceAddress *)address
|
||||
devicesToAdd:(nullable NSArray<NSNumber *> *)devicesToAdd
|
||||
devicesToRemove:(nullable NSArray<NSNumber *> *)devicesToRemove
|
||||
transaction:(SDSAnyWriteTransaction *)transaction
|
||||
{
|
||||
OWSAssertDebug(transaction);
|
||||
OWSAssertDebug(devicesToAdd.count > 0 || devicesToRemove.count > 0);
|
||||
|
||||
SignalRecipient *recipient = [self fetchOrCreateFor:address
|
||||
trustLevel:SignalRecipientTrustLevelLow
|
||||
transaction:transaction];
|
||||
[recipient updateWithDevicesToAdd:devicesToAdd devicesToRemove:devicesToRemove transaction:transaction];
|
||||
}
|
||||
|
||||
- (void)updateWithDevicesToAdd:(nullable NSArray<NSNumber *> *)devicesToAdd
|
||||
devicesToRemove:(nullable NSArray<NSNumber *> *)devicesToRemove
|
||||
- (void)updateWithDevicesToAdd:(NSArray<NSNumber *> *)devicesToAdd
|
||||
devicesToRemove:(NSArray<NSNumber *> *)devicesToRemove
|
||||
transaction:(SDSAnyWriteTransaction *)transaction
|
||||
{
|
||||
OWSAssertDebug(transaction);
|
||||
|
||||
@ -51,7 +51,6 @@ extension SignalRecipient {
|
||||
|
||||
// MARK: -
|
||||
|
||||
@objc
|
||||
@discardableResult
|
||||
public class func fetchOrCreate(
|
||||
for address: SignalServiceAddress,
|
||||
|
||||
@ -647,10 +647,11 @@ extension MessageSender {
|
||||
self.databaseStorage.write { writeTx in
|
||||
for account in responseBody {
|
||||
MessageSender.updateDevices(
|
||||
address: SignalServiceAddress(uuid: account.uuid),
|
||||
serviceId: ServiceIdObjC(uuidValue: account.uuid),
|
||||
devicesToAdd: account.devices.missingDevices.map { NSNumber(value: $0) },
|
||||
devicesToRemove: account.devices.extraDevices.map { NSNumber(value: $0) },
|
||||
transaction: writeTx)
|
||||
transaction: writeTx
|
||||
)
|
||||
}
|
||||
}
|
||||
throw SenderKeyError.deviceUpdate
|
||||
|
||||
@ -978,12 +978,11 @@ NSString *const MessageSenderSpamChallengeResolvedException = @"SpamChallengeRes
|
||||
if ([exception.name isEqualToString:MessageSenderInvalidDeviceException]) {
|
||||
// If we have an invalid device exception, remove this device from
|
||||
// the recipient and suppress the error.
|
||||
SignalServiceAddress *recipientAddress = [[SignalServiceAddress alloc] initWithServiceIdObjC:serviceId];
|
||||
DatabaseStorageWrite(self.databaseStorage, ^(SDSAnyWriteTransaction *transaction) {
|
||||
[MessageSender updateDevicesWithAddress:recipientAddress
|
||||
devicesToAdd:@[]
|
||||
devicesToRemove:@[ deviceId ]
|
||||
transaction:transaction];
|
||||
[MessageSender updateDevicesWithServiceId:serviceId
|
||||
devicesToAdd:@[]
|
||||
devicesToRemove:@[ deviceId ]
|
||||
transaction:transaction];
|
||||
});
|
||||
} else if ([exception.name isEqualToString:NoSessionForTransientMessageException]) {
|
||||
// When users re-register, we don't want transient messages (like typing
|
||||
|
||||
@ -145,7 +145,7 @@ extension MessageSender {
|
||||
case MessageSenderError.missingDevice:
|
||||
self.databaseStorage.write { transaction in
|
||||
MessageSender.updateDevices(
|
||||
address: messageSend.address,
|
||||
serviceId: messageSend.serviceId,
|
||||
devicesToAdd: [],
|
||||
devicesToRemove: [NSNumber(value: deviceId)],
|
||||
transaction: transaction
|
||||
@ -1122,8 +1122,7 @@ extension MessageSender {
|
||||
}
|
||||
|
||||
extension MessageSender {
|
||||
private func handleMismatchedDevices(_ response: MessageSendFailureResponse,
|
||||
messageSend: OWSMessageSend) {
|
||||
private func handleMismatchedDevices(_ response: MessageSendFailureResponse, messageSend: OWSMessageSend) {
|
||||
owsAssertDebug(!Thread.isMainThread)
|
||||
|
||||
let extraDevices: [Int] = response.extraDevices ?? []
|
||||
@ -1132,10 +1131,12 @@ extension MessageSender {
|
||||
let devicesToRemove = extraDevices.map { NSNumber(value: $0) }
|
||||
|
||||
Self.databaseStorage.write { transaction in
|
||||
MessageSender.updateDevices(address: messageSend.address,
|
||||
devicesToAdd: devicesToAdd,
|
||||
devicesToRemove: devicesToRemove,
|
||||
transaction: transaction)
|
||||
MessageSender.updateDevices(
|
||||
serviceId: messageSend.serviceId,
|
||||
devicesToAdd: devicesToAdd,
|
||||
devicesToRemove: devicesToRemove,
|
||||
transaction: transaction
|
||||
)
|
||||
}
|
||||
}
|
||||
|
||||
@ -1163,10 +1164,12 @@ extension MessageSender {
|
||||
}
|
||||
|
||||
@objc
|
||||
public static func updateDevices(address: SignalServiceAddress,
|
||||
devicesToAdd: [NSNumber],
|
||||
devicesToRemove: [NSNumber],
|
||||
transaction: SDSAnyWriteTransaction) {
|
||||
public static func updateDevices(
|
||||
serviceId: ServiceIdObjC,
|
||||
devicesToAdd: [NSNumber],
|
||||
devicesToRemove: [NSNumber],
|
||||
transaction: SDSAnyWriteTransaction
|
||||
) {
|
||||
owsAssertDebug(!Thread.isMainThread)
|
||||
guard !devicesToAdd.isEmpty || !devicesToRemove.isEmpty else {
|
||||
owsFailDebug("No devices to add or remove.")
|
||||
@ -1174,22 +1177,27 @@ extension MessageSender {
|
||||
}
|
||||
owsAssertDebug(Set(devicesToAdd).isDisjoint(with: devicesToRemove))
|
||||
|
||||
if !devicesToAdd.isEmpty, address.isLocalAddress {
|
||||
if !devicesToAdd.isEmpty, SignalServiceAddress(serviceId.wrappedValue).isLocalAddress {
|
||||
deviceManager.setMayHaveLinkedDevices()
|
||||
}
|
||||
|
||||
SignalRecipient.update(
|
||||
with: address,
|
||||
devicesToAdd: devicesToAdd,
|
||||
devicesToRemove: devicesToRemove,
|
||||
let recipient = SignalRecipient.fetchOrCreate(
|
||||
for: SignalServiceAddress(serviceId.wrappedValue),
|
||||
trustLevel: .low,
|
||||
transaction: transaction
|
||||
)
|
||||
|
||||
recipient.updateWithDevices(toAdd: devicesToAdd, devicesToRemove: devicesToRemove, transaction: transaction)
|
||||
|
||||
if !devicesToRemove.isEmpty {
|
||||
Logger.info("Archiving sessions for extra devices: \(devicesToRemove), \(devicesToRemove)")
|
||||
Logger.info("Archiving sessions for extra devices: \(devicesToRemove)")
|
||||
let sessionStore = signalProtocolStore(for: .aci).sessionStore
|
||||
for deviceId in devicesToRemove {
|
||||
sessionStore.archiveSession(for: address, deviceId: deviceId.int32Value, transaction: transaction)
|
||||
sessionStore.archiveSession(
|
||||
for: SignalServiceAddress(serviceId.wrappedValue),
|
||||
deviceId: deviceId.int32Value,
|
||||
transaction: transaction
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user