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)) App.store.dispatch(MPDPlayTrack(queuePos: newQueuePos))
} }
} }
@IBAction func removeSongMenuAction(_ sender: NSMenuItem) {
let row = queueView.clickedRow
App.store.dispatch(MPDRemoveTrack(queuePos: row - 1))
}
func outlineView( func outlineView(
_ outlineView: NSOutlineView, _ outlineView: NSOutlineView,

View File

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

View File

@ -22,6 +22,10 @@ extension MPDClient {
enqueueCommand(command: .appendSong, userData: ["song": song]) enqueueCommand(command: .appendSong, userData: ["song": song])
} }
func removeSong(at queuePos: Int) {
enqueueCommand(command: .removeSong, userData: ["queuePos": queuePos])
}
func sendPlayTrack(at queuePos: Int) { func sendPlayTrack(at queuePos: Int) {
mpd_run_play_pos(self.connection, UInt32(queuePos)) mpd_run_play_pos(self.connection, UInt32(queuePos))
} }
@ -48,4 +52,8 @@ extension MPDClient {
func sendAppendSong(_ song: MPDSong) { func sendAppendSong(_ song: MPDSong) {
mpd_run_add(self.connection, song.uri) 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 playTrack
case replaceQueue case replaceQueue
case appendSong case appendSong
case removeSong
// Album commands // Album commands
case fetchAllAlbums case fetchAllAlbums

View File

@ -75,6 +75,16 @@
</items> </items>
</menu> </menu>
</menuItem> </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"> <menuItem title="Song" id="elk-xW-VXb">
<menu key="submenu" title="Song" autoenablesItems="NO" id="RuT-kk-xTu"> <menu key="submenu" title="Song" autoenablesItems="NO" id="RuT-kk-xTu">
<items> <items>
@ -694,6 +704,7 @@
<connections> <connections>
<action trigger="doubleAction" selector="playTrack:" target="KIP-rq-4dM" id="opa-6G-OW0"/> <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="delegate" destination="KIP-rq-4dM" id="60F-6x-bUE"/>
<outlet property="menu" destination="dYA-Jm-eOa" id="9s2-7K-tVx"/>
</connections> </connections>
</outlineView> </outlineView>
</subviews> </subviews>
@ -744,8 +755,18 @@
</connections> </connections>
</viewController> </viewController>
<customObject id="du4-e9-TfX" userLabel="First Responder" customClass="NSResponder" sceneMemberID="firstResponder"/> <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> </objects>
<point key="canvasLocation" x="820" y="749"/> <point key="canvasLocation" x="796" y="848"/>
</scene> </scene>
<!--Album View Controller--> <!--Album View Controller-->
<scene sceneID="7Ua-Hj-zWt"> <scene sceneID="7Ua-Hj-zWt">

View File

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

View File

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