// // FeedInspectorViewController.swift // NetNewsWire // // Created by Brent Simmons on 1/20/18. // Copyright © 2018 Ranchero Software. All rights reserved. // import AppKit import Articles import Account final class WebFeedInspectorViewController: NSViewController, Inspector { @IBOutlet weak var iconView: IconView! @IBOutlet weak var nameTextField: NSTextField? @IBOutlet weak var homePageURLTextField: NSTextField? @IBOutlet weak var urlTextField: NSTextField? @IBOutlet weak var isNotifyAboutNewArticlesCheckBox: NSButton! @IBOutlet weak var isReaderViewAlwaysOnCheckBox: NSButton? private var feed: WebFeed? { didSet { if feed != oldValue { updateUI() } } } // MARK: Inspector let isFallbackInspector = false var objects: [Any]? { didSet { updateFeed() } } func canInspect(_ objects: [Any]) -> Bool { return objects.count == 1 && objects.first is WebFeed } // MARK: NSViewController override func viewDidLoad() { updateUI() NotificationCenter.default.addObserver(self, selector: #selector(imageDidBecomeAvailable(_:)), name: .ImageDidBecomeAvailable, object: nil) } // MARK: Actions @IBAction func isNotifyAboutNewArticlesChanged(_ sender: Any) { feed?.isNotifyAboutNewArticles = (isNotifyAboutNewArticlesCheckBox?.state ?? .off) == .on ? true : false } @IBAction func isReaderViewAlwaysOnChanged(_ sender: Any) { feed?.isArticleExtractorAlwaysOn = (isReaderViewAlwaysOnCheckBox?.state ?? .off) == .on ? true : false } // MARK: Notifications @objc func imageDidBecomeAvailable(_ note: Notification) { updateImage() } } extension WebFeedInspectorViewController: NSTextFieldDelegate { func controlTextDidChange(_ note: Notification) { guard let feed = feed, let nameTextField = nameTextField else { return } feed.editedName = nameTextField.stringValue } } private extension WebFeedInspectorViewController { func updateFeed() { guard let objects = objects, objects.count == 1, let singleFeed = objects.first as? WebFeed else { feed = nil return } feed = singleFeed } func updateUI() { updateImage() updateName() updateHomePageURL() updateFeedURL() updateNotifyAboutNewArticles() updateIsReaderViewAlwaysOn() view.needsLayout = true } func updateImage() { guard let feed = feed, let iconView = iconView else { return } if let feedIcon = appDelegate.webFeedIconDownloader.icon(for: feed) { iconView.iconImage = feedIcon return } if let favicon = appDelegate.faviconDownloader.favicon(for: feed) { iconView.iconImage = favicon return } iconView.iconImage = feed.smallIcon } func updateName() { guard let nameTextField = nameTextField else { return } let name = feed?.editedName ?? feed?.name ?? "" if nameTextField.stringValue != name { nameTextField.stringValue = name } } func updateHomePageURL() { homePageURLTextField?.stringValue = feed?.homePageURL ?? "" } func updateFeedURL() { urlTextField?.stringValue = feed?.url ?? "" } func updateNotifyAboutNewArticles() { isNotifyAboutNewArticlesCheckBox?.state = (feed?.isNotifyAboutNewArticles ?? false) ? .on : .off } func updateIsReaderViewAlwaysOn() { isReaderViewAlwaysOnCheckBox?.state = (feed?.isArticleExtractorAlwaysOn ?? false) ? .on : .off } }