diff --git a/src/Contacts/ContactsUpdater.m b/src/Contacts/ContactsUpdater.m index d3d95d07f..fdbe5db1a 100644 --- a/src/Contacts/ContactsUpdater.m +++ b/src/Contacts/ContactsUpdater.m @@ -147,25 +147,18 @@ NS_ASSUME_NONNULL_BEGIN SignalRecipient *recipient = [SignalRecipient recipientWithTextSecureIdentifier:identifier withTransaction:transaction]; if (!recipient) { - recipient = - [[SignalRecipient alloc] initWithTextSecureIdentifier:identifier relay:nil supportsVoice:NO]; + recipient = [[SignalRecipient alloc] initWithTextSecureIdentifier:identifier + relay:nil + supportsVoice:NO + supportsWebRTC:NO]; } NSDictionary *attributes = [attributesForIdentifier objectForKey:identifier]; - NSString *relay = [attributes objectForKey:@"relay"]; - if (relay) { - recipient.relay = relay; - } else { - recipient.relay = nil; - } - - BOOL supportsVoice = [[attributes objectForKey:@"voice"] boolValue]; - if (supportsVoice) { - recipient.supportsVoice = YES; - } else { - recipient.supportsVoice = NO; - } + recipient.relay = attributes[@"relay"]; + recipient.supportsVoice = [attributes[@"voice"] boolValue]; + // The key for the "supports WebRTC audio/video" property is "video". + recipient.supportsWebRTC = [attributes[@"video"] boolValue]; [recipient saveWithTransaction:transaction]; } diff --git a/src/Contacts/SignalRecipient.h b/src/Contacts/SignalRecipient.h index 3da562447..0f7657e72 100644 --- a/src/Contacts/SignalRecipient.h +++ b/src/Contacts/SignalRecipient.h @@ -9,7 +9,8 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithTextSecureIdentifier:(NSString *)textSecureIdentifier relay:(nullable NSString *)relay - supportsVoice:(BOOL)voiceCapable; + supportsVoice:(BOOL)voiceCapable + supportsWebRTC:(BOOL)supportsWebRTC; + (instancetype)selfRecipient; + (nullable instancetype)recipientWithTextSecureIdentifier:(NSString *)textSecureIdentifier; @@ -23,6 +24,8 @@ NS_ASSUME_NONNULL_BEGIN @property (nonatomic, nullable) NSString *relay; @property (nonatomic, retain) NSMutableOrderedSet *devices; @property BOOL supportsVoice; +// This property indicates support for both WebRTC audio and video calls. +@property BOOL supportsWebRTC; @end diff --git a/src/Contacts/SignalRecipient.m b/src/Contacts/SignalRecipient.m index 3a8ea35d3..6fad6b1f5 100644 --- a/src/Contacts/SignalRecipient.m +++ b/src/Contacts/SignalRecipient.m @@ -16,6 +16,7 @@ NS_ASSUME_NONNULL_BEGIN - (instancetype)initWithTextSecureIdentifier:(NSString *)textSecureIdentifier relay:(nullable NSString *)relay supportsVoice:(BOOL)voiceCapable + supportsWebRTC:(BOOL)supportsWebRTC { self = [super initWithUniqueId:textSecureIdentifier]; if (!self) { @@ -25,6 +26,7 @@ NS_ASSUME_NONNULL_BEGIN _devices = [NSMutableOrderedSet orderedSetWithObject:[NSNumber numberWithInt:1]]; _relay = [relay isEqualToString:@""] ? nil : relay; _supportsVoice = voiceCapable; + _supportsWebRTC = supportsWebRTC; return self; } @@ -48,7 +50,12 @@ NS_ASSUME_NONNULL_BEGIN { SignalRecipient *myself = [self recipientWithTextSecureIdentifier:[TSStorageManager localNumber]]; if (!myself) { - myself = [[self alloc] initWithTextSecureIdentifier:[TSStorageManager localNumber] relay:nil supportsVoice:YES]; + myself = [[self alloc] initWithTextSecureIdentifier:[TSStorageManager localNumber] + relay:nil + supportsVoice:YES + // This property may be inaccurate, but it's fine since this will only be + // sent to the current user's other devices, which will ignore this value. + supportsWebRTC:YES]; } return myself; } diff --git a/src/Contacts/Threads/TSContactThread.m b/src/Contacts/Threads/TSContactThread.m index 84c876c38..39be4e5d1 100644 --- a/src/Contacts/Threads/TSContactThread.m +++ b/src/Contacts/Threads/TSContactThread.m @@ -32,7 +32,12 @@ NS_ASSUME_NONNULL_BEGIN [SignalRecipient recipientWithTextSecureIdentifier:contactId withTransaction:transaction]; if (!recipient) { - recipient = [[SignalRecipient alloc] initWithTextSecureIdentifier:contactId relay:relay supportsVoice:YES]; + recipient = + [[SignalRecipient alloc] initWithTextSecureIdentifier:contactId + relay:relay + supportsVoice:YES + // Default to NO; ContactsUpdater will try to update this property. + supportsWebRTC:NO]; [[ContactsUpdater sharedUpdater] lookupIdentifier:contactId success:^(NSSet *matchedIds) {