]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
Fix swift 6 concurrency error regarding use of authAttemptState
authorClaudio Cambra <claudio.cambra@nextcloud.com>
Tue, 15 Oct 2024 06:17:56 +0000 (14:17 +0800)
committerClaudio Cambra <claudio.cambra@nextcloud.com>
Fri, 18 Oct 2024 06:16:25 +0000 (14:16 +0800)
Cannot pass a local variable into a concurrently executing Task. It's
not a real issue as we are using a semaphore to wait before using this
variable for anything outside of the Task block, but still.

Signed-off-by: Claudio Cambra <claudio.cambra@nextcloud.com>
shell_integration/MacOSX/NextcloudIntegration/FileProviderExt/FileProviderExtension+ClientInterface.swift

index 3cae7f945acb61ce997eef2de2951eaef6e75179..98a9cb250f2ef92d05c7b62615a9d50807a27681 100644 (file)
@@ -107,11 +107,10 @@ extension FileProviderExtension: NSFileProviderServicing, ChangeNotificationInte
     @objc func setupDomainAccount(
         user: String, userId: String, serverUrl: String, password: String
     ) {
-        let semaphore = DispatchSemaphore(value: 0)
-        var authAttemptState = AuthenticationAttemptResultState.connectionError // default
         Task {
             let authTestNcKit = NextcloudKit()
             authTestNcKit.setup(user: user, userId: userId, password: password, urlBase: serverUrl)
+            var authAttemptState = AuthenticationAttemptResultState.connectionError // default
 
             // Retry a few times if we have a connection issue
             for authTimeout in AuthenticationTimeouts {
@@ -123,49 +122,49 @@ extension FileProviderExtension: NSFileProviderServicing, ChangeNotificationInte
                 )
                 try? await Task.sleep(nanoseconds: authTimeout)
             }
-            semaphore.signal()
-        }
-        semaphore.wait()
 
-        switch (authAttemptState) {
-        case .authenticationError:
-            Logger.fileProviderExtension.info(
-                "\(user, privacy: .public) authentication failed due to bad creds, stopping"
-            )
-            return
-        case .connectionError:
-            // Despite multiple connection attempts we are still getting connection issues, so quit.
-            Logger.fileProviderExtension.info(
-                "\(user, privacy: .public) authentication try failed, no connection."
-            )
-            return
-        case .success:
-            Logger.fileProviderExtension.info(
+            switch (authAttemptState) {
+            case .authenticationError:
+                Logger.fileProviderExtension.info(
+                    "\(user, privacy: .public) authentication failed due to bad creds, stopping"
+                )
+                return
+            case .connectionError:
+                // Despite multiple connection attempts we are still getting connection issues.
+                // Connection error should be provided
+                Logger.fileProviderExtension.info(
+                    "\(user, privacy: .public) authentication try failed, no connection."
+                )
+                return
+            case .success:
+                Logger.fileProviderExtension.info(
                 """
                 Authenticated! Nextcloud account set up in File Provider extension.
                 User: \(user, privacy: .public) at server: \(serverUrl, privacy: .public)
                 """
+                )
+            }
+
+            let newNcAccount =
+                Account(user: user, id: userId, serverUrl: serverUrl, password: password)
+            guard newNcAccount != ncAccount else { return }
+            ncAccount = newNcAccount
+            ncKit.setup(
+                account: newNcAccount.ncKitAccount,
+                user: newNcAccount.username,
+                userId: newNcAccount.id,
+                password: newNcAccount.password,
+                urlBase: newNcAccount.serverUrl,
+                userAgent: "Nextcloud-macOS/FileProviderExt",
+                nextcloudVersion: 25,
+                delegate: nil) // TODO: add delegate methods for self
+
+            changeObserver = RemoteChangeObserver(
+                remoteInterface: ncKit, changeNotificationInterface: self, domain: domain
             )
+            ncKit.setup(delegate: changeObserver)
+            signalEnumeratorAfterAccountSetup()
         }
-
-        let newNcAccount = Account(user: user, id: userId, serverUrl: serverUrl, password: password)
-        guard newNcAccount != ncAccount else { return }
-        ncAccount = newNcAccount
-        ncKit.setup(
-            account: newNcAccount.ncKitAccount,
-            user: newNcAccount.username,
-            userId: newNcAccount.id,
-            password: newNcAccount.password,
-            urlBase: newNcAccount.serverUrl,
-            userAgent: "Nextcloud-macOS/FileProviderExt",
-            nextcloudVersion: 25,
-            delegate: nil) // TODO: add delegate methods for self
-
-        changeObserver = RemoteChangeObserver(
-            remoteInterface: ncKit, changeNotificationInterface: self, domain: domain
-        )
-        ncKit.setup(delegate: changeObserver)
-        signalEnumeratorAfterAccountSetup()
     }
 
     @objc func removeAccountConfig() {