Merge pull request #2977 from stuartbreckenridge/disable-reader-view

Disable reader view
This commit is contained in:
Maurice Parker 2021-04-11 09:09:36 -05:00 committed by GitHub
commit facfb6fb4b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 68 additions and 10 deletions

View File

@ -152,9 +152,14 @@ public final class WebFeed: Feed, Renamable, Hashable {
public var isArticleExtractorAlwaysOn: Bool? { public var isArticleExtractorAlwaysOn: Bool? {
get { get {
if isFeedProvider == true { return false } // not an option for FeedProviders
return metadata.isArticleExtractorAlwaysOn return metadata.isArticleExtractorAlwaysOn
} }
set { set {
if isFeedProvider == true {
metadata.isArticleExtractorAlwaysOn = false
return
}
metadata.isArticleExtractorAlwaysOn = newValue metadata.isArticleExtractorAlwaysOn = newValue
} }
} }
@ -221,6 +226,21 @@ public final class WebFeed: Feed, Renamable, Hashable {
} }
} }
// MARK: - Feed Provider
public var isFeedProvider: Bool {
get {
guard let webfeedURL = URL(string: url),
let components = URLComponents(url: webfeedURL, resolvingAgainstBaseURL: false) else {
return false
}
if FeedProviderManager.shared.best(for: components) == nil {
return false
}
return true
}
}
var metadata: WebFeedMetadata var metadata: WebFeedMetadata
// MARK: - Private // MARK: - Private

View File

@ -140,6 +140,9 @@ private extension WebFeedInspectorViewController {
updateIsReaderViewAlwaysOn() updateIsReaderViewAlwaysOn()
windowTitle = feed?.nameForDisplay ?? NSLocalizedString("Feed Inspector", comment: "Feed Inspector window title") windowTitle = feed?.nameForDisplay ?? NSLocalizedString("Feed Inspector", comment: "Feed Inspector window title")
view.needsLayout = true view.needsLayout = true
if let webfeed = feed {
webfeed.isFeedProvider ? (isReaderViewAlwaysOnCheckBox?.isEnabled = false) : (isReaderViewAlwaysOnCheckBox?.isEnabled = true)
}
} }
func updateImage() { func updateImage() {

View File

@ -1061,6 +1061,7 @@ private extension MainWindowController {
return false return false
} }
if #available(macOS 11.0, *) { if #available(macOS 11.0, *) {
guard let toolbarItem = item as? NSToolbarItem, let toolbarButton = toolbarItem.view as? ArticleExtractorButton else { guard let toolbarItem = item as? NSToolbarItem, let toolbarButton = toolbarItem.view as? ArticleExtractorButton else {
@ -1070,6 +1071,15 @@ private extension MainWindowController {
return currentLink != nil 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 { guard let state = articleExtractor?.state else {
toolbarButton.buttonState = .off toolbarButton.buttonState = .off
return currentLink != nil return currentLink != nil
@ -1093,6 +1103,15 @@ private extension MainWindowController {
return currentLink != nil 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 toolbarButton.state = isShowingExtractedArticle ? .on : .off
guard let state = articleExtractor?.state else { guard let state = articleExtractor?.state else {

View File

@ -240,15 +240,20 @@ private extension SidebarViewController {
} }
menu.addItem(notificationMenuItem) 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 { if !webFeed.isFeedProvider {
articleExtractorMenuItem.state = .off let articleExtractorText = NSLocalizedString("Always Use Reader View", comment: "Always Use Reader View")
} else { let articleExtractorMenuItem = menuItem(articleExtractorText, #selector(toggleArticleExtractorFromContextMenu(_:)), webFeed)
articleExtractorMenuItem.state = .on
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(NSMenuItem.separator())
menu.addItem(renameMenuItem(webFeed)) menu.addItem(renameMenuItem(webFeed))

View File

@ -179,7 +179,11 @@ class ArticleViewController: UIViewController {
starBarButtonItem.isEnabled = true starBarButtonItem.isEnabled = true
let permalinkPresent = article.preferredLink != nil let permalinkPresent = article.preferredLink != nil
articleExtractorButton.isEnabled = permalinkPresent && !AppDefaults.shared.isDeveloperBuild var isFeedProvider = false
if let webfeed = article.webFeed {
isFeedProvider = webfeed.isFeedProvider
}
articleExtractorButton.isEnabled = permalinkPresent && !AppDefaults.shared.isDeveloperBuild && !isFeedProvider
actionBarButtonItem.isEnabled = permalinkPresent actionBarButtonItem.isEnabled = permalinkPresent
if article.status.read { if article.status.read {

View File

@ -48,7 +48,14 @@ class WebFeedInspectorViewController: UITableViewController {
nameTextField.text = webFeed.nameForDisplay nameTextField.text = webFeed.nameForDisplay
notifyAboutNewArticlesSwitch.setOn(webFeed.isNotifyAboutNewArticles ?? false, animated: false) notifyAboutNewArticlesSwitch.setOn(webFeed.isNotifyAboutNewArticles ?? false, animated: false)
alwaysShowReaderViewSwitch.setOn(webFeed.isArticleExtractorAlwaysOn ?? false, animated: false)
if webFeed.isFeedProvider {
alwaysShowReaderViewSwitch.isOn = false
alwaysShowReaderViewSwitch.isEnabled = false
} else {
alwaysShowReaderViewSwitch.setOn(webFeed.isArticleExtractorAlwaysOn ?? false, animated: false)
}
homePageLabel.text = webFeed.homePageURL?.decodedURLString homePageLabel.text = webFeed.homePageURL?.decodedURLString
feedURLLabel.text = webFeed.url.decodedURLString feedURLLabel.text = webFeed.url.decodedURLString