39 lines
1.5 KiB
Swift
39 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"
|
||
|
|
}
|
||
|
|
}
|