mirror of
https://github.com/Ranchero-Software/NetNewsWire.git
synced 2025-02-01 03:26:54 +01:00
Fix issue where deletes were crashing the app. Issue #702
This commit is contained in:
parent
e428a4f785
commit
e8992dac95
@ -46,12 +46,30 @@ final class DeleteCommand: UndoableCommand {
|
|||||||
func perform() {
|
func perform() {
|
||||||
|
|
||||||
BatchUpdate.shared.perform {
|
BatchUpdate.shared.perform {
|
||||||
itemSpecifiers.forEach { $0.delete() }
|
itemSpecifiers.forEach { $0.delete() {} }
|
||||||
treeController.rebuild()
|
treeController.rebuild()
|
||||||
}
|
}
|
||||||
registerUndo()
|
registerUndo()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
func perform(completion: @escaping () -> Void) {
|
||||||
|
|
||||||
|
let group = DispatchGroup()
|
||||||
|
group.enter()
|
||||||
|
itemSpecifiers.forEach {
|
||||||
|
$0.delete() {
|
||||||
|
group.leave()
|
||||||
|
}
|
||||||
|
}
|
||||||
|
treeController.rebuild()
|
||||||
|
|
||||||
|
group.notify(queue: DispatchQueue.main) {
|
||||||
|
self.registerUndo()
|
||||||
|
completion()
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
func undo() {
|
func undo() {
|
||||||
|
|
||||||
BatchUpdate.shared.perform {
|
BatchUpdate.shared.perform {
|
||||||
@ -132,18 +150,20 @@ private struct SidebarItemSpecifier {
|
|||||||
self.path = ContainerPath(account: account!, folders: node.containingFolders())
|
self.path = ContainerPath(account: account!, folders: node.containingFolders())
|
||||||
}
|
}
|
||||||
|
|
||||||
func delete() {
|
func delete(completion: @escaping () -> Void) {
|
||||||
|
|
||||||
if let feed = feed {
|
if let feed = feed {
|
||||||
BatchUpdate.shared.start()
|
BatchUpdate.shared.start()
|
||||||
account?.removeFeed(feed, from: path.resolveContainer()) { result in
|
account?.removeFeed(feed, from: path.resolveContainer()) { result in
|
||||||
BatchUpdate.shared.end()
|
BatchUpdate.shared.end()
|
||||||
|
completion()
|
||||||
self.checkResult(result)
|
self.checkResult(result)
|
||||||
}
|
}
|
||||||
} else if let folder = folder {
|
} else if let folder = folder {
|
||||||
BatchUpdate.shared.start()
|
BatchUpdate.shared.start()
|
||||||
account?.removeFolder(folder) { result in
|
account?.removeFolder(folder) { result in
|
||||||
BatchUpdate.shared.end()
|
BatchUpdate.shared.end()
|
||||||
|
completion()
|
||||||
self.checkResult(result)
|
self.checkResult(result)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -526,14 +526,23 @@ class MasterFeedViewController: ProgressTableViewController, UndoableCommandRunn
|
|||||||
else {
|
else {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
navState.beginUpdates()
|
|
||||||
|
|
||||||
runCommand(deleteCommand)
|
var deleteIndexPaths = [indexPath]
|
||||||
navState.rebuildShadowTable()
|
if navState.isExpanded(deleteNode) {
|
||||||
tableView.deleteRows(at: [indexPath], with: .automatic)
|
for i in 0..<deleteNode.numberOfChildNodes {
|
||||||
|
deleteIndexPaths.append(IndexPath(row: indexPath.row + 1 + i, section: indexPath.section))
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
navState.endUpdates()
|
pushUndoableCommand(deleteCommand)
|
||||||
|
|
||||||
|
navState.beginUpdates()
|
||||||
|
deleteCommand.perform {
|
||||||
|
self.navState.treeController.rebuild()
|
||||||
|
self.navState.rebuildShadowTable()
|
||||||
|
self.tableView.deleteRows(at: deleteIndexPaths, with: .automatic)
|
||||||
|
self.navState.endUpdates()
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user