mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-01 11:36:56 +01:00
Change master to be driven by the NavigationStateController.
Remove ShowFeedNamesDidChange event. Fix articleSelectionChange event name.
This commit is contained in:
parent
b2e080cf8e
commit
0964ac67fa
@ -33,7 +33,7 @@ class DetailViewController: UIViewController {
|
||||
reloadUI()
|
||||
reloadHTML()
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(statusesDidChange(_:)), name: .StatusesDidChange, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(articleSelectionChange(_:)), name: .ArticleSelectionChange, object: navState)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(articleSelectionDidChange(_:)), name: .ArticleSelectionDidChange, object: navState)
|
||||
}
|
||||
|
||||
func markAsRead() {
|
||||
@ -92,7 +92,7 @@ class DetailViewController: UIViewController {
|
||||
}
|
||||
}
|
||||
|
||||
@objc func articleSelectionChange(_ note: Notification) {
|
||||
@objc func articleSelectionDidChange(_ note: Notification) {
|
||||
markAsRead()
|
||||
reloadUI()
|
||||
reloadHTML()
|
||||
|
@ -36,6 +36,8 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(userDidAddFeed(_:)), name: .UserDidAddFeed, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(progressDidChange(_:)), name: .AccountRefreshProgressDidChange, object: nil)
|
||||
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(masterSelectionDidChange(_:)), name: .MasterSelectionDidChange, object: navState)
|
||||
|
||||
refreshControl = UIRefreshControl()
|
||||
refreshControl!.addTarget(self, action: #selector(refreshAccounts(_:)), for: .valueChanged)
|
||||
|
||||
@ -134,6 +136,16 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
|
||||
|
||||
}
|
||||
|
||||
@objc func masterSelectionDidChange(_ note: Notification) {
|
||||
|
||||
if let indexPath = navState.currentMasterIndexPath {
|
||||
if tableView.indexPathForSelectedRow != indexPath {
|
||||
tableView.selectRow(at: indexPath, animated: true, scrollPosition: .middle)
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
// MARK: Table View
|
||||
|
||||
override func numberOfSections(in tableView: UITableView) -> Int {
|
||||
@ -231,23 +243,9 @@ class MasterViewController: UITableViewController, UndoableCommandRunner {
|
||||
|
||||
override func tableView(_ tableView: UITableView, didSelectRowAt indexPath: IndexPath) {
|
||||
|
||||
guard let node = navState.nodeFor(indexPath) else {
|
||||
assertionFailure()
|
||||
return
|
||||
}
|
||||
|
||||
let timeline = UIStoryboard.main.instantiateController(ofType: MasterTimelineViewController.self)
|
||||
|
||||
if let fetcher = node.representedObject as? ArticleFetcher {
|
||||
navState.timelineFetcher = fetcher
|
||||
}
|
||||
|
||||
if let nameProvider = node.representedObject as? DisplayNameProvider {
|
||||
timeline.title = nameProvider.nameForDisplay
|
||||
}
|
||||
|
||||
timeline.navState = navState
|
||||
|
||||
navState.currentMasterIndexPath = indexPath
|
||||
self.navigationController?.pushViewController(timeline, animated: true)
|
||||
|
||||
}
|
||||
|
@ -13,12 +13,12 @@ import RSCore
|
||||
import RSTree
|
||||
|
||||
public extension Notification.Name {
|
||||
static let MasterSelectionDidChange = Notification.Name(rawValue: "MasterSelectionDidChange")
|
||||
static let BackingStoresDidRebuild = Notification.Name(rawValue: "BackingStoresDidRebuild")
|
||||
static let ShowFeedNamesDidChange = Notification.Name(rawValue: "ShowFeedNamesDidChange")
|
||||
static let ArticlesReinitialized = Notification.Name(rawValue: "ArticlesReinitialized")
|
||||
static let ArticleDataDidChange = Notification.Name(rawValue: "ArticleDataDidChange")
|
||||
static let ArticlesDidChange = Notification.Name(rawValue: "ArticlesDidChange")
|
||||
static let ArticleSelectionChange = Notification.Name(rawValue: "ArticleSelectionChange")
|
||||
static let ArticleSelectionDidChange = Notification.Name(rawValue: "ArticleSelectionDidChange")
|
||||
}
|
||||
|
||||
class NavigationStateController {
|
||||
@ -52,12 +52,21 @@ class NavigationStateController {
|
||||
return shadowTable.count
|
||||
}
|
||||
|
||||
var showFeedNames = false {
|
||||
var currentMasterIndexPath: IndexPath? {
|
||||
didSet {
|
||||
NotificationCenter.default.post(name: .ShowFeedNamesDidChange, object: self, userInfo: nil)
|
||||
guard let ip = currentMasterIndexPath, let node = nodeFor(ip) else {
|
||||
assertionFailure()
|
||||
return
|
||||
}
|
||||
if let fetcher = node.representedObject as? ArticleFetcher {
|
||||
timelineFetcher = fetcher
|
||||
}
|
||||
}
|
||||
}
|
||||
var showAvatars = false
|
||||
|
||||
var timelineName: String? {
|
||||
return (timelineFetcher as? DisplayNameProvider)?.nameForDisplay
|
||||
}
|
||||
|
||||
var timelineFetcher: ArticleFetcher? {
|
||||
didSet {
|
||||
@ -72,6 +81,10 @@ class NavigationStateController {
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
var showFeedNames = false
|
||||
var showAvatars = false
|
||||
|
||||
var isPrevArticleAvailable: Bool {
|
||||
guard let indexPath = currentArticleIndexPath else {
|
||||
return false
|
||||
@ -110,7 +123,7 @@ class NavigationStateController {
|
||||
var currentArticleIndexPath: IndexPath? {
|
||||
didSet {
|
||||
if currentArticleIndexPath != oldValue {
|
||||
NotificationCenter.default.post(name: .ArticleSelectionChange, object: self, userInfo: nil)
|
||||
NotificationCenter.default.post(name: .ArticleSelectionDidChange, object: self, userInfo: nil)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -42,15 +42,19 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(progressDidChange(_:)), name: .AccountRefreshProgressDidChange, object: nil)
|
||||
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(articlesReinitialized(_:)), name: .ArticlesReinitialized, object: navState)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(showFeedNamesDidChange(_:)), name: .ShowFeedNamesDidChange, object: navState)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(articleDataDidChange(_:)), name: .ArticleDataDidChange, object: navState)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(articlesDidChange(_:)), name: .ArticlesDidChange, object: navState)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(articleSelectionChange(_:)), name: .ArticleSelectionChange, object: navState)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(articleSelectionDidChange(_:)), name: .ArticleSelectionDidChange, object: navState)
|
||||
|
||||
refreshControl = UIRefreshControl()
|
||||
refreshControl!.addTarget(self, action: #selector(refreshAccounts(_:)), for: .valueChanged)
|
||||
|
||||
splitViewController?.delegate = self
|
||||
if let splitViewController = splitViewController {
|
||||
splitViewController.delegate = self
|
||||
changeToDisplayMode(splitViewController.displayMode)
|
||||
}
|
||||
|
||||
reloadUI()
|
||||
|
||||
}
|
||||
|
||||
@ -247,13 +251,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner
|
||||
}
|
||||
|
||||
@objc func articlesReinitialized(_ note: Notification) {
|
||||
if navState?.articles.count ?? 0 > 0 {
|
||||
tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: false)
|
||||
}
|
||||
}
|
||||
|
||||
@objc func showFeedNamesDidChange(_ note: Notification) {
|
||||
updateTableViewRowHeight()
|
||||
reloadUI()
|
||||
}
|
||||
|
||||
@objc func articleDataDidChange(_ note: Notification) {
|
||||
@ -264,7 +262,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner
|
||||
tableView.reloadData()
|
||||
}
|
||||
|
||||
@objc func articleSelectionChange(_ note: Notification) {
|
||||
@objc func articleSelectionDidChange(_ note: Notification) {
|
||||
|
||||
if let indexPath = navState?.currentArticleIndexPath {
|
||||
if tableView.indexPathForSelectedRow != indexPath {
|
||||
@ -338,13 +336,7 @@ class MasterTimelineViewController: UITableViewController, UndoableCommandRunner
|
||||
extension MasterTimelineViewController: UISplitViewControllerDelegate {
|
||||
|
||||
func splitViewController(_ svc: UISplitViewController, willChangeTo displayMode: UISplitViewController.DisplayMode) {
|
||||
if displayMode == .allVisible {
|
||||
nextUnreadButton.isEnabled = false
|
||||
nextUnreadButton.title = ""
|
||||
} else {
|
||||
nextUnreadButton.isEnabled = false
|
||||
nextUnreadButton.title = NSLocalizedString("First Unread", comment: "First Unread")
|
||||
}
|
||||
changeToDisplayMode(displayMode)
|
||||
}
|
||||
|
||||
}
|
||||
@ -357,6 +349,27 @@ private extension MasterTimelineViewController {
|
||||
AccountManager.shared.refreshAll()
|
||||
}
|
||||
|
||||
func changeToDisplayMode(_ displayMode: UISplitViewController.DisplayMode) {
|
||||
if displayMode == .allVisible {
|
||||
nextUnreadButton.isEnabled = false
|
||||
nextUnreadButton.title = ""
|
||||
} else {
|
||||
nextUnreadButton.isEnabled = false
|
||||
nextUnreadButton.title = NSLocalizedString("First Unread", comment: "First Unread")
|
||||
}
|
||||
}
|
||||
|
||||
func reloadUI() {
|
||||
|
||||
updateTableViewRowHeight()
|
||||
title = navState?.timelineName
|
||||
|
||||
if navState?.articles.count ?? 0 > 0 {
|
||||
tableView.scrollToRow(at: IndexPath(row: 0, section: 0), at: .top, animated: false)
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
func configureTimelineCell(_ cell: MasterTimelineTableViewCell, article: Article) {
|
||||
|
||||
var avatar = avatarFor(article)
|
||||
|
Loading…
x
Reference in New Issue
Block a user