1
1
mirror of https://github.com/danbee/persephone synced 2025-03-04 08:39:11 +00:00

Context menu to remove tracks from queue

This commit is contained in:
Daniel Barber 2019-06-07 13:42:27 -04:00
parent cd094c3a64
commit 5a9c2c0698
Signed by: danbarber
GPG Key ID: 931D8112E0103DD8
7 changed files with 48 additions and 1 deletions

View File

@ -43,6 +43,12 @@ class QueueViewController: NSViewController,
App.store.dispatch(MPDPlayTrack(queuePos: newQueuePos))
}
}
@IBAction func removeSongMenuAction(_ sender: NSMenuItem) {
let row = queueView.clickedRow
App.store.dispatch(MPDRemoveTrack(queuePos: row - 1))
}
func outlineView(
_ outlineView: NSOutlineView,

View File

@ -62,6 +62,10 @@ extension MPDClient {
guard let song = userData["song"] as? MPDSong
else { return }
sendAppendSong(song)
case .removeSong:
guard let queuePos = userData["queuePos"] as? Int
else { return }
sendRemoveSong(at: queuePos)
// Album commands
case .fetchAllAlbums:

View File

@ -22,6 +22,10 @@ extension MPDClient {
enqueueCommand(command: .appendSong, userData: ["song": song])
}
func removeSong(at queuePos: Int) {
enqueueCommand(command: .removeSong, userData: ["queuePos": queuePos])
}
func sendPlayTrack(at queuePos: Int) {
mpd_run_play_pos(self.connection, UInt32(queuePos))
}
@ -48,4 +52,8 @@ extension MPDClient {
func sendAppendSong(_ song: MPDSong) {
mpd_run_add(self.connection, song.uri)
}
func sendRemoveSong(at queuePos: Int) {
mpd_run_delete(self.connection, UInt32(queuePos))
}
}

View File

@ -31,6 +31,7 @@ extension MPDClient {
case playTrack
case replaceQueue
case appendSong
case removeSong
// Album commands
case fetchAllAlbums

View File

@ -75,6 +75,16 @@
</items>
</menu>
</menuItem>
<menuItem title="Queue" id="zZL-2K-acp">
<modifierMask key="keyEquivalentModifierMask"/>
<menu key="submenu" title="Queue" id="CWM-rf-Ozu">
<items>
<menuItem title="Remove song" id="x9q-fx-zaQ">
<modifierMask key="keyEquivalentModifierMask"/>
</menuItem>
</items>
</menu>
</menuItem>
<menuItem title="Song" id="elk-xW-VXb">
<menu key="submenu" title="Song" autoenablesItems="NO" id="RuT-kk-xTu">
<items>
@ -694,6 +704,7 @@
<connections>
<action trigger="doubleAction" selector="playTrack:" target="KIP-rq-4dM" id="opa-6G-OW0"/>
<outlet property="delegate" destination="KIP-rq-4dM" id="60F-6x-bUE"/>
<outlet property="menu" destination="dYA-Jm-eOa" id="9s2-7K-tVx"/>
</connections>
</outlineView>
</subviews>
@ -744,8 +755,18 @@
</connections>
</viewController>
<customObject id="du4-e9-TfX" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/>
<menu id="dYA-Jm-eOa">
<items>
<menuItem title="Remove" id="GaJ-qk-Cg4">
<modifierMask key="keyEquivalentModifierMask"/>
<connections>
<action selector="removeSongMenuAction:" target="KIP-rq-4dM" id="0Oc-Z3-4OD"/>
</connections>
</menuItem>
</items>
</menu>
</objects>
<point key="canvasLocation" x="820" y="749"/>
<point key="canvasLocation" x="796" y="848"/>
</scene>
<!--Album View Controller-->
<scene sceneID="7Ua-Hj-zWt">

View File

@ -20,6 +20,10 @@ struct MPDAppendTrack: Action {
let song: MPDClient.MPDSong
}
struct MPDRemoveTrack: Action {
let queuePos: Int
}
struct MPDPlayTrack: Action {
let queuePos: Int
}

View File

@ -33,6 +33,9 @@ func mpdReducer(action: Action, state: MPDState?) -> MPDState {
case let action as MPDAppendTrack:
App.mpdClient.appendSong(action.song)
case let action as MPDRemoveTrack:
App.mpdClient.removeSong(at: action.queuePos)
case let action as MPDPlayTrack:
App.mpdClient.playTrack(at: action.queuePos)