|
|
|
|
@ -33,9 +33,6 @@ actor ApiCallCollection<T: Storable>: SomeCallCollection { |
|
|
|
|
/// Indicates if the collection is currently retrying ApiCalls |
|
|
|
|
fileprivate var _isRescheduling: Bool = false |
|
|
|
|
|
|
|
|
|
/// The task of waiting and executing ApiCalls |
|
|
|
|
fileprivate var _reschedulingTask: Task<Void, any Error>? = nil |
|
|
|
|
|
|
|
|
|
/// Indicates whether the collection content has changed |
|
|
|
|
/// Initiates a write when true |
|
|
|
|
fileprivate var _hasChanged: Bool = false { |
|
|
|
|
@ -123,7 +120,7 @@ actor ApiCallCollection<T: Storable>: SomeCallCollection { |
|
|
|
|
|
|
|
|
|
/// Removes all objects in memory and deletes the JSON file |
|
|
|
|
func reset() { |
|
|
|
|
self._reschedulingTask?.cancel() |
|
|
|
|
self._isRescheduling = false |
|
|
|
|
self.items.removeAll() |
|
|
|
|
|
|
|
|
|
do { |
|
|
|
|
@ -136,6 +133,7 @@ actor ApiCallCollection<T: Storable>: SomeCallCollection { |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
/// Wait for an exponentionnaly long time depending on the number of attemps |
|
|
|
|
fileprivate func _wait() async { |
|
|
|
|
|
|
|
|
|
let delay = pow(2, self._attemptLoops) |
|
|
|
|
@ -159,7 +157,7 @@ actor ApiCallCollection<T: Storable>: SomeCallCollection { |
|
|
|
|
/// Reschedule the execution of API calls |
|
|
|
|
fileprivate func _rescheduleApiCalls() async { |
|
|
|
|
|
|
|
|
|
Logger.log("\(T.resourceName()) > RESCHED") |
|
|
|
|
// Logger.log("\(T.resourceName()) > RESCHED") |
|
|
|
|
guard !self._isRescheduling else { return } |
|
|
|
|
guard self.items.isNotEmpty else { return } |
|
|
|
|
|
|
|
|
|
@ -179,7 +177,7 @@ actor ApiCallCollection<T: Storable>: SomeCallCollection { |
|
|
|
|
case .post: |
|
|
|
|
let result: T = try await self._executeApiCall(apiCall) |
|
|
|
|
StoreCenter.main.updateFromServerInstance(result) |
|
|
|
|
Logger.log("\(T.resourceName()) > SUCCESS!") |
|
|
|
|
// Logger.log("\(T.resourceName()) > SUCCESS!") |
|
|
|
|
case .put: |
|
|
|
|
let _: T = try await self._executeApiCall(apiCall) |
|
|
|
|
case .delete: |
|
|
|
|
@ -188,19 +186,19 @@ actor ApiCallCollection<T: Storable>: SomeCallCollection { |
|
|
|
|
let _: [T] = try await self._executeApiCall(apiCall) |
|
|
|
|
} |
|
|
|
|
} catch { |
|
|
|
|
Logger.log("\(T.resourceName()) > API CALL RETRY ERROR:") |
|
|
|
|
// Logger.log("\(T.resourceName()) > API CALL RETRY ERROR:") |
|
|
|
|
Logger.error(error) |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Logger.log("\(T.resourceName()) > STOP RESCHED") |
|
|
|
|
// Logger.log("\(T.resourceName()) > STOP RESCHED") |
|
|
|
|
|
|
|
|
|
self._isRescheduling = false |
|
|
|
|
if self.items.isNotEmpty { |
|
|
|
|
await self._rescheduleApiCalls() |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
Logger.log("\(T.resourceName()) > isRescheduling = \(self._isRescheduling)") |
|
|
|
|
// Logger.log("\(T.resourceName()) > isRescheduling = \(self._isRescheduling)") |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
// MARK: - Synchronization |
|
|
|
|
|