From d83ca618fb2b487f61cb90b1188f5413977d5c36 Mon Sep 17 00:00:00 2001 From: Maurice Parker Date: Sat, 25 Jul 2020 16:56:38 -0500 Subject: [PATCH] Reimplement open in browser toolbar button functionality --- Multiplatform/Shared/SceneModel.swift | 2 +- .../Shared/Timeline/TimelineModel.swift | 21 +++++++++++++++++++ 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/Multiplatform/Shared/SceneModel.swift b/Multiplatform/Shared/SceneModel.swift index 0c7b6bf4d..3857e3c71 100644 --- a/Multiplatform/Shared/SceneModel.swift +++ b/Multiplatform/Shared/SceneModel.swift @@ -77,7 +77,7 @@ final class SceneModel: ObservableObject { /// Opens the selected article in an external browser func openSelectedArticleInBrowser() { -// timelineModel.openSelectedArticleInBrowser() + timelineModel.openSelectedArticlesInBrowserSubject.send() } /// Retrieves the article before the given article in the Timeline diff --git a/Multiplatform/Shared/Timeline/TimelineModel.swift b/Multiplatform/Shared/Timeline/TimelineModel.swift index beef15bd8..e099ffc1d 100644 --- a/Multiplatform/Shared/Timeline/TimelineModel.swift +++ b/Multiplatform/Shared/Timeline/TimelineModel.swift @@ -41,6 +41,7 @@ class TimelineModel: ObservableObject, UndoableCommandRunner { var markAllAsReadSubject = PassthroughSubject() var toggleReadStatusForSelectedArticlesSubject = PassthroughSubject() var toggleStarredStatusForSelectedArticlesSubject = PassthroughSubject() + var openSelectedArticlesInBrowserSubject = PassthroughSubject() var readFilterEnabledTable = [FeedIdentifier: Bool]() @@ -63,6 +64,7 @@ class TimelineModel: ObservableObject, UndoableCommandRunner { subscribeToArticleStatusChanges() // subscribeToAccountDidDownloadArticles() subscribeToArticleMarkingEvents() + subscribeToOpenInBrowserEvents() } // MARK: API @@ -310,6 +312,25 @@ private extension TimelineModel { } + func subscribeToOpenInBrowserEvents() { + guard let selectedArticlesPublisher = selectedArticlesPublisher else { return } + + let selectedArticleOpenInBrowserPublisher = openSelectedArticlesInBrowserSubject + .withLatestFrom(selectedArticlesPublisher) + .compactMap { $0.first?.preferredLink } + + selectedArticleOpenInBrowserPublisher + .sink { link in + #if os(macOS) + Browser.open(link, invertPreference: NSApp.currentEvent?.modifierFlags.contains(.shift) ?? false) + #else + guard let url = URL(string: link) else { return } + UIApplication.shared.open(url, options: [:]) + #endif + } + .store(in: &cancellables) + } + // MARK: Timeline Management func performBlockAndRestoreSelection(_ block: (() -> Void)) {