mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Store more article view controller state when destroying and recreating them. Issue #1729
This commit is contained in:
@@ -14,6 +14,11 @@ import SafariServices
|
||||
|
||||
class ArticleViewController: UIViewController {
|
||||
|
||||
typealias State = (extractedArticle: ExtractedArticle?,
|
||||
isShowingExtractedArticle: Bool,
|
||||
articleExtractorButtonState: ArticleExtractorButtonState,
|
||||
windowScrollY: Int)
|
||||
|
||||
@IBOutlet private weak var nextUnreadBarButtonItem: UIBarButtonItem!
|
||||
@IBOutlet private weak var prevArticleBarButtonItem: UIBarButtonItem!
|
||||
@IBOutlet private weak var nextArticleBarButtonItem: UIBarButtonItem!
|
||||
@@ -49,7 +54,16 @@ class ArticleViewController: UIViewController {
|
||||
updateUI()
|
||||
}
|
||||
}
|
||||
var restoreWindowScrollY = 0
|
||||
|
||||
var currentState: State? {
|
||||
guard let controller = currentWebViewController else { return nil}
|
||||
return State(extractedArticle: controller.extractedArticle,
|
||||
isShowingExtractedArticle: controller.isShowingExtractedArticle,
|
||||
articleExtractorButtonState: controller.articleExtractorButtonState,
|
||||
windowScrollY: controller.windowScrollY)
|
||||
}
|
||||
|
||||
var restoreState: State?
|
||||
|
||||
private let keyboardManager = KeyboardManager(type: .detail)
|
||||
override var keyCommands: [UIKeyCommand]? {
|
||||
@@ -89,7 +103,12 @@ class ArticleViewController: UIViewController {
|
||||
])
|
||||
|
||||
let controller = createWebViewController(article)
|
||||
controller.restoreWindowScrollY = restoreWindowScrollY
|
||||
if let state = restoreState {
|
||||
controller.extractedArticle = state.extractedArticle
|
||||
controller.isShowingExtractedArticle = state.isShowingExtractedArticle
|
||||
controller.articleExtractorButtonState = state.articleExtractorButtonState
|
||||
controller.windowScrollY = state.windowScrollY
|
||||
}
|
||||
articleExtractorButton.buttonState = controller.articleExtractorButtonState
|
||||
pageViewController.setViewControllers([controller], direction: .forward, animated: false, completion: nil)
|
||||
|
||||
@@ -239,18 +258,16 @@ class ArticleViewController: UIViewController {
|
||||
currentWebViewController?.fullReload()
|
||||
}
|
||||
|
||||
func stopArticleExtractorIfProcessing() {
|
||||
currentWebViewController?.stopArticleExtractorIfProcessing()
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: WebViewControllerDelegate
|
||||
|
||||
extension ArticleViewController: WebViewControllerDelegate {
|
||||
|
||||
func webViewController(_ webViewController: WebViewController, restoreWindowScrollYDidUpdate restoreWindowScrollY: Int) {
|
||||
if webViewController === currentWebViewController {
|
||||
self.restoreWindowScrollY = restoreWindowScrollY
|
||||
}
|
||||
}
|
||||
|
||||
func webViewController(_ webViewController: WebViewController, articleExtractorButtonStateDidUpdate buttonState: ArticleExtractorButtonState) {
|
||||
if webViewController === currentWebViewController {
|
||||
articleExtractorButton.buttonState = buttonState
|
||||
|
||||
Reference in New Issue
Block a user