From c26c705de078d9676c880cfb68d93b7d978a6044 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Sun, 4 Feb 2018 11:45:51 -0800 Subject: [PATCH] Make Mark All as Read command in sidebar gear menu work. --- ...idebarViewController+ContextualMenus.swift | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/Evergreen/MainWindow/Sidebar/SidebarViewController+ContextualMenus.swift b/Evergreen/MainWindow/Sidebar/SidebarViewController+ContextualMenus.swift index 8f91fcfa4..7c381b812 100644 --- a/Evergreen/MainWindow/Sidebar/SidebarViewController+ContextualMenus.swift +++ b/Evergreen/MainWindow/Sidebar/SidebarViewController+ContextualMenus.swift @@ -55,7 +55,19 @@ extension SidebarViewController { @objc func markObjectsReadFromContextualMenu(_ sender: Any?) { + guard let menuItem = sender as? NSMenuItem, let objects = menuItem.representedObject as? [Any] else { + return + } + + let articles = unreadArticles(for: objects) + if articles.isEmpty { + return + } + guard let undoManager = undoManager, let markReadCommand = MarkReadOrUnreadCommand(initialArticles: Array(articles), markingRead: true, undoManager: undoManager) else { + return + } + runCommand(markReadCommand) } @objc func deleteFromContextualMenu(_ sender: Any?) { @@ -215,5 +227,16 @@ private extension SidebarViewController { item.target = self return item } + + func unreadArticles(for objects: [Any]) -> Set
{ + + var articles = Set
() + for object in objects { + if let articleFetcher = object as? ArticleFetcher { + articles.formUnion(articleFetcher.fetchUnreadArticles()) + } + } + return articles + } }