co-maps/iphone/Maps/Core/BackgroundFetchScheduler/BackgroundFetchTask/BackgroundFetchTask.swift
2025-11-22 13:58:55 +01:00

38 lines
1.5 KiB
Swift

@objc class BackgroundFetchTask: NSObject {
var frameworkType: BackgroundFetchTaskFrameworkType { return .none }
private var backgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid
private var completionHandler: BackgroundFetchScheduler.FetchResultHandler?
func start(completion: @escaping BackgroundFetchScheduler.FetchResultHandler) {
completionHandler = completion
backgroundTaskIdentifier = UIApplication.shared.beginBackgroundTask(withName:description,
expirationHandler: {
self.finish(.failed)
})
if backgroundTaskIdentifier != UIBackgroundTaskIdentifier.invalid { fire() }
}
fileprivate func fire() {
finish(.failed)
}
fileprivate func finish(_ result: UIBackgroundFetchResult) {
guard backgroundTaskIdentifier != UIBackgroundTaskIdentifier.invalid else { return }
UIApplication.shared.endBackgroundTask(UIBackgroundTaskIdentifier(rawValue: backgroundTaskIdentifier.rawValue))
backgroundTaskIdentifier = UIBackgroundTaskIdentifier.invalid
completionHandler?(result)
}
}
@objc(MWMBackgroundEditsUpload)
final class BackgroundEditsUpload: BackgroundFetchTask {
override fileprivate func fire() {
MWMEditorHelper.uploadEdits(self.finish)
}
override var description: String {
return "Edits upload"
}
}