Make Account, rather than its delegate, watch for refresh progress changes. This way the delegate doesn’t have to be inited with its Account.
This commit is contained in:
parent
b77569f38b
commit
c6f683c34c
@ -32,6 +32,7 @@ class MainWindowController : NSWindowController, NSUserInterfaceValidations {
|
|||||||
|
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(refreshProgressDidChange(_:)), name: .AccountRefreshDidBegin, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(refreshProgressDidChange(_:)), name: .AccountRefreshDidBegin, object: nil)
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(refreshProgressDidChange(_:)), name: .AccountRefreshDidFinish, object: nil)
|
NotificationCenter.default.addObserver(self, selector: #selector(refreshProgressDidChange(_:)), name: .AccountRefreshDidFinish, object: nil)
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(refreshProgressDidChange(_:)), name: .AccountRefreshProgressDidChange, object: nil)
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: Notifications
|
// MARK: Notifications
|
||||||
|
@ -40,6 +40,7 @@ public final class Account: DisplayNameProvider, Hashable {
|
|||||||
let settingsFile: String
|
let settingsFile: String
|
||||||
let dataFolder: String
|
let dataFolder: String
|
||||||
let database: Database
|
let database: Database
|
||||||
|
let delegate: AccountDelegate
|
||||||
var topLevelObjects = [AnyObject]()
|
var topLevelObjects = [AnyObject]()
|
||||||
var feedIDDictionary = [String: Feed]()
|
var feedIDDictionary = [String: Feed]()
|
||||||
var username: String?
|
var username: String?
|
||||||
@ -75,20 +76,11 @@ public final class Account: DisplayNameProvider, Hashable {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public lazy var delegate: AccountDelegate! = {
|
init?(dataFolder: String, settingsFile: String, type: AccountType, accountID: String) {
|
||||||
|
|
||||||
// TODO: support various syncing systems.
|
// TODO: support various syncing systems.
|
||||||
|
precondition(type == .onMyMac)
|
||||||
switch type {
|
self.delegate = LocalAccountDelegate()
|
||||||
|
|
||||||
case .onMyMac:
|
|
||||||
return LocalAccountDelegate(account: self)
|
|
||||||
default:
|
|
||||||
return nil
|
|
||||||
}
|
|
||||||
}()
|
|
||||||
|
|
||||||
init?(dataFolder: String, settingsFile: String, type: AccountType, accountID: String) {
|
|
||||||
|
|
||||||
self.accountID = accountID
|
self.accountID = accountID
|
||||||
self.type = type
|
self.type = type
|
||||||
@ -99,6 +91,8 @@ public final class Account: DisplayNameProvider, Hashable {
|
|||||||
let databaseFilePath = (dataFolder as NSString).appendingPathComponent("DB.sqlite3")
|
let databaseFilePath = (dataFolder as NSString).appendingPathComponent("DB.sqlite3")
|
||||||
self.database = Database(databaseFilePath: databaseFilePath, accountID: accountID)
|
self.database = Database(databaseFilePath: databaseFilePath, accountID: accountID)
|
||||||
|
|
||||||
|
NotificationCenter.default.addObserver(self, selector: #selector(downloadProgressDidChange(_:)), name: .DownloadProgressDidChange, object: nil)
|
||||||
|
|
||||||
pullObjectsFromDisk()
|
pullObjectsFromDisk()
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -106,7 +100,7 @@ public final class Account: DisplayNameProvider, Hashable {
|
|||||||
|
|
||||||
public func refreshAll() {
|
public func refreshAll() {
|
||||||
|
|
||||||
delegate.refreshAll()
|
delegate.refreshAll(for: self)
|
||||||
}
|
}
|
||||||
|
|
||||||
func update(_ feed: Feed, with parsedFeed: ParsedFeed, _ completion: RSVoidCompletionBlock) {
|
func update(_ feed: Feed, with parsedFeed: ParsedFeed, _ completion: RSVoidCompletionBlock) {
|
||||||
@ -189,9 +183,13 @@ public final class Account: DisplayNameProvider, Hashable {
|
|||||||
// TODO
|
// TODO
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - For use by delegate
|
// MARK: - Notifications
|
||||||
|
|
||||||
func noteProgressDidChange() {
|
@objc func downloadProgressDidChange(_ note: Notification) {
|
||||||
|
|
||||||
|
guard let noteObject = note.object as? DownloadProgress, noteObject === refreshProgress else {
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
refreshInProgress = refreshProgress.numberRemaining > 0
|
refreshInProgress = refreshProgress.numberRemaining > 0
|
||||||
NotificationCenter.default.post(name: .AccountRefreshProgressDidChange, object: self)
|
NotificationCenter.default.post(name: .AccountRefreshProgressDidChange, object: self)
|
||||||
|
@ -13,10 +13,8 @@ public protocol AccountDelegate {
|
|||||||
|
|
||||||
// Local account does not; some synced accounts might.
|
// Local account does not; some synced accounts might.
|
||||||
var supportsSubFolders: Bool { get }
|
var supportsSubFolders: Bool { get }
|
||||||
|
|
||||||
var refreshProgress: DownloadProgress { get }
|
var refreshProgress: DownloadProgress { get }
|
||||||
|
|
||||||
init(account: Account)
|
func refreshAll(for: Account)
|
||||||
|
|
||||||
func refreshAll()
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -13,7 +13,6 @@ final class LocalAccountDelegate: AccountDelegate {
|
|||||||
|
|
||||||
let supportsSubFolders = false
|
let supportsSubFolders = false
|
||||||
private let refresher = LocalAccountRefresher()
|
private let refresher = LocalAccountRefresher()
|
||||||
private weak var account: Account?
|
|
||||||
|
|
||||||
var refreshProgress: DownloadProgress {
|
var refreshProgress: DownloadProgress {
|
||||||
get {
|
get {
|
||||||
@ -21,26 +20,8 @@ final class LocalAccountDelegate: AccountDelegate {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
init(account: Account) {
|
func refreshAll(for account: Account) {
|
||||||
|
|
||||||
self.account = account
|
|
||||||
NotificationCenter.default.addObserver(self, selector: #selector(downloadProgressDidChange(_:)), name: .DownloadProgressDidChange, object: refresher.progress)
|
|
||||||
}
|
|
||||||
|
|
||||||
func refreshAll() {
|
|
||||||
|
|
||||||
guard let account = account else {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
account.refreshInProgress = true
|
|
||||||
refresher.refreshFeeds(account.flattenedFeeds())
|
refresher.refreshFeeds(account.flattenedFeeds())
|
||||||
}
|
}
|
||||||
|
|
||||||
// MARK: - Notifications
|
|
||||||
|
|
||||||
@objc func downloadProgressDidChange(_ note: Notification) {
|
|
||||||
|
|
||||||
account?.noteProgressDidChange()
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
@ -15,7 +15,7 @@
|
|||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
<outline text="App">
|
<outline text="App">
|
||||||
<outline text="Make Refresh button work"/>
|
<outline text="Parse feeds on refresh"/>
|
||||||
<outline text="Update Sparkle"/>
|
<outline text="Update Sparkle"/>
|
||||||
<outline text="Use new app icon"/>
|
<outline text="Use new app icon"/>
|
||||||
<outline text="Set -NSApplicationCrashOnExceptions YES"/>
|
<outline text="Set -NSApplicationCrashOnExceptions YES"/>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user