@ -34,32 +34,16 @@ public final class ClosedGroupsProtocol : NSObject {
@objc ( establishSessionsIfNeededWithClosedGroupMembers : in : )
public static func establishSessionsIfNeeded ( with closedGroupMembers : [ String ] , in thread : TSGroupThread ) {
func establishSessionsIfNeeded ( with hexEncodedPublicKeys : Set < String > ) {
storage . dbReadWriteConnection . readWrite { transaction in
hexEncodedPublicKeys . forEach { hexEncodedPublicKey in
guard hexEncodedPublicKey != getUserHexEncodedPublicKey ( ) else { return }
let hasSession = storage . containsSession ( hexEncodedPublicKey , deviceId : Int32 ( OWSDevicePrimaryDeviceId ) , protocolContext : transaction )
guard ! hasSession else { return }
let thread = TSContactThread . getOrCreateThread ( withContactId : hexEncodedPublicKey , transaction : transaction )
let sessionRequestMessage = SessionRequestMessage ( thread : thread )
let messageSenderJobQueue = SSKEnvironment . shared . messageSenderJobQueue
messageSenderJobQueue . add ( message : sessionRequestMessage , transaction : transaction )
}
}
}
// W e c o u l d j u s t l e t t h e m u l t i d e v i c e m e s s a g e s e n d i n g l o g i c t a k e c a r e o f s l a v e d e v i c e s , b u t t h a t ' d m e a n
// m a k i n g a r e q u e s t t o t h e f i l e s e r v e r f o r e a c h m e m b e r i n v o l v e d . W i t h t h e l i n e b e l o w w e ( h o p e f u l l y ) r e d u c e
// t h a t t o o n e r e q u e s t .
LokiFileServerAPI . getDeviceLinks ( associatedWith : Set ( closedGroupMembers ) ) . map {
Set ( $0 . flatMap { [ $0 . master . hexEncodedPublicKey , $0 . slave . hexEncodedPublicKey ] } ) . union ( closedGroupMembers )
} . done { hexEncodedPublicKeys in
DispatchQueue . main . async {
establishSessionsIfNeeded ( with : hexEncodedPublicKeys )
}
} . catch { _ in
// T r y t h e i n e f f i c i e n t w a y i f t h e f i l e s e r v e r f a i l e d
DispatchQueue . main . async {
establishSessionsIfNeeded ( with : Set ( closedGroupMembers ) )
storage . dbReadWriteConnection . readWrite { transaction in
closedGroupMembers . forEach { hexEncodedPublicKey in
guard hexEncodedPublicKey != getUserHexEncodedPublicKey ( ) else { return }
let hasSession = storage . containsSession ( hexEncodedPublicKey , deviceId : Int32 ( OWSDevicePrimaryDeviceId ) , protocolContext : transaction )
guard ! hasSession else { return }
let thread = TSContactThread . getOrCreateThread ( withContactId : hexEncodedPublicKey , transaction : transaction )
thread . save ( with : transaction )
let sessionRequestMessage = SessionRequestMessage ( thread : thread )
let messageSenderJobQueue = SSKEnvironment . shared . messageSenderJobQueue
messageSenderJobQueue . add ( message : sessionRequestMessage , transaction : transaction )
}
}
}