From 7f59f94542f6c3d070f75c920ef66ca92515bc4e Mon Sep 17 00:00:00 2001 From: Nate Weaver Date: Sat, 8 Oct 2022 01:23:24 -0500 Subject: [PATCH] Move multi-url opening to an extension on Browser Also reword the alert a bit and add the number of pages to the "Open" button --- Mac/Browser.swift | 39 +++++++++++++++++++ Mac/MainWindow/MainWindowController.swift | 32 +-------------- ...melineViewController+ContextualMenus.swift | 3 +- .../Timeline/TimelineViewController.swift | 3 +- 4 files changed, 42 insertions(+), 35 deletions(-) diff --git a/Mac/Browser.swift b/Mac/Browser.swift index d574bc7ad..f53e95631 100644 --- a/Mac/Browser.swift +++ b/Mac/Browser.swift @@ -73,3 +73,42 @@ extension Browser { NSLocalizedString("Open in Browser in Background", comment: "Open in Browser in Background menu item title") } } + +extension Browser { + + static func open(_ urlStrings: [String], alertingInWindow window: NSWindow?, invertPreference: Bool = false) { + if urlStrings.count > 500 { + return + } + + func doOpenURLs() { + for urlString in urlStrings { + Browser.open(urlString, invertPreference: invertPreference) + } + } + + if urlStrings.count > 20 { + let alert = NSAlert() + let messageFormat = NSLocalizedString("Are you sure you want to open %ld articles in your browser?", comment: "") + alert.messageText = String.localizedStringWithFormat(messageFormat, urlStrings.count) + let confirmButtonTitleFormat = NSLocalizedString("Open %ld Articles", comment: "") + alert.addButton(withTitle: String.localizedStringWithFormat(confirmButtonTitleFormat, urlStrings.count)) + alert.addButton(withTitle: NSLocalizedString("Cancel", comment: "")) + + if let window { + alert.beginSheetModal(for: window) { response in + if response == .alertFirstButtonReturn { + doOpenURLs() + } + } + } else { + if alert.runModal() == .alertFirstButtonReturn { + doOpenURLs() + } + } + } else { + doOpenURLs() + } + } + +} diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index bb29f6b65..e27c8fbb5 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -340,40 +340,10 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations { } } - func openArticleURLs(_ urlStrings: [String], invertPreference: Bool = false) { - if urlStrings.count > 500 { - return - } - - func doOpenURLs() { - for urlString in urlStrings { - Browser.open(urlString, invertPreference: invertPreference) - } - } - - if urlStrings.count > 20 { - let alert = NSAlert() - let messageFormat = NSLocalizedString("Are you sure you want to open %ld articles in your browser?", comment: "") - alert.messageText = String.localizedStringWithFormat(messageFormat, urlStrings.count) - alert.addButton(withTitle: NSLocalizedString("Open", comment: "")) - alert.addButton(withTitle: NSLocalizedString("Cancel", comment: "")) - - guard let window = self.window else { return } - - alert.beginSheetModal(for: window) { response in - if response == .alertFirstButtonReturn { - doOpenURLs() - } - } - } else { - doOpenURLs() - } - } - @IBAction func openArticleInBrowser(_ sender: Any?) { guard let selectedArticles else { return } let urlStrings = selectedArticles.compactMap { $0.preferredLink } - openArticleURLs(urlStrings, invertPreference: NSApp.currentEvent?.modifierFlags.contains(.shift) ?? false) + Browser.open(urlStrings, alertingInWindow: window, invertPreference: NSApp.currentEvent?.modifierFlags.contains(.shift) ?? false) } @IBAction func openInBrowser(_ sender: Any?) { diff --git a/Mac/MainWindow/Timeline/TimelineViewController+ContextualMenus.swift b/Mac/MainWindow/Timeline/TimelineViewController+ContextualMenus.swift index aca01d921..cc90504a4 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController+ContextualMenus.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController+ContextualMenus.swift @@ -93,8 +93,7 @@ extension TimelineViewController { return } - guard let windowController = self.view.window?.windowController as? MainWindowController else { return } - windowController.openArticleURLs(urlStrings) + Browser.open(urlStrings, alertingInWindow: self.view.window) } @objc func copyURLFromContextualMenu(_ sender: Any?) { diff --git a/Mac/MainWindow/Timeline/TimelineViewController.swift b/Mac/MainWindow/Timeline/TimelineViewController.swift index 5b024edbc..424892a72 100644 --- a/Mac/MainWindow/Timeline/TimelineViewController.swift +++ b/Mac/MainWindow/Timeline/TimelineViewController.swift @@ -315,9 +315,8 @@ final class TimelineViewController: NSViewController, UndoableCommandRunner, Unr // MARK: - Actions @objc func openArticleInBrowser(_ sender: Any?) { - guard let windowController = self.view.window?.windowController as? MainWindowController else { return } let urlStrings = selectedArticles.compactMap { $0.preferredLink } - windowController.openArticleURLs(urlStrings) + Browser.open(urlStrings, alertingInWindow: self.view.window) } @IBAction func toggleStatusOfSelectedArticles(_ sender: Any?) {