Change ChatConnectionManager dependency into a callback

This commit is contained in:
Pete Walters 2026-04-10 17:16:43 -05:00 committed by GitHub
parent e3b1e90d61
commit aa2b5c0818
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
4 changed files with 34 additions and 23 deletions

View File

@ -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

View File

@ -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,

View File

@ -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,

View File

@ -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)