@@ -12,24 +12,6 @@ import NextcloudCapabilitiesKit
1212import NextcloudKit
1313import OSLog
1414
15- fileprivate let CapabilitiesFetchInterval : TimeInterval = 30 * 60 // 30mins
16-
17- actor RetrievedCapabilitiesActor {
18- static let shared : RetrievedCapabilitiesActor = {
19- let instance = RetrievedCapabilitiesActor ( )
20- return instance
21- } ( )
22- var data : [ String : ( capabilities: Capabilities , retrievedAt: Date ) ] = [ : ]
23-
24- func setCapabilities(
25- forAccount account: String ,
26- capabilities: Capabilities ,
27- retrievedAt: Date = Date ( )
28- ) async {
29- self . data [ account] = ( capabilities: capabilities, retrievedAt: retrievedAt)
30- }
31- }
32-
3315extension NextcloudKit : RemoteInterface {
3416
3517 public func setDelegate( _ delegate: any NextcloudKitDelegate ) {
@@ -398,6 +380,10 @@ extension NextcloudKit: RemoteInterface {
398380 options: NKRequestOptions = . init( ) ,
399381 taskHandler: @escaping ( _ task: URLSessionTask ) -> Void = { _ in }
400382 ) async -> ( account: String , capabilities: Capabilities ? , data: Data ? , error: NKError ) {
383+ let ncKitAccount = account. ncKitAccount
384+ await RetrievedCapabilitiesActor . shared. setOngoingFetch (
385+ forAccount: ncKitAccount, ongoing: true
386+ )
401387 let result = await withCheckedContinuation { continuation in
402388 getCapabilities ( account: account. ncKitAccount, options: options, taskHandler: taskHandler) { account, data, error in
403389 let capabilities : Capabilities ? = {
@@ -407,6 +393,9 @@ extension NextcloudKit: RemoteInterface {
407393 continuation. resume ( returning: ( account, capabilities, data? . data, error) )
408394 }
409395 }
396+ await RetrievedCapabilitiesActor . shared. setOngoingFetch (
397+ forAccount: ncKitAccount, ongoing: false
398+ )
410399 if let capabilities = result. 1 {
411400 await RetrievedCapabilitiesActor . shared. setCapabilities (
412401 forAccount: account. ncKitAccount, capabilities: capabilities
@@ -415,39 +404,6 @@ extension NextcloudKit: RemoteInterface {
415404 return result
416405 }
417406
418- public func currentCapabilities(
419- account: Account ,
420- options: NKRequestOptions = . init( ) ,
421- taskHandler: @escaping ( _ task: URLSessionTask ) -> Void = { _ in }
422- ) async -> ( account: String , capabilities: Capabilities ? , data: Data ? , error: NKError ) {
423- let ncKitAccount = account. ncKitAccount
424- guard let lastRetrieval = await RetrievedCapabilitiesActor . shared. data [ ncKitAccount] ,
425- lastRetrieval. retrievedAt. timeIntervalSince ( Date ( ) ) > - CapabilitiesFetchInterval
426- else {
427- return await fetchCapabilities (
428- account: account, options: options, taskHandler: taskHandler
429- )
430- }
431- return ( account. ncKitAccount, lastRetrieval. capabilities, nil , . success)
432- }
433-
434- public func currentCapabilitiesSync( account: Account ) -> Capabilities ? {
435- let semaphore = DispatchSemaphore ( value: 0 )
436- var capabilities : Capabilities ?
437- Task {
438- let ( _, fetchedCapabilities, _, error) = await currentCapabilities ( account: account)
439- if error != . success {
440- Logger
441- . init ( subsystem: Logger . subsystem, category: " NextcloudKitRemoteInterface " )
442- . error ( " Error during sync capabilities fetch: \( error. errorDescription, privacy: . public) " )
443- }
444- capabilities = fetchedCapabilities
445- semaphore. signal ( )
446- }
447- semaphore. wait ( )
448- return capabilities
449- }
450-
451407 public func fetchUserProfile(
452408 account: Account ,
453409 options: NKRequestOptions = . init( ) ,
0 commit comments