Change ChatConnectionManager dependency into a callback
This commit is contained in:
parent
e3b1e90d61
commit
aa2b5c0818
@ -16,11 +16,7 @@ public class RegistrationStateChangeManagerImpl: RegistrationStateChangeManager
|
||||
private let backupSubscriptionManager: BackupSubscriptionManager
|
||||
private let backupTestFlightEntitlementManager: BackupTestFlightEntitlementManager
|
||||
private let blockedRecipientStore: BlockedRecipientStore
|
||||
private var chatConnectionManager: any ChatConnectionManager {
|
||||
// TODO: Fix circular dependency.
|
||||
return DependenciesBridge.shared.chatConnectionManager
|
||||
}
|
||||
|
||||
private let chatConnectionManager: any ChatConnectionManager
|
||||
private let cron: Cron
|
||||
private let db: DB
|
||||
private let dmConfigurationStore: DisappearingMessagesConfigurationStore
|
||||
@ -45,6 +41,7 @@ public class RegistrationStateChangeManagerImpl: RegistrationStateChangeManager
|
||||
backupSubscriptionManager: BackupSubscriptionManager,
|
||||
backupTestFlightEntitlementManager: BackupTestFlightEntitlementManager,
|
||||
blockedRecipientStore: BlockedRecipientStore,
|
||||
chatConnectionManager: any ChatConnectionManager,
|
||||
cron: Cron,
|
||||
db: DB,
|
||||
dmConfigurationStore: DisappearingMessagesConfigurationStore,
|
||||
@ -68,6 +65,7 @@ public class RegistrationStateChangeManagerImpl: RegistrationStateChangeManager
|
||||
self.backupSubscriptionManager = backupSubscriptionManager
|
||||
self.backupTestFlightEntitlementManager = backupTestFlightEntitlementManager
|
||||
self.blockedRecipientStore = blockedRecipientStore
|
||||
self.chatConnectionManager = chatConnectionManager
|
||||
self.cron = cron
|
||||
self.db = db
|
||||
self.dmConfigurationStore = dmConfigurationStore
|
||||
|
||||
@ -1011,6 +1011,16 @@ extension AppSetup.GlobalsContinuation {
|
||||
let inactivePrimaryDeviceStore = InactivePrimaryDeviceStore()
|
||||
let keyTransparencyStore = KeyTransparencyStore()
|
||||
|
||||
let chatConnectionManager = ChatConnectionManagerImpl(
|
||||
accountManager: tsAccountManager,
|
||||
appContext: appContext,
|
||||
appExpiry: appExpiry,
|
||||
appReadiness: appReadiness,
|
||||
db: db,
|
||||
inactivePrimaryDeviceStore: inactivePrimaryDeviceStore,
|
||||
libsignalNet: libsignalNet,
|
||||
)
|
||||
|
||||
let registrationStateChangeManager = RegistrationStateChangeManagerImpl(
|
||||
authCredentialStore: authCredentialStore,
|
||||
backupAttachmentUploadEraStore: backupAttachmentUploadEraStore,
|
||||
@ -1018,6 +1028,7 @@ extension AppSetup.GlobalsContinuation {
|
||||
backupSubscriptionManager: backupSubscriptionManager,
|
||||
backupTestFlightEntitlementManager: backupTestFlightEntitlementManager,
|
||||
blockedRecipientStore: blockedRecipientStore,
|
||||
chatConnectionManager: chatConnectionManager,
|
||||
cron: cron,
|
||||
db: db,
|
||||
dmConfigurationStore: disappearingMessagesConfigurationStore,
|
||||
@ -1035,17 +1046,9 @@ extension AppSetup.GlobalsContinuation {
|
||||
udManager: udManager,
|
||||
versionedProfiles: versionedProfiles,
|
||||
)
|
||||
|
||||
let chatConnectionManager = ChatConnectionManagerImpl(
|
||||
accountManager: tsAccountManager,
|
||||
appContext: appContext,
|
||||
appExpiry: appExpiry,
|
||||
appReadiness: appReadiness,
|
||||
db: db,
|
||||
inactivePrimaryDeviceStore: inactivePrimaryDeviceStore,
|
||||
libsignalNet: libsignalNet,
|
||||
registrationStateChangeManager: registrationStateChangeManager,
|
||||
)
|
||||
chatConnectionManager.onRegistrationStateChange = { [weak registrationStateChangeManager] isDelinkedOrDeregistered, tx in
|
||||
registrationStateChangeManager?.setIsDeregisteredOrDelinked(isDelinkedOrDeregistered, tx: tx)
|
||||
}
|
||||
|
||||
let attachmentUploadManager = AttachmentUploadManagerImpl(
|
||||
accountKeyStore: accountKeyStore,
|
||||
|
||||
@ -96,6 +96,19 @@ public class ChatConnectionManagerImpl: ChatConnectionManager {
|
||||
private let connectionUnidentified: OWSUnauthConnectionUsingLibSignal
|
||||
private var connections: [OWSChatConnection] { [connectionIdentified, connectionUnidentified] }
|
||||
|
||||
// TODO: This is a workaround to solve the circular dependency between
|
||||
// ChatConnectionManager and RegistrationStateChangeManager. In the event that
|
||||
// someday RegistrationStateChangeManager is split up into smaller pieces, this
|
||||
// can be revisited.
|
||||
public var onRegistrationStateChange: ((_ isDelinkedOrDeregisterd: Bool, _ tx: DBWriteTransaction) -> Void)? {
|
||||
get {
|
||||
connectionIdentified.onRegistrationStateChange
|
||||
}
|
||||
set {
|
||||
connectionIdentified.onRegistrationStateChange = newValue
|
||||
}
|
||||
}
|
||||
|
||||
@MainActor
|
||||
public init(
|
||||
accountManager: TSAccountManager,
|
||||
@ -105,7 +118,6 @@ public class ChatConnectionManagerImpl: ChatConnectionManager {
|
||||
db: any DB,
|
||||
inactivePrimaryDeviceStore: InactivePrimaryDeviceStore,
|
||||
libsignalNet: Net,
|
||||
registrationStateChangeManager: RegistrationStateChangeManager,
|
||||
) {
|
||||
self.connectionIdentified = OWSAuthConnectionUsingLibSignal(
|
||||
libsignalNet: libsignalNet,
|
||||
@ -115,7 +127,6 @@ public class ChatConnectionManagerImpl: ChatConnectionManager {
|
||||
appReadiness: appReadiness,
|
||||
db: db,
|
||||
inactivePrimaryDeviceStore: inactivePrimaryDeviceStore,
|
||||
registrationStateChangeManager: registrationStateChangeManager,
|
||||
)
|
||||
self.connectionUnidentified = OWSUnauthConnectionUsingLibSignal(
|
||||
libsignalNet: libsignalNet,
|
||||
|
||||
@ -885,9 +885,10 @@ class OWSAuthConnectionUsingLibSignal: OWSChatConnectionUsingLibSignal<Authentic
|
||||
}
|
||||
}
|
||||
|
||||
var onRegistrationStateChange: ((_ isDelinkedOrDeregisterd: Bool, _ tx: DBWriteTransaction) -> Void)?
|
||||
|
||||
private let accountManager: TSAccountManager
|
||||
private let inactivePrimaryDeviceStore: InactivePrimaryDeviceStore
|
||||
private let registrationStateChangeManager: RegistrationStateChangeManager
|
||||
|
||||
init(
|
||||
libsignalNet: Net,
|
||||
@ -897,11 +898,9 @@ class OWSAuthConnectionUsingLibSignal: OWSChatConnectionUsingLibSignal<Authentic
|
||||
appReadiness: AppReadiness,
|
||||
db: any DB,
|
||||
inactivePrimaryDeviceStore: InactivePrimaryDeviceStore,
|
||||
registrationStateChangeManager: RegistrationStateChangeManager,
|
||||
) {
|
||||
self.accountManager = accountManager
|
||||
self.inactivePrimaryDeviceStore = inactivePrimaryDeviceStore
|
||||
self.registrationStateChangeManager = registrationStateChangeManager
|
||||
|
||||
let priority: Int
|
||||
switch appContext.type {
|
||||
@ -1028,7 +1027,7 @@ class OWSAuthConnectionUsingLibSignal: OWSChatConnectionUsingLibSignal<Authentic
|
||||
if self.connection.isCurrentlyConnecting(token) {
|
||||
self._setRegistrationOverride(false)
|
||||
self.db.write { tx in
|
||||
self.registrationStateChangeManager.setIsDeregisteredOrDelinked(true, tx: tx)
|
||||
self.onRegistrationStateChange?(true, tx)
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -1063,7 +1062,7 @@ class OWSAuthConnectionUsingLibSignal: OWSChatConnectionUsingLibSignal<Authentic
|
||||
service.start(listener: self)
|
||||
if accountManager.registrationStateWithMaybeSneakyTransaction.isDeregistered {
|
||||
db.write { tx in
|
||||
registrationStateChangeManager.setIsDeregisteredOrDelinked(false, tx: tx)
|
||||
self.onRegistrationStateChange?(false, tx)
|
||||
}
|
||||
}
|
||||
keepaliveSenderTask = makeKeepaliveTask(service)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user