Skip to content

Commit 246dac1

Browse files
async code
Signed-off-by: Marino Faggiana <marino@marinofaggiana.com>
1 parent 037420e commit 246dac1

6 files changed

Lines changed: 16 additions & 51 deletions

File tree

Sources/NextcloudKit/NKCommon.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -200,11 +200,11 @@ public struct NKCommon: Sendable {
200200

201201
// MARK: - Server Error GroupDefaults
202202

203-
public func appendServerErrorAccount(_ account: String, errorCode: Int) {
203+
public func appendServerErrorAccount(_ account: String, errorCode: Int) async {
204204
guard let groupDefaults = UserDefaults(suiteName: groupIdentifier) else {
205205
return
206206
}
207-
let capabilities = NKCapabilities.shared.getCapabilitiesBlocking(for: account)
207+
let capabilities = await NKCapabilities.shared.getCapabilities(for: account)
208208

209209
/// Unavailable
210210
if errorCode == 503 {

Sources/NextcloudKit/NKMonitor.swift

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -41,7 +41,9 @@ final class NKMonitor: EventMonitor, Sendable {
4141
let headerCheckInterceptor = request.request?.allHTTPHeaderFields?[nkCommonInstance.headerCheckInterceptor],
4242
headerCheckInterceptor.lowercased() == "true",
4343
let account = request.request?.allHTTPHeaderFields?[nkCommonInstance.headerAccount] {
44-
nkCommonInstance.appendServerErrorAccount(account, errorCode: statusCode)
44+
Task {
45+
await nkCommonInstance.appendServerErrorAccount(account, errorCode: statusCode)
46+
}
4547
}
4648

4749
DispatchQueue.global(qos: .utility).async {

Sources/NextcloudKit/NextcloudKit+Capabilities.swift

Lines changed: 3 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ public extension NextcloudKit {
410410
capabilities.termsOfService = json.termsOfService?.enabled ?? false
411411

412412
// Persist capabilities in shared store
413-
await NKCapabilities.shared.appendCapabilitiesAsync(for: account, capabilities: capabilities)
413+
await NKCapabilities.shared.appendCapabilities(for: account, capabilities: capabilities)
414414
return capabilities
415415
} catch {
416416
nkLog(error: "Could not decode json capabilities: \(error.localizedDescription)")
@@ -490,50 +490,14 @@ final public class NKCapabilities: Sendable {
490490

491491
// MARK: - Public API
492492

493-
public func appendCapabilitiesAsync(for account: String, capabilities: Capabilities) async {
493+
public func appendCapabilities(for account: String, capabilities: Capabilities) async {
494494
await store.set(account, value: capabilities)
495495
}
496496

497-
/// Synchronously stores capabilities for the given account.
498-
/// Blocks the current thread until the async actor completes.
499-
/// Use only outside of async/actor contexts.
500-
public func appendCapabilitiesBlocking(for account: String, capabilities: Capabilities) {
501-
let group = DispatchGroup()
502-
503-
group.enter()
504-
Task.detached(priority: .userInitiated) {
505-
await self.store.set(account, value: capabilities)
506-
group.leave()
507-
}
508-
509-
group.wait()
510-
}
511-
512-
public func getCapabilitiesAsync(for account: String?) async -> Capabilities {
497+
public func getCapabilities(for account: String?) async -> Capabilities {
513498
guard let account else {
514499
return Capabilities()
515500
}
516501
return await store.get(account) ?? Capabilities()
517502
}
518-
519-
/// Synchronously retrieves capabilities for the given account.
520-
/// Blocks the current thread until the async actor returns.
521-
/// Use only outside the Swift async context (never from another actor or async function).
522-
public func getCapabilitiesBlocking(for account: String?) -> Capabilities {
523-
guard let account else { return Capabilities() }
524-
525-
var result: Capabilities?
526-
let semaphore = DispatchSemaphore(value: 0)
527-
528-
let queue = DispatchQueue(label: "CapabilitiesBlockingQueue")
529-
queue.async {
530-
Task {
531-
result = await self.store.get(account)
532-
semaphore.signal()
533-
}
534-
}
535-
536-
_ = semaphore.wait(timeout: .now() + 1)
537-
return result ?? Capabilities()
538-
}
539503
}

Sources/NextcloudKit/NextcloudKit+NCText.swift

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -37,10 +37,10 @@ public extension NextcloudKit {
3737
Task {
3838
do {
3939
let (editors, creators) = try NKEditorDetailsConverter.from(data: responseData)
40-
let capabilities = await NKCapabilities.shared.getCapabilitiesAsync(for: account)
40+
let capabilities = await NKCapabilities.shared.getCapabilities(for: account)
4141
capabilities.directEditingEditors = editors
4242
capabilities.directEditingCreators = creators
43-
await NKCapabilities.shared.appendCapabilitiesAsync(for: account, capabilities: capabilities)
43+
await NKCapabilities.shared.appendCapabilities(for: account, capabilities: capabilities)
4444

4545
options.queue.async {
4646
completion(account, editors, creators, response, .success)
@@ -206,9 +206,9 @@ public extension NextcloudKit {
206206
let decoded = try JSONDecoder().decode(NKEditorTemplateResponse.self, from: data)
207207
let templates = decoded.ocs.data.editors
208208
// Update capabilities
209-
let capabilities = await NKCapabilities.shared.getCapabilitiesAsync(for: account)
209+
let capabilities = await NKCapabilities.shared.getCapabilities(for: account)
210210
capabilities.directEditingTemplates = templates
211-
await NKCapabilities.shared.appendCapabilitiesAsync(for: account, capabilities: capabilities)
211+
await NKCapabilities.shared.appendCapabilities(for: account, capabilities: capabilities)
212212

213213
options.queue.async { completion(account, templates, response, .success) }
214214
} catch {

Sources/NextcloudKit/TypeIdentifiers/NKFilePropertyResolver.swift

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -44,10 +44,10 @@ public final class NKFilePropertyResolver {
4444

4545
public init() {}
4646

47-
public func resolve(inUTI: String, account: String) -> NKFileProperty {
47+
public func resolve(inUTI: String, account: String) async -> NKFileProperty {
4848
let fileProperty = NKFileProperty()
4949
let typeIdentifier = inUTI as String
50-
let capabilities = NKCapabilities.shared.getCapabilitiesBlocking(for: account)
50+
let capabilities = await NKCapabilities.shared.getCapabilities(for: account)
5151
let utiString = inUTI as String
5252

5353
// Preferred extension

Sources/NextcloudKit/TypeIdentifiers/NKTypeIdentifiers.swift

Lines changed: 2 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,8 +26,7 @@ public actor NKTypeIdentifiers {
2626
private init() {}
2727

2828
// Resolves type info from file name and optional MIME type
29-
public func getInternalType(fileName: String, mimeType inputMimeType: String, directory: Bool, account: String) -> NKTypeIdentifierCache {
30-
29+
public func getInternalType(fileName: String, mimeType inputMimeType: String, directory: Bool, account: String) async -> NKTypeIdentifierCache {
3130
var ext = (fileName as NSString).pathExtension.lowercased()
3231
var mimeType = inputMimeType
3332
var classFile = ""
@@ -63,7 +62,7 @@ public actor NKTypeIdentifiers {
6362
fileNameWithoutExt = fileName
6463
ext = ""
6564
} else {
66-
let props = resolver.resolve(inUTI: typeIdentifier, account: account)
65+
let props = await resolver.resolve(inUTI: typeIdentifier, account: account)
6766
classFile = props.classFile.rawValue
6867
iconName = props.iconName.rawValue
6968
}

0 commit comments

Comments
 (0)