From 48ff7ec80d4eeb619601e358e79feb0c73f844e7 Mon Sep 17 00:00:00 2001 From: Brent Simmons Date: Fri, 30 Jun 2023 21:36:20 -0700 Subject: [PATCH] Continue removing ExtensionPoint code. --- Mac/AppDefaults.swift | 10 - Mac/AppDelegate.swift | 1 - Mac/Base.lproj/Preferences.storyboard | 164 +-------- .../SharingServicePickerDelegate.swift | 7 +- .../Base.lproj/ExtensionPointDetail.xib | 87 ----- .../EnableExtensionPointHelpView.swift | 51 --- .../EnableExtensionPointView.swift | 172 ---------- .../ExtensionPointDetailViewController.swift | 37 -- ...ExtensionPointEnableWindowController.swift | 176 ---------- ...ensionPointPreferencesViewController.swift | 324 ------------------ .../en-GB.lproj/ExtensionPointDetail.strings | 6 - .../ExtensionPointDetail.strings | 6 - .../PreferencesWindowController.swift | 1 - NetNewsWire.xcodeproj/project.pbxproj | 56 --- 14 files changed, 9 insertions(+), 1089 deletions(-) delete mode 100644 Mac/Preferences/ExtensionPoints/Base.lproj/ExtensionPointDetail.xib delete mode 100644 Mac/Preferences/ExtensionPoints/EnableExtensionPointHelpView.swift delete mode 100644 Mac/Preferences/ExtensionPoints/EnableExtensionPointView.swift delete mode 100644 Mac/Preferences/ExtensionPoints/ExtensionPointDetailViewController.swift delete mode 100644 Mac/Preferences/ExtensionPoints/ExtensionPointEnableWindowController.swift delete mode 100644 Mac/Preferences/ExtensionPoints/ExtensionPointPreferencesViewController.swift delete mode 100644 Mac/Preferences/ExtensionPoints/en-GB.lproj/ExtensionPointDetail.strings delete mode 100644 Mac/Preferences/ExtensionPoints/zh-Hans.lproj/ExtensionPointDetail.strings diff --git a/Mac/AppDefaults.swift b/Mac/AppDefaults.swift index b5400ac1d..c16718cde 100644 --- a/Mac/AppDefaults.swift +++ b/Mac/AppDefaults.swift @@ -24,7 +24,6 @@ final class AppDefaults { struct Key { static let firstRunDate = "firstRunDate" static let windowState = "windowState" - static let activeExtensionPointIDs = "activeExtensionPointIDs" static let lastImageCacheFlushDate = "lastImageCacheFlushDate" static let sidebarFontSize = "sidebarFontSize" static let timelineFontSize = "timelineFontSize" @@ -86,15 +85,6 @@ final class AppDefaults { } } - var activeExtensionPointIDs: [[AnyHashable : AnyHashable]]? { - get { - return UserDefaults.standard.object(forKey: Key.activeExtensionPointIDs) as? [[AnyHashable : AnyHashable]] - } - set { - UserDefaults.standard.set(newValue, forKey: Key.activeExtensionPointIDs) - } - } - var lastImageCacheFlushDate: Date? { get { return AppDefaults.date(for: Key.lastImageCacheFlushDate) diff --git a/Mac/AppDelegate.swift b/Mac/AppDelegate.swift index c7bba32b0..ee430573e 100644 --- a/Mac/AppDelegate.swift +++ b/Mac/AppDelegate.swift @@ -123,7 +123,6 @@ class AppDelegate: NSObject, NSApplicationDelegate, NSUserInterfaceValidations, SecretsManager.provider = Secrets() AccountManager.shared = AccountManager(accountsFolder: Platform.dataSubfolder(forApplication: nil, folderName: "Accounts")!) ArticleThemesManager.shared = ArticleThemesManager(folderPath: Platform.dataSubfolder(forApplication: nil, folderName: "Themes")!) - FeedProviderManager.shared.delegate = ExtensionPointManager.shared NotificationCenter.default.addObserver(self, selector: #selector(unreadCountDidChange(_:)), name: .UnreadCountDidChange, object: nil) NotificationCenter.default.addObserver(self, selector: #selector(inspectableObjectsDidChange(_:)), name: .InspectableObjectsDidChange, object: nil) diff --git a/Mac/Base.lproj/Preferences.storyboard b/Mac/Base.lproj/Preferences.storyboard index 67652920e..0a55aee4e 100644 --- a/Mac/Base.lproj/Preferences.storyboard +++ b/Mac/Base.lproj/Preferences.storyboard @@ -523,16 +523,16 @@ - + - + - + - + @@ -639,7 +639,7 @@ - + @@ -685,160 +685,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Mac/MainWindow/SharingServicePickerDelegate.swift b/Mac/MainWindow/SharingServicePickerDelegate.swift index 13c989460..591062fc5 100644 --- a/Mac/MainWindow/SharingServicePickerDelegate.swift +++ b/Mac/MainWindow/SharingServicePickerDelegate.swift @@ -27,12 +27,14 @@ import RSCore } static func customSharingServices(for items: [Any]) -> [NSSharingService] { - let customServices = ExtensionPointManager.shared.activeSendToCommands.compactMap { (sendToCommand) -> NSSharingService? in + let customServices: [SendToCommand] = [SendToMarsEditCommand(), SendToMicroBlogCommand()] + + return customServices.compactMap { (sendToCommand) -> NSSharingService? in guard let object = items.first else { return nil } - + guard sendToCommand.canSendObject(object, selectedText: nil) else { return nil } @@ -42,6 +44,5 @@ import RSCore sendToCommand.sendObject(object, selectedText: nil) } } - return customServices } } diff --git a/Mac/Preferences/ExtensionPoints/Base.lproj/ExtensionPointDetail.xib b/Mac/Preferences/ExtensionPoints/Base.lproj/ExtensionPointDetail.xib deleted file mode 100644 index 898db2415..000000000 --- a/Mac/Preferences/ExtensionPoints/Base.lproj/ExtensionPointDetail.xib +++ /dev/null @@ -1,87 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/Mac/Preferences/ExtensionPoints/EnableExtensionPointHelpView.swift b/Mac/Preferences/ExtensionPoints/EnableExtensionPointHelpView.swift deleted file mode 100644 index efa00d6e8..000000000 --- a/Mac/Preferences/ExtensionPoints/EnableExtensionPointHelpView.swift +++ /dev/null @@ -1,51 +0,0 @@ -// -// EnableExtensionPointHelpView.swift -// NetNewsWire -// -// Created by Stuart Breckenridge on 4/11/20. -// Copyright © 2020 Ranchero Software. All rights reserved. -// - -import AppKit -import SwiftUI -import RSCore - -struct EnableExtensionPointHelpView: View { - - var extensionPoints: [ExtensionPoint.Type] { - let types = ExtensionPointManager.shared.availableExtensionPointTypes.filter({ $0 is SendToCommand.Type }) + - ExtensionPointManager.shared.availableExtensionPointTypes.filter({ !($0 is SendToCommand.Type) }) - return types - } - var helpText: String - weak var preferencesController: ExtensionPointPreferencesViewController? - - var body: some View { - VStack { - HStack { - ForEach(0..? // required because presentationMode.dismiss() doesn't work - weak var enabler: ExtensionPointPreferencesEnabler? - @State private var extensionPointTypeName = "" - private var selectedType: ExtensionPoint.Type? - - init(enabler: ExtensionPointPreferencesEnabler?, selectedType: ExtensionPoint.Type?) { - self.enabler = enabler - self.selectedType = selectedType - } - - var body: some View { - VStack(alignment: .leading, spacing: 8) { - Text("label.text.choose-extension-to-add", comment: "Choose an extension to add...") - .font(.headline) - .padding() - - feedProviderExtensionPoints - sendToCommandExtensionPoints - - HStack(spacing: 12) { - Spacer() - Button(action: { - parent?.dismiss(nil) - }, label: { - Text("button.title.cancel", comment: "Cancel") - .frame(width: 80) - }) - .help("Cancel") - .keyboardShortcut(.cancelAction) - - Button(action: { - enabler?.enable(typeFromName(extensionPointTypeName)) - parent?.dismiss(nil) - }, label: { - Text("Continue") - .frame(width: 80) - }) - .help("Add Extension") - .keyboardShortcut(.defaultAction) - .disabled(disableContinue()) - } - .padding(.top, 12) - .padding(.bottom, 4) - } - .pickerStyle(RadioGroupPickerStyle()) - .fixedSize(horizontal: false, vertical: true) - .frame(width: 420) - .padding() - .onAppear { - if selectedType != nil { - extensionPointTypeName = String(describing: selectedType!) - } - } - } - - var feedProviderExtensionPoints: some View { - VStack(alignment: .leading) { - let extensionPointTypeNames = Self.feedProviderExtensionPointTypes.map { String(describing: $0) } - if extensionPointTypeNames.count > 0 { - Text("label.text.feed-provider", comment: "Feed Provider") - .font(.headline) - .padding(.horizontal) - - Picker(selection: $extensionPointTypeName, label: Text(""), content: { - ForEach(extensionPointTypeNames, id: \.self, content: { extensionPointTypeName in - let extensionPointType = typeFromName(extensionPointTypeName) - HStack(alignment: .center) { - Image(nsImage: extensionPointType.image) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 25, height: 25, alignment: .center) - .padding(.leading, 4) - - - Text(extensionPointType.title) - } - .tag(extensionPointTypeName) - }) - }) - .pickerStyle(RadioGroupPickerStyle()) - .offset(x: 7.5, y: 0) - - Text("label.text.feed-provider-explainer", comment: "An extension that makes websites appear to provide RSS feeds for their content.") - .foregroundColor(.gray) - .font(.caption) - .padding(.horizontal) - .onAppear { - if extensionPointTypeName.count == 0 { - self.extensionPointTypeName = extensionPointTypeNames.first! - } - } - } - } - - } - - var sendToCommandExtensionPoints: some View { - VStack(alignment: .leading) { - let extensionPointTypeNames = Self.sendToCommandExtensionPointTypes.map { String(describing: $0) } - if extensionPointTypeNames.count > 0 { - Text("label.text.third-party-integration", comment: "Third-Party Integration") - .font(.headline) - .padding(.horizontal) - .padding(.top, 8) - - Picker(selection: $extensionPointTypeName, label: Text(""), content: { - ForEach(extensionPointTypeNames, id: \.self, content: { extensionPointTypeName in - let extensionPointType = typeFromName(extensionPointTypeName) - HStack(alignment: .center) { - Image(nsImage: extensionPointType.image) - .resizable() - .aspectRatio(contentMode: .fit) - .frame(width: 25, height: 25, alignment: .center) - .padding(.leading, 4) - - - Text(extensionPointType.title) - } - .tag(extensionPointTypeName) - }) - }) - .pickerStyle(RadioGroupPickerStyle()) - .offset(x: 7.5, y: 0) - - Text("label.text.share-extension-explainer", comment: "An extension that enables a share menu item that passes article data to a third-party application.") - .foregroundColor(.gray) - .font(.caption) - .padding(.horizontal) - } - } - - } - - static var sendToCommandExtensionPointTypes: [ExtensionPoint.Type] { - return ExtensionPointManager.shared.availableExtensionPointTypes.filter({ $0 is SendToCommand.Type }) - } - - static var feedProviderExtensionPointTypes: [ExtensionPoint.Type] { - return ExtensionPointManager.shared.availableExtensionPointTypes.filter({ !($0 is SendToCommand.Type) }) - } - - func typeFromName(_ name: String) -> ExtensionPoint.Type { - for type in ExtensionPointManager.shared.possibleExtensionPointTypes { - if name == String(describing: type) { - return type - } - } - fatalError() - } - - func disableContinue() -> Bool { - ExtensionPointManager.shared.availableExtensionPointTypes.count == 0 || extensionPointTypeName.count == 0 - } -} - - - diff --git a/Mac/Preferences/ExtensionPoints/ExtensionPointDetailViewController.swift b/Mac/Preferences/ExtensionPoints/ExtensionPointDetailViewController.swift deleted file mode 100644 index 0a97d68ae..000000000 --- a/Mac/Preferences/ExtensionPoints/ExtensionPointDetailViewController.swift +++ /dev/null @@ -1,37 +0,0 @@ -// -// ExtensionPointDetailViewController.swift -// NetNewsWire -// -// Created by Maurice Parker on 4/8/20. -// Copyright © 2020 Ranchero Software. All rights reserved. -// - -import Cocoa - -@MainActor class ExtensionPointDetailViewController: NSViewController { - - @IBOutlet weak var imageView: NSImageView! - @IBOutlet weak var titleLabel: NSTextField! - @IBOutlet weak var descriptionLabel: NSTextField! - - private var extensionPointWindowController: NSWindowController? - private var extensionPoint: ExtensionPoint? - - init(extensionPoint: ExtensionPoint) { - super.init(nibName: "ExtensionPointDetail", bundle: nil) - self.extensionPoint = extensionPoint - } - - public required init?(coder: NSCoder) { - super.init(coder: coder) - } - - override func viewDidLoad() { - super.viewDidLoad() - guard let extensionPoint = extensionPoint else { return } - imageView.image = extensionPoint.image - titleLabel.stringValue = extensionPoint.title - descriptionLabel.attributedStringValue = extensionPoint.description - } - -} diff --git a/Mac/Preferences/ExtensionPoints/ExtensionPointEnableWindowController.swift b/Mac/Preferences/ExtensionPoints/ExtensionPointEnableWindowController.swift deleted file mode 100644 index 1af42d40e..000000000 --- a/Mac/Preferences/ExtensionPoints/ExtensionPointEnableWindowController.swift +++ /dev/null @@ -1,176 +0,0 @@ -// -// ExtensionPointEnableWindowController.swift -// NetNewsWire -// -// Created by Maurice Parker on 4/8/20. -// Copyright © 2020 Ranchero Software. All rights reserved. -// - -import Cocoa -import AuthenticationServices -import OAuthSwift -import Secrets - -@MainActor class ExtensionPointEnableWindowController: NSWindowController { - - @IBOutlet weak var imageView: NSImageView! - @IBOutlet weak var titleLabel: NSTextField! - @IBOutlet weak var descriptionLabel: NSTextField! - @IBOutlet weak var enableButton: NSButton! - - private weak var hostWindow: NSWindow? - - private var callbackURL: URL? = nil - private var oauth: OAuthSwift? - - var extensionPointType: ExtensionPoint.Type? - - convenience init() { - self.init(windowNibName: NSNib.Name("ExtensionPointEnable")) - } - - override func windowDidLoad() { - super.windowDidLoad() - guard let extensionPointType = extensionPointType else { return } - - imageView.image = extensionPointType.image - titleLabel.stringValue = extensionPointType.title - descriptionLabel.attributedStringValue = extensionPointType.description - } - - // MARK: API - - func runSheetOnWindow(_ hostWindow: NSWindow) { - self.hostWindow = hostWindow - hostWindow.beginSheet(window!) - } - - // MARK: Actions - - @IBAction func cancel(_ sender: Any) { - hostWindow!.endSheet(window!, returnCode: NSApplication.ModalResponse.cancel) - } - - @IBAction func enable(_ sender: Any) { - guard let extensionPointType = extensionPointType else { return } - - enableButton.isEnabled = false - - if let oauth1 = extensionPointType as? OAuth1SwiftProvider.Type { - enableOauth1(oauth1) - } else if let oauth2 = extensionPointType as? OAuth2SwiftProvider.Type { - enableOauth2(oauth2) - } else { - ExtensionPointManager.shared.activateExtensionPoint(extensionPointType) { result in - if case .failure(let error) = result { - self.presentError(error) - } - self.hostWindow!.endSheet(self.window!, returnCode: NSApplication.ModalResponse.OK) - } - } - - } - -} - -extension ExtensionPointEnableWindowController: OAuthSwiftURLHandlerType { - - public func handle(_ url: URL) { - let session = ASWebAuthenticationSession(url: url, callbackURLScheme: callbackURL!.scheme, completionHandler: { (url, error) in - if let callbackedURL = url { - OAuth1Swift.handle(url: callbackedURL) - } - - guard let error = error else { return } - - self.oauth?.cancel() - self.oauth = nil - - DispatchQueue.main.async { - self.hostWindow!.endSheet(self.window!, returnCode: NSApplication.ModalResponse.OK) - } - - if case ASWebAuthenticationSessionError.canceledLogin = error { - print("Login cancelled.") - } else { - NSApplication.shared.presentError(error) - } - }) - - session.presentationContextProvider = self - if !session.start() { - print("Session failed to start!!!") - } - - } -} - -extension ExtensionPointEnableWindowController: ASWebAuthenticationPresentationContextProviding { - - public func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { - return hostWindow! - } - -} - -private extension ExtensionPointEnableWindowController { - - func enableOauth1(_ provider: OAuth1SwiftProvider.Type) { - callbackURL = provider.callbackURL - - let oauth1 = provider.oauth1Swift - self.oauth = oauth1 - oauth1.authorizeURLHandler = self - - oauth1.authorize(withCallbackURL: callbackURL!) { [weak self] result in - guard let self = self, let extensionPointType = self.extensionPointType else { return } - - switch result { - case .success(let tokenSuccess): - ExtensionPointManager.shared.activateExtensionPoint(extensionPointType, tokenSuccess: tokenSuccess) { result in - if case .failure(let error) = result { - self.presentError(error) - } - self.hostWindow!.endSheet(self.window!, returnCode: NSApplication.ModalResponse.OK) - } - case .failure(let oauthSwiftError): - self.presentError(oauthSwiftError) - } - - self.oauth?.cancel() - self.oauth = nil - } - - } - - func enableOauth2(_ provider: OAuth2SwiftProvider.Type) { - callbackURL = provider.callbackURL - - let oauth2 = provider.oauth2Swift - self.oauth = oauth2 - oauth2.authorizeURLHandler = self - - let oauth2Vars = provider.oauth2Vars - - oauth2.authorize(withCallbackURL: callbackURL!, scope: oauth2Vars.scope, state: oauth2Vars.state, parameters: oauth2Vars.params) { [weak self] result in - guard let self = self, let extensionPointType = self.extensionPointType else { return } - - switch result { - case .success(let tokenSuccess): - ExtensionPointManager.shared.activateExtensionPoint(extensionPointType, tokenSuccess: tokenSuccess) { result in - if case .failure(let error) = result { - self.presentError(error) - } - self.hostWindow!.endSheet(self.window!, returnCode: NSApplication.ModalResponse.OK) - } - case .failure(let oauthSwiftError): - self.presentError(oauthSwiftError) - } - - self.oauth?.cancel() - self.oauth = nil - } - - } - -} diff --git a/Mac/Preferences/ExtensionPoints/ExtensionPointPreferencesViewController.swift b/Mac/Preferences/ExtensionPoints/ExtensionPointPreferencesViewController.swift deleted file mode 100644 index 0dbe7b6e5..000000000 --- a/Mac/Preferences/ExtensionPoints/ExtensionPointPreferencesViewController.swift +++ /dev/null @@ -1,324 +0,0 @@ -// -// ExtensionsPreferencesViewController.swift -// NetNewsWire -// -// Created by Maurice Parker on 4/6/20. -// Copyright © 2020 Ranchero Software. All rights reserved. -// - -import AppKit -import SwiftUI -import AuthenticationServices -import OAuthSwift -import Secrets - -protocol ExtensionPointPreferencesEnabler: AnyObject { - func enable(_ extensionPointType: ExtensionPoint.Type) -} - -@MainActor final class ExtensionPointPreferencesViewController: NSViewController { - - @IBOutlet weak var tableView: NSTableView! - @IBOutlet weak var detailView: NSView! - @IBOutlet weak var deleteButton: NSButton! - - private var activeExtensionPoints = [ExtensionPoint]() - private var callbackURL: URL? = nil - private var oauth: OAuthSwift? - - override func viewDidLoad() { - super.viewDidLoad() - - tableView.delegate = self - tableView.dataSource = self - - NotificationCenter.default.addObserver(self, selector: #selector(activeExtensionPointsDidChange(_:)), name: .ActiveExtensionPointsDidChange, object: nil) - - // Fix tableView frame — for some reason IB wants it 1pt wider than the clip view. This leads to unwanted horizontal scrolling. - var rTable = tableView.frame - rTable.size.width = tableView.superview!.frame.size.width - tableView.frame = rTable - - showDefaultView() - - } - - @IBAction func enableExtensionPoints(_ sender: Any) { - let controller = NSHostingController(rootView: EnableExtensionPointView(enabler: self, selectedType: nil)) - controller.rootView.parent = controller - presentAsSheet(controller) - } - - func enableExtensionPointFromSelection(_ selection: ExtensionPoint.Type) { - let controller = NSHostingController(rootView: EnableExtensionPointView(enabler: self, selectedType: selection)) - controller.rootView.parent = controller - presentAsSheet(controller) - } - - @IBAction func disableExtensionPoint(_ sender: Any) { - guard tableView.selectedRow != -1 else { - return - } - - let extensionPoint = activeExtensionPoints[tableView.selectedRow] - - let alert = NSAlert() - alert.alertStyle = .warning - let prompt = NSLocalizedString("alert.title.deactivate-extension.%@", comment: "Deactivate “%@“?") - alert.messageText = String(format: prompt, extensionPoint.title) - alert.informativeText = NSLocalizedString("alert.message.cannot-undo-action", comment: "You can't undo this action.") - - alert.addButton(withTitle: NSLocalizedString("button.title.deactivate", comment: "Deactivate Extension")) - alert.addButton(withTitle: NSLocalizedString("button.title.cancel", comment: "Cancel Deactivate Extension")) - - alert.beginSheetModal(for: view.window!) { [weak self] result in - if result == NSApplication.ModalResponse.alertFirstButtonReturn { - ExtensionPointManager.shared.deactivateExtensionPoint(extensionPoint.extensionPointID) - self?.hideController() - } - } - - } -} - -// MARK: - NSTableViewDataSource - -extension ExtensionPointPreferencesViewController: NSTableViewDataSource { - - func numberOfRows(in tableView: NSTableView) -> Int { - return activeExtensionPoints.count - } - - func tableView(_ tableView: NSTableView, objectValueFor tableColumn: NSTableColumn?, row: Int) -> Any? { - return activeExtensionPoints[row] - } -} - -// MARK: - NSTableViewDelegate - -extension ExtensionPointPreferencesViewController: NSTableViewDelegate { - - private static let cellIdentifier = NSUserInterfaceItemIdentifier(rawValue: "AccountCell") - - func tableView(_ tableView: NSTableView, viewFor tableColumn: NSTableColumn?, row: Int) -> NSView? { - if let cell = tableView.makeView(withIdentifier: NSUserInterfaceItemIdentifier(rawValue: "Cell"), owner: nil) as? NSTableCellView { - let extensionPoint = activeExtensionPoints[row] - cell.textField?.stringValue = extensionPoint.title - cell.imageView?.image = extensionPoint.image - return cell - } - return nil - } - - func tableViewSelectionDidChange(_ notification: Notification) { - - let selectedRow = tableView.selectedRow - if tableView.selectedRow == -1 { - deleteButton.isEnabled = false - hideController() - return - } else { - deleteButton.isEnabled = true - } - - let extensionPoint = activeExtensionPoints[selectedRow] - let controller = ExtensionPointDetailViewController(extensionPoint: extensionPoint) - showController(controller) - - } - -} - -// MARK: ExtensionPointPreferencesViewController - -extension ExtensionPointPreferencesViewController: ExtensionPointPreferencesEnabler { - - func enable(_ extensionPointType: ExtensionPoint.Type) { - if let oauth1 = extensionPointType as? OAuth1SwiftProvider.Type { - enableOauth1(oauth1, extensionPointType: extensionPointType) - } else if let oauth2 = extensionPointType as? OAuth2SwiftProvider.Type { - enableOauth2(oauth2, extensionPointType: extensionPointType) - } else { - ExtensionPointManager.shared.activateExtensionPoint(extensionPointType) { result in - if case .failure(let error) = result { - self.presentError(error) - } - } - } - } - -} - -extension ExtensionPointPreferencesViewController: OAuthSwiftURLHandlerType { - - public func handle(_ url: URL) { - let session = ASWebAuthenticationSession(url: url, callbackURLScheme: callbackURL!.scheme, completionHandler: { (url, error) in - if let callbackedURL = url { - OAuth1Swift.handle(url: callbackedURL) - } - - guard let error = error else { return } - - self.oauth?.cancel() - self.oauth = nil - - if case ASWebAuthenticationSessionError.canceledLogin = error { - print("Login cancelled.") - } else { - NSApplication.shared.presentError(error) - } - }) - - session.presentationContextProvider = self - if !session.start() { - print("Session failed to start!!!") - } - - } -} - -extension ExtensionPointPreferencesViewController: ASWebAuthenticationPresentationContextProviding { - - public func presentationAnchor(for session: ASWebAuthenticationSession) -> ASPresentationAnchor { - return view.window! - } - -} - -// MARK: - Private - -private extension ExtensionPointPreferencesViewController { - - @objc func activeExtensionPointsDidChange(_ note: Notification) { - showDefaultView() - } - - func showDefaultView() { - activeExtensionPoints = Array(ExtensionPointManager.shared.activeExtensionPoints.values).sorted(by: { $0.title < $1.title }) - tableView.reloadData() - - if tableView.selectedRow == -1 { - var helpText = "" - if ExtensionPointManager.shared.availableExtensionPointTypes.count == 0 { - helpText = NSLocalizedString("label.text.added-all-extensions", comment: "You've added all available extensions.") - } - else if activeExtensionPoints.count == 0 { - helpText = NSLocalizedString("label.text.add-extension", comment: "Add an extension by clicking the + button.") - } else { - helpText = NSLocalizedString("label.text.select-or-add-extension", comment: "Select an extension or add a new extension by clicking the + button.") - } - - if let controller = children.first { - children.removeAll() - controller.view.removeFromSuperview() - } - - let textHostingController = NSHostingController(rootView: EnableExtensionPointHelpView(helpText: helpText, preferencesController: self)) - addChild(textHostingController) - textHostingController.view.translatesAutoresizingMaskIntoConstraints = false - detailView.addSubview(textHostingController.view) - detailView.addConstraints([ - NSLayoutConstraint(item: textHostingController.view, attribute: .top, relatedBy: .equal, toItem: detailView, attribute: .top, multiplier: 1, constant: 1), - NSLayoutConstraint(item: textHostingController.view, attribute: .bottom, relatedBy: .equal, toItem: detailView, attribute: .bottom, multiplier: 1, constant: -deleteButton.frame.height), - NSLayoutConstraint(item: textHostingController.view, attribute: .width, relatedBy: .equal, toItem: detailView, attribute: .width, multiplier: 1, constant: 1) - ]) - } - } - - func showController(_ controller: NSViewController) { - hideController() - - addChild(controller) - controller.view.translatesAutoresizingMaskIntoConstraints = false - detailView.addSubview(controller.view) - detailView.addFullSizeConstraints(forSubview: controller.view) - } - - func hideController() { - if let controller = children.first { - children.removeAll() - controller.view.removeFromSuperview() - } - - if tableView.selectedRow == -1 { - var helpText = "" - if ExtensionPointManager.shared.availableExtensionPointTypes.count == 0 { - helpText = NSLocalizedString("label.text.added-all-extensions", comment: "You've added all available extensions.") - } - else if activeExtensionPoints.count == 0 { - helpText = NSLocalizedString("label.text.add-extension", comment: "Add an extension by clicking the + button.") - } else { - helpText = NSLocalizedString("label.text.select-or-add-extension", comment: "Select an extension or add a new extension by clicking the + button.") - } - - let textHostingController = NSHostingController(rootView: EnableExtensionPointHelpView(helpText: helpText, preferencesController: self)) - addChild(textHostingController) - textHostingController.view.translatesAutoresizingMaskIntoConstraints = false - detailView.addSubview(textHostingController.view) - detailView.addConstraints([ - NSLayoutConstraint(item: textHostingController.view, attribute: .top, relatedBy: .equal, toItem: detailView, attribute: .top, multiplier: 1, constant: 1), - NSLayoutConstraint(item: textHostingController.view, attribute: .bottom, relatedBy: .equal, toItem: detailView, attribute: .bottom, multiplier: 1, constant: -deleteButton.frame.height), - NSLayoutConstraint(item: textHostingController.view, attribute: .width, relatedBy: .equal, toItem: detailView, attribute: .width, multiplier: 1, constant: 1) - ]) - } - } - - func enableOauth1(_ provider: OAuth1SwiftProvider.Type, extensionPointType: ExtensionPoint.Type) { - callbackURL = provider.callbackURL - - let oauth1 = provider.oauth1Swift - self.oauth = oauth1 - oauth1.authorizeURLHandler = self - - oauth1.authorize(withCallbackURL: callbackURL!) { [weak self] result in - guard let self = self else { return } - - switch result { - case .success(let tokenSuccess): - ExtensionPointManager.shared.activateExtensionPoint(extensionPointType, tokenSuccess: tokenSuccess) { result in - if case .failure(let error) = result { - self.presentError(error) - } - } - case .failure(let oauthSwiftError): - self.presentError(oauthSwiftError) - } - - self.oauth?.cancel() - self.oauth = nil - } - - } - - func enableOauth2(_ provider: OAuth2SwiftProvider.Type, extensionPointType: ExtensionPoint.Type) { - callbackURL = provider.callbackURL - - let oauth2 = provider.oauth2Swift - self.oauth = oauth2 - oauth2.authorizeURLHandler = self - - let oauth2Vars = provider.oauth2Vars - - oauth2.authorize(withCallbackURL: callbackURL!, scope: oauth2Vars.scope, state: oauth2Vars.state, parameters: oauth2Vars.params) { [weak self] result in - guard let self = self else { return } - - switch result { - case .success(let tokenSuccess): - ExtensionPointManager.shared.activateExtensionPoint(extensionPointType, tokenSuccess: tokenSuccess) { result in - if case .failure(let error) = result { - self.presentError(error) - } - } - case .failure(let oauthSwiftError): - self.presentError(oauthSwiftError) - } - - self.oauth?.cancel() - self.oauth = nil - } - - } - -} - - diff --git a/Mac/Preferences/ExtensionPoints/en-GB.lproj/ExtensionPointDetail.strings b/Mac/Preferences/ExtensionPoints/en-GB.lproj/ExtensionPointDetail.strings deleted file mode 100644 index 9fffc448b..000000000 --- a/Mac/Preferences/ExtensionPoints/en-GB.lproj/ExtensionPointDetail.strings +++ /dev/null @@ -1,6 +0,0 @@ - -/* Class = "NSTextFieldCell"; title = "Extension"; ObjectID = "CGj-bV-rXW"; */ -"CGj-bV-rXW.title" = "Extension"; - -/* Class = "NSTabViewItem"; label = "Extension"; ObjectID = "k6A-mz-zOF"; */ -"k6A-mz-zOF.label" = "Extension"; diff --git a/Mac/Preferences/ExtensionPoints/zh-Hans.lproj/ExtensionPointDetail.strings b/Mac/Preferences/ExtensionPoints/zh-Hans.lproj/ExtensionPointDetail.strings deleted file mode 100644 index 0f4c5d83b..000000000 --- a/Mac/Preferences/ExtensionPoints/zh-Hans.lproj/ExtensionPointDetail.strings +++ /dev/null @@ -1,6 +0,0 @@ -/* Class = "NSTextFieldCell"; title = "Extension"; ObjectID = "CGj-bV-rXW"; */ -"CGj-bV-rXW.title" = "扩展"; - -/* Class = "NSTabViewItem"; label = "Extension"; ObjectID = "k6A-mz-zOF"; */ -"k6A-mz-zOF.label" = "扩展"; - diff --git a/Mac/Preferences/PreferencesWindowController.swift b/Mac/Preferences/PreferencesWindowController.swift index 081edc724..0d5d7add2 100644 --- a/Mac/Preferences/PreferencesWindowController.swift +++ b/Mac/Preferences/PreferencesWindowController.swift @@ -24,7 +24,6 @@ private struct PreferencesToolbarItemSpec { private struct ToolbarItemIdentifier { static let General = "General" static let Accounts = "Accounts" - static let Extensions = "Extensions" static let Advanced = "Advanced" } diff --git a/NetNewsWire.xcodeproj/project.pbxproj b/NetNewsWire.xcodeproj/project.pbxproj index 2e2f8fbac..ec18382b3 100644 --- a/NetNewsWire.xcodeproj/project.pbxproj +++ b/NetNewsWire.xcodeproj/project.pbxproj @@ -12,8 +12,6 @@ 17071EF126F8137400F5E71D /* ArticleTheme+Notifications.swift in Sources */ = {isa = PBXBuildFile; fileRef = 17071EEF26F8137400F5E71D /* ArticleTheme+Notifications.swift */; }; 1710B9132552354E00679C0D /* AddAccountHelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1710B9122552354E00679C0D /* AddAccountHelpView.swift */; }; 1710B9142552354E00679C0D /* AddAccountHelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1710B9122552354E00679C0D /* AddAccountHelpView.swift */; }; - 1710B929255246F900679C0D /* EnableExtensionPointHelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1710B928255246F900679C0D /* EnableExtensionPointHelpView.swift */; }; - 1710B92A255246F900679C0D /* EnableExtensionPointHelpView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 1710B928255246F900679C0D /* EnableExtensionPointHelpView.swift */; }; 17192ADA2567B3D500AAEACA /* RSSparkle in Frameworks */ = {isa = PBXBuildFile; productRef = 17192AD92567B3D500AAEACA /* RSSparkle */; }; 17192AE52567B3FE00AAEACA /* org.sparkle-project.Downloader.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 17192AE12567B3FE00AAEACA /* org.sparkle-project.Downloader.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; 17192AE62567B3FE00AAEACA /* org.sparkle-project.InstallerConnection.xpc in Embed XPC Services */ = {isa = PBXBuildFile; fileRef = 17192AE22567B3FE00AAEACA /* org.sparkle-project.InstallerConnection.xpc */; settings = {ATTRIBUTES = (RemoveHeadersOnCopy, ); }; }; @@ -91,8 +89,6 @@ 510C418524E5D1B4008226FD /* ExtensionContainers.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B5C87623F22B8200032075 /* ExtensionContainers.swift */; }; 510C418624E5D1B4008226FD /* ExtensionFeedAddRequest.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51B5C87A23F2317700032075 /* ExtensionFeedAddRequest.swift */; }; 51102165233A7D6C0007A5F7 /* ArticleExtractorButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51102164233A7D6C0007A5F7 /* ArticleExtractorButton.swift */; }; - 51107746243BEE2500D97C8C /* ExtensionPointPreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51107745243BEE2500D97C8C /* ExtensionPointPreferencesViewController.swift */; }; - 51107747243BEE2500D97C8C /* ExtensionPointPreferencesViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51107745243BEE2500D97C8C /* ExtensionPointPreferencesViewController.swift */; }; 51126DA4225FDE2F00722696 /* RSImage-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51126DA3225FDE2F00722696 /* RSImage-Extensions.swift */; }; 5117715524E1EA0F00A2A836 /* ArticleExtractorButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5117715424E1EA0F00A2A836 /* ArticleExtractorButton.swift */; }; 5117715624E1EA0F00A2A836 /* ArticleExtractorButton.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5117715424E1EA0F00A2A836 /* ArticleExtractorButton.swift */; }; @@ -183,10 +179,6 @@ 514C16E124D2EF38009A3AFA /* RSCoreResources in Frameworks */ = {isa = PBXBuildFile; productRef = 514C16E024D2EF38009A3AFA /* RSCoreResources */; }; 5153A35428DC5CEB0036C545 /* RSCore in Frameworks */ = {isa = PBXBuildFile; productRef = DF2A8F32289BFBD9002455AD /* RSCore */; }; 5154368B229404D1005E1CDF /* FaviconGenerator.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51EF0F76227716200050506E /* FaviconGenerator.swift */; }; - 515A5148243E64BA0089E588 /* ExtensionPointEnableWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515A5147243E64BA0089E588 /* ExtensionPointEnableWindowController.swift */; }; - 515A5149243E64BA0089E588 /* ExtensionPointEnableWindowController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515A5147243E64BA0089E588 /* ExtensionPointEnableWindowController.swift */; }; - 515A5171243E802B0089E588 /* ExtensionPointDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515A5170243E802B0089E588 /* ExtensionPointDetailViewController.swift */; }; - 515A5172243E802B0089E588 /* ExtensionPointDetailViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 515A5170243E802B0089E588 /* ExtensionPointDetailViewController.swift */; }; 515D4FCA23257CB500EE1167 /* Node-Extensions.swift in Sources */ = {isa = PBXBuildFile; fileRef = 849A97971ED9EFAA007D329B /* Node-Extensions.swift */; }; 515D4FCC2325815A00EE1167 /* SafariExt.js in Resources */ = {isa = PBXBuildFile; fileRef = 515D4FCB2325815A00EE1167 /* SafariExt.js */; }; 51627A6723861DA3007B3B4B /* MasterFeedViewController+Drag.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51627A6623861DA3007B3B4B /* MasterFeedViewController+Drag.swift */; }; @@ -208,8 +200,6 @@ 5183CCE5226F4DFA0010922C /* RefreshInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCE4226F4DFA0010922C /* RefreshInterval.swift */; }; 5183CCE6226F4E110010922C /* RefreshInterval.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCE4226F4DFA0010922C /* RefreshInterval.swift */; }; 5183CCE8226F68D90010922C /* AccountRefreshTimer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CCE7226F68D90010922C /* AccountRefreshTimer.swift */; }; - 5183CFAF254C78C8006B83A5 /* EnableExtensionPointView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CFAE254C78C8006B83A5 /* EnableExtensionPointView.swift */; }; - 5183CFB0254C78C8006B83A5 /* EnableExtensionPointView.swift in Sources */ = {isa = PBXBuildFile; fileRef = 5183CFAE254C78C8006B83A5 /* EnableExtensionPointView.swift */; }; 518651B223555EB20078E021 /* NNW3Document.swift in Sources */ = {isa = PBXBuildFile; fileRef = 518651AB23555EB20078E021 /* NNW3Document.swift */; }; 518651DA235621840078E021 /* ImageTransition.swift in Sources */ = {isa = PBXBuildFile; fileRef = 518651D9235621840078E021 /* ImageTransition.swift */; }; 51868BF1254386630011A17B /* SidebarDeleteItemsAlert.swift in Sources */ = {isa = PBXBuildFile; fileRef = 51868BF0254386630011A17B /* SidebarDeleteItemsAlert.swift */; }; @@ -799,8 +789,6 @@ DF5124EC2A23109900BBAB1F /* AccountsNewsBlur.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF5124EE2A23109900BBAB1F /* AccountsNewsBlur.xib */; }; DF5124F12A2310A100BBAB1F /* AccountsReaderAPI.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF5124F42A2310A100BBAB1F /* AccountsReaderAPI.xib */; }; DF5124F22A2310A100BBAB1F /* AccountsReaderAPI.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF5124F42A2310A100BBAB1F /* AccountsReaderAPI.xib */; }; - DF5124F72A2310AC00BBAB1F /* ExtensionPointDetail.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF5124FA2A2310AC00BBAB1F /* ExtensionPointDetail.xib */; }; - DF5124F82A2310AC00BBAB1F /* ExtensionPointDetail.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF5124FA2A2310AC00BBAB1F /* ExtensionPointDetail.xib */; }; DF5124FD2A23110F00BBAB1F /* CrashReporterWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF5125002A23110F00BBAB1F /* CrashReporterWindow.xib */; }; DF5124FE2A23110F00BBAB1F /* CrashReporterWindow.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF5125002A23110F00BBAB1F /* CrashReporterWindow.xib */; }; DF5125032A23116B00BBAB1F /* MasterTimelineTitleView.xib in Resources */ = {isa = PBXBuildFile; fileRef = DF5125052A23116B00BBAB1F /* MasterTimelineTitleView.xib */; }; @@ -1133,7 +1121,6 @@ 1701E1B62568983D009453D8 /* en */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = en; path = en.lproj/Localizable.strings; sourceTree = ""; }; 17071EEF26F8137400F5E71D /* ArticleTheme+Notifications.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "ArticleTheme+Notifications.swift"; sourceTree = ""; }; 1710B9122552354E00679C0D /* AddAccountHelpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AddAccountHelpView.swift; sourceTree = ""; }; - 1710B928255246F900679C0D /* EnableExtensionPointHelpView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnableExtensionPointHelpView.swift; sourceTree = ""; }; 17192AE12567B3FE00AAEACA /* org.sparkle-project.Downloader.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = "org.sparkle-project.Downloader.xpc"; sourceTree = ""; }; 17192AE22567B3FE00AAEACA /* org.sparkle-project.InstallerConnection.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = "org.sparkle-project.InstallerConnection.xpc"; sourceTree = ""; }; 17192AE32567B3FE00AAEACA /* org.sparkle-project.InstallerLauncher.xpc */ = {isa = PBXFileReference; lastKnownFileType = "wrapper.xpc-service"; path = "org.sparkle-project.InstallerLauncher.xpc"; sourceTree = ""; }; @@ -1179,7 +1166,6 @@ 510C416624E5CDE3008226FD /* ShareExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = ShareExtension.entitlements; sourceTree = ""; }; 510C418724E5D2E3008226FD /* NetNewsWire_shareextension_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = NetNewsWire_shareextension_target.xcconfig; sourceTree = ""; }; 51102164233A7D6C0007A5F7 /* ArticleExtractorButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleExtractorButton.swift; sourceTree = ""; }; - 51107745243BEE2500D97C8C /* ExtensionPointPreferencesViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionPointPreferencesViewController.swift; sourceTree = ""; }; 51121AA12265430A00BC0EC1 /* NetNewsWire_iOSapp_target.xcconfig */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = text.xcconfig; path = NetNewsWire_iOSapp_target.xcconfig; sourceTree = ""; }; 51126DA3225FDE2F00722696 /* RSImage-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "RSImage-Extensions.swift"; sourceTree = ""; }; 5117715424E1EA0F00A2A836 /* ArticleExtractorButton.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleExtractorButton.swift; sourceTree = ""; }; @@ -1219,8 +1205,6 @@ 5144EA4F227B8E4500D19003 /* AccountsFeedbinWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountsFeedbinWindowController.swift; sourceTree = ""; }; 5148F4542336DB7000F8CD8B /* MasterTimelineTitleView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = MasterTimelineTitleView.swift; sourceTree = ""; }; 514B7C8223205EFB00BAC947 /* RootSplitViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RootSplitViewController.swift; sourceTree = ""; }; - 515A5147243E64BA0089E588 /* ExtensionPointEnableWindowController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionPointEnableWindowController.swift; sourceTree = ""; }; - 515A5170243E802B0089E588 /* ExtensionPointDetailViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ExtensionPointDetailViewController.swift; sourceTree = ""; }; 515D4FCB2325815A00EE1167 /* SafariExt.js */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.javascript; path = SafariExt.js; sourceTree = ""; }; 515D4FCD2325909200EE1167 /* NetNewsWire_iOS_ShareExtension.entitlements */ = {isa = PBXFileReference; lastKnownFileType = text.plist.entitlements; path = NetNewsWire_iOS_ShareExtension.entitlements; sourceTree = ""; }; 515D4FCE2325B3D000EE1167 /* NetNewsWire_iOSshareextension_target.xcconfig */ = {isa = PBXFileReference; lastKnownFileType = text.xcconfig; path = NetNewsWire_iOSshareextension_target.xcconfig; sourceTree = ""; }; @@ -1236,7 +1220,6 @@ 5183CCD9226E31A50010922C /* NonIntrinsicImageView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NonIntrinsicImageView.swift; sourceTree = ""; }; 5183CCE4226F4DFA0010922C /* RefreshInterval.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = RefreshInterval.swift; sourceTree = ""; }; 5183CCE7226F68D90010922C /* AccountRefreshTimer.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AccountRefreshTimer.swift; sourceTree = ""; }; - 5183CFAE254C78C8006B83A5 /* EnableExtensionPointView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = EnableExtensionPointView.swift; sourceTree = ""; }; 518651AB23555EB20078E021 /* NNW3Document.swift */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.swift; path = NNW3Document.swift; sourceTree = ""; }; 518651D9235621840078E021 /* ImageTransition.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ImageTransition.swift; sourceTree = ""; }; 51868BF0254386630011A17B /* SidebarDeleteItemsAlert.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = SidebarDeleteItemsAlert.swift; sourceTree = ""; }; @@ -1559,7 +1542,6 @@ C4A3967C2A2AEC5400C89D55 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/NNW3OpenPanelAccessoryView.strings"; sourceTree = ""; }; C4A3967D2A2AEC5400C89D55 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/ExportOPMLSheet.strings"; sourceTree = ""; }; C4A3967E2A2AEC5400C89D55 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/ImportOPMLSheet.strings"; sourceTree = ""; }; - C4A3967F2A2AEC5400C89D55 /* zh-Hans */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "zh-Hans"; path = "zh-Hans.lproj/ExtensionPointDetail.strings"; sourceTree = ""; }; C5A6ED5123C9AF4300AB6BE2 /* TitleActivityItemSource.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = TitleActivityItemSource.swift; sourceTree = ""; }; C5A6ED6C23C9B0C800AB6BE2 /* UIActivityViewController-Extensions.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = "UIActivityViewController-Extensions.swift"; sourceTree = ""; }; D3555BF324664539005E48C3 /* ArticleSearchBar.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = ArticleSearchBar.swift; sourceTree = ""; }; @@ -1611,8 +1593,6 @@ DF5124F02A23109C00BBAB1F /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/AccountsNewsBlur.strings"; sourceTree = ""; }; DF5124F32A2310A100BBAB1F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/AccountsReaderAPI.xib; sourceTree = ""; }; DF5124F62A2310A500BBAB1F /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/AccountsReaderAPI.strings"; sourceTree = ""; }; - DF5124F92A2310AC00BBAB1F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/ExtensionPointDetail.xib; sourceTree = ""; }; - DF5124FC2A2310AF00BBAB1F /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/ExtensionPointDetail.strings"; sourceTree = ""; }; DF5124FF2A23110F00BBAB1F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/CrashReporterWindow.xib; sourceTree = ""; }; DF5125022A23111200BBAB1F /* en-GB */ = {isa = PBXFileReference; lastKnownFileType = text.plist.strings; name = "en-GB"; path = "en-GB.lproj/CrashReporterWindow.strings"; sourceTree = ""; }; DF5125042A23116B00BBAB1F /* Base */ = {isa = PBXFileReference; lastKnownFileType = file.xib; name = Base; path = Base.lproj/MasterTimelineTitleView.xib; sourceTree = ""; }; @@ -1917,19 +1897,6 @@ path = ExtensionPoints; sourceTree = ""; }; - 51107744243BEDD300D97C8C /* ExtensionPoints */ = { - isa = PBXGroup; - children = ( - 5183CFAE254C78C8006B83A5 /* EnableExtensionPointView.swift */, - 1710B928255246F900679C0D /* EnableExtensionPointHelpView.swift */, - DF5124FA2A2310AC00BBAB1F /* ExtensionPointDetail.xib */, - 515A5170243E802B0089E588 /* ExtensionPointDetailViewController.swift */, - 515A5147243E64BA0089E588 /* ExtensionPointEnableWindowController.swift */, - 51107745243BEE2500D97C8C /* ExtensionPointPreferencesViewController.swift */, - ); - path = ExtensionPoints; - sourceTree = ""; - }; 511D43CE231FA51100FB1562 /* Resources */ = { isa = PBXGroup; children = ( @@ -2668,7 +2635,6 @@ 84C9FC6A22629E1200D921D6 /* Advanced */, 84C9FC6C22629E1200D921D6 /* General */, 84C9FC6F22629E1200D921D6 /* Accounts */, - 51107744243BEDD300D97C8C /* ExtensionPoints */, ); path = Preferences; sourceTree = ""; @@ -3559,7 +3525,6 @@ 65ED4067235DEF6C0081F399 /* page.html in Resources */, 65ED4068235DEF6C0081F399 /* MainWindow.storyboard in Resources */, DF5124EC2A23109900BBAB1F /* AccountsNewsBlur.xib in Resources */, - DF5124F82A2310AC00BBAB1F /* ExtensionPointDetail.xib in Resources */, DF5124F22A2310A100BBAB1F /* AccountsReaderAPI.xib in Resources */, 65ED406A235DEF6C0081F399 /* newsfoot.js in Resources */, 5103A9992421643300410853 /* blank.html in Resources */, @@ -3668,7 +3633,6 @@ DF5124EB2A23109900BBAB1F /* AccountsNewsBlur.xib in Resources */, 5103A9982421643300410853 /* blank.html in Resources */, DF93DB2B296A319000586C0E /* Localizable.stringsdict in Resources */, - DF5124F72A2310AC00BBAB1F /* ExtensionPointDetail.xib in Resources */, DF5124FD2A23110F00BBAB1F /* CrashReporterWindow.xib in Resources */, 51DEE81226FB9233006DAA56 /* Appanoose.nnwtheme in Resources */, 84C9FC8E22629E8F00D921D6 /* Credits.rtf in Resources */, @@ -3978,7 +3942,6 @@ files = ( 65ED3FB7235DEF6C0081F399 /* ArticleArray.swift in Sources */, 65ED3FB8235DEF6C0081F399 /* CrashReporter.swift in Sources */, - 51107747243BEE2500D97C8C /* ExtensionPointPreferencesViewController.swift in Sources */, 65ED3FB9235DEF6C0081F399 /* IconView.swift in Sources */, 65ED3FBB235DEF6C0081F399 /* InspectorWindowController.swift in Sources */, 65ED3FBC235DEF6C0081F399 /* ColorHash.swift in Sources */, @@ -3986,7 +3949,6 @@ 65ED3FBE235DEF6C0081F399 /* Account+Scriptability.swift in Sources */, 65ED3FBF235DEF6C0081F399 /* NothingInspectorViewController.swift in Sources */, DF3630EC2936183D00326FB8 /* OPMLDocument.swift in Sources */, - 1710B92A255246F900679C0D /* EnableExtensionPointHelpView.swift in Sources */, 51927A0528E28D1C000AE856 /* MainWindow.swift in Sources */, 65ED3FC0235DEF6C0081F399 /* AppNotifications.swift in Sources */, 65ED3FC1235DEF6C0081F399 /* TimelineKeyboardDelegate.swift in Sources */, @@ -3997,7 +3959,6 @@ 65ED3FC6235DEF6C0081F399 /* UnreadFeed.swift in Sources */, 65ED3FC8235DEF6C0081F399 /* SidebarCellLayout.swift in Sources */, 65ED3FC9235DEF6C0081F399 /* SmartFeedPasteboardWriter.swift in Sources */, - 515A5149243E64BA0089E588 /* ExtensionPointEnableWindowController.swift in Sources */, 65ED3FCA235DEF6C0081F399 /* SmartFeedsController.swift in Sources */, 65ED3FCB235DEF6C0081F399 /* SidebarViewController.swift in Sources */, 51BC4B00247277E0000A6ED8 /* URL-Extensions.swift in Sources */, @@ -4009,11 +3970,9 @@ 65ED3FD3235DEF6C0081F399 /* NSScriptCommand+NetNewsWire.swift in Sources */, B2C12C6728F4C46800373730 /* URLPasteboardWriter+NetNewsWire.swift in Sources */, 65ED3FD4235DEF6C0081F399 /* Article+Scriptability.swift in Sources */, - 515A5172243E802B0089E588 /* ExtensionPointDetailViewController.swift in Sources */, 65ED3FD5235DEF6C0081F399 /* SmartFeed.swift in Sources */, 65ED3FD6235DEF6C0081F399 /* MarkStatusCommand.swift in Sources */, DFBB4EAD2951BC0200639228 /* NNWThemeDocument.swift in Sources */, - 5183CFB0254C78C8006B83A5 /* EnableExtensionPointView.swift in Sources */, 65ED3FD7235DEF6C0081F399 /* NSApplication+Scriptability.swift in Sources */, 65ED3FD8235DEF6C0081F399 /* NSView-Extensions.swift in Sources */, 51A052CF244FB9D7006C2024 /* AddFeedWIndowController.swift in Sources */, @@ -4352,7 +4311,6 @@ files = ( 84F204E01FAACBB30076E152 /* ArticleArray.swift in Sources */, 848B937221C8C5540038DC0D /* CrashReporter.swift in Sources */, - 515A5171243E802B0089E588 /* ExtensionPointDetailViewController.swift in Sources */, 847CD6CA232F4CBF00FAC46D /* IconView.swift in Sources */, B2C12C6628F4C46800373730 /* URLPasteboardWriter+NetNewsWire.swift in Sources */, 84BBB12E20142A4700F054F5 /* InspectorWindowController.swift in Sources */, @@ -4388,7 +4346,6 @@ D5907D7F2004AC00005947E5 /* NSApplication+Scriptability.swift in Sources */, 8405DD9C22153BD7008CE1BF /* NSView-Extensions.swift in Sources */, 849A979F1ED9F130007D329B /* SidebarCell.swift in Sources */, - 1710B929255246F900679C0D /* EnableExtensionPointHelpView.swift in Sources */, 51E595A5228CC36500FCC42B /* ArticleStatusSyncTimer.swift in Sources */, 849A97651ED9EB96007D329B /* WebFeedTreeControllerDelegate.swift in Sources */, 849A97671ED9EB96007D329B /* UnreadCountView.swift in Sources */, @@ -4417,10 +4374,8 @@ 51BC4AFF247277E0000A6ED8 /* URL-Extensions.swift in Sources */, 849A978A1ED9ECEF007D329B /* ArticleThemesManager.swift in Sources */, 8405DD8A2213E0E3008CE1BF /* DetailContainerView.swift in Sources */, - 51107746243BEE2500D97C8C /* ExtensionPointPreferencesViewController.swift in Sources */, 519B8D332143397200FA689C /* SharingServiceDelegate.swift in Sources */, FF3ABF1523259DDB0074C542 /* ArticleSorter.swift in Sources */, - 5183CFAF254C78C8006B83A5 /* EnableExtensionPointView.swift in Sources */, 84E8E0DB202EC49300562D8F /* TimelineViewController+ContextualMenus.swift in Sources */, 849A97791ED9EC04007D329B /* ArticleStringFormatter.swift in Sources */, B24E9ADC245AB88400DA5718 /* NSAttributedString+NetNewsWire.swift in Sources */, @@ -4432,7 +4387,6 @@ 55E15BCC229D65A900D6602A /* AccountsReaderAPIWindowController.swift in Sources */, 5144EA382279FC6200D19003 /* AccountsAddLocalWindowController.swift in Sources */, 84AD1EAA2031617300BC20B7 /* PasteboardFolder.swift in Sources */, - 515A5148243E64BA0089E588 /* ExtensionPointEnableWindowController.swift in Sources */, 51DC07982552083500A3F79F /* ArticleTextSize.swift in Sources */, 5117715524E1EA0F00A2A836 /* ArticleExtractorButton.swift in Sources */, 5103A9F724225E4C00410853 /* AccountsAddCloudKitWindowController.swift in Sources */, @@ -4850,16 +4804,6 @@ name = AccountsReaderAPI.xib; sourceTree = ""; }; - DF5124FA2A2310AC00BBAB1F /* ExtensionPointDetail.xib */ = { - isa = PBXVariantGroup; - children = ( - DF5124F92A2310AC00BBAB1F /* Base */, - DF5124FC2A2310AF00BBAB1F /* en-GB */, - C4A3967F2A2AEC5400C89D55 /* zh-Hans */, - ); - name = ExtensionPointDetail.xib; - sourceTree = ""; - }; DF5125002A23110F00BBAB1F /* CrashReporterWindow.xib */ = { isa = PBXVariantGroup; children = (