Observe article

This commit is contained in:
Chris Li 2017-01-18 10:56:50 -05:00
parent 4f314eef8f
commit cbbd1ebcd3

View File

@ -20,7 +20,6 @@ class MainController: UIViewController {
@IBOutlet weak var tocHeightConstraint: NSLayoutConstraint! @IBOutlet weak var tocHeightConstraint: NSLayoutConstraint!
@IBOutlet weak var tocLeadSpacing: NSLayoutConstraint! @IBOutlet weak var tocLeadSpacing: NSLayoutConstraint!
let searchBar = SearchBar() let searchBar = SearchBar()
lazy var controllers = Controllers() lazy var controllers = Controllers()
lazy var buttons = Buttons() lazy var buttons = Buttons()
@ -28,6 +27,13 @@ class MainController: UIViewController {
var isShowingTableOfContents = false var isShowingTableOfContents = false
private(set) var tableOfContentsController: TableOfContentsController? private(set) var tableOfContentsController: TableOfContentsController?
private var observerContext = 0
var article: Article? {
didSet {
oldValue?.removeObserver(self, forKeyPath: "isBookmarked", context: &observerContext)
article?.addObserver(self, forKeyPath: "isBookmarked", options: [.new, .old], context: &observerContext)
}
}
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
@ -73,6 +79,16 @@ class MainController: UIViewController {
tableOfContentsController?.delegate = self tableOfContentsController?.delegate = self
} }
} }
override func observeValue(forKeyPath keyPath: String?, of object: Any?, change: [NSKeyValueChangeKey : Any]?, context: UnsafeMutableRawPointer?) {
guard context == &observerContext else {
super.observeValue(forKeyPath: keyPath, of: object, change: change, context: context)
return
}
if let article = object as? Article {
buttons.bookmark.isHighlighted = article.isBookmarked
}
}
} }
// MARK: - Web // MARK: - Web
@ -123,8 +139,9 @@ extension MainController: UIWebViewDelegate, SFSafariViewControllerDelegate {
article.title = title article.title = title
article.snippet = JS.getSnippet(from: webView) article.snippet = JS.getSnippet(from: webView)
article.bookmarkDate = Date() article.lastReadDate = Date()
article.thumbImagePath = URLResponseCache.shared.firstImage()?.path article.thumbImagePath = URLResponseCache.shared.firstImage()?.path
self.article = article
} }
func webView(_ webView: UIWebView, didFailLoadWithError error: Error) { func webView(_ webView: UIWebView, didFailLoadWithError error: Error) {
@ -273,7 +290,6 @@ extension MainController: ButtonDelegates {
showBookmarkHUD() showBookmarkHUD()
controllers.bookmarkHUD.bookmarkAdded = article.isBookmarked controllers.bookmarkHUD.bookmarkAdded = article.isBookmarked
buttons.bookmark.isHighlighted = article.isBookmarked
indexCoreSpotlight(article: article) indexCoreSpotlight(article: article)
// let operation = BookmarkSyncOperation(articleURL: url) // let operation = BookmarkSyncOperation(articleURL: url)
@ -358,31 +374,6 @@ extension MainController: TableOfContentsDelegate {
} }
} }
// MARK: - Welcome
extension MainController {
func showWelcome() {
let controller = controllers.welcome
controller.view.translatesAutoresizingMaskIntoConstraints = false
addChildViewController(controller)
view.insertSubview(controller.view, aboveSubview: webView)
let views = ["view": controller.view]
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|", options: .alignAllTop, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|", options: .alignAllLeft, metrics: nil, views: views))
controller.didMove(toParentViewController: self)
}
func hideWelcome() {
guard let controller = welcomeController else {return}
controller.removeFromParentViewController()
controller.view.removeFromSuperview()
}
var welcomeController: WelcomeController? {
return childViewControllers.flatMap({$0 as? WelcomeController}).first
}
}
// MARK: - Bookmark // MARK: - Bookmark
extension MainController: UIViewControllerTransitioningDelegate { extension MainController: UIViewControllerTransitioningDelegate {
@ -409,6 +400,31 @@ extension MainController: UIViewControllerTransitioningDelegate {
} }
} }
// MARK: - Welcome
extension MainController {
func showWelcome() {
let controller = controllers.welcome
controller.view.translatesAutoresizingMaskIntoConstraints = false
addChildViewController(controller)
view.insertSubview(controller.view, aboveSubview: webView)
let views = ["view": controller.view]
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:|[view]|", options: .alignAllTop, metrics: nil, views: views))
view.addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|[view]|", options: .alignAllLeft, metrics: nil, views: views))
controller.didMove(toParentViewController: self)
}
func hideWelcome() {
guard let controller = welcomeController else {return}
controller.removeFromParentViewController()
controller.view.removeFromSuperview()
}
var welcomeController: WelcomeController? {
return childViewControllers.flatMap({$0 as? WelcomeController}).first
}
}
// MARK: - SFSafariViewControllerDelegate // MARK: - SFSafariViewControllerDelegate
extension MainController { extension MainController {