From d28a6723780d2d5171abe64b809aca1d12eec0b5 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sat, 25 Jul 2020 16:12:12 -0500 Subject: [PATCH] Reimplement starred toolbar toggle --- Multiplatform/Shared/SceneModel.swift | 2 +- Multiplatform/Shared/Timeline/TimelineModel.swift | 15 ++++++++++++++- 2 files changed, 15 insertions(+), 2 deletions(-) diff --git a/Multiplatform/Shared/SceneModel.swift b/Multiplatform/Shared/SceneModel.swift index 682060f28..3bd922d37 100644 --- a/Multiplatform/Shared/SceneModel.swift +++ b/Multiplatform/Shared/SceneModel.swift @@ -73,7 +73,7 @@ final class SceneModel: ObservableObject { /// Toggles the star status for the selected articles func toggleStarredStatusForSelectedArticles() { -// timelineModel.toggleStarredStatusForSelectedArticles() + timelineModel.toggleStarredStatusForSelectedArticlesSubject.send() } /// Opens the selected article in an external browser diff --git a/Multiplatform/Shared/Timeline/TimelineModel.swift b/Multiplatform/Shared/Timeline/TimelineModel.swift index 77c8a25f3..0c8773acf 100644 --- a/Multiplatform/Shared/Timeline/TimelineModel.swift +++ b/Multiplatform/Shared/Timeline/TimelineModel.swift @@ -37,7 +37,7 @@ class TimelineModel: ObservableObject, UndoableCommandRunner { var articleStatusChangePublisher: AnyPublisher, Never>? var toggleReadStatusForSelectedArticlesSubject = PassthroughSubject() - + var toggleStarredStatusForSelectedArticlesSubject = PassthroughSubject() var readFilterEnabledTable = [FeedIdentifier: Bool]() @@ -270,8 +270,21 @@ private extension TimelineModel { return (selectedArticles, ArticleStatus.Key.read, false) } } + + let toggleStarred = toggleStarredStatusForSelectedArticlesSubject + .withLatestFrom(selectedArticlesPublisher) + .filter { !$0.isEmpty } + .map {selectedArticles -> ([Article], ArticleStatus.Key, Bool) in + if selectedArticles.anyArticleIsUnstarred() { + return (selectedArticles, ArticleStatus.Key.starred, true) + } else { + return (selectedArticles, ArticleStatus.Key.read, false) + } + } + toggleReadPublisher + .merge(with: toggleStarred) .sink { [weak self] (articles, key, flag) in if let undoManager = self?.undoManager, let markReadCommand = MarkStatusCommand(initialArticles: articles, statusKey: key, flag: flag, undoManager: undoManager) {