Fix issue where deletes were crashing the app. Issue #702

This commit is contained in:
Maurice Parker 2019-06-05 17:42:35 -05:00
parent e428a4f785
commit e8992dac95
2 changed files with 37 additions and 8 deletions

View File

@ -46,12 +46,30 @@ final class DeleteCommand: UndoableCommand {
func perform() {
BatchUpdate.shared.perform {
itemSpecifiers.forEach { $0.delete() }
itemSpecifiers.forEach { $0.delete() {} }
treeController.rebuild()
}
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() {
BatchUpdate.shared.perform {
@ -132,18 +150,20 @@ private struct SidebarItemSpecifier {
self.path = ContainerPath(account: account!, folders: node.containingFolders())
}
func delete() {
func delete(completion: @escaping () -> Void) {
if let feed = feed {
BatchUpdate.shared.start()
account?.removeFeed(feed, from: path.resolveContainer()) { result in
BatchUpdate.shared.end()
completion()
self.checkResult(result)
}
} else if let folder = folder {
BatchUpdate.shared.start()
account?.removeFolder(folder) { result in
BatchUpdate.shared.end()
completion()
self.checkResult(result)
}
}

View File

@ -526,14 +526,23 @@ class MasterFeedViewController: ProgressTableViewController, UndoableCommandRunn
else {
return
}
navState.beginUpdates()
runCommand(deleteCommand)
navState.rebuildShadowTable()
tableView.deleteRows(at: [indexPath], with: .automatic)
var deleteIndexPaths = [indexPath]
if navState.isExpanded(deleteNode) {
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()
}
}