Files
omnivore/apple/OmnivoreKit/Sources/App/AppExtensions/Share/ShareExtensionSaveOperation.swift
2022-07-12 22:31:00 -07:00

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()
}
}