diff --git a/Account/Sources/Account/WebFeed.swift b/Account/Sources/Account/WebFeed.swift index 9fddbb5eb..80293e481 100644 --- a/Account/Sources/Account/WebFeed.swift +++ b/Account/Sources/Account/WebFeed.swift @@ -152,9 +152,14 @@ public final class WebFeed: Feed, Renamable, Hashable { public var isArticleExtractorAlwaysOn: Bool? { get { + if isFeedProvider == true { return false } // not an option for FeedProviders return metadata.isArticleExtractorAlwaysOn } set { + if isFeedProvider == true { + metadata.isArticleExtractorAlwaysOn = false + return + } metadata.isArticleExtractorAlwaysOn = newValue } } @@ -220,6 +225,16 @@ public final class WebFeed: Feed, Renamable, Hashable { postUnreadCountDidChangeNotification() } } + + // MARK: - Feed Provider + public var isFeedProvider: Bool { + get { + if FeedProviderManager.shared.best(for: URLComponents(url: URL(string: url)!, resolvingAgainstBaseURL: false)!) == nil { + return false + } + return true + } + } var metadata: WebFeedMetadata diff --git a/Mac/Inspector/WebFeedInspectorViewController.swift b/Mac/Inspector/WebFeedInspectorViewController.swift index d03fd135f..b04991916 100644 --- a/Mac/Inspector/WebFeedInspectorViewController.swift +++ b/Mac/Inspector/WebFeedInspectorViewController.swift @@ -140,6 +140,9 @@ private extension WebFeedInspectorViewController { updateIsReaderViewAlwaysOn() windowTitle = feed?.nameForDisplay ?? NSLocalizedString("Feed Inspector", comment: "Feed Inspector window title") view.needsLayout = true + if let webfeed = feed { + webfeed.isFeedProvider ? (isReaderViewAlwaysOnCheckBox?.isEnabled = false) : (isReaderViewAlwaysOnCheckBox?.isEnabled = true) + } } func updateImage() { diff --git a/Mac/MainWindow/MainWindowController.swift b/Mac/MainWindow/MainWindowController.swift index 4db72dd1e..0bef4b254 100644 --- a/Mac/MainWindow/MainWindowController.swift +++ b/Mac/MainWindow/MainWindowController.swift @@ -1061,6 +1061,7 @@ private extension MainWindowController { return false } + if #available(macOS 11.0, *) { guard let toolbarItem = item as? NSToolbarItem, let toolbarButton = toolbarItem.view as? ArticleExtractorButton else { @@ -1069,6 +1070,15 @@ private extension MainWindowController { } return currentLink != nil } + + if let webfeed = currentTimelineViewController?.selectedArticles.first?.webFeed { + if webfeed.isFeedProvider { + toolbarButton.isEnabled = false + return false + } else { + toolbarButton.isEnabled = true + } + } guard let state = articleExtractor?.state else { toolbarButton.buttonState = .off @@ -1093,6 +1103,15 @@ private extension MainWindowController { return currentLink != nil } + if let webfeed = currentTimelineViewController?.selectedArticles.first?.webFeed { + if webfeed.isFeedProvider { + toolbarButton.isEnabled = false + return false + } else { + toolbarButton.isEnabled = true + } + } + toolbarButton.state = isShowingExtractedArticle ? .on : .off guard let state = articleExtractor?.state else { diff --git a/Mac/MainWindow/Sidebar/SidebarViewController+ContextualMenus.swift b/Mac/MainWindow/Sidebar/SidebarViewController+ContextualMenus.swift index e6861aa9c..2ebe3ea22 100644 --- a/Mac/MainWindow/Sidebar/SidebarViewController+ContextualMenus.swift +++ b/Mac/MainWindow/Sidebar/SidebarViewController+ContextualMenus.swift @@ -240,15 +240,20 @@ private extension SidebarViewController { } menu.addItem(notificationMenuItem) - let articleExtractorText = NSLocalizedString("Always Use Reader View", comment: "Always Use Reader View") - let articleExtractorMenuItem = menuItem(articleExtractorText, #selector(toggleArticleExtractorFromContextMenu(_:)), webFeed) - if webFeed.isArticleExtractorAlwaysOn == nil || webFeed.isArticleExtractorAlwaysOn! == false { - articleExtractorMenuItem.state = .off - } else { - articleExtractorMenuItem.state = .on + if !webFeed.isFeedProvider { + let articleExtractorText = NSLocalizedString("Always Use Reader View", comment: "Always Use Reader View") + let articleExtractorMenuItem = menuItem(articleExtractorText, #selector(toggleArticleExtractorFromContextMenu(_:)), webFeed) + + if webFeed.isArticleExtractorAlwaysOn == nil || webFeed.isArticleExtractorAlwaysOn! == false { + articleExtractorMenuItem.state = .off + } else { + articleExtractorMenuItem.state = .on + } + menu.addItem(articleExtractorMenuItem) } - menu.addItem(articleExtractorMenuItem) + + menu.addItem(NSMenuItem.separator()) menu.addItem(renameMenuItem(webFeed))