mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-09 16:48:45 +01:00
Make state restoration work on both the iPad and the iPhone
This commit is contained in:
parent
cccfc69d43
commit
f44308c0c5
@ -59,6 +59,14 @@ class ArticleViewController: UIViewController {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
var restoreScrollPosition: (isShowingExtractedArticle: Bool, articleWindowScrollY: Int)? {
|
||||||
|
didSet {
|
||||||
|
if let rsp = restoreScrollPosition {
|
||||||
|
currentWebViewController?.setScrollPosition(isShowingExtractedArticle: rsp.isShowingExtractedArticle, articleWindowScrollY: rsp.articleWindowScrollY)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
var currentState: State? {
|
var currentState: State? {
|
||||||
guard let controller = currentWebViewController else { return nil}
|
guard let controller = currentWebViewController else { return nil}
|
||||||
return State(extractedArticle: controller.extractedArticle,
|
return State(extractedArticle: controller.extractedArticle,
|
||||||
@ -125,6 +133,10 @@ class ArticleViewController: UIViewController {
|
|||||||
controller = createWebViewController(article, updateView: true)
|
controller = createWebViewController(article, updateView: true)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if let rsp = restoreScrollPosition {
|
||||||
|
controller.setScrollPosition(isShowingExtractedArticle: rsp.isShowingExtractedArticle, articleWindowScrollY: rsp.articleWindowScrollY)
|
||||||
|
}
|
||||||
|
|
||||||
articleExtractorButton.buttonState = controller.articleExtractorButtonState
|
articleExtractorButton.buttonState = controller.articleExtractorButtonState
|
||||||
|
|
||||||
self.pageViewController.setViewControllers([controller], direction: .forward, animated: false, completion: nil)
|
self.pageViewController.setViewControllers([controller], direction: .forward, animated: false, completion: nil)
|
||||||
|
@ -461,8 +461,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
|
|||||||
|
|
||||||
if let (feedIndexPath, articleID, isShowingExtractedArticle, articleWindowScrollY) = deferredFeedAndArticleSelect {
|
if let (feedIndexPath, articleID, isShowingExtractedArticle, articleWindowScrollY) = deferredFeedAndArticleSelect {
|
||||||
selectFeed(indexPath: feedIndexPath) {
|
selectFeed(indexPath: feedIndexPath) {
|
||||||
self.selectArticleInCurrentFeed(articleID)
|
self.selectArticleInCurrentFeed(articleID, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)
|
||||||
self.articleViewController?.setScrollPosition(isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -836,7 +835,7 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func selectArticle(_ article: Article?, animations: Animations = []) {
|
func selectArticle(_ article: Article?, animations: Animations = [], isShowingExtractedArticle: Bool? = nil, articleWindowScrollY: Int? = nil) {
|
||||||
guard article != currentArticle else { return }
|
guard article != currentArticle else { return }
|
||||||
|
|
||||||
currentArticle = article
|
currentArticle = article
|
||||||
@ -866,6 +865,9 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
|
|||||||
|
|
||||||
masterTimelineViewController?.updateArticleSelection(animations: animations)
|
masterTimelineViewController?.updateArticleSelection(animations: animations)
|
||||||
currentArticleViewController.article = article
|
currentArticleViewController.article = article
|
||||||
|
if let isShowingExtractedArticle = isShowingExtractedArticle, let articleWindowScrollY = articleWindowScrollY {
|
||||||
|
currentArticleViewController.restoreScrollPosition = (isShowingExtractedArticle, articleWindowScrollY)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func beginSearching() {
|
func beginSearching() {
|
||||||
@ -1284,9 +1286,9 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider {
|
|||||||
rootSplitViewController.preferredDisplayMode = rootSplitViewController.displayMode == .allVisible ? .primaryHidden : .allVisible
|
rootSplitViewController.preferredDisplayMode = rootSplitViewController.displayMode == .allVisible ? .primaryHidden : .allVisible
|
||||||
}
|
}
|
||||||
|
|
||||||
func selectArticleInCurrentFeed(_ articleID: String) {
|
func selectArticleInCurrentFeed(_ articleID: String, isShowingExtractedArticle: Bool? = nil, articleWindowScrollY: Int? = nil) {
|
||||||
if let article = self.articles.first(where: { $0.articleID == articleID }) {
|
if let article = self.articles.first(where: { $0.articleID == articleID }) {
|
||||||
self.selectArticle(article)
|
self.selectArticle(article, isShowingExtractedArticle: isShowingExtractedArticle, articleWindowScrollY: articleWindowScrollY)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user