Move from using views for the queue to using an array and remove unneeded flush of queue

This commit is contained in:
Maurice Parker 2020-07-16 13:56:07 -05:00
parent cdf8ad1277
commit 84389e2cf4
3 changed files with 12 additions and 48 deletions

View File

@ -225,7 +225,7 @@ class ArticleViewController: UIViewController {
} }
@objc func contentSizeCategoryDidChange(_ note: Notification) { @objc func contentSizeCategoryDidChange(_ note: Notification) {
resetWebViewController() currentWebViewController?.fullReload()
} }
@objc func willEnterForeground(_ note: Notification) { @objc func willEnterForeground(_ note: Notification) {
@ -470,13 +470,4 @@ private extension ArticleViewController {
return controller return controller
} }
func resetWebViewController() {
coordinator.webViewProvider.flushQueue()
coordinator.webViewProvider.replenishQueueIfNeeded()
if let controller = currentWebViewController {
controller.fullReload()
self.pageViewController.setViewControllers([controller], direction: .forward, animated: false, completion: nil)
}
}
} }

View File

@ -16,19 +16,14 @@ class WebViewProvider: NSObject {
private let articleIconSchemeHandler: ArticleIconSchemeHandler private let articleIconSchemeHandler: ArticleIconSchemeHandler
private let operationQueue = MainThreadOperationQueue() private let operationQueue = MainThreadOperationQueue()
private var queue = UIView() private var queue = NSMutableArray()
init(coordinator: SceneCoordinator, viewController: UIViewController) { init(coordinator: SceneCoordinator) {
articleIconSchemeHandler = ArticleIconSchemeHandler(coordinator: coordinator) articleIconSchemeHandler = ArticleIconSchemeHandler(coordinator: coordinator)
super.init() super.init()
viewController.view.insertSubview(queue, at: 0)
replenishQueueIfNeeded() replenishQueueIfNeeded()
} }
func flushQueue() {
operationQueue.add(WebViewProviderFlushQueueOperation(queue: queue))
}
func replenishQueueIfNeeded() { func replenishQueueIfNeeded() {
operationQueue.add(WebViewProviderReplenishQueueOperation(queue: queue, articleIconSchemeHandler: articleIconSchemeHandler)) operationQueue.add(WebViewProviderReplenishQueueOperation(queue: queue, articleIconSchemeHandler: articleIconSchemeHandler))
} }
@ -40,28 +35,6 @@ class WebViewProvider: NSObject {
} }
class WebViewProviderFlushQueueOperation: MainThreadOperation {
// MainThreadOperation
public var isCanceled = false
public var id: Int?
public weak var operationDelegate: MainThreadOperationDelegate?
public var name: String? = "WebViewProviderFlushQueueOperation"
public var completionBlock: MainThreadOperation.MainThreadOperationCompletionBlock?
private var queue: UIView
init(queue: UIView) {
self.queue = queue
}
func run() {
queue.subviews.forEach { $0.removeFromSuperview() }
self.operationDelegate?.operationDidComplete(self)
}
}
class WebViewProviderReplenishQueueOperation: MainThreadOperation { class WebViewProviderReplenishQueueOperation: MainThreadOperation {
// MainThreadOperation // MainThreadOperation
@ -73,18 +46,18 @@ class WebViewProviderReplenishQueueOperation: MainThreadOperation {
private let minimumQueueDepth = 3 private let minimumQueueDepth = 3
private var queue: UIView private var queue: NSMutableArray
private var articleIconSchemeHandler: ArticleIconSchemeHandler private var articleIconSchemeHandler: ArticleIconSchemeHandler
init(queue: UIView, articleIconSchemeHandler: ArticleIconSchemeHandler) { init(queue: NSMutableArray, articleIconSchemeHandler: ArticleIconSchemeHandler) {
self.queue = queue self.queue = queue
self.articleIconSchemeHandler = articleIconSchemeHandler self.articleIconSchemeHandler = articleIconSchemeHandler
} }
func run() { func run() {
while queue.subviews.count < minimumQueueDepth { while queue.count < minimumQueueDepth {
let webView = PreloadedWebView(articleIconSchemeHandler: articleIconSchemeHandler) let webView = PreloadedWebView(articleIconSchemeHandler: articleIconSchemeHandler)
queue.insertSubview(webView, at: 0) queue.insert(webView, at: 0)
webView.preload() webView.preload()
} }
self.operationDelegate?.operationDidComplete(self) self.operationDelegate?.operationDidComplete(self)
@ -101,21 +74,21 @@ class WebViewProviderDequeueOperation: MainThreadOperation {
public var name: String? = "WebViewProviderFlushQueueOperation" public var name: String? = "WebViewProviderFlushQueueOperation"
public var completionBlock: MainThreadOperation.MainThreadOperationCompletionBlock? public var completionBlock: MainThreadOperation.MainThreadOperationCompletionBlock?
private var queue: UIView private var queue: NSMutableArray
private var articleIconSchemeHandler: ArticleIconSchemeHandler private var articleIconSchemeHandler: ArticleIconSchemeHandler
private var completion: (PreloadedWebView) -> () private var completion: (PreloadedWebView) -> ()
init(queue: UIView, articleIconSchemeHandler: ArticleIconSchemeHandler, completion: @escaping (PreloadedWebView) -> ()) { init(queue: NSMutableArray, articleIconSchemeHandler: ArticleIconSchemeHandler, completion: @escaping (PreloadedWebView) -> ()) {
self.queue = queue self.queue = queue
self.articleIconSchemeHandler = articleIconSchemeHandler self.articleIconSchemeHandler = articleIconSchemeHandler
self.completion = completion self.completion = completion
} }
func run() { func run() {
if let webView = queue.subviews.last as? PreloadedWebView { if let webView = queue.lastObject as? PreloadedWebView {
webView.ready { preloadedWebView in webView.ready { preloadedWebView in
preloadedWebView.removeFromSuperview()
self.completion(preloadedWebView) self.completion(preloadedWebView)
self.queue.remove(webView)
} }
self.operationDelegate?.operationDidComplete(self) self.operationDelegate?.operationDidComplete(self)
return return

View File

@ -37,7 +37,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
return rootSplitViewController.undoManager return rootSplitViewController.undoManager
} }
lazy var webViewProvider = WebViewProvider(coordinator: self, viewController: rootSplitViewController) lazy var webViewProvider = WebViewProvider(coordinator: self)
private var panelMode: PanelMode = .unset private var panelMode: PanelMode = .unset