From 3955151daf450fded74385f4c49ad19cc2a078e5 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Thu, 15 Apr 2021 14:29:49 -0500 Subject: [PATCH] Make sure mark as read completes before searching for the next unread. Fixes #2952 --- Mac/AppDelegate.swift | 4 ++-- Mac/MainWindow/MainWindowController.swift | 5 +++-- Mac/MainWindow/Timeline/TimelineViewController.swift | 4 ++-- Shared/Commands/MarkStatusCommand.swift | 8 ++++---- 4 files changed, 11 insertions(+), 10 deletions(-) diff --git a/Mac/AppDelegate.swift b/Mac/AppDelegate.swift index 9b80e8b54..cf4af585a 100644 --- a/Mac/AppDelegate.swift +++ b/Mac/AppDelegate.swift @@ -843,7 +843,7 @@ private extension AppDelegate { os_log(.debug, "No article found from search using %@", articleID) return } - account!.markArticles(article!, statusKey: .read, flag: true) + account!.markArticles(article!, statusKey: .read, flag: true) { _ in } } func handleMarkAsStarred(userInfo: [AnyHashable: Any]) { @@ -862,6 +862,6 @@ private extension AppDelegate { os_log(.debug, "No article found from search using %@", articleID) return } - account!.markArticles(article!, statusKey: .starred, flag: true) + account!.markArticles(article!, statusKey: .starred, flag: true) { _ in } } } diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index 4db72dd1e..84e73ef21 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -397,8 +397,9 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { } @IBAction func markAllAsReadAndGoToNextUnread(_ sender: Any?) { - markAllAsRead(sender) - nextUnread(sender) + currentTimelineViewController?.markAllAsRead() { + self.nextUnread(sender) + } } @IBAction func markUnreadAndGoToNextUnread(_ sender: Any?) { diff --git a/Mac/MainWindow/Timeline/TimelineViewController.swift b/Mac/MainWindow/Timeline/TimelineViewController.swift index 18da6aeb8..f8ff8f37b 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController.swift @@ -233,8 +233,8 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr // MARK: - API - func markAllAsRead() { - guard let undoManager = undoManager, let markReadCommand = MarkStatusCommand(initialArticles: articles, markingRead: true, undoManager: undoManager) else { + func markAllAsRead(completion: (() -> Void)? = nil) { + guard let undoManager = undoManager, let markReadCommand = MarkStatusCommand(initialArticles: articles, markingRead: true, undoManager: undoManager, completion: completion) else { return } runCommand(markReadCommand) diff --git a/Shared/Commands/MarkStatusCommand.swift b/Shared/Commands/MarkStatusCommand.swift index b1e5f4c5c..e6eae4b54 100644 --- a/Shared/Commands/MarkStatusCommand.swift +++ b/Shared/Commands/MarkStatusCommand.swift @@ -41,12 +41,12 @@ final class MarkStatusCommand: UndoableCommand { self.redoActionName = actionName } - convenience init?(initialArticles: [Article], markingRead: Bool, undoManager: UndoManager) { - self.init(initialArticles: initialArticles, statusKey: .read, flag: markingRead, undoManager: undoManager) + convenience init?(initialArticles: [Article], markingRead: Bool, undoManager: UndoManager, completion: (() -> Void)? = nil) { + self.init(initialArticles: initialArticles, statusKey: .read, flag: markingRead, undoManager: undoManager, completion: completion) } - convenience init?(initialArticles: [Article], markingStarred: Bool, undoManager: UndoManager) { - self.init(initialArticles: initialArticles, statusKey: .starred, flag: markingStarred, undoManager: undoManager) + convenience init?(initialArticles: [Article], markingStarred: Bool, undoManager: UndoManager, completion: (() -> Void)? = nil) { + self.init(initialArticles: initialArticles, statusKey: .starred, flag: markingStarred, undoManager: undoManager, completion: completion) } func perform() {