diff --git a/ElementX.xcodeproj/project.pbxproj b/ElementX.xcodeproj/project.pbxproj index f23754c4a..d58c67d93 100644 --- a/ElementX.xcodeproj/project.pbxproj +++ b/ElementX.xcodeproj/project.pbxproj @@ -5283,7 +5283,7 @@ repositoryURL = "https://github.com/matrix-org/matrix-rust-components-swift"; requirement = { kind = exactVersion; - version = "1.0.98-alpha"; + version = "1.0.99-alpha"; }; }; 96495DD8554E2F39D3954354 /* XCRemoteSwiftPackageReference "posthog-ios" */ = { diff --git a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved index 81c45ef53..ce4d79689 100644 --- a/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved +++ b/ElementX.xcodeproj/project.xcworkspace/xcshareddata/swiftpm/Package.resolved @@ -111,8 +111,8 @@ "kind" : "remoteSourceControl", "location" : "https://github.com/matrix-org/matrix-rust-components-swift", "state" : { - "revision" : "985708733af7d2db1684f90f0a954854ca3a83ad", - "version" : "1.0.98-alpha" + "revision" : "3e2beb52294aa5dd87203cdcb3ac685f1a022c6b", + "version" : "1.0.99-alpha" } }, { diff --git a/ElementX/Sources/Services/Client/ClientProxy.swift b/ElementX/Sources/Services/Client/ClientProxy.swift index c18af2e07..49346a659 100644 --- a/ElementX/Sources/Services/Client/ClientProxy.swift +++ b/ElementX/Sources/Services/Client/ClientProxy.swift @@ -110,19 +110,26 @@ class ClientProxy: ClientProxyProtocol { } var isSyncing: Bool { - roomListService?.isSyncing() ?? false + isStartingSync || roomListService?.isSyncing() ?? false } + /// Ensure we don't call start sync whilst awaiting a previous call. + private var isStartingSync = false + func startSync() { - MXLog.info("Starting sync") - guard !isSyncing else { - return - } + guard !isSyncing else { return } - do { - try appService?.start() - } catch { - MXLog.error("Failed starting app service with error: \(error)") + MXLog.info("Starting sync") + isStartingSync = true + + Task { + do { + try await appService?.start() + } catch { + MXLog.error("Failed starting app service with error: \(error)") + } + + isStartingSync = false } } @@ -352,9 +359,21 @@ class ClientProxy: ClientProxyProtocol { // MARK: Private - private func restartSync() { - pauseSync() - startSync() + private func restartSync(delay: Duration = .zero) { + isStartingSync = true + + Task { + try await Task.sleep(for: delay) + + do { + MXLog.info("Restart the app service.") + try await self.appService?.start() + } catch { + MXLog.error("Failed restarting app service after error.") + } + + self.isStartingSync = false + } } private func loadUserAvatarURLFromCache() { @@ -378,7 +397,7 @@ class ClientProxy: ClientProxyProtocol { } do { - let appService = try client + let appService = try await client .app() .withEncryptionSync(withCrossProcessLock: appSettings.isEncryptionSyncEnabled, appIdentifier: "MainApp") @@ -410,10 +429,10 @@ class ClientProxy: ClientProxyProtocol { guard let self else { return } MXLog.info("Received app service update: \(state)") switch state { - case .error: - restartSync() - case .terminated, .running: + case .running, .terminated: break + case .error: + restartSync(delay: .seconds(1)) } }) } diff --git a/project.yml b/project.yml index c6feb599b..44b894d29 100644 --- a/project.yml +++ b/project.yml @@ -44,7 +44,7 @@ include: packages: MatrixRustSDK: url: https://github.com/matrix-org/matrix-rust-components-swift - exactVersion: 1.0.98-alpha + exactVersion: 1.0.99-alpha # path: ../matrix-rust-sdk DesignKit: path: DesignKit