Move more OPML file management functions to the OPMLFile class

This commit is contained in:
Maurice Parker 2019-09-13 10:15:11 -05:00
parent 7de08e992e
commit 4d118d89db
2 changed files with 34 additions and 23 deletions

View File

@ -191,12 +191,6 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
private var startingUp = true
public var dirty = false {
didSet {
queueSaveToDiskIfNeeded()
}
}
public var unreadCount = 0 {
didSet {
if unreadCount != oldValue {
@ -221,7 +215,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
}
else {
NotificationCenter.default.post(name: .AccountRefreshDidFinish, object: self)
queueSaveToDiskIfNeeded()
opmlFile.queueSaveToDiskIfNeeded()
}
}
}
@ -625,7 +619,7 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
// Feeds were added or deleted. Or folders added or deleted.
// Or feeds inside folders were added or deleted.
if !startingUp {
dirty = true
opmlFile.markAsDirty()
}
flattenedFeedsNeedUpdate = true
feedDictionaryNeedsUpdate = true
@ -768,13 +762,6 @@ public final class Account: DisplayNameProvider, UnreadCountProvider, Container,
}
}
@objc func saveToDiskIfNeeded() {
if dirty && !isDeleted {
dirty = false
opmlFile.save()
}
}
@objc func saveFeedMetadataIfNeeded() {
if feedMetadataDirty && !isDeleted {
saveFeedMetadata()
@ -958,10 +945,6 @@ private extension Account {
private extension Account {
func queueSaveToDiskIfNeeded() {
Account.saveQueue.add(self, #selector(saveToDiskIfNeeded))
}
func pullObjectsFromDisk() {
loadAccountMetadata()
loadFeedMetadata()

View File

@ -15,6 +15,13 @@ final class OPMLFile: NSObject, NSFilePresenter {
private var log = OSLog(subsystem: Bundle.main.bundleIdentifier!, category: "account")
private var isDirty = false {
didSet {
queueSaveToDiskIfNeeded()
}
}
private var isLoading = false
private let filename: String
private let account: Account
private let operationQueue: OperationQueue
@ -44,13 +51,36 @@ final class OPMLFile: NSObject, NSFilePresenter {
}
}
func markAsDirty() {
if !isLoading {
isDirty = true
}
}
func queueSaveToDiskIfNeeded() {
Account.saveQueue.add(self, #selector(saveToDiskIfNeeded))
}
func load() {
isLoading = true
guard let opmlItems = parsedOPMLItems() else { return }
BatchUpdate.shared.perform {
account.loadOPMLItems(opmlItems, parentFolder: nil)
}
isLoading = false
}
}
private extension OPMLFile {
@objc func saveToDiskIfNeeded() {
if isDirty && !account.isDeleted {
isDirty = false
save()
}
}
func save() {
let opmlDocumentString = opmlDocument()
do {
@ -61,16 +91,14 @@ final class OPMLFile: NSObject, NSFilePresenter {
}
}
}
private extension OPMLFile {
func reload() {
isLoading = true
guard let opmlItems = parsedOPMLItems() else { return }
BatchUpdate.shared.perform {
account.topLevelFeeds.removeAll()
account.loadOPMLItems(opmlItems, parentFolder: nil)
}
isLoading = false
}
func parsedOPMLItems() -> [RSOPMLItem]? {