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:
parent
cd094c3a64
commit
5a9c2c0698
@ -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,
|
||||||
|
|||||||
@ -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:
|
||||||
|
|||||||
@ -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))
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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
|
||||||
|
|||||||
@ -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">
|
||||||
|
|||||||
@ -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
|
||||||
}
|
}
|
||||||
|
|||||||
@ -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)
|
||||||
|
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user