Skip to content

Commit 4c68534

Browse files
committed
fix: simplify handling with a boolean instead of keymap
- add `enable_mouse_scroll_volume` to config - fix error handling to properly propagate errors - remove `VolumeUp` and `VolumeDown` entirely
1 parent c53ead7 commit 4c68534

File tree

6 files changed

+21
-52
lines changed

6 files changed

+21
-52
lines changed

spotify_player/src/client/mod.rs

Lines changed: 0 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -332,22 +332,6 @@ impl AppClient {
332332
playback.volume = Some(u32::from(volume));
333333
playback.mute_state = None;
334334
}
335-
PlayerRequest::VolumeUp => {
336-
let step = u32::from(config::get_config().app_config.volume_scroll_step);
337-
let volume = std::cmp::min(playback.volume.unwrap_or_default() + step, 100_u32);
338-
self.volume(volume as u8, device_id).await?;
339-
340-
playback.volume = Some(volume);
341-
playback.mute_state = None;
342-
}
343-
PlayerRequest::VolumeDown => {
344-
let step = u32::from(config::get_config().app_config.volume_scroll_step);
345-
let volume = playback.volume.unwrap_or_default().saturating_sub(step);
346-
self.volume(volume as u8, device_id).await?;
347-
348-
playback.volume = Some(volume);
349-
playback.mute_state = None;
350-
}
351335
PlayerRequest::ToggleMute => {
352336
let new_mute_state = match playback.mute_state {
353337
None => {

spotify_player/src/client/request.rs

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,8 +14,6 @@ pub enum PlayerRequest {
1414
Repeat,
1515
Shuffle,
1616
Volume(u8),
17-
VolumeUp,
18-
VolumeDown,
1917
ToggleMute,
2018
TransferPlayback(String, bool),
2119
StartPlayback(Playback, Option<bool>),

spotify_player/src/command.rs

Lines changed: 0 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,8 +18,6 @@ pub enum Command {
1818
VolumeChange {
1919
offset: i32,
2020
},
21-
VolumeUp,
22-
VolumeDown,
2321
Mute,
2422
SeekStart,
2523
SeekForward {
@@ -308,8 +306,6 @@ impl Command {
308306
Self::PlayRandom => "play a random track in the current context",
309307
Self::Repeat => "cycle the repeat mode",
310308
Self::Shuffle => "toggle the shuffle mode",
311-
Self::VolumeUp => "increase playback volume",
312-
Self::VolumeDown => "decrease playback volume",
313309
Self::Mute => "toggle playback volume between 0% and previous level",
314310
Self::SeekStart => "seek to track start",
315311
Self::SeekForward { duration } => { return format!("seek forward by {}s", duration.unwrap_or(5)) },

spotify_player/src/config/keymap.rs

Lines changed: 0 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -67,14 +67,6 @@ impl Default for KeymapConfig {
6767
key_sequence: "-".into(),
6868
command: Command::VolumeChange { offset: -5 },
6969
},
70-
Keymap {
71-
key_sequence: "m s u".into(),
72-
command: Command::VolumeUp,
73-
},
74-
Keymap {
75-
key_sequence: "m s d".into(),
76-
command: Command::VolumeDown,
77-
},
7870
Keymap {
7971
key_sequence: "_".into(),
8072
command: Command::Mute,

spotify_player/src/config/mod.rs

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -129,6 +129,7 @@ pub struct AppConfig {
129129
pub sort_artist_albums_by_type: bool,
130130

131131
pub volume_scroll_step: u8,
132+
pub enable_mouse_scroll_volume: bool,
132133
}
133134

134135
#[derive(Debug, Deserialize, Serialize, Clone)]
@@ -376,6 +377,7 @@ impl Default for AppConfig {
376377
sort_artist_albums_by_type: false,
377378

378379
volume_scroll_step: 5,
380+
enable_mouse_scroll_volume: true,
379381
}
380382
}
381383
}

spotify_player/src/event/mod.rs

Lines changed: 19 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -67,30 +67,33 @@ fn handle_mouse_event(
6767
) -> Result<()> {
6868
tracing::debug!("Handling mouse event: {event:?}");
6969

70+
let enable_scroll = config::get_config().app_config.enable_mouse_scroll_volume;
71+
7072
match event.kind {
71-
crossterm::event::MouseEventKind::ScrollUp => {
72-
let key_sequence: KeySequence = "m s u".into();
73-
let keymap_config = &config::get_config().keymap_config;
74-
if keymap_config
75-
.find_command_or_action_from_key_sequence(&key_sequence)
76-
.is_some()
77-
{
78-
let _ = client_pub.try_send(ClientRequest::Player(PlayerRequest::VolumeUp));
73+
crossterm::event::MouseEventKind::ScrollUp if enable_scroll => {
74+
let step = i32::from(config::get_config().app_config.volume_scroll_step);
75+
if let Some(ref playback) = state.player.read().buffered_playback {
76+
if let Some(volume) = playback.volume {
77+
let new_volume = std::cmp::min(volume as i32 + step, 100_i32) as u8;
78+
client_pub.send(ClientRequest::Player(PlayerRequest::Volume(new_volume)))?;
79+
}
7980
}
8081
}
81-
crossterm::event::MouseEventKind::ScrollDown => {
82-
let key_sequence: KeySequence = "m s d".into();
83-
let keymap_config = &config::get_config().keymap_config;
84-
if keymap_config
85-
.find_command_or_action_from_key_sequence(&key_sequence)
86-
.is_some()
87-
{
88-
let _ = client_pub.try_send(ClientRequest::Player(PlayerRequest::VolumeDown));
82+
crossterm::event::MouseEventKind::ScrollDown if enable_scroll => {
83+
let step = i32::from(config::get_config().app_config.volume_scroll_step);
84+
if let Some(ref playback) = state.player.read().buffered_playback {
85+
if let Some(volume) = playback.volume {
86+
let new_volume = std::cmp::max(volume as i32 - step, 0_i32) as u8;
87+
client_pub.send(ClientRequest::Player(PlayerRequest::Volume(new_volume)))?;
88+
}
8989
}
9090
}
91+
// a left click event
9192
crossterm::event::MouseEventKind::Down(crossterm::event::MouseButton::Left) => {
9293
let rect = state.ui.lock().playback_progress_bar_rect;
9394
if event.row == rect.y {
95+
// calculate the seek position (in ms) based on the mouse click position,
96+
// the progress bar's width and the track's duration (in ms)
9497
let player = state.player.read();
9598
let duration = match player.currently_playing() {
9699
Some(rspotify::model::PlayableItem::Track(track)) => Some(track.duration),
@@ -598,12 +601,6 @@ fn handle_global_command(
598601
}
599602
}
600603
}
601-
Command::VolumeUp => {
602-
client_pub.send(ClientRequest::Player(PlayerRequest::VolumeUp))?;
603-
}
604-
Command::VolumeDown => {
605-
client_pub.send(ClientRequest::Player(PlayerRequest::VolumeDown))?;
606-
}
607604
Command::Mute => {
608605
client_pub.send(ClientRequest::Player(PlayerRequest::ToggleMute))?;
609606
}

0 commit comments

Comments
 (0)