diff --git a/Persephone/AppDelegate.swift b/Persephone/AppDelegate.swift
index bc9d4e9..94da4dc 100644
--- a/Persephone/AppDelegate.swift
+++ b/Persephone/AppDelegate.swift
@@ -16,6 +16,11 @@ class AppDelegate: NSObject,
MediaKeyTapDelegate {
var mediaKeyTap: MediaKeyTap?
+ @IBOutlet weak var playPauseMenuItem: NSMenuItem!
+ @IBOutlet weak var stopMenuItem: NSMenuItem!
+ @IBOutlet weak var nextSongMenuItem: NSMenuItem!
+ @IBOutlet weak var previousSongMenuItem: NSMenuItem!
+
@IBOutlet weak var connectMenuItem: NSMenuItem!
@IBOutlet weak var disconnectMenuItem: NSMenuItem!
@IBOutlet weak var mainWindowMenuItem: NSMenuItem!
@@ -30,7 +35,7 @@ class AppDelegate: NSObject,
App.store.subscribe(self) {
$0.select {
- ($0.serverState, $0.uiState)
+ ($0.serverState, $0.playerState, $0.uiState)
}
}
@@ -52,7 +57,11 @@ class AppDelegate: NSObject,
if let currentSong = App.store.state.playerState.currentSong,
state.isOneOf([.playing, .paused]) {
- let nowPlayingItem = NSMenuItem(title: "Now Playing", action: nil, keyEquivalent: "")
+ let nowPlayingItem = NSMenuItem(
+ title: state == .playing ? "Now Playing" : "Paused",
+ action: nil,
+ keyEquivalent: ""
+ )
let songItem = NSMenuItem(title: currentSong.title, action: nil, keyEquivalent: "")
let albumItem = NSMenuItem(
title: "\(currentSong.artist) — \(currentSong.album.title)",
@@ -108,6 +117,21 @@ class AppDelegate: NSObject,
addSelectedSongToQueueMenuItem.isEnabled = selectedSong != nil
}
+ func setControlsMenuItemsState(state: PlayerState) {
+ guard let state = state.state else { return }
+
+ playPauseMenuItem.isEnabled = state.isOneOf([.playing, .paused, .stopped])
+ stopMenuItem.isEnabled = state.isOneOf([.playing, .paused])
+ nextSongMenuItem.isEnabled = state.isOneOf([.playing, .paused])
+ previousSongMenuItem.isEnabled = state.isOneOf([.playing, .paused])
+
+ if state.isOneOf([.paused, .stopped, .unknown]) {
+ playPauseMenuItem.title = "Play"
+ } else {
+ playPauseMenuItem.title = "Pause"
+ }
+ }
+
func setConnectMenuItemsState(connected: Bool) {
connectMenuItem.isEnabled = !connected
disconnectMenuItem.isEnabled = connected
@@ -197,13 +221,14 @@ class AppDelegate: NSObject,
extension AppDelegate: StoreSubscriber {
typealias StoreSubscriberStateType = (
- serverState: ServerState, uiState: UIState
+ serverState: ServerState, playerState: PlayerState, uiState: UIState
)
func newState(state: StoreSubscriberStateType) {
updateDatabaseMenuItem.isEnabled = !state.uiState.databaseUpdating
setMainWindowStateMenuItem(state: state.uiState.mainWindowState)
setSongMenuItemsState(selectedSong: state.uiState.selectedSong)
+ setControlsMenuItemsState(state: state.playerState)
setConnectMenuItemsState(connected: state.serverState.connected)
}
}
diff --git a/Persephone/Components/Queue/QueueViewController.swift b/Persephone/Components/Queue/QueueViewController.swift
index 670fa82..e4338f0 100644
--- a/Persephone/Components/Queue/QueueViewController.swift
+++ b/Persephone/Components/Queue/QueueViewController.swift
@@ -39,18 +39,6 @@ class QueueViewController: NSViewController {
App.store.unsubscribe(self)
}
- override func keyDown(with event: NSEvent) {
- switch event.keyCode {
- case NSEvent.keyCodeSpace:
- nextResponder?.keyDown(with: event)
- case NSEvent.keyCodeBS:
- let queuePos = queueView.selectedRow
-
- App.mpdClient.removeSong(at: queuePos)
- default:
- super.keyDown(with: event)
- }
- }
@objc func didConnect() {
App.mpdClient.fetchQueue()
diff --git a/Persephone/Components/Window/Base.lproj/Main.storyboard b/Persephone/Components/Window/Base.lproj/Main.storyboard
index e4f41e1..cf2d61f 100644
--- a/Persephone/Components/Window/Base.lproj/Main.storyboard
+++ b/Persephone/Components/Window/Base.lproj/Main.storyboard
@@ -176,6 +176,34 @@
+