From 4a63b28c73c11c9d6cc7b380f638b56a40b7fd14 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sun, 26 Jan 2020 14:21:04 -0700 Subject: [PATCH] Change how next and previous articles are selected so that animation timings can't impact them. Issue #1707 --- iOS/Article/ArticleViewController.swift | 8 ++++++-- iOS/SceneCoordinator.swift | 14 ++++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/iOS/Article/ArticleViewController.swift b/iOS/Article/ArticleViewController.swift index 38c51c74f..0599c7d14 100644 --- a/iOS/Article/ArticleViewController.swift +++ b/iOS/Article/ArticleViewController.swift @@ -268,14 +268,18 @@ extension ArticleViewController: WebViewControllerDelegate { extension ArticleViewController: UIPageViewControllerDataSource { func pageViewController(_ pageViewController: UIPageViewController, viewControllerBefore viewController: UIViewController) -> UIViewController? { - guard let article = coordinator.prevArticle else { + guard let webViewController = viewController as? WebViewController, + let currentArticle = webViewController.article, + let article = coordinator.findPrevArticle(currentArticle) else { return nil } return createWebViewController(article) } func pageViewController(_ pageViewController: UIPageViewController, viewControllerAfter viewController: UIViewController) -> UIViewController? { - guard let article = coordinator.nextArticle else { + guard let webViewController = viewController as? WebViewController, + let currentArticle = webViewController.article, + let article = coordinator.findNextArticle(currentArticle) else { return nil } return createWebViewController(article) diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 249ed48d0..5d737cbfd 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -825,6 +825,20 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { } + func findPrevArticle(_ article: Article) -> Article? { + guard let index = articles.firstIndex(of: article), index > 0 else { + return nil + } + return articles[index - 1] + } + + func findNextArticle(_ article: Article) -> Article? { + guard let index = articles.firstIndex(of: article), index + 1 != articles.count else { + return nil + } + return articles[index + 1] + } + func selectPrevArticle() { if let article = prevArticle { selectArticle(article)