mirror of
https://github.com/Ranchero-Software/NetNewsWire
synced 2025-08-12 06:26:36 +00:00
Add menu and keyboard shortcut to Reader
This commit is contained in:
@@ -17,8 +17,7 @@ enum TimelineSourceMode {
|
||||
|
||||
class MainWindowController : NSWindowController, NSUserInterfaceValidations {
|
||||
|
||||
@IBOutlet weak var articleExtractorButton: ArticleExtractorButton!
|
||||
|
||||
private var isShowingExtractedArticle = false
|
||||
private var articleExtractor: ArticleExtractor? = nil
|
||||
private var sharingServicePickerDelegate: NSSharingServicePickerDelegate?
|
||||
|
||||
@@ -304,15 +303,28 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
|
||||
guard let currentLink = currentLink, let article = oneSelectedArticle else {
|
||||
return
|
||||
}
|
||||
|
||||
defer {
|
||||
makeToolbarValidate()
|
||||
}
|
||||
|
||||
guard articleExtractorButton.state == .on else {
|
||||
let detailState = DetailState.article(article)
|
||||
detailViewController?.setState(detailState, mode: timelineSourceMode)
|
||||
guard articleExtractor?.state != .processing else {
|
||||
articleExtractor?.cancel()
|
||||
articleExtractor = nil
|
||||
isShowingExtractedArticle = false
|
||||
detailViewController?.setState(DetailState.article(article), mode: timelineSourceMode)
|
||||
return
|
||||
}
|
||||
|
||||
guard !isShowingExtractedArticle else {
|
||||
isShowingExtractedArticle = false
|
||||
detailViewController?.setState(DetailState.article(article), mode: timelineSourceMode)
|
||||
return
|
||||
}
|
||||
|
||||
if let articleExtractor = articleExtractor, let extractedArticle = articleExtractor.article {
|
||||
if currentLink == articleExtractor.articleLink {
|
||||
isShowingExtractedArticle = true
|
||||
let detailState = DetailState.extracted(article, extractedArticle)
|
||||
detailViewController?.setState(detailState, mode: timelineSourceMode)
|
||||
}
|
||||
@@ -322,7 +334,6 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
|
||||
extractor.process()
|
||||
articleExtractor = extractor
|
||||
}
|
||||
makeToolbarValidate()
|
||||
}
|
||||
|
||||
}
|
||||
@@ -442,11 +453,13 @@ extension MainWindowController: SidebarDelegate {
|
||||
extension MainWindowController: TimelineContainerViewControllerDelegate {
|
||||
|
||||
func timelineSelectionDidChange(_: TimelineContainerViewController, articles: [Article]?, mode: TimelineSourceMode) {
|
||||
articleExtractorButton.isError = false
|
||||
articleExtractorButton.isInProgress = false
|
||||
articleExtractorButton.state = .off
|
||||
articleExtractor = nil
|
||||
|
||||
articleExtractor?.cancel()
|
||||
articleExtractor = nil
|
||||
isShowingExtractedArticle = false
|
||||
|
||||
makeToolbarValidate()
|
||||
|
||||
let detailState: DetailState
|
||||
if let articles = articles {
|
||||
detailState = articles.count == 1 ? .article(articles.first!) : .multipleSelection
|
||||
@@ -531,10 +544,11 @@ extension MainWindowController: ArticleExtractorDelegate {
|
||||
}
|
||||
|
||||
func articleExtractionDidComplete(extractedArticle: ExtractedArticle) {
|
||||
makeToolbarValidate()
|
||||
if articleExtractorButton.state == .on, let article = oneSelectedArticle {
|
||||
if let article = oneSelectedArticle, articleExtractor?.state != .cancelled {
|
||||
isShowingExtractedArticle = true
|
||||
let detailState = DetailState.extracted(article, extractedArticle)
|
||||
detailViewController?.setState(detailState, mode: timelineSourceMode)
|
||||
makeToolbarValidate()
|
||||
}
|
||||
}
|
||||
|
||||
@@ -692,32 +706,35 @@ private extension MainWindowController {
|
||||
}
|
||||
|
||||
func validateToggleArticleExtractor(_ item: NSValidatedUserInterfaceItem) -> Bool {
|
||||
guard let articleExtractorState = articleExtractor?.state else {
|
||||
articleExtractorButton.isError = false
|
||||
articleExtractorButton.isInProgress = false
|
||||
articleExtractorButton.state = .off
|
||||
guard let toolbarItem = item as? NSToolbarItem, let toolbarButton = toolbarItem.view as? ArticleExtractorButton else {
|
||||
if let menuItem = item as? NSMenuItem {
|
||||
menuItem.state = isShowingExtractedArticle ? .on : .off
|
||||
}
|
||||
return currentLink != nil
|
||||
}
|
||||
|
||||
switch articleExtractorState {
|
||||
case .ready:
|
||||
articleExtractorButton.isError = false
|
||||
articleExtractorButton.isInProgress = false
|
||||
return currentLink != nil
|
||||
case .processing:
|
||||
articleExtractorButton.isError = false
|
||||
articleExtractorButton.isInProgress = true
|
||||
return true
|
||||
case .failedToParse:
|
||||
articleExtractorButton.isError = true
|
||||
articleExtractorButton.isInProgress = false
|
||||
articleExtractorButton.state = .off
|
||||
return true
|
||||
case .complete:
|
||||
articleExtractorButton.isError = false
|
||||
articleExtractorButton.isInProgress = false
|
||||
toolbarButton.state = isShowingExtractedArticle ? .on : .off
|
||||
|
||||
guard let state = articleExtractor?.state else {
|
||||
toolbarButton.isError = false
|
||||
toolbarButton.isInProgress = false
|
||||
toolbarButton.state = .off
|
||||
return currentLink != nil
|
||||
}
|
||||
|
||||
switch state {
|
||||
case .processing:
|
||||
toolbarButton.isError = false
|
||||
toolbarButton.isInProgress = true
|
||||
case .failedToParse:
|
||||
toolbarButton.isError = true
|
||||
toolbarButton.isInProgress = false
|
||||
case .ready, .cancelled, .complete:
|
||||
toolbarButton.isError = false
|
||||
toolbarButton.isInProgress = false
|
||||
}
|
||||
|
||||
return true
|
||||
}
|
||||
|
||||
func canMarkOlderArticlesAsRead() -> Bool {
|
||||
|
||||
Reference in New Issue
Block a user