diff --git a/Shared/Timeline/ArticleArray.swift b/Shared/Timeline/ArticleArray.swift index 60394f084..36e53940f 100644 --- a/Shared/Timeline/ArticleArray.swift +++ b/Shared/Timeline/ArticleArray.swift @@ -109,5 +109,30 @@ extension Array where Element == Article { } return true } + + func articlesAbove(article: Article) -> [Article] { + guard let position = firstIndex(of: article) else { + return [] + } + + let articlesAbove = self[.. [Article] { + guard let position = firstIndex(of: article) else { + return [] + } + + var articlesBelow = Array(self[position...]) + + guard !articlesBelow.isEmpty else { + return [] + } + + articlesBelow.removeFirst() + + return articlesBelow + } } diff --git a/iOS/SceneCoordinator.swift b/iOS/SceneCoordinator.swift index 81742e68a..441b3fb05 100644 --- a/iOS/SceneCoordinator.swift +++ b/iOS/SceneCoordinator.swift @@ -872,7 +872,8 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { } func canMarkAboveAsRead(for article: Article) -> Bool { - return articles.first != article + let articlesAboveArray = articles.articlesAbove(article: article) + return articlesAboveArray.canMarkAllAsRead() } func markAboveAsRead() { @@ -884,16 +885,13 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { } func markAboveAsRead(_ article: Article) { - guard let position = articles.firstIndex(of: article) else { - return - } - - let articlesAbove = articles[.. Bool { - return articles.last != article + let articleBelowArray = articles.articlesBelow(article: article) + return articleBelowArray.canMarkAllAsRead() } func markBelowAsRead() { @@ -905,18 +903,8 @@ class SceneCoordinator: NSObject, UndoableCommandRunner, UnreadCountProvider { } func markBelowAsRead(_ article: Article) { - guard let position = articles.firstIndex(of: article) else { - return - } - - var articlesBelow = Array(articles[position...]) - - guard !articlesBelow.isEmpty else { - return - } - - articlesBelow.removeFirst() - markAllAsRead(articlesBelow) + let articleBelowArray = articles.articlesBelow(article: article) + markAllAsRead(articleBelowArray) } func markAsReadForCurrentArticle() {