From e575aeca3cea131858d233a021fb245e3fdc59dd Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Tue, 22 Sep 2020 19:42:14 -0500 Subject: [PATCH] Restore functionality to mark older as read using keyboard shortcut. Issue #2451 --- Mac/MainWindow/MainWindowController.swift | 6 +++- .../Timeline/TimelineViewController.swift | 31 +++++++++++++++++++ 2 files changed, 36 insertions(+), 1 deletion(-) diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index dd243a2fb..122f6dad8 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -402,7 +402,11 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { sidebarViewController?.focus() } } - + + @IBAction func markOlderArticlesAsRead(_ sender: Any?) { + currentTimelineViewController?.markOlderArticlesRead() + } + @IBAction func markAboveArticlesAsRead(_ sender: Any?) { currentTimelineViewController?.markAboveArticlesRead() } diff --git a/Mac/MainWindow/Timeline/TimelineViewController.swift b/Mac/MainWindow/Timeline/TimelineViewController.swift index 2377adc4e..aa6c99766 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController.swift @@ -460,6 +460,10 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr return .canDoNothing } + func markOlderArticlesRead() { + markOlderArticlesRead(selectedArticles) + } + func markAboveArticlesRead() { markAboveArticlesRead(selectedArticles) } @@ -478,6 +482,33 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr return articles.articlesBelow(article: last).canMarkAllAsRead() } + func markOlderArticlesRead(_ selectedArticles: [Article]) { + // Mark articles older than the selectedArticles(s) as read. + + var cutoffDate: Date? = nil + for article in selectedArticles { + if cutoffDate == nil { + cutoffDate = article.logicalDatePublished + } + else if cutoffDate! > article.logicalDatePublished { + cutoffDate = article.logicalDatePublished + } + } + if cutoffDate == nil { + return + } + + let articlesToMark = articles.filter { $0.logicalDatePublished < cutoffDate! } + if articlesToMark.isEmpty { + return + } + + guard let undoManager = undoManager, let markReadCommand = MarkStatusCommand(initialArticles: articlesToMark, markingRead: true, undoManager: undoManager) else { + return + } + runCommand(markReadCommand) + } + func markAboveArticlesRead(_ selectedArticles: [Article]) { guard let first = selectedArticles.first else { return } let articlesToMark = articles.articlesAbove(article: first)