77 lines
1.6 KiB
Swift
77 lines
1.6 KiB
Swift
import Foundation
|
|
import Models
|
|
import Services
|
|
import Utils
|
|
import Views
|
|
|
|
final class ShareExtensionSaveOperation: Operation, URLSessionDelegate {
|
|
let pageScrapePayload: PageScrapePayload
|
|
let shareExtensionViewModel: ShareExtensionViewModel
|
|
|
|
var queue: OperationQueue?
|
|
var uploadTask: URLSessionTask?
|
|
|
|
enum State: Int {
|
|
case created
|
|
case started
|
|
case finished
|
|
}
|
|
|
|
init(pageScrapePayload: PageScrapePayload, shareExtensionViewModel: ShareExtensionViewModel) {
|
|
self.pageScrapePayload = pageScrapePayload
|
|
self.shareExtensionViewModel = shareExtensionViewModel
|
|
|
|
self.state = .created
|
|
}
|
|
|
|
public var state: State = .created {
|
|
willSet {
|
|
willChangeValue(forKey: "isReady")
|
|
willChangeValue(forKey: "isExecuting")
|
|
willChangeValue(forKey: "isFinished")
|
|
willChangeValue(forKey: "isCancelled")
|
|
}
|
|
didSet {
|
|
didChangeValue(forKey: "isCancelled")
|
|
didChangeValue(forKey: "isFinished")
|
|
didChangeValue(forKey: "isExecuting")
|
|
didChangeValue(forKey: "isReady")
|
|
}
|
|
}
|
|
|
|
override var isAsynchronous: Bool {
|
|
true
|
|
}
|
|
|
|
override var isReady: Bool {
|
|
true
|
|
}
|
|
|
|
override var isExecuting: Bool {
|
|
self.state == .started
|
|
}
|
|
|
|
override var isFinished: Bool {
|
|
self.state == .finished
|
|
}
|
|
|
|
override func start() {
|
|
guard !isCancelled else { return }
|
|
state = .started
|
|
queue = OperationQueue()
|
|
|
|
Task {
|
|
let pageCreated = await shareExtensionViewModel.createPage(
|
|
pageScrapePayload: pageScrapePayload
|
|
)
|
|
if pageCreated {
|
|
state = .finished
|
|
}
|
|
}
|
|
}
|
|
|
|
override func cancel() {
|
|
super.cancel()
|
|
}
|
|
}
|