From 6498662f35da7b37afa2479378a189e08a49ec8d Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Sat, 20 Jun 2026 12:24:15 +0200 Subject: [PATCH 1/4] lint Signed-off-by: Marino Faggiana --- Sources/NextcloudKit/Log/NKLog.swift | 2 +- .../v1/NKTextProcessingTaskType.swift | 2 -- .../Models/Assistant/v2/TaskTypes.swift | 1 - .../DeclarativeUI/NKClientIntegration.swift | 1 - .../NKEditorDetailsConverter.swift | 2 +- .../NextcloudKit/Models/NKDataFileXML.swift | 8 +++-- Sources/NextcloudKit/Models/NKFile.swift | 2 +- Sources/NextcloudKit/NextcloudKit+API.swift | 14 ++++---- .../NextcloudKit+AssistantV2.swift | 20 +++++------ .../NextcloudKit+Capabilities.swift | 5 +-- .../NextcloudKit+ClientIntegration.swift | 16 ++++----- .../NextcloudKit/NextcloudKit+FilesLock.swift | 36 +++++++++---------- .../NextcloudKit+PushNotification.swift | 14 ++++---- .../NextcloudKit+Richdocuments.swift | 8 ++--- .../NextcloudKit/NextcloudKit+Search.swift | 2 -- Sources/NextcloudKit/NextcloudKit+Share.swift | 4 +-- .../NextcloudKit+UserStatus.swift | 1 - .../NextcloudKit/NextcloudKit+WebDAV.swift | 6 ++-- .../NextcloudKit/Utils/FileAutoRenamer.swift | 2 +- 19 files changed, 73 insertions(+), 73 deletions(-) diff --git a/Sources/NextcloudKit/Log/NKLog.swift b/Sources/NextcloudKit/Log/NKLog.swift index 97c07430..e1dfbe34 100644 --- a/Sources/NextcloudKit/Log/NKLog.swift +++ b/Sources/NextcloudKit/Log/NKLog.swift @@ -65,6 +65,6 @@ public func nkLog(cancel message: String, minimumLogLevel: NKLogLevel = .compact /// - minimumLogLevel: set the minimun level for write the message /// - consoleOnly: if true write the messa only in console @inlinable -public func nkLog(tag: String, emoji: NKLogTagEmoji = .debug, message: String, minimumLogLevel: NKLogLevel = .compact, consoleOnly: Bool = false) { +public func nkLog(tag: String, emoji: NKLogTagEmoji = .debug, message: String, minimumLogLevel: NKLogLevel = .compact, consoleOnly: Bool = false) { NKLogFileManager.shared.writeLog(tag: tag, emoji: emoji, message: message, minimumLogLevel: minimumLogLevel, consoleOnly: consoleOnly) } diff --git a/Sources/NextcloudKit/Models/Assistant/v1/NKTextProcessingTaskType.swift b/Sources/NextcloudKit/Models/Assistant/v1/NKTextProcessingTaskType.swift index 5841b4bf..2bb4eed8 100644 --- a/Sources/NextcloudKit/Models/Assistant/v1/NKTextProcessingTaskType.swift +++ b/Sources/NextcloudKit/Models/Assistant/v1/NKTextProcessingTaskType.swift @@ -34,5 +34,3 @@ public class NKTextProcessingTaskType { return TaskTypes(types: types) } } - - diff --git a/Sources/NextcloudKit/Models/Assistant/v2/TaskTypes.swift b/Sources/NextcloudKit/Models/Assistant/v2/TaskTypes.swift index 2fa7301f..6dfac06e 100644 --- a/Sources/NextcloudKit/Models/Assistant/v2/TaskTypes.swift +++ b/Sources/NextcloudKit/Models/Assistant/v2/TaskTypes.swift @@ -31,7 +31,6 @@ public struct TaskTypes: Codable { public struct TaskTypeData: Codable { public typealias TaskInputShape = [String: Shape] public typealias TaskOutputShape = [String: Shape] - public var id: String? public let name: String? public let description: String? diff --git a/Sources/NextcloudKit/Models/DeclarativeUI/NKClientIntegration.swift b/Sources/NextcloudKit/Models/DeclarativeUI/NKClientIntegration.swift index 758ed0b1..f5789095 100644 --- a/Sources/NextcloudKit/Models/DeclarativeUI/NKClientIntegration.swift +++ b/Sources/NextcloudKit/Models/DeclarativeUI/NKClientIntegration.swift @@ -62,4 +62,3 @@ public struct ContextMenuAction: Codable { case mimetypeFilters = "mimetype_filters" } } - diff --git a/Sources/NextcloudKit/Models/EditorDetails/NKEditorDetailsConverter.swift b/Sources/NextcloudKit/Models/EditorDetails/NKEditorDetailsConverter.swift index 51d2aec6..4b837ab0 100644 --- a/Sources/NextcloudKit/Models/EditorDetails/NKEditorDetailsConverter.swift +++ b/Sources/NextcloudKit/Models/EditorDetails/NKEditorDetailsConverter.swift @@ -18,7 +18,7 @@ public enum NKEditorDetailsConverter { if NKLogFileManager.shared.logLevel == .verbose { data.printJson() } - + return (editors, creators) } } diff --git a/Sources/NextcloudKit/Models/NKDataFileXML.swift b/Sources/NextcloudKit/Models/NKDataFileXML.swift index 1d334e5c..69fffdfe 100644 --- a/Sources/NextcloudKit/Models/NKDataFileXML.swift +++ b/Sources/NextcloudKit/Models/NKDataFileXML.swift @@ -277,7 +277,11 @@ public class NKDataFileXML: NSObject { return xml["ocs", "data", "apppassword"].text } - func convertDataFile(xmlData: Data, nkSession: NKSession, rootFileName: String, showHiddenFiles: Bool, includeHiddenFiles: [String]) async -> [NKFile] { + func convertDataFile(xmlData: Data, + nkSession: NKSession, + rootFileName: String, + showHiddenFiles: Bool, + includeHiddenFiles: [String]) async -> [NKFile] { var files: [NKFile] = [] let rootFiles = "/" + nkSession.dav + "/files/" guard let baseUrl = self.nkCommonInstance.getHostName(urlString: nkSession.urlBase) else { @@ -333,7 +337,7 @@ public class NKDataFileXML: NSObject { let propstat = element["d:propstat"][0] if let getlastmodified = propstat["d:prop", "d:getlastmodified"].text, - let date = getlastmodified.parsedDate(using: "EEE, dd MMM y HH:mm:ss zzz") { + let date = getlastmodified.parsedDate(using: "EEE, dd MMM y HH:mm:ss zzz") { file.date = date } diff --git a/Sources/NextcloudKit/Models/NKFile.swift b/Sources/NextcloudKit/Models/NKFile.swift index 53335296..c5bad862 100644 --- a/Sources/NextcloudKit/Models/NKFile.swift +++ b/Sources/NextcloudKit/Models/NKFile.swift @@ -145,7 +145,7 @@ public struct NKFile: Sendable { livePhotoFile: String = "", isFlaggedAsLivePhotoByServer: Bool = false, datePhotosOriginal: Date? = nil, - exifPhotos: [[String : String?]] = .init(), + exifPhotos: [[String: String?]] = .init(), placePhotos: String? = nil, typeIdentifier: String = "") { diff --git a/Sources/NextcloudKit/NextcloudKit+API.swift b/Sources/NextcloudKit/NextcloudKit+API.swift index d5cd1264..d0bc4b5e 100644 --- a/Sources/NextcloudKit/NextcloudKit+API.swift +++ b/Sources/NextcloudKit/NextcloudKit+API.swift @@ -128,10 +128,10 @@ public extension NextcloudKit { /// - taskHandler: Closure to access the URLSessionTask. /// - Returns: A tuple with named values: account, raw response, and error. func generalWithEndpointAsync(_ endpoint: String, - account: String, - method: String, - options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + account: String, + method: String, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -1134,10 +1134,12 @@ public extension NextcloudKit { let endpoint = "index.php/core/wipe/success" let parameters: [String: Any] = ["token": token] guard let url = nkCommonInstance.createStandardUrl(serverUrl: serverUrl, endpoint: endpoint) else { - return options.queue.async { completion(account, nil, .urlError) } + return options.queue.async { + completion(account, nil, .urlError) + } } var headers: HTTPHeaders = [ - "Content-Type": "application/json", + "Content-Type": "application/json" ] if let userAgent = options.customUserAgent { headers.add(.userAgent(userAgent)) diff --git a/Sources/NextcloudKit/NextcloudKit+AssistantV2.swift b/Sources/NextcloudKit/NextcloudKit+AssistantV2.swift index 07d9e3bb..2ea2c5b1 100644 --- a/Sources/NextcloudKit/NextcloudKit+AssistantV2.swift +++ b/Sources/NextcloudKit/NextcloudKit+AssistantV2.swift @@ -16,9 +16,9 @@ public extension NextcloudKit { /// - taskHandler: Optional closure to access the URLSessionTask. /// - Returns: A tuple with named values for account, supported types, response, and error. func textProcessingGetTypesV2(account: String, - supportedTaskType: String = "Text", - options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + supportedTaskType: String = "Text", + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, types: [TaskTypeData]?, @@ -80,10 +80,10 @@ public extension NextcloudKit { /// - taskHandler: Optional closure to access the underlying URLSessionTask. /// - Returns: A tuple with named values for account, scheduled task, response, and error. func textProcessingScheduleV2(input: String, - taskType: TaskTypeData, - account: String, - options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskType: TaskTypeData, + account: String, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, task: AssistantTask?, @@ -184,9 +184,9 @@ public extension NextcloudKit { /// - taskHandler: Optional closure to access the underlying URLSessionTask. /// - Returns: A tuple with named values for account, response, and error. func textProcessingDeleteTaskV2(taskId: Int64, - account: String, - options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + account: String, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+Capabilities.swift b/Sources/NextcloudKit/NextcloudKit+Capabilities.swift index a6c6ad70..02385838 100644 --- a/Sources/NextcloudKit/NextcloudKit+Capabilities.swift +++ b/Sources/NextcloudKit/NextcloudKit+Capabilities.swift @@ -77,7 +77,7 @@ public extension NextcloudKit { await withUnsafeContinuation { continuation in getCapabilities(account: account, options: options, - taskHandler: taskHandler) { account, capabilities,responseData, error in + taskHandler: taskHandler) { account, capabilities, responseData, error in continuation.resume(returning: (account, capabilities, responseData, error)) } } @@ -89,7 +89,8 @@ public extension NextcloudKit { /// - data: The raw JSON data returned from the capabilities endpoint. /// - Returns: A fully populated `NCCapabilities.Capabilities` object. /// - Throws: An error if decoding fails or data is missing. - func setCapabilitiesAsync(account: String, data: Data? = nil) async throws -> NKCapabilities.Capabilities { + func setCapabilitiesAsync(account: String, + data: Data? = nil) async throws -> NKCapabilities.Capabilities { guard let jsonData = data else { throw NSError(domain: "SetCapabilities", code: 0, userInfo: [NSLocalizedDescriptionKey: "Missing JSON data"]) } diff --git a/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift b/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift index 8001338b..abb2dac6 100644 --- a/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift +++ b/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift @@ -20,14 +20,14 @@ public extension NextcloudKit { /// - taskHandler: Callback for observing the underlying URLSessionTask. /// - completion: Returns the token string (if any), raw response data, and NKError result. internal func sendRequest(account: String, - fileId: String, - filePath: String, - url: String, - method: String, - params: [String: String]? = nil, - options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ token: String?, _ uiResponse: NKClientIntegrationUIResponse?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + fileId: String, + filePath: String, + url: String, + method: String, + params: [String: String]? = nil, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping (_ token: String?, _ uiResponse: NKClientIntegrationUIResponse?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { // guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), // let headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else { diff --git a/Sources/NextcloudKit/NextcloudKit+FilesLock.swift b/Sources/NextcloudKit/NextcloudKit+FilesLock.swift index eb3e9c90..3886a375 100644 --- a/Sources/NextcloudKit/NextcloudKit+FilesLock.swift +++ b/Sources/NextcloudKit/NextcloudKit+FilesLock.swift @@ -61,16 +61,16 @@ public extension NextcloudKit { taskHandler(task) }.responseData(queue: self.nkCommonInstance.backgroundQueue) { response in switch response.result { - case .failure(let error): - let error = NKError(error: error, afResponse: response, responseData: response.data) + case .failure(let error): + let error = NKError(error: error, afResponse: response, responseData: response.data) - options.queue.async { - completion(account, response, error) - } - case .success: - options.queue.async { - completion(account, response, .success) - } + options.queue.async { + completion(account, response, error) + } + case .success: + options.queue.async { + completion(account, response, .success) + } } } } @@ -92,15 +92,15 @@ public extension NextcloudKit { try await withCheckedThrowingContinuation { continuation in lockUnlockFile(serverUrlFileName: serverUrlFileName, type: type, shouldLock: shouldLock, account: account, options: options, taskHandler: taskHandler) { _, responseData, error in switch error { - case .success: - if let data = responseData?.data, - let lock = NKLock(data: data) { - continuation.resume(returning: lock) - return - } - continuation.resume(returning: nil) - default: - continuation.resume(throwing: error) + case .success: + if let data = responseData?.data, + let lock = NKLock(data: data) { + continuation.resume(returning: lock) + return + } + continuation.resume(returning: nil) + default: + continuation.resume(throwing: error) } } } diff --git a/Sources/NextcloudKit/NextcloudKit+PushNotification.swift b/Sources/NextcloudKit/NextcloudKit+PushNotification.swift index a9fa7616..14d0ad2e 100644 --- a/Sources/NextcloudKit/NextcloudKit+PushNotification.swift +++ b/Sources/NextcloudKit/NextcloudKit+PushNotification.swift @@ -234,13 +234,13 @@ public extension NextcloudKit { /// - taskHandler: Callback for monitoring the URLSessionTask. /// - Returns: A tuple containing the account, response data, and NKError. func subscribingPushProxyAsync(proxyServerUrl: String, - pushToken: String, - deviceIdentifier: String, - signature: String, - publicKey: String, - account: String, - options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + pushToken: String, + deviceIdentifier: String, + signature: String, + publicKey: String, + account: String, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+Richdocuments.swift b/Sources/NextcloudKit/NextcloudKit+Richdocuments.swift index 32d3b5bb..a23faf1f 100644 --- a/Sources/NextcloudKit/NextcloudKit+Richdocuments.swift +++ b/Sources/NextcloudKit/NextcloudKit+Richdocuments.swift @@ -220,10 +220,10 @@ public extension NextcloudKit { /// - taskHandler: Optional monitoring of the underlying task. /// - Returns: A tuple with account, resulting URL (if successful), raw response, and error result. func createRichdocumentsAsync(path: String, - templateId: String, - account: String, - options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + templateId: String, + account: String, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, url: String?, diff --git a/Sources/NextcloudKit/NextcloudKit+Search.swift b/Sources/NextcloudKit/NextcloudKit+Search.swift index 04da6581..1bf2e127 100644 --- a/Sources/NextcloudKit/NextcloudKit+Search.swift +++ b/Sources/NextcloudKit/NextcloudKit+Search.swift @@ -8,7 +8,6 @@ import SwiftyJSON public extension NextcloudKit { - /// Performs a unified search using multiple providers and returns results asynchronously. /// /// - Parameters: @@ -229,4 +228,3 @@ public class NKSearchProvider: NSObject { return allProvider.compactMap(NKSearchProvider.init) } } - diff --git a/Sources/NextcloudKit/NextcloudKit+Share.swift b/Sources/NextcloudKit/NextcloudKit+Share.swift index c438d7c1..c229f612 100644 --- a/Sources/NextcloudKit/NextcloudKit+Share.swift +++ b/Sources/NextcloudKit/NextcloudKit+Share.swift @@ -470,13 +470,13 @@ public extension NextcloudKit { ] parameters["password"] = password != nil ? password : "" - + parameters["expireDate"] = expireDate != nil ? expireDate : "" if let note { parameters["note"] = note } - + if let label { parameters["label"] = label } diff --git a/Sources/NextcloudKit/NextcloudKit+UserStatus.swift b/Sources/NextcloudKit/NextcloudKit+UserStatus.swift index be97a397..517a6078 100644 --- a/Sources/NextcloudKit/NextcloudKit+UserStatus.swift +++ b/Sources/NextcloudKit/NextcloudKit+UserStatus.swift @@ -117,7 +117,6 @@ public extension NextcloudKit { } } - /// Sets the current user status on the Nextcloud server. /// /// Parameters: diff --git a/Sources/NextcloudKit/NextcloudKit+WebDAV.swift b/Sources/NextcloudKit/NextcloudKit+WebDAV.swift index e3703725..e4a8e9d1 100644 --- a/Sources/NextcloudKit/NextcloudKit+WebDAV.swift +++ b/Sources/NextcloudKit/NextcloudKit+WebDAV.swift @@ -61,9 +61,9 @@ public extension NextcloudKit { /// - Parameters: Same as the sync version. /// - Returns: A tuple with account, optional ocId, optional date, responseData, and NKError. func createFolderAsync(serverUrlFileName: String, - account: String, - options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + account: String, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, ocId: String?, diff --git a/Sources/NextcloudKit/Utils/FileAutoRenamer.swift b/Sources/NextcloudKit/Utils/FileAutoRenamer.swift index 49b6dd49..93377a2a 100644 --- a/Sources/NextcloudKit/Utils/FileAutoRenamer.swift +++ b/Sources/NextcloudKit/Utils/FileAutoRenamer.swift @@ -21,7 +21,7 @@ public final class FileAutoRenamer: Sendable { if !capabilities.shouldEnforceWindowsCompatibleFilenames { return filename } - + var pathSegments = filename.split(separator: "/", omittingEmptySubsequences: false).map { String($0) } var mutableForbiddenFileNameCharacters = self.forbiddenFileNameCharacters From de4e9122f7e8b5ccb4684cc03c0e68abcbb706bc Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Sat, 20 Jun 2026 12:26:49 +0200 Subject: [PATCH 2/4] lint Signed-off-by: Marino Faggiana --- Sources/NextcloudKit/NKCommon.swift | 4 ++-- Sources/NextcloudKit/NKOperationHandle.swift | 1 - Sources/NextcloudKit/NextcloudKit+Capabilities.swift | 2 +- Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift | 3 +-- 4 files changed, 4 insertions(+), 6 deletions(-) diff --git a/Sources/NextcloudKit/NKCommon.swift b/Sources/NextcloudKit/NKCommon.swift index 4a49e1cc..7c9650b7 100644 --- a/Sources/NextcloudKit/NKCommon.swift +++ b/Sources/NextcloudKit/NKCommon.swift @@ -26,8 +26,8 @@ public protocol NextcloudKitDelegate: AnyObject, Sendable { func downloadingFinish(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) - func downloadComplete(fileName: String, serverUrl: String, allHeaderFields: [AnyHashable : Any]?, task: URLSessionTask, error: NKError) - func uploadComplete(fileName: String, serverUrl: String, allHeaderFields: [AnyHashable : Any]?, task: URLSessionTask, error: NKError) + func downloadComplete(fileName: String, serverUrl: String, allHeaderFields: [AnyHashable: Any]?, task: URLSessionTask, error: NKError) + func uploadComplete(fileName: String, serverUrl: String, allHeaderFields: [AnyHashable: Any]?, task: URLSessionTask, error: NKError) } public extension NextcloudKitDelegate { diff --git a/Sources/NextcloudKit/NKOperationHandle.swift b/Sources/NextcloudKit/NKOperationHandle.swift index 2285950b..e725a2ee 100644 --- a/Sources/NextcloudKit/NKOperationHandle.swift +++ b/Sources/NextcloudKit/NKOperationHandle.swift @@ -111,4 +111,3 @@ public actor NKOperationHandle { return request != nil || task != nil } } - diff --git a/Sources/NextcloudKit/NextcloudKit+Capabilities.swift b/Sources/NextcloudKit/NextcloudKit+Capabilities.swift index 02385838..aba0e732 100644 --- a/Sources/NextcloudKit/NextcloudKit+Capabilities.swift +++ b/Sources/NextcloudKit/NextcloudKit+Capabilities.swift @@ -563,7 +563,7 @@ final public class NKCapabilities: Sendable { public var termsOfService: Bool = false // public var declarativeUIEnabled: Bool = false // public var declarativeUIContextMenu: [ContextMenuItem] = [] - public var clientIntegration: NKClientIntegration? = nil + public var clientIntegration: NKClientIntegration? public var directEditingEditors: [NKEditorDetailsEditor] = [] public var directEditingCreators: [NKEditorDetailsCreator] = [] public var directEditingTemplates: [NKEditorTemplate] = [] diff --git a/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift b/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift index abb2dac6..f8815de1 100644 --- a/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift +++ b/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift @@ -118,7 +118,7 @@ public extension NextcloudKit { let httpMethod = HTTPMethod(rawValue: method.uppercased()) - var queryParams: [String: Any]? = nil + var queryParams: [String: Any]? if let params = params { var qp: [String: Any] = [:] for (key, value) in params { @@ -173,4 +173,3 @@ public extension NextcloudKit { } } } - From 8094b114f2fcc4c54f8de709c9360706abf536ba Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Sat, 20 Jun 2026 14:44:08 +0200 Subject: [PATCH 3/4] sendable Signed-off-by: Marino Faggiana --- Package.swift | 2 +- Sources/NextcloudKit/NKCommon.swift | 8 +- Sources/NextcloudKit/NKInterceptor.swift | 2 +- Sources/NextcloudKit/NextcloudKit+API.swift | 108 +++++++++--------- .../NextcloudKit/NextcloudKit+Assistant.swift | 30 ++--- .../NextcloudKit+AssistantV2.swift | 22 ++-- .../NextcloudKit+Capabilities.swift | 15 +-- .../NextcloudKit+ClientIntegration.swift | 2 +- .../NextcloudKit/NextcloudKit+Comments.swift | 30 ++--- .../NextcloudKit/NextcloudKit+Dashboard.swift | 18 +-- .../NextcloudKit/NextcloudKit+Download.swift | 14 +-- Sources/NextcloudKit/NextcloudKit+E2EE.swift | 66 +++++------ .../NextcloudKit/NextcloudKit+FilesLock.swift | 11 +- .../NextcloudKit+Groupfolders.swift | 6 +- .../NextcloudKit/NextcloudKit+Hovercard.swift | 6 +- .../NextcloudKit/NextcloudKit+Livephoto.swift | 6 +- Sources/NextcloudKit/NextcloudKit+Login.swift | 34 +++--- .../NextcloudKit/NextcloudKit+NCText.swift | 24 ++-- .../NextcloudKit+PushNotification.swift | 24 ++-- .../NextcloudKit+RecommendedFiles.swift | 10 +- .../NextcloudKit+Richdocuments.swift | 24 ++-- Sources/NextcloudKit/NextcloudKit+Share.swift | 22 ++-- .../NextcloudKit+ShareDownloadLimit.swift | 13 ++- Sources/NextcloudKit/NextcloudKit+Tags.swift | 10 +- .../NextcloudKit+TermsOfService.swift | 10 +- .../NextcloudKit/NextcloudKit+Upload.swift | 26 ++--- .../NextcloudKit+UserStatus.swift | 40 +++---- .../NextcloudKit/NextcloudKit+WebDAV.swift | 70 ++++++------ .../NextcloudKit/NextcloudKitBackground.swift | 2 +- .../NextcloudKitSessionDelegate.swift | 2 +- .../Modifiers/CodeScannerSheet.swift | 4 +- .../Modifiers/SharedAccountsSheet.swift | 4 +- .../Modifiers/WebViewSheet.swift | 4 +- .../Login/AlternativeLoginMethodsView.swift | 4 +- .../Views/Login/LoginFlowModel.swift | 2 +- .../Views/Login/ServerAddressView.swift | 2 +- .../Views/Login/SharedAccountsView.swift | 2 +- 37 files changed, 347 insertions(+), 332 deletions(-) diff --git a/Package.swift b/Package.swift index 33e1f451..6c35bcea 100644 --- a/Package.swift +++ b/Package.swift @@ -30,7 +30,7 @@ let package = Package( .package(url: "https://github.com/SwiftyJSON/SwiftyJSON", .upToNextMajor(from: "5.0.2")), .package(url: "https://github.com/yahoojapan/SwiftyXMLParser", .upToNextMajor(from: "5.6.0")), .package(url: "https://github.com/twostraws/CodeScanner.git", .upToNextMajor(from: "2.5.2")), - .package(url: "https://github.com/SimplyDanny/SwiftLintPlugins", from: "0.63.2"), + .package(url: "https://github.com/SimplyDanny/SwiftLintPlugins", from: "0.63.3"), ], targets: [ .target( diff --git a/Sources/NextcloudKit/NKCommon.swift b/Sources/NextcloudKit/NKCommon.swift index 7c9650b7..6db05261 100644 --- a/Sources/NextcloudKit/NKCommon.swift +++ b/Sources/NextcloudKit/NKCommon.swift @@ -31,7 +31,7 @@ public protocol NextcloudKitDelegate: AnyObject, Sendable { } public extension NextcloudKitDelegate { - func authenticationChallenge(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { } + func authenticationChallenge(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping @Sendable (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { } func urlSessionDidFinishEvents(forBackgroundURLSession session: URLSession) { } func networkReachabilityObserver(_ typeReachability: NKTypeReachability) { } @@ -43,8 +43,8 @@ public extension NextcloudKitDelegate { func downloadingFinish(_ session: URLSession, downloadTask: URLSessionDownloadTask, didFinishDownloadingTo location: URL) { } - func downloadComplete(fileName: String, serverUrl: String, allHeaderFields: [AnyHashable : Any]?, task: URLSessionTask, error: NKError) { } - func uploadComplete(fileName: String, serverUrl: String, allHeaderFields: [AnyHashable : Any]?, task: URLSessionTask, error: NKError) { } + func downloadComplete(fileName: String, serverUrl: String, allHeaderFields: [AnyHashable: Any]?, task: URLSessionTask, error: NKError) { } + func uploadComplete(fileName: String, serverUrl: String, allHeaderFields: [AnyHashable: Any]?, task: URLSessionTask, error: NKError) { } } public struct NKCommon: Sendable { @@ -98,7 +98,7 @@ public struct NKCommon: Sendable { fileName: String, chunkSize: Int, filesChunk: [(fileName: String, size: Int64)], - chunkProgressHandler: @escaping (_ total: Int, _ counter: Int) -> Void = { _, _ in }) async throws -> [(fileName: String, size: Int64)] { + chunkProgressHandler: @escaping @Sendable (_ total: Int, _ counter: Int) -> Void = { _, _ in }) async throws -> [(fileName: String, size: Int64)] { // If caller already has chunk list, recompute incremental sizes from disk and return. if !filesChunk.isEmpty { var recomputed: [(fileName: String, size: Int64)] = [] diff --git a/Sources/NextcloudKit/NKInterceptor.swift b/Sources/NextcloudKit/NKInterceptor.swift index 5deedca8..c92cf3d5 100644 --- a/Sources/NextcloudKit/NKInterceptor.swift +++ b/Sources/NextcloudKit/NKInterceptor.swift @@ -12,7 +12,7 @@ final class NKInterceptor: RequestInterceptor, Sendable { self.nkCommonInstance = nkCommonInstance } - func adapt(_ urlRequest: URLRequest, for session: AssistantSession, completion: @escaping (Result) -> Void) { + func adapt(_ urlRequest: URLRequest, for session: AssistantSession, completion: @escaping @Sendable (Result) -> Void) { // Log request URL in verbose mode if NKLogFileManager.shared.logLevel == .verbose, let url = urlRequest.url?.absoluteString { diff --git a/Sources/NextcloudKit/NextcloudKit+API.swift b/Sources/NextcloudKit/NextcloudKit+API.swift index d0bc4b5e..80a7f398 100644 --- a/Sources/NextcloudKit/NextcloudKit+API.swift +++ b/Sources/NextcloudKit/NextcloudKit+API.swift @@ -41,8 +41,8 @@ public extension NextcloudKit { /// - completion: Completion handler with the raw HTTP response and any NKError. func checkServer(serverUrl: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let url = serverUrl.asUrl else { return options.queue.async { completion(nil, .urlError) } } @@ -66,7 +66,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the raw response and NKError, with named values. func checkServerAsync(serverUrl: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( responseData: AFDataResponse?, error: NKError @@ -99,8 +99,8 @@ public extension NextcloudKit { account: String, method: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else { @@ -131,7 +131,7 @@ public extension NextcloudKit { account: String, method: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -164,8 +164,8 @@ public extension NextcloudKit { /// - completion: Completion handler returning the account, list of external sites, response, and any NKError. func getExternalSite(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ externalSite: [NKExternalSite], _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ externalSite: [NKExternalSite], _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var externalSites: [NKExternalSite] = [] let endpoint = "ocs/v2.php/apps/external/api/v1" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), @@ -208,7 +208,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing account, external sites array, raw response, and error. func getExternalSiteAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, externalSite: [NKExternalSite], @@ -260,8 +260,8 @@ public extension NextcloudKit { /// - completion: Returns the raw response and a `ServerInfoResult` containing server status information or an error. func getServerStatus(serverUrl: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ responseData: AFDataResponse?, ServerInfoResult) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ responseData: AFDataResponse?, ServerInfoResult) -> Void) { let endpoint = "status.php" guard let url = nkCommonInstance.createStandardUrl(serverUrl: serverUrl, endpoint: endpoint) else { return options.queue.async { completion(nil, ServerInfoResult.failure(.urlError)) } @@ -319,7 +319,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the AFDataResponse and the ServerInfoResult. func getServerStatusAsync(serverUrl: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable(_ task: URLSessionTask) -> Void = { _ in } ) async -> ( responseData: AFDataResponse?, result: ServerInfoResult @@ -351,8 +351,8 @@ public extension NextcloudKit { account: String, etag: String? = nil, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), var headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else { return options.queue.async { completion(account, nil, .urlError) } @@ -388,7 +388,7 @@ public extension NextcloudKit { account: String, etag: String? = nil, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -435,8 +435,8 @@ public extension NextcloudKit { mimeFallback: Int = 0, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ width: Int, _ height: Int, _ etag: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ width: Int, _ height: Int, _ etag: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { // // Adding the etag as a parameter in the endpoint URL is used to prevent URLCache from being used in case the image has been overwritten. // @@ -492,7 +492,7 @@ public extension NextcloudKit { mimeFallback: Int = 0, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, width: Int, @@ -549,8 +549,8 @@ public extension NextcloudKit { mimeFallback: Int = 0, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ width: Int, _ height: Int, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ width: Int, _ height: Int, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "index.php/apps/files_trashbin/preview?fileId=\(fileId)&x=\(width)&y=\(height)&a=\(crop)&mode=\(cropMode)&forceIcon=\(forceIcon)&mimeFallback=\(mimeFallback)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), @@ -595,7 +595,7 @@ public extension NextcloudKit { mimeFallback: Int = 0, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, width: Int, @@ -644,8 +644,8 @@ public extension NextcloudKit { etagResource: String?, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ imageAvatar: UIImage?, _ imageOriginal: UIImage?, _ etag: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ imageAvatar: UIImage?, _ imageOriginal: UIImage?, _ etag: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "index.php/avatar/\(user)/\(sizeImage)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -756,7 +756,7 @@ public extension NextcloudKit { etagResource: String?, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, imageAvatar: UIImage?, @@ -797,8 +797,8 @@ public extension NextcloudKit { func downloadContent(serverUrl: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let url = serverUrl.asUrl, let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else { @@ -829,7 +829,7 @@ public extension NextcloudKit { func downloadContentAsync(serverUrl: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -862,8 +862,8 @@ public extension NextcloudKit { func getUserMetadata(account: String, userId: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ userProfile: NKUserProfile?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ userProfile: NKUserProfile?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/cloud/users/\(userId)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), @@ -902,7 +902,7 @@ public extension NextcloudKit { func getUserMetadataAsync(account: String, userId: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, userProfile: NKUserProfile?, @@ -933,8 +933,8 @@ public extension NextcloudKit { /// - completion: Returns the account, parsed user profile (`NKUserProfile`), response metadata, and any `NKError` encountered. func getUserProfile(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ userProfile: NKUserProfile?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ userProfile: NKUserProfile?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/cloud/user" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -970,7 +970,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the account, user profile object, full response data, and any NKError. func getUserProfileAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, userProfile: NKUserProfile?, @@ -1050,8 +1050,8 @@ public extension NextcloudKit { token: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ wipe: Bool, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ wipe: Bool, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "index.php/core/wipe/check" let parameters: [String: Any] = ["token": token] @@ -1059,7 +1059,7 @@ public extension NextcloudKit { return options.queue.async { completion(account, false, nil, .urlError) } } var headers: HTTPHeaders = [ - "Content-Type": "application/json", + "Content-Type": "application/json" ] if let userAgent = options.customUserAgent { headers.add(.userAgent(userAgent)) @@ -1093,7 +1093,7 @@ public extension NextcloudKit { token: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, wipe: Bool, @@ -1129,8 +1129,8 @@ public extension NextcloudKit { token: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "index.php/core/wipe/success" let parameters: [String: Any] = ["token": token] guard let url = nkCommonInstance.createStandardUrl(serverUrl: serverUrl, endpoint: endpoint) else { @@ -1171,7 +1171,7 @@ public extension NextcloudKit { token: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -1213,8 +1213,8 @@ public extension NextcloudKit { previews: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ activities: [NKActivity], _ activityFirstKnown: Int, _ activityLastGiven: Int, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ activities: [NKActivity], _ activityFirstKnown: Int, _ activityLastGiven: Int, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var activities: [NKActivity] = [] var activityFirstKnown = 0 var activityLastGiven = 0 @@ -1321,7 +1321,7 @@ public extension NextcloudKit { previews: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, activities: [NKActivity], @@ -1362,8 +1362,8 @@ public extension NextcloudKit { /// - completion: Returns the account, list of NKNotifications, raw response data, and NKError. func getNotifications(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ notifications: [NKNotifications]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ notifications: [NKNotifications]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/notifications/api/v2/notifications" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -1472,8 +1472,8 @@ public extension NextcloudKit { method: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else { return options.queue.async { completion(account, nil, .urlError) } @@ -1519,7 +1519,7 @@ public extension NextcloudKit { method: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -1554,8 +1554,8 @@ public extension NextcloudKit { func getDirectDownload(fileId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/dav/api/v1/direct" let parameters: [String: Any] = [ "fileId": fileId, @@ -1595,7 +1595,7 @@ public extension NextcloudKit { func getDirectDownloadAsync(fileId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, url: String?, @@ -1630,8 +1630,8 @@ public extension NextcloudKit { func sendClientDiagnosticsRemoteOperation(data: Data, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/security_guard/diagnostics" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), @@ -1672,7 +1672,7 @@ public extension NextcloudKit { func sendClientDiagnosticsRemoteOperationAsync(data: Data, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+Assistant.swift b/Sources/NextcloudKit/NextcloudKit+Assistant.swift index ac39694a..5134e0f1 100644 --- a/Sources/NextcloudKit/NextcloudKit+Assistant.swift +++ b/Sources/NextcloudKit/NextcloudKit+Assistant.swift @@ -17,8 +17,8 @@ public extension NextcloudKit { /// - completion: Completion handler providing the account, available task types, response, and NKError. func textProcessingGetTypes(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ types: [NKTextProcessingTaskType]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ types: [NKTextProcessingTaskType]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/textprocessing/tasktypes" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -56,7 +56,7 @@ public extension NextcloudKit { /// - Returns: A tuple with named values for account, list of task types, response, and error. func textProcessingGetTypesAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, types: [NKTextProcessingTaskType]?, @@ -95,8 +95,8 @@ public extension NextcloudKit { identifier: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ task: NKTextProcessingTask?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ task: NKTextProcessingTask?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "/ocs/v2.php/textprocessing/schedule" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -143,7 +143,7 @@ public extension NextcloudKit { identifier: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, task: NKTextProcessingTask?, @@ -180,8 +180,8 @@ public extension NextcloudKit { func textProcessingGetTask(taskId: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ task: NKTextProcessingTask?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ task: NKTextProcessingTask?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "/ocs/v2.php/textprocessing/task/\(taskId)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -221,7 +221,7 @@ public extension NextcloudKit { func textProcessingGetTaskAsync(taskId: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, task: NKTextProcessingTask?, @@ -255,8 +255,8 @@ public extension NextcloudKit { func textProcessingDeleteTask(taskId: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ task: NKTextProcessingTask?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ task: NKTextProcessingTask?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "/ocs/v2.php/textprocessing/task/\(taskId)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -296,7 +296,7 @@ public extension NextcloudKit { func textProcessingDeleteTaskAsync(taskId: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, task: NKTextProcessingTask?, @@ -330,8 +330,8 @@ public extension NextcloudKit { func textProcessingTaskList(appId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ task: [NKTextProcessingTask]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ task: [NKTextProcessingTask]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "/ocs/v2.php/textprocessing/tasks/app/\(appId)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -371,7 +371,7 @@ public extension NextcloudKit { func textProcessingTaskListAsync(appId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, task: [NKTextProcessingTask]?, diff --git a/Sources/NextcloudKit/NextcloudKit+AssistantV2.swift b/Sources/NextcloudKit/NextcloudKit+AssistantV2.swift index 2ea2c5b1..54733879 100644 --- a/Sources/NextcloudKit/NextcloudKit+AssistantV2.swift +++ b/Sources/NextcloudKit/NextcloudKit+AssistantV2.swift @@ -18,7 +18,7 @@ public extension NextcloudKit { func textProcessingGetTypesV2(account: String, supportedTaskType: String = "Text", options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, types: [TaskTypeData]?, @@ -83,7 +83,7 @@ public extension NextcloudKit { taskType: TaskTypeData, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, task: AssistantTask?, @@ -136,7 +136,7 @@ public extension NextcloudKit { func textProcessingGetTasksV2(taskType: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, tasks: TaskList?, @@ -186,7 +186,7 @@ public extension NextcloudKit { func textProcessingDeleteTaskV2(taskId: Int64, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -230,7 +230,7 @@ public extension NextcloudKit { /// - Returns: A tuple with named values for account, sessions, response, and error. func getAssistantChatConversations(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, sessions: [AssistantConversation]?, @@ -279,7 +279,7 @@ public extension NextcloudKit { func getAssistantChatMessages(sessionId: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, chatMessages: [AssistantChatMessage]?, @@ -328,7 +328,7 @@ public extension NextcloudKit { func createAssistantChatMessage(messageRequest: AssistantChatMessageRequest, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, chatMessage: AssistantChatMessage?, @@ -379,7 +379,7 @@ public extension NextcloudKit { timestamp: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, conversation: AssistantCreatedConversation?, @@ -435,7 +435,7 @@ public extension NextcloudKit { sessionId: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, chatMessage: AssistantChatMessage?, @@ -486,7 +486,7 @@ public extension NextcloudKit { func generateAssistantChatSession(sessionId: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, sessionTask: AssistantSessionTask?, @@ -537,7 +537,7 @@ public extension NextcloudKit { func checkAssistantChatSession(sessionId: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, session: AssistantSession?, diff --git a/Sources/NextcloudKit/NextcloudKit+Capabilities.swift b/Sources/NextcloudKit/NextcloudKit+Capabilities.swift index aba0e732..7070407c 100644 --- a/Sources/NextcloudKit/NextcloudKit+Capabilities.swift +++ b/Sources/NextcloudKit/NextcloudKit+Capabilities.swift @@ -27,8 +27,8 @@ public extension NextcloudKit { /// func getCapabilities(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ capabilities: NKCapabilities.Capabilities?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ capabilities: NKCapabilities.Capabilities?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v1.php/cloud/capabilities" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -70,10 +70,11 @@ public extension NextcloudKit { /// - Returns: A tuple containing account, parsed capabilities, response data, and result error. func getCapabilitiesAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }) async -> (account: String, - capabilities: NKCapabilities.Capabilities?, - responseData: AFDataResponse?, - error: NKError) { + taskHandler: @escaping @Sendable(_ task: URLSessionTask) -> Void = { _ in } + ) async -> (account: String, + capabilities: NKCapabilities.Capabilities?, + responseData: AFDataResponse?, + error: NKError) { await withUnsafeContinuation { continuation in getCapabilities(account: account, options: options, @@ -537,7 +538,7 @@ final public class NKCapabilities: Sendable { /// /// Whether different lock types as defined in ``NKLockType`` are supported or not. /// - public var filesLockTypes: Bool = false + public var filesLockTypes: Bool = false /// /// The version of the locking API. diff --git a/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift b/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift index f8815de1..bbdc34a7 100644 --- a/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift +++ b/Sources/NextcloudKit/NextcloudKit+ClientIntegration.swift @@ -105,7 +105,7 @@ public extension NextcloudKit { method: String, params: [String: String]? = nil, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, uiResponse: NKClientIntegrationUIResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+Comments.swift b/Sources/NextcloudKit/NextcloudKit+Comments.swift index e613a392..839ea41f 100644 --- a/Sources/NextcloudKit/NextcloudKit+Comments.swift +++ b/Sources/NextcloudKit/NextcloudKit+Comments.swift @@ -18,8 +18,8 @@ public extension NextcloudKit { func getComments(fileId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ items: [NKComments]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ items: [NKComments]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, accept: "application/xml") else { return options.queue.async { completion(account, nil, nil, .urlError) } @@ -67,7 +67,7 @@ public extension NextcloudKit { func getCommentsAsync(fileId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, items: [NKComments]?, @@ -103,8 +103,8 @@ public extension NextcloudKit { message: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/json") else { return options.queue.async { completion(account, nil, .urlError) } @@ -147,7 +147,7 @@ public extension NextcloudKit { message: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -184,8 +184,8 @@ public extension NextcloudKit { message: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml") else { return options.queue.async { completion(account, nil, .urlError) } @@ -231,7 +231,7 @@ public extension NextcloudKit { message: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -267,8 +267,8 @@ public extension NextcloudKit { messageId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else { return options.queue.async { completion(account, nil, .urlError) } @@ -302,7 +302,7 @@ public extension NextcloudKit { messageId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -335,8 +335,8 @@ public extension NextcloudKit { func markAsReadComments(fileId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml") else { return options.queue.async { completion(account, nil, .urlError) } @@ -378,7 +378,7 @@ public extension NextcloudKit { func markAsReadCommentsAsync(fileId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+Dashboard.swift b/Sources/NextcloudKit/NextcloudKit+Dashboard.swift index 03c20df7..dd251d20 100644 --- a/Sources/NextcloudKit/NextcloudKit+Dashboard.swift +++ b/Sources/NextcloudKit/NextcloudKit+Dashboard.swift @@ -19,8 +19,8 @@ public extension NextcloudKit { func getDashboardWidget(account: String, options: NKRequestOptions = NKRequestOptions(), request: @escaping (DataRequest?) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ dashboardWidgets: [NCCDashboardWidget]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ dashboardWidgets: [NCCDashboardWidget]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/dashboard/api/v1/widgets" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -60,8 +60,8 @@ public extension NextcloudKit { /// - Returns: A tuple with the account, list of widgets, raw response, and NKError. func getDashboardWidgetAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - request: @escaping (DataRequest?) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + request: @escaping @Sendable (DataRequest?) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, dashboardWidgets: [NCCDashboardWidget]?, @@ -96,9 +96,9 @@ public extension NextcloudKit { func getDashboardWidgetsApplication(_ items: String, account: String, options: NKRequestOptions = NKRequestOptions(), - request: @escaping (DataRequest?) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ dashboardApplications: [NCCDashboardApplication]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + request: @escaping @Sendable (DataRequest?) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ dashboardApplications: [NCCDashboardApplication]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/dashboard/api/v1/widget-items?widgets[]=\(items)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -140,8 +140,8 @@ public extension NextcloudKit { func getDashboardWidgetsApplicationAsync(_ items: String, account: String, options: NKRequestOptions = NKRequestOptions(), - request: @escaping (DataRequest?) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + request: @escaping @Sendable (DataRequest?) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, dashboardApplications: [NCCDashboardApplication]?, diff --git a/Sources/NextcloudKit/NextcloudKit+Download.swift b/Sources/NextcloudKit/NextcloudKit+Download.swift index 03c010e0..be06c02d 100644 --- a/Sources/NextcloudKit/NextcloudKit+Download.swift +++ b/Sources/NextcloudKit/NextcloudKit+Download.swift @@ -23,10 +23,10 @@ public extension NextcloudKit { fileNameLocalPath: String, account: String, options: NKRequestOptions = NKRequestOptions(), - requestHandler: @escaping (_ request: DownloadRequest) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - progressHandler: @escaping (_ progress: Progress) -> Void = { _ in }, - completionHandler: @escaping (_ account: String, _ response: AFDownloadResponse?, _ nKError: NKError) -> Void) { + requestHandler: @escaping @Sendable (_ request: DownloadRequest) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + progressHandler: @escaping @Sendable (_ progress: Progress) -> Void = { _ in }, + completionHandler: @escaping @Sendable (_ account: String, _ response: AFDownloadResponse?, _ nKError: NKError) -> Void) { var convertible: URLConvertible? if serverUrlFileName is URL { convertible = serverUrlFileName as? URLConvertible @@ -83,9 +83,9 @@ public extension NextcloudKit { fileNameLocalPath: String, account: String, options: NKRequestOptions = NKRequestOptions(), - requestHandler: @escaping (_ request: DownloadRequest) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - progressHandler: @escaping (_ progress: Progress) -> Void = { _ in } + requestHandler: @escaping @Sendable (_ request: DownloadRequest) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + progressHandler: @escaping @Sendable (_ progress: Progress) -> Void = { _ in } ) async -> ( account: String, response: AFDownloadResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+E2EE.swift b/Sources/NextcloudKit/NextcloudKit+E2EE.swift index 26388a72..cac76eff 100644 --- a/Sources/NextcloudKit/NextcloudKit+E2EE.swift +++ b/Sources/NextcloudKit/NextcloudKit+E2EE.swift @@ -21,8 +21,8 @@ public extension NextcloudKit { delete: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -67,7 +67,7 @@ public extension NextcloudKit { delete: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -107,8 +107,8 @@ public extension NextcloudKit { method: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ e2eToken: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ e2eToken: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -167,7 +167,7 @@ public extension NextcloudKit { method: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, e2eToken: String?, @@ -208,8 +208,8 @@ public extension NextcloudKit { e2eToken: String?, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ e2eMetadata: String?, _ signature: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ e2eMetadata: String?, _ signature: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -261,7 +261,7 @@ public extension NextcloudKit { e2eToken: String?, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, e2eMetadata: String?, @@ -307,8 +307,8 @@ public extension NextcloudKit { method: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ metadata: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ metadata: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -369,7 +369,7 @@ public extension NextcloudKit { method: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, metadata: String?, @@ -410,8 +410,8 @@ public extension NextcloudKit { func getE2EECertificate(user: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ certificate: String?, _ certificateUser: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ certificate: String?, _ certificateUser: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { @@ -470,7 +470,7 @@ public extension NextcloudKit { func getE2EECertificateAsync(user: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, certificate: String?, @@ -505,8 +505,8 @@ public extension NextcloudKit { /// - completion: Completion handler returning the account, private key string, raw response, and NKError. func getE2EEPrivateKey(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ privateKey: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ privateKey: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -547,7 +547,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the account, the private key string (if available), the response, and the error. func getE2EEPrivateKeyAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, privateKey: String?, @@ -579,8 +579,8 @@ public extension NextcloudKit { /// - completion: Completion handler returning the account, public key string, raw response, and NKError. func getE2EEPublicKey(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ publicKey: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ publicKey: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -621,7 +621,7 @@ public extension NextcloudKit { /// - Returns: A tuple with account, publicKey string, AFDataResponse, and NKError. func getE2EEPublicKeyAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, publicKey: String?, @@ -655,8 +655,8 @@ public extension NextcloudKit { func signE2EECertificate(certificate: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ certificate: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ certificate: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -701,7 +701,7 @@ public extension NextcloudKit { func signE2EECertificateAsync(certificate: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, certificate: String?, @@ -736,8 +736,8 @@ public extension NextcloudKit { func storeE2EEPrivateKey(privateKey: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ privateKey: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ privateKey: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -781,7 +781,7 @@ public extension NextcloudKit { func storeE2EEPrivateKeyAsync(privateKey: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, privateKey: String?, @@ -814,8 +814,8 @@ public extension NextcloudKit { /// - completion: Completion handler returning the account, raw response, and NKError. func deleteE2EECertificate(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -848,7 +848,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the account, response data, and error. func deleteE2EECertificateAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -878,8 +878,8 @@ public extension NextcloudKit { /// - completion: Completion handler returning the account, raw response, and NKError. func deleteE2EEPrivateKey(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var version = "v1" if let optionsVesion = options.version { version = optionsVesion @@ -913,7 +913,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the account, response data, and error. func deleteE2EEPrivateKeyAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+FilesLock.swift b/Sources/NextcloudKit/NextcloudKit+FilesLock.swift index 3886a375..ba80d3ba 100644 --- a/Sources/NextcloudKit/NextcloudKit+FilesLock.swift +++ b/Sources/NextcloudKit/NextcloudKit+FilesLock.swift @@ -27,8 +27,8 @@ public extension NextcloudKit { shouldLock: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { Task { guard let url = serverUrlFileName.encodedToUrl else { return options.queue.async { @@ -88,7 +88,12 @@ public extension NextcloudKit { /// /// - Returns: A tuple containing the account, the server response, and any error encountered. /// - func lockUnlockFile(serverUrlFileName: String, type: NKLockType? = nil, shouldLock: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }) async throws -> NKLock? { + func lockUnlockFile(serverUrlFileName: String, + type: NKLockType? = nil, + shouldLock: Bool, + account: String, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }) async throws -> NKLock? { try await withCheckedThrowingContinuation { continuation in lockUnlockFile(serverUrlFileName: serverUrlFileName, type: type, shouldLock: shouldLock, account: account, options: options, taskHandler: taskHandler) { _, responseData, error in switch error { diff --git a/Sources/NextcloudKit/NextcloudKit+Groupfolders.swift b/Sources/NextcloudKit/NextcloudKit+Groupfolders.swift index 3e1b8c49..e8e85884 100644 --- a/Sources/NextcloudKit/NextcloudKit+Groupfolders.swift +++ b/Sources/NextcloudKit/NextcloudKit+Groupfolders.swift @@ -19,8 +19,8 @@ public extension NextcloudKit { /// - completion: Completion handler returning the account, list of group folders, response, and any NKError. func getGroupfolders(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ results: [NKGroupfolders]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ results: [NKGroupfolders]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "index.php/apps/groupfolders/folders?applicable=1" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -64,7 +64,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the account, an optional array of `NKGroupfolders`, the response data, and an `NKError`. func getGroupfoldersAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, results: [NKGroupfolders]?, diff --git a/Sources/NextcloudKit/NextcloudKit+Hovercard.swift b/Sources/NextcloudKit/NextcloudKit+Hovercard.swift index 77cabaf7..406c054a 100644 --- a/Sources/NextcloudKit/NextcloudKit+Hovercard.swift +++ b/Sources/NextcloudKit/NextcloudKit+Hovercard.swift @@ -17,8 +17,8 @@ public extension NextcloudKit { func getHovercard(for userId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ result: NKHovercard?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ result: NKHovercard?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/hovercard/v1/\(userId)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -59,7 +59,7 @@ public extension NextcloudKit { func getHovercardAsync(for userId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, result: NKHovercard?, diff --git a/Sources/NextcloudKit/NextcloudKit+Livephoto.swift b/Sources/NextcloudKit/NextcloudKit+Livephoto.swift index 757a8fad..ad49139a 100644 --- a/Sources/NextcloudKit/NextcloudKit+Livephoto.swift +++ b/Sources/NextcloudKit/NextcloudKit+Livephoto.swift @@ -19,8 +19,8 @@ public extension NextcloudKit { livePhotoFile: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let url = serverUrlfileNamePath.encodedToUrl, let nkSession = nkCommonInstance.nksessions.session(forAccount: account) else { return options.queue.async { completion(account, nil, .urlError) } @@ -65,7 +65,7 @@ public extension NextcloudKit { livePhotoFile: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+Login.swift b/Sources/NextcloudKit/NextcloudKit+Login.swift index a4c0114a..678e9ced 100644 --- a/Sources/NextcloudKit/NextcloudKit+Login.swift +++ b/Sources/NextcloudKit/NextcloudKit+Login.swift @@ -24,8 +24,8 @@ public extension NextcloudKit { password: String, userAgent: String? = nil, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ token: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ token: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/core/getapppassword" guard let url = self.nkCommonInstance.createStandardUrl(serverUrl: url, endpoint: endpoint) else { return options.queue.async { completion(nil, nil, .urlError) } @@ -73,7 +73,7 @@ public extension NextcloudKit { password: String, userAgent: String? = nil, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( token: String?, responseData: AFDataResponse?, @@ -110,8 +110,8 @@ public extension NextcloudKit { onetimeToken: String, userAgent: String? = nil, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ token: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ token: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/core/getapppassword-onetime" guard let url = self.nkCommonInstance.createStandardUrl(serverUrl: url, endpoint: endpoint) else { return options.queue.async { completion(nil, nil, .urlError) } @@ -159,7 +159,7 @@ public extension NextcloudKit { onetimeToken: String, userAgent: String? = nil, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( token: String?, responseData: AFDataResponse?, @@ -198,8 +198,8 @@ public extension NextcloudKit { userAgent: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/core/apppassword" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = self.nkCommonInstance.createStandardUrl(serverUrl: serverUrl, endpoint: endpoint) else { @@ -249,7 +249,7 @@ public extension NextcloudKit { userAgent: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( responseData: AFDataResponse?, error: NKError @@ -277,7 +277,9 @@ public extension NextcloudKit { /// /// - Returns: A tuple consisting of the `endpoint` to poll for the login status with the `token`. Additionally, the `login` to open for the user to log in. /// - func getLoginFlowV2(serverUrl: String, options: NKRequestOptions = NKRequestOptions(), taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }) async throws -> (endpoint: URL, login: URL, token: String) { + func getLoginFlowV2(serverUrl: String, + options: NKRequestOptions = NKRequestOptions(), + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }) async throws -> (endpoint: URL, login: URL, token: String) { try await withCheckedThrowingContinuation { continuation in getLoginFlowV2(serverUrl: serverUrl, options: options, taskHandler: taskHandler) { token, endpointString, loginString, _, error in if error != .success { @@ -320,8 +322,8 @@ public extension NextcloudKit { /// - error: An `NKError` object representing success or failure of the operation. func getLoginFlowV2(serverUrl: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ token: String?, _ endpoint: String?, _ login: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ token: String?, _ endpoint: String?, _ login: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "index.php/login/v2" guard let url = nkCommonInstance.createStandardUrl(serverUrl: serverUrl, endpoint: endpoint) else { return options.queue.async { completion(nil, nil, nil, nil, .urlError) } @@ -359,7 +361,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the login token, polling endpoint, login URL, response data, and any encountered error. func getLoginFlowV2Async(serverUrl: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( token: String?, endpoint: String?, @@ -393,8 +395,8 @@ public extension NextcloudKit { func getLoginFlowV2Poll(token: String, endpoint: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ server: String?, _ loginName: String?, _ appPassword: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ server: String?, _ loginName: String?, _ appPassword: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let serverUrl = endpoint + "?token=" + token guard let url = serverUrl.asUrl else { return options.queue.async { completion(nil, nil, nil, nil, .urlError) } @@ -434,7 +436,7 @@ public extension NextcloudKit { func getLoginFlowV2PollAsync(token: String, endpoint: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( server: String?, loginName: String?, diff --git a/Sources/NextcloudKit/NextcloudKit+NCText.swift b/Sources/NextcloudKit/NextcloudKit+NCText.swift index e22bca79..fea8e439 100644 --- a/Sources/NextcloudKit/NextcloudKit+NCText.swift +++ b/Sources/NextcloudKit/NextcloudKit+NCText.swift @@ -16,8 +16,8 @@ public extension NextcloudKit { /// - completion: Returns the account, array of editors, array of creators, the raw response data, and NKError. func textObtainEditorDetails(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ editors: [NKEditorDetailsEditor]?, _ creators: [NKEditorDetailsCreator]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ editors: [NKEditorDetailsEditor]?, _ creators: [NKEditorDetailsCreator]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/files/api/v1/directEditing" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -66,7 +66,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the account, list of editors, list of creators, raw response, and NKError. func textObtainEditorDetailsAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, editors: [NKEditorDetailsEditor]?, @@ -104,8 +104,8 @@ public extension NextcloudKit { editor: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let fileNamePath = fileNamePath.urlEncoded else { return options.queue.async { completion(account, nil, nil, .urlError) } } @@ -150,7 +150,7 @@ public extension NextcloudKit { editor: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, url: String?, @@ -183,8 +183,8 @@ public extension NextcloudKit { /// - completion: Returns the account, an optional array of NKEditorTemplate, the raw response, and an NKError. func textGetListOfTemplates(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ templates: [NKEditorTemplate]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ templates: [NKEditorTemplate]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/files/api/v1/directEditing/templates/text/textdocumenttemplate" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -229,7 +229,7 @@ public extension NextcloudKit { /// - Returns: A tuple containing the account, list of templates (if any), raw response, and error information. func textGetListOfTemplatesAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, templates: [NKEditorTemplate]?, @@ -267,8 +267,8 @@ public extension NextcloudKit { templateId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let fileNamePath = fileNamePath.urlEncoded else { return options.queue.async { completion(account, nil, nil, .urlError) } } @@ -317,7 +317,7 @@ public extension NextcloudKit { templateId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, url: String?, diff --git a/Sources/NextcloudKit/NextcloudKit+PushNotification.swift b/Sources/NextcloudKit/NextcloudKit+PushNotification.swift index 14d0ad2e..27584a31 100644 --- a/Sources/NextcloudKit/NextcloudKit+PushNotification.swift +++ b/Sources/NextcloudKit/NextcloudKit+PushNotification.swift @@ -24,8 +24,8 @@ public extension NextcloudKit { proxyServerUrl: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ deviceIdentifier: String?, _ signature: String?, _ publicKey: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ deviceIdentifier: String?, _ signature: String?, _ publicKey: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/notifications/api/v2/push" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -78,7 +78,7 @@ public extension NextcloudKit { proxyServerUrl: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, deviceIdentifier: String?, @@ -118,8 +118,8 @@ public extension NextcloudKit { func unsubscribingPushNotification(serverUrl: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/notifications/api/v2/push" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -152,7 +152,7 @@ public extension NextcloudKit { func unsubscribingPushNotificationAsync(serverUrl: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -191,8 +191,8 @@ public extension NextcloudKit { publicKey: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "devices?format=json" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = self.nkCommonInstance.createStandardUrl(serverUrl: proxyServerUrl, endpoint: endpoint), @@ -240,7 +240,7 @@ public extension NextcloudKit { publicKey: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -281,8 +281,8 @@ public extension NextcloudKit { publicKey: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "devices" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = self.nkCommonInstance.createStandardUrl(serverUrl: proxyServerUrl, endpoint: endpoint), @@ -327,7 +327,7 @@ public extension NextcloudKit { publicKey: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+RecommendedFiles.swift b/Sources/NextcloudKit/NextcloudKit+RecommendedFiles.swift index 176af34a..de36c184 100644 --- a/Sources/NextcloudKit/NextcloudKit+RecommendedFiles.swift +++ b/Sources/NextcloudKit/NextcloudKit+RecommendedFiles.swift @@ -18,9 +18,9 @@ public extension NextcloudKit { /// the raw response data, and an NKError result. func getRecommendedFiles(account: String, options: NKRequestOptions = NKRequestOptions(), - request: @escaping (DataRequest?) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ recommendations: [NKRecommendation]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + request: @escaping @Sendable (DataRequest?) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ recommendations: [NKRecommendation]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/recommendations/api/v1/recommendations" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -64,8 +64,8 @@ public extension NextcloudKit { /// - Returns: A tuple containing the account, list of recommended files, raw response data, and NKError result. func getRecommendedFilesAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - request: @escaping (DataRequest?) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + request: @escaping @Sendable (DataRequest?) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, recommendations: [NKRecommendation]?, diff --git a/Sources/NextcloudKit/NextcloudKit+Richdocuments.swift b/Sources/NextcloudKit/NextcloudKit+Richdocuments.swift index a23faf1f..ebf0841a 100644 --- a/Sources/NextcloudKit/NextcloudKit+Richdocuments.swift +++ b/Sources/NextcloudKit/NextcloudKit+Richdocuments.swift @@ -19,8 +19,8 @@ public extension NextcloudKit { func createUrlRichdocuments(fileID: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/richdocuments/api/v1/document" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -60,7 +60,7 @@ public extension NextcloudKit { func createUrlRichdocumentsAsync(fileID: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, url: String?, @@ -93,8 +93,8 @@ public extension NextcloudKit { func getTemplatesRichdocuments(typeTemplate: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ templates: [NKRichdocumentsTemplate]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ templates: [NKRichdocumentsTemplate]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/richdocuments/api/v1/templates/\(typeTemplate)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -145,7 +145,7 @@ public extension NextcloudKit { func getTemplatesRichdocumentsAsync(typeTemplate: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, templates: [NKRichdocumentsTemplate]?, @@ -180,8 +180,8 @@ public extension NextcloudKit { templateId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/richdocuments/api/v1/templates/new" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -223,7 +223,7 @@ public extension NextcloudKit { templateId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, url: String?, @@ -257,8 +257,8 @@ public extension NextcloudKit { func createAssetRichdocuments(path: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ url: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "index.php/apps/richdocuments/assets" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -294,7 +294,7 @@ public extension NextcloudKit { func createAssetRichdocumentsAsync(path: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, url: String?, diff --git a/Sources/NextcloudKit/NextcloudKit+Share.swift b/Sources/NextcloudKit/NextcloudKit+Share.swift index c229f612..aabb5ed6 100644 --- a/Sources/NextcloudKit/NextcloudKit+Share.swift +++ b/Sources/NextcloudKit/NextcloudKit+Share.swift @@ -59,8 +59,8 @@ public extension NextcloudKit { func readShares(parameters: NKShareParameter, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ shares: [NKShare]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ shares: [NKShare]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: parameters.endpoint), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options) else { @@ -107,7 +107,7 @@ public extension NextcloudKit { func readSharesAsync(parameters: NKShareParameter, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }) async -> (account: String, shares: [NKShare]?, responseData: AFDataResponse?, error: NKError) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }) async -> (account: String, shares: [NKShare]?, responseData: AFDataResponse?, error: NKError) { await withCheckedContinuation { continuation in readShares( @@ -140,8 +140,8 @@ public extension NextcloudKit { lookup: Bool = false, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ sharees: [NKSharee]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ sharees: [NKSharee]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/files_sharing/api/v1/sharees" var lookupString = "false" if lookup { @@ -310,8 +310,8 @@ public extension NextcloudKit { attributes: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ share: NKShare?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ share: NKShare?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/files_sharing/api/v1/shares" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -456,8 +456,8 @@ public extension NextcloudKit { attributes: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ share: NKShare?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ share: NKShare?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/files_sharing/api/v1/shares/\(idShare)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -579,8 +579,8 @@ public extension NextcloudKit { func deleteShare(idShare: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/files_sharing/api/v1/shares/\(idShare)" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), diff --git a/Sources/NextcloudKit/NextcloudKit+ShareDownloadLimit.swift b/Sources/NextcloudKit/NextcloudKit+ShareDownloadLimit.swift index 9b0a9682..f2b01c13 100644 --- a/Sources/NextcloudKit/NextcloudKit+ShareDownloadLimit.swift +++ b/Sources/NextcloudKit/NextcloudKit+ShareDownloadLimit.swift @@ -19,7 +19,9 @@ public extension NextcloudKit { /// - completion: A closure returning: /// - NKDownloadLimit?: The current download limit information, or `nil` if not available. /// - NKError: An object representing success or error during the request. - func getDownloadLimit(account: String, token: String, completion: @escaping (NKDownloadLimit?, NKError) -> Void) { + func getDownloadLimit(account: String, + token: String, + completion: @escaping @Sendable (NKDownloadLimit?, NKError) -> Void) { let endpoint = makeEndpoint(with: token) let options = NKRequestOptions() @@ -114,7 +116,9 @@ public extension NextcloudKit { /// - token: The public share token associated with the file or folder. /// - completion: A closure returning: /// - NKError: An object representing the success or failure of the request. - func removeShareDownloadLimit(account: String, token: String, completion: @escaping (_ error: NKError) -> Void) { + func removeShareDownloadLimit(account: String, + token: String, + completion: @escaping @Sendable (_ error: NKError) -> Void) { let endpoint = makeEndpoint(with: token) let options = NKRequestOptions() @@ -169,7 +173,10 @@ public extension NextcloudKit { /// - limit: The new download limit to be set. /// - completion: A closure returning: /// - error: An NKError representing the success or failure of the operation. - func setShareDownloadLimit(account: String, token: String, limit: Int, completion: @escaping (_ error: NKError) -> Void) { + func setShareDownloadLimit(account: String, + token: String, + limit: Int, + completion: @escaping @Sendable (_ error: NKError) -> Void) { let endpoint = makeEndpoint(with: token) let options = NKRequestOptions() guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), diff --git a/Sources/NextcloudKit/NextcloudKit+Tags.swift b/Sources/NextcloudKit/NextcloudKit+Tags.swift index ba74e7d2..3a617719 100644 --- a/Sources/NextcloudKit/NextcloudKit+Tags.swift +++ b/Sources/NextcloudKit/NextcloudKit+Tags.swift @@ -17,7 +17,7 @@ public extension NextcloudKit { /// - taskHandler: Callback for the underlying URL session task. func getTags(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, tags: [NKTag]?, @@ -108,7 +108,7 @@ public extension NextcloudKit { func createTag(name: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -168,7 +168,7 @@ public extension NextcloudKit { fileId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -227,7 +227,7 @@ public extension NextcloudKit { fileId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -285,7 +285,7 @@ public extension NextcloudKit { color: String?, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, diff --git a/Sources/NextcloudKit/NextcloudKit+TermsOfService.swift b/Sources/NextcloudKit/NextcloudKit+TermsOfService.swift index a3b88929..5f0713fb 100644 --- a/Sources/NextcloudKit/NextcloudKit+TermsOfService.swift +++ b/Sources/NextcloudKit/NextcloudKit+TermsOfService.swift @@ -13,9 +13,9 @@ public extension NextcloudKit { /// - Returns: Tuple with NKError and optional NKTermsOfService. func getTermsOfService(account: String, options: NKRequestOptions = NKRequestOptions(), - request: @escaping (DataRequest?) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ tos: NKTermsOfService?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + request: @escaping @Sendable (DataRequest?) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ tos: NKTermsOfService?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/terms_of_service/terms" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -78,8 +78,8 @@ public extension NextcloudKit { func signTermsOfService(termId: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/terms_of_service/sign" var urlRequest: URLRequest guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), diff --git a/Sources/NextcloudKit/NextcloudKit+Upload.swift b/Sources/NextcloudKit/NextcloudKit+Upload.swift index 6e6a072f..37df37b4 100644 --- a/Sources/NextcloudKit/NextcloudKit+Upload.swift +++ b/Sources/NextcloudKit/NextcloudKit+Upload.swift @@ -39,10 +39,10 @@ public extension NextcloudKit { autoMkcol: Bool = false, account: String, options: NKRequestOptions = NKRequestOptions(), - requestHandler: @escaping (_ request: UploadRequest) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - progressHandler: @escaping (_ progress: Progress) -> Void = { _ in }, - completionHandler: @escaping (_ account: String, _ response: AFDataResponse?, _ nkError: NKError) -> Void) { + requestHandler: @escaping @Sendable (_ request: UploadRequest) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + progressHandler: @escaping @Sendable (_ progress: Progress) -> Void = { _ in }, + completionHandler: @escaping @Sendable (_ account: String, _ response: AFDataResponse?, _ nkError: NKError) -> Void) { var convertible: URLConvertible? if serverUrlFileName is URL { @@ -112,9 +112,9 @@ public extension NextcloudKit { autoMkcol: Bool = false, account: String, options: NKRequestOptions = NKRequestOptions(), - requestHandler: @escaping (_ request: UploadRequest) -> Void = { _ in }, - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - progressHandler: @escaping (_ progress: Progress) -> Void = { _ in } + requestHandler: @escaping @Sendable (_ request: UploadRequest) -> Void = { _ in }, + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + progressHandler: @escaping @Sendable (_ progress: Progress) -> Void = { _ in } ) async -> ( account: String, response: AFDataResponse?, @@ -210,12 +210,12 @@ public extension NextcloudKit { chunkSize: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - chunkProgressHandler: @escaping (_ total: Int, _ counter: Int) -> Void = { _, _ in }, - uploadStart: @escaping (_ filesChunk: [(fileName: String, size: Int64)]) -> Void = { _ in }, - uploadTaskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - uploadProgressHandler: @escaping (_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) -> Void = { _, _, _ in }, - uploaded: @escaping (_ fileChunk: (fileName: String, size: Int64)) -> Void = { _ in }, - assembling: @escaping () -> Void = { } + chunkProgressHandler: @escaping @Sendable (_ total: Int, _ counter: Int) -> Void = { _, _ in }, + uploadStart: @escaping @Sendable (_ filesChunk: [(fileName: String, size: Int64)]) -> Void = { _ in }, + uploadTaskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + uploadProgressHandler: @escaping @Sendable (_ totalBytesExpected: Int64, _ totalBytes: Int64, _ fractionCompleted: Double) -> Void = { _, _, _ in }, + uploaded: @escaping @Sendable (_ fileChunk: (fileName: String, size: Int64)) -> Void = { _ in }, + assembling: @escaping @Sendable () -> Void = { } ) async throws -> (account: String, file: NKFile?) { // Resolve session guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account) else { diff --git a/Sources/NextcloudKit/NextcloudKit+UserStatus.swift b/Sources/NextcloudKit/NextcloudKit+UserStatus.swift index 517a6078..929e6c03 100644 --- a/Sources/NextcloudKit/NextcloudKit+UserStatus.swift +++ b/Sources/NextcloudKit/NextcloudKit+UserStatus.swift @@ -29,8 +29,8 @@ public extension NextcloudKit { func getUserStatus(userId: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ clearAt: Date?, _ icon: String?, _ message: String?, _ messageId: String?, _ messageIsPredefined: Bool, _ status: String?, _ statusIsUserDefined: Bool, _ userId: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ clearAt: Date?, _ icon: String?, _ message: String?, _ messageId: String?, _ messageIsPredefined: Bool, _ status: String?, _ statusIsUserDefined: Bool, _ userId: String?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var endpoint = "ocs/v2.php/apps/user_status/api/v1/user_status" if let userId = userId { endpoint = "ocs/v2.php/apps/user_status/api/v1/user_status/\(userId)" @@ -81,7 +81,7 @@ public extension NextcloudKit { func getUserStatusAsync(userId: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, clearAt: Date?, @@ -128,8 +128,8 @@ public extension NextcloudKit { func setUserStatus(status: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/user_status/api/v1/user_status/status" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -167,7 +167,7 @@ public extension NextcloudKit { func setUserStatusAsync(status: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -203,8 +203,8 @@ public extension NextcloudKit { clearAt: Double, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/user_status/api/v1/user_status/message/predefined" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -252,7 +252,7 @@ public extension NextcloudKit { clearAt: Double, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -291,8 +291,8 @@ public extension NextcloudKit { clearAt: Double, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/user_status/api/v1/user_status/message/custom" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -346,7 +346,7 @@ public extension NextcloudKit { clearAt: Double, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -380,8 +380,8 @@ public extension NextcloudKit { /// - error: An `NKError` representing the result of the operation (success or failure). func clearMessage(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/user_status/api/v1/user_status/message" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -423,7 +423,7 @@ public extension NextcloudKit { /// - error: The resulting `NKError`, either `.success` or a failure case. func clearMessageAsync(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -455,8 +455,8 @@ public extension NextcloudKit { /// - error: Resulting `NKError` describing success or failure. func getUserStatusPredefinedStatuses(account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ userStatuses: [NKUserStatus]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ userStatuses: [NKUserStatus]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/user_status/api/v1/predefined_statuses" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -556,8 +556,8 @@ public extension NextcloudKit { offset: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ userStatuses: [NKUserStatus]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ userStatuses: [NKUserStatus]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { let endpoint = "ocs/v2.php/apps/user_status/api/v1/statuses" guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = nkCommonInstance.createStandardUrl(serverUrl: nkSession.urlBase, endpoint: endpoint), @@ -622,7 +622,7 @@ public extension NextcloudKit { offset: Int, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, userStatuses: [NKUserStatus]?, diff --git a/Sources/NextcloudKit/NextcloudKit+WebDAV.swift b/Sources/NextcloudKit/NextcloudKit+WebDAV.swift index e4a8e9d1..dcd32525 100644 --- a/Sources/NextcloudKit/NextcloudKit+WebDAV.swift +++ b/Sources/NextcloudKit/NextcloudKit+WebDAV.swift @@ -23,8 +23,8 @@ public extension NextcloudKit { func createFolder(serverUrlFileName: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ ocId: String?, _ date: Date?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ ocId: String?, _ date: Date?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let url = serverUrlFileName.encodedToUrl, let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml", accept: "application/xml") else { @@ -63,7 +63,7 @@ public extension NextcloudKit { func createFolderAsync(serverUrlFileName: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, ocId: String?, @@ -101,8 +101,8 @@ public extension NextcloudKit { func deleteFileOrFolder(serverUrlFileName: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let url = serverUrlFileName.encodedToUrl, let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml", accept: "application/xml") else { @@ -143,7 +143,7 @@ public extension NextcloudKit { func deleteFileOrFolderAsync(serverUrlFileName: String, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -181,8 +181,8 @@ public extension NextcloudKit { overwrite: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let url = serverUrlFileNameSource.encodedToUrl, let nkSession = nkCommonInstance.nksessions.session(forAccount: account), var headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml", accept: "application/xml") else { @@ -234,7 +234,7 @@ public extension NextcloudKit { overwrite: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -274,8 +274,8 @@ public extension NextcloudKit { overwrite: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let url = serverUrlFileNameSource.encodedToUrl, let nkSession = nkCommonInstance.nksessions.session(forAccount: account), var headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml", accept: "application/xml") else { @@ -328,7 +328,7 @@ public extension NextcloudKit { overwrite: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -373,8 +373,8 @@ public extension NextcloudKit { requestBody: Data? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { var serverUrlFileName = serverUrlFileName guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let url = serverUrlFileName.encodedToUrl, @@ -447,7 +447,7 @@ public extension NextcloudKit { requestBody: Data? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, files: [NKFile]?, @@ -490,8 +490,8 @@ public extension NextcloudKit { link: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ file: NKFile?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ file: NKFile?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account) else { return options.queue.async { completion(account, nil, nil, .urlError) } } @@ -534,7 +534,7 @@ public extension NextcloudKit { link: String? = nil, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, file: NKFile?, @@ -578,8 +578,8 @@ public extension NextcloudKit { includeHiddenFiles: [String] = [], account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { if let httpBody = requestBody.data(using: .utf8) { search(serverUrl: serverUrl, httpBody: httpBody, showHiddenFiles: showHiddenFiles, includeHiddenFiles: includeHiddenFiles, account: account, options: options) { task in taskHandler(task) @@ -611,7 +611,7 @@ public extension NextcloudKit { includeHiddenFiles: [String] = [], account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, files: [NKFile]?, @@ -659,8 +659,8 @@ public extension NextcloudKit { includeHiddenFiles: [String] = [], account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let href = ("/files/" + nkSession.userId).urlEncoded else { return options.queue.async { completion(account, nil, nil, .urlError) } @@ -699,7 +699,7 @@ public extension NextcloudKit { includeHiddenFiles: [String] = [], account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, files: [NKFile]?, @@ -746,8 +746,8 @@ public extension NextcloudKit { includeHiddenFiles: [String], account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml", accept: "application/xml") else { return options.queue.async { completion(account, nil, nil, .urlError) } @@ -808,7 +808,7 @@ public extension NextcloudKit { includeHiddenFiles: [String], account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, files: [NKFile]?, @@ -849,8 +849,8 @@ public extension NextcloudKit { favorite: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml", accept: "application/xml") else { return options.queue.async { completion(account, nil, .urlError) } @@ -895,7 +895,7 @@ public extension NextcloudKit { favorite: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, responseData: AFDataResponse?, @@ -933,8 +933,8 @@ public extension NextcloudKit { includeHiddenFiles: [String] = [], account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ files: [NKFile]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), let headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml", accept: "application/xml") else { return options.queue.async { completion(account, nil, nil, .urlError) } @@ -988,7 +988,7 @@ public extension NextcloudKit { includeHiddenFiles: [String] = [], account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in } + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in } ) async -> ( account: String, files: [NKFile]?, @@ -1028,8 +1028,8 @@ public extension NextcloudKit { showHiddenFiles: Bool, account: String, options: NKRequestOptions = NKRequestOptions(), - taskHandler: @escaping (_ task: URLSessionTask) -> Void = { _ in }, - completion: @escaping (_ account: String, _ items: [NKTrash]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { + taskHandler: @escaping @Sendable (_ task: URLSessionTask) -> Void = { _ in }, + completion: @escaping @Sendable (_ account: String, _ items: [NKTrash]?, _ responseData: AFDataResponse?, _ error: NKError) -> Void) { guard let nkSession = nkCommonInstance.nksessions.session(forAccount: account), var headers = nkCommonInstance.getStandardHeaders(account: account, options: options, contentType: "application/xml", accept: "application/xml") else { return options.queue.async { completion(account, nil, nil, .urlError) } diff --git a/Sources/NextcloudKit/NextcloudKitBackground.swift b/Sources/NextcloudKit/NextcloudKitBackground.swift index 89c3fc16..815aaf43 100644 --- a/Sources/NextcloudKit/NextcloudKitBackground.swift +++ b/Sources/NextcloudKit/NextcloudKitBackground.swift @@ -308,7 +308,7 @@ public final class NKBackground: NSObject, URLSessionTaskDelegate, URLSessionDel } } - public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping @Sendable (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if self.nkCommonInstance.delegate == nil { completionHandler(URLSession.AuthChallengeDisposition.performDefaultHandling, nil) } else { diff --git a/Sources/NextcloudKit/NextcloudKitSessionDelegate.swift b/Sources/NextcloudKit/NextcloudKitSessionDelegate.swift index 69b9f05c..161799d0 100644 --- a/Sources/NextcloudKit/NextcloudKitSessionDelegate.swift +++ b/Sources/NextcloudKit/NextcloudKitSessionDelegate.swift @@ -21,7 +21,7 @@ final class NextcloudKitSessionDelegate: SessionDelegate, @unchecked Sendable { super.init(fileManager: fileManager) } - public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { + public func urlSession(_ session: URLSession, didReceive challenge: URLAuthenticationChallenge, completionHandler: @escaping @Sendable (URLSession.AuthChallengeDisposition, URLCredential?) -> Void) { if let nkCommon = self.nkCommonInstance, let delegate = nkCommon.delegate { delegate.authenticationChallenge(session, didReceive: challenge) { authChallengeDisposition, credential in diff --git a/Sources/NextcloudKitUI/Modifiers/CodeScannerSheet.swift b/Sources/NextcloudKitUI/Modifiers/CodeScannerSheet.swift index 9e49527e..a11f8dbd 100644 --- a/Sources/NextcloudKitUI/Modifiers/CodeScannerSheet.swift +++ b/Sources/NextcloudKitUI/Modifiers/CodeScannerSheet.swift @@ -17,7 +17,7 @@ struct CodeScannerSheet: ViewModifier { @Binding var isPresentingCodeScanner: Bool let completionHandler: (Result) -> Void - init(isPresented: Binding, _ completionHandler: @escaping (Result) -> Void) { + init(isPresented: Binding, _ completionHandler: @escaping @Sendable (Result) -> Void) { self._isPresentingCodeScanner = isPresented self.completionHandler = completionHandler } @@ -40,7 +40,7 @@ extension View { /// /// See ``CodeScannerSheet`` for its implementation. /// - func codeScannerSheet(isPresented: Binding, _ completionHandler: @escaping (Result) -> Void) -> some View { + func codeScannerSheet(isPresented: Binding, _ completionHandler: @escaping @Sendable (Result) -> Void) -> some View { modifier(CodeScannerSheet(isPresented: isPresented, completionHandler)) } } diff --git a/Sources/NextcloudKitUI/Modifiers/SharedAccountsSheet.swift b/Sources/NextcloudKitUI/Modifiers/SharedAccountsSheet.swift index d9b7dd71..1c400458 100644 --- a/Sources/NextcloudKitUI/Modifiers/SharedAccountsSheet.swift +++ b/Sources/NextcloudKitUI/Modifiers/SharedAccountsSheet.swift @@ -13,7 +13,7 @@ struct SharedAccountsSheet: ViewModifier { var sharedAccounts: [SharedAccount] let selectionHandler: (SharedAccount) -> Void - init(isPresented: Binding, sharedAccounts: [SharedAccount], selectionHandler: @escaping (SharedAccount) -> Void) { + init(isPresented: Binding, sharedAccounts: [SharedAccount], selectionHandler: @escaping @Sendable (SharedAccount) -> Void) { self._isPresented = isPresented self.sharedAccounts = sharedAccounts self.selectionHandler = selectionHandler @@ -34,7 +34,7 @@ extension View { /// /// See ``SharedAccountsSheet`` for its implementation. /// - func sharedAccountsSheet(isPresented: Binding, sharedAccounts: [SharedAccount], selectionHandler: @escaping (SharedAccount) -> Void) -> some View { + func sharedAccountsSheet(isPresented: Binding, sharedAccounts: [SharedAccount], selectionHandler: @escaping @Sendable (SharedAccount) -> Void) -> some View { modifier(SharedAccountsSheet(isPresented: isPresented, sharedAccounts: sharedAccounts, selectionHandler: selectionHandler)) } } diff --git a/Sources/NextcloudKitUI/Modifiers/WebViewSheet.swift b/Sources/NextcloudKitUI/Modifiers/WebViewSheet.swift index 3ff02a8c..b2d5d03f 100644 --- a/Sources/NextcloudKitUI/Modifiers/WebViewSheet.swift +++ b/Sources/NextcloudKitUI/Modifiers/WebViewSheet.swift @@ -14,7 +14,7 @@ struct WebSheet: ViewModifier { @Binding var initialURL: URL? @Binding var isPresented: Bool - init(initialURL: Binding, isPresented: Binding, userAgent: String?, onDismiss: @escaping () -> Void) { + init(initialURL: Binding, isPresented: Binding, userAgent: String?, onDismiss: @escaping @Sendable () -> Void) { self._initialURL = initialURL self._isPresented = isPresented self.onDismiss = onDismiss @@ -43,7 +43,7 @@ extension View { /// /// See ``WebSheet`` for the implementation. /// - func webSheet(initialURL: Binding, isPresented: Binding, userAgent: String?, onDismiss: @escaping () -> Void) -> some View { + func webSheet(initialURL: Binding, isPresented: Binding, userAgent: String?, onDismiss: @escaping @Sendable () -> Void) -> some View { modifier(WebSheet(initialURL: initialURL, isPresented: isPresented, userAgent: userAgent, onDismiss: onDismiss)) } } diff --git a/Sources/NextcloudKitUI/Views/Login/AlternativeLoginMethodsView.swift b/Sources/NextcloudKitUI/Views/Login/AlternativeLoginMethodsView.swift index 0b35ba1f..b4be9c50 100644 --- a/Sources/NextcloudKitUI/Views/Login/AlternativeLoginMethodsView.swift +++ b/Sources/NextcloudKitUI/Views/Login/AlternativeLoginMethodsView.swift @@ -40,13 +40,13 @@ struct AlternativeLoginMethodsView: View { @State var isPresentingSharedAccounts = false #if os(iOS) - init(sharedAccounts: [SharedAccount], scanHandler: @escaping (Result) -> Void, selectionHandler: @escaping (SharedAccount) -> Void) { + init(sharedAccounts: [SharedAccount], scanHandler: @escaping @Sendable (Result) -> Void, selectionHandler: @escaping @Sendable (SharedAccount) -> Void) { self.sharedAccounts = sharedAccounts self.scanHandler = scanHandler self.selectionHandler = selectionHandler } #else - init(sharedAccounts: [SharedAccount], selectionHandler: @escaping (SharedAccount) -> Void) { + init(sharedAccounts: [SharedAccount], selectionHandler: @escaping @Sendable (SharedAccount) -> Void) { self.sharedAccounts = sharedAccounts self.selectionHandler = selectionHandler } diff --git a/Sources/NextcloudKitUI/Views/Login/LoginFlowModel.swift b/Sources/NextcloudKitUI/Views/Login/LoginFlowModel.swift index 992b2bfe..1231f5b8 100644 --- a/Sources/NextcloudKitUI/Views/Login/LoginFlowModel.swift +++ b/Sources/NextcloudKitUI/Views/Login/LoginFlowModel.swift @@ -21,7 +21,7 @@ final class LoginFlowModel: QRCodeParsing, URLSanitizing { private let userAgent: String? private let addAccount: AddAccountHandler - init(userAgent: String?, addAccount: @escaping AddAccountHandler) { + init(userAgent: String?, addAccount: @escaping @Sendable AddAccountHandler) { self.userAgent = userAgent self.addAccount = addAccount } diff --git a/Sources/NextcloudKitUI/Views/Login/ServerAddressView.swift b/Sources/NextcloudKitUI/Views/Login/ServerAddressView.swift index 1a64c428..a3778a2c 100644 --- a/Sources/NextcloudKitUI/Views/Login/ServerAddressView.swift +++ b/Sources/NextcloudKitUI/Views/Login/ServerAddressView.swift @@ -30,7 +30,7 @@ public struct ServerAddressView: View { /// - userAgent: An optional user agent string to override the one used by ``WKWebView``. /// - addAccount: see ``AddAccountHandler``. /// - public init(backgroundColor: Binding, brandImage: Image, sharedAccounts: [SharedAccount], userAgent: String? = nil, addAccount: @escaping AddAccountHandler) { + public init(backgroundColor: Binding, brandImage: Image, sharedAccounts: [SharedAccount], userAgent: String? = nil, addAccount: @escaping @Sendable AddAccountHandler) { self._backgroundColor = backgroundColor self.brandImage = brandImage self.sharedAccounts = sharedAccounts diff --git a/Sources/NextcloudKitUI/Views/Login/SharedAccountsView.swift b/Sources/NextcloudKitUI/Views/Login/SharedAccountsView.swift index cf883837..1d49113d 100644 --- a/Sources/NextcloudKitUI/Views/Login/SharedAccountsView.swift +++ b/Sources/NextcloudKitUI/Views/Login/SharedAccountsView.swift @@ -14,7 +14,7 @@ struct SharedAccountsView: View { let selectionHandler: (SharedAccount) -> Void - init(sharedAccounts: [SharedAccount], selectionHandler: @escaping (SharedAccount) -> Void) { + init(sharedAccounts: [SharedAccount], selectionHandler: @escaping @Sendable (SharedAccount) -> Void) { self.selectionHandler = selectionHandler self.sharedAccounts = sharedAccounts } From fa3a12675fa44c1969e127a3396460926d1bffcf Mon Sep 17 00:00:00 2001 From: Marino Faggiana Date: Sat, 20 Jun 2026 14:45:31 +0200 Subject: [PATCH 4/4] lint Signed-off-by: Marino Faggiana --- Sources/NextcloudKit/Models/NKDownloadLimit.swift | 6 ------ 1 file changed, 6 deletions(-) diff --git a/Sources/NextcloudKit/Models/NKDownloadLimit.swift b/Sources/NextcloudKit/Models/NKDownloadLimit.swift index adb5d54b..2acb0282 100644 --- a/Sources/NextcloudKit/Models/NKDownloadLimit.swift +++ b/Sources/NextcloudKit/Models/NKDownloadLimit.swift @@ -24,10 +24,4 @@ public struct NKDownloadLimit: Sendable { /// The token identifying the related share. /// public let token: String - - init(count: Int, limit: Int, token: String) { - self.count = count - self.limit = limit - self.token = token - } }