Move more OPML file management functions to the OPMLFile class
This commit is contained in:
parent
7de08e992e
commit
4d118d89db
@ -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()
|
||||
|
@ -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]? {
|
||||
|
Loading…
x
Reference in New Issue
Block a user