From a725971193a0079d2ff175b23ae4f6032dba40c9 Mon Sep 17 00:00:00 2001 From: Guilherme Rambo Date: Mon, 20 Jun 2016 14:44:51 -0300 Subject: [PATCH] Allows deleting multiple downloads at once in downloads window, fixes crash with delete pressed while no item selected (Closes #157) --- WWDC/Base.lproj/Main.storyboard | 4 +-- WWDC/DownloadListWindowController.swift | 41 +++++++++++++++++-------- WWDC/DownloadListWindowController.xib | 2 +- 3 files changed, 32 insertions(+), 15 deletions(-) diff --git a/WWDC/Base.lproj/Main.storyboard b/WWDC/Base.lproj/Main.storyboard index 526c7d18..66f4f4c5 100644 --- a/WWDC/Base.lproj/Main.storyboard +++ b/WWDC/Base.lproj/Main.storyboard @@ -1,5 +1,5 @@ - + @@ -130,7 +130,7 @@ - + CA diff --git a/WWDC/DownloadListWindowController.swift b/WWDC/DownloadListWindowController.swift index 8fc672ee..11d05067 100644 --- a/WWDC/DownloadListWindowController.swift +++ b/WWDC/DownloadListWindowController.swift @@ -109,16 +109,6 @@ class DownloadListWindowController: NSWindowController, NSTableViewDelegate, NST } } } - self.downloadCancelledHndl = nc.addObserverForName(VideoStoreNotificationDownloadCancelled, object: nil, queue: NSOperationQueue.mainQueue()) { note in - if let object = note.object as? String { - let url = object as String - let (item, _) = self.listItemForURL(url) - if item != nil { - self.items.remove(item!) - self.tableView.removeRowsAtIndexes(NSIndexSet(index: self.tableView.selectedRow), withAnimation: .EffectGap) - } - } - } self.downloadPausedHndl = nc.addObserverForName(VideoStoreNotificationDownloadPaused, object: nil, queue: NSOperationQueue.mainQueue()) { note in if let object = note.object as? String { let url = object as String @@ -137,6 +127,9 @@ class DownloadListWindowController: NSWindowController, NSTableViewDelegate, NST } } } + self.downloadCancelledHndl = nc.addObserverForName(VideoStoreNotificationDownloadCancelled, object: nil, queue: NSOperationQueue.mainQueue()) { note in + self.populateDownloadItems() + } populateDownloadItems() } @@ -250,8 +243,32 @@ class DownloadListWindowController: NSWindowController, NSTableViewDelegate, NST } func delete(sender: AnyObject?) { - let item = self.items[tableView.selectedRow] - self.videoStore.cancelDownload(item.url) + guard tableView.selectedRowIndexes.count > 0 else { return } + + var downloadsToCancel = [String]() + + tableView.selectedRowIndexes.enumerateIndexesUsingBlock { index, _ in + downloadsToCancel.append(self.items[index].url) + } + + downloadsToCancel.forEach { self.videoStore.cancelDownload($0) } + } + + // MARK: Menu Validation + + private enum MenuItemTags: Int { + case Delete = 1077 + } + + override func validateMenuItem(menuItem: NSMenuItem) -> Bool { + guard let item = MenuItemTags(rawValue: menuItem.tag) else { + return super.validateMenuItem(menuItem) + } + + switch item { + case .Delete: + return tableView.selectedRowIndexes.count > 0 + } } } diff --git a/WWDC/DownloadListWindowController.xib b/WWDC/DownloadListWindowController.xib index 6bfd7ede..5cb12d9e 100644 --- a/WWDC/DownloadListWindowController.xib +++ b/WWDC/DownloadListWindowController.xib @@ -27,7 +27,7 @@ - +