From 5416d793ada616ada730755a0c0d70dc04637c77 Mon Sep 17 00:00:00 2001 From: Daniel Barber Date: Sun, 9 Jun 2019 18:10:25 -0400 Subject: [PATCH] Actually clear the queue --- Persephone.xcodeproj/project.pbxproj | 4 ++++ Persephone/AppDelegate.swift | 7 ++++--- Persephone/MPDClient/Extensions/MPDClient+Command.swift | 2 ++ Persephone/MPDClient/Extensions/MPDClient+Queue.swift | 8 ++++++++ Persephone/MPDClient/Models/MPDCommand.swift | 1 + Persephone/State/Actions/MPDActions.swift | 2 ++ Persephone/State/Reducers/MPDReducer.swift | 3 +++ 7 files changed, 24 insertions(+), 3 deletions(-) diff --git a/Persephone.xcodeproj/project.pbxproj b/Persephone.xcodeproj/project.pbxproj index c32fa05..22c0f07 100644 --- a/Persephone.xcodeproj/project.pbxproj +++ b/Persephone.xcodeproj/project.pbxproj @@ -18,6 +18,7 @@ E408D3C2220E134F0006D9BE /* AlbumViewController.swift in Sources */ = {isa = PBXBuildFile; fileRef = E408D3C1220E134F0006D9BE /* AlbumViewController.swift */; }; E408D3CB220E341D0006D9BE /* AlbumViewItem.xib in Resources */ = {isa = PBXBuildFile; fileRef = E408D3C9220E341D0006D9BE /* AlbumViewItem.xib */; }; E40FE71B221B904300A4223F /* NSEvent.swift in Sources */ = {isa = PBXBuildFile; fileRef = E40FE71A221B904300A4223F /* NSEvent.swift */; }; + E4120D6C22AD8139004CB1F8 /* QueueView.swift in Sources */ = {isa = PBXBuildFile; fileRef = E4120D6B22AD8139004CB1F8 /* QueueView.swift */; }; E419E2872249B96600216A8C /* Song.swift in Sources */ = {isa = PBXBuildFile; fileRef = E419E2862249B96600216A8C /* Song.swift */; }; E41B22C621FB932700D544F6 /* MPDClient.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41B22C521FB932700D544F6 /* MPDClient.swift */; }; E41E52FD223BF87300173814 /* MPDClient+Connection.swift in Sources */ = {isa = PBXBuildFile; fileRef = E41E52FC223BF87300173814 /* MPDClient+Connection.swift */; }; @@ -192,6 +193,7 @@ E408D3C1220E134F0006D9BE /* AlbumViewController.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = AlbumViewController.swift; sourceTree = ""; }; E408D3C9220E341D0006D9BE /* AlbumViewItem.xib */ = {isa = PBXFileReference; lastKnownFileType = file.xib; path = AlbumViewItem.xib; sourceTree = ""; }; E40FE71A221B904300A4223F /* NSEvent.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = NSEvent.swift; sourceTree = ""; }; + E4120D6B22AD8139004CB1F8 /* QueueView.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = QueueView.swift; sourceTree = ""; }; E419E2862249B96600216A8C /* Song.swift */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.swift; path = Song.swift; sourceTree = ""; }; E41B22BF21FB6BBA00D544F6 /* libmpdclient.2.dylib */ = {isa = PBXFileReference; lastKnownFileType = "compiled.mach-o.dylib"; name = libmpdclient.2.dylib; path = libmpdclient/output/libmpdclient.2.dylib; sourceTree = ""; }; E41B22C421FB715A00D544F6 /* module.modulemap */ = {isa = PBXFileReference; lastKnownFileType = "sourcecode.module-map"; path = module.modulemap; sourceTree = ""; }; @@ -472,6 +474,7 @@ E423563F228623D2001216D6 /* QueueSongTitleView.swift */, E45878372296173C00586A1C /* AlbumDetailSongRowView.swift */, E4A3A6A022A457B600EA2C40 /* AlbumDetailSongListView.swift */, + E4120D6B22AD8139004CB1F8 /* QueueView.swift */, ); path = Views; sourceTree = ""; @@ -969,6 +972,7 @@ E47E2FD122205C4600F747E6 /* MainSplitViewController.swift in Sources */, E4B11BB8227538FA0075461B /* CurrentCoverArtView.swift in Sources */, E4E8CC9A22075D370024217A /* MPDSong.swift in Sources */, + E4120D6C22AD8139004CB1F8 /* QueueView.swift in Sources */, E41EA46C221636AF0068EF46 /* GeneralPrefsViewController.swift in Sources */, E4E8CC902204EC7F0024217A /* Delegate.swift in Sources */, E4A83BF4222207D50098FED6 /* CoverArtService.swift in Sources */, diff --git a/Persephone/AppDelegate.swift b/Persephone/AppDelegate.swift index e013915..3bb5e8a 100644 --- a/Persephone/AppDelegate.swift +++ b/Persephone/AppDelegate.swift @@ -140,19 +140,20 @@ class AppDelegate: NSObject, else { return } App.store.dispatch(MPDRemoveTrack(queuePos: queueItem.queuePos)) + App.store.dispatch(SetSelectedQueueItem(selectedQueueItem: nil)) } @IBAction func clearQueueMenuAction(_ sender: NSMenuItem) { let alert = NSAlert() - alert.alertStyle = .informational + alert.alertStyle = .warning alert.messageText = "Are you sure you want to clear the queue?" alert.informativeText = "You can’t undo this action." - alert.addButton(withTitle: "Clear") + alert.addButton(withTitle: "Clear Queue") alert.addButton(withTitle: "Cancel") let result = alert.runModal() if result == .alertFirstButtonReturn { - App.store.dispatch(UpdateQueueAction(queue: [])) + App.store.dispatch(MPDClearQueue()) } } diff --git a/Persephone/MPDClient/Extensions/MPDClient+Command.swift b/Persephone/MPDClient/Extensions/MPDClient+Command.swift index f6bdea2..2b3868a 100644 --- a/Persephone/MPDClient/Extensions/MPDClient+Command.swift +++ b/Persephone/MPDClient/Extensions/MPDClient+Command.swift @@ -54,6 +54,8 @@ extension MPDClient { guard let queuePos = userData["queuePos"] as? Int else { return } sendPlayTrack(at: queuePos) + case .clearQueue: + sendClearQueue() case .replaceQueue: guard let songs = userData["songs"] as? [MPDSong] else { return } diff --git a/Persephone/MPDClient/Extensions/MPDClient+Queue.swift b/Persephone/MPDClient/Extensions/MPDClient+Queue.swift index 1d08788..ef46c47 100644 --- a/Persephone/MPDClient/Extensions/MPDClient+Queue.swift +++ b/Persephone/MPDClient/Extensions/MPDClient+Queue.swift @@ -14,6 +14,10 @@ extension MPDClient { sendCommand(command: .fetchQueue) } + func clearQueue() { + enqueueCommand(command: .clearQueue) + } + func playTrack(at queuePos: Int) { enqueueCommand(command: .playTrack, userData: ["queuePos": queuePos]) } @@ -40,6 +44,10 @@ extension MPDClient { } } + func sendClearQueue() { + mpd_run_clear(self.connection) + } + func sendReplaceQueue(_ songs: [MPDSong]) { mpd_run_clear(self.connection) diff --git a/Persephone/MPDClient/Models/MPDCommand.swift b/Persephone/MPDClient/Models/MPDCommand.swift index 4cb2013..2ca6ddd 100644 --- a/Persephone/MPDClient/Models/MPDCommand.swift +++ b/Persephone/MPDClient/Models/MPDCommand.swift @@ -29,6 +29,7 @@ extension MPDClient { // Queue commands case fetchQueue case playTrack + case clearQueue case replaceQueue case appendSong case removeSong diff --git a/Persephone/State/Actions/MPDActions.swift b/Persephone/State/Actions/MPDActions.swift index 3b26521..fc107f0 100644 --- a/Persephone/State/Actions/MPDActions.swift +++ b/Persephone/State/Actions/MPDActions.swift @@ -16,6 +16,8 @@ struct MPDStopAction: Action {} struct MPDNextTrackAction: Action {} struct MPDPrevTrackAction: Action {} +struct MPDClearQueue: Action {} + struct MPDAppendTrack: Action { let song: MPDClient.MPDSong } diff --git a/Persephone/State/Reducers/MPDReducer.swift b/Persephone/State/Reducers/MPDReducer.swift index 70780a0..49a10a4 100644 --- a/Persephone/State/Reducers/MPDReducer.swift +++ b/Persephone/State/Reducers/MPDReducer.swift @@ -30,6 +30,9 @@ func mpdReducer(action: Action, state: MPDState?) -> MPDState { case is MPDPrevTrackAction: App.mpdClient.prevTrack() + case is MPDClearQueue: + App.mpdClient.clearQueue() + case let action as MPDAppendTrack: App.mpdClient.appendSong(action.song)