Skip to content

Commit ff4eaac

Browse files
authored
Allow changing of volume in different steps (#629)
Resolves #616
1 parent 5087bde commit ff4eaac

File tree

5 files changed

+18
-19
lines changed

5 files changed

+18
-19
lines changed

README.md

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -321,8 +321,7 @@ List of supported commands:
321321
| `Repeat` | cycle the repeat mode | `C-r` |
322322
| `ToggleFakeTrackRepeatMode` | toggle fake track repeat mode | `M-r` |
323323
| `Shuffle` | toggle the shuffle mode | `C-s` |
324-
| `VolumeUp` | increase playback volume by 5% | `+` |
325-
| `VolumeDown` | decrease playback volume by 5% | `-` |
324+
| `VolumeChange` | change playback volume by an offset (default shortcuts use 5%) | `+`, `-` |
326325
| `Mute` | toggle playback volume between 0% and previous level | `_` |
327326
| `SeekForward` | seek forward by 5s | `>` |
328327
| `SeekBackward` | seek backward by 5s | `<` |

docs/config.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -284,6 +284,9 @@ key_sequence = "M-enter"
284284
[[keymaps]]
285285
command = "None"
286286
key_sequence = "q"
287+
[[keymaps]]
288+
command = { VolumeChange = { offset = 1 } }
289+
key_sequence = "-"
287290
```
288291

289292
## Actions

spotify_player/src/command.rs

Lines changed: 10 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -16,8 +16,9 @@ pub enum Command {
1616
Repeat,
1717
ToggleFakeTrackRepeatMode,
1818
Shuffle,
19-
VolumeUp,
20-
VolumeDown,
19+
VolumeChange {
20+
offset: i32,
21+
},
2122
Mute,
2223
SeekForward,
2324
SeekBackward,
@@ -284,7 +285,11 @@ pub fn construct_episode_actions(episode: &Episode, _data: &DataReadGuard) -> Ve
284285
}
285286

286287
impl Command {
287-
pub fn desc(self) -> &'static str {
288+
pub fn desc(self) -> String {
289+
if let Self::VolumeChange { offset } = self {
290+
return format!("change playback volume by {offset}");
291+
}
292+
288293
match self {
289294
Self::None => "do nothing",
290295
Self::NextTrack => "next track",
@@ -294,8 +299,6 @@ impl Command {
294299
Self::Repeat => "cycle the repeat mode",
295300
Self::ToggleFakeTrackRepeatMode => "toggle fake track repeat mode",
296301
Self::Shuffle => "toggle the shuffle mode",
297-
Self::VolumeUp => "increase playback volume by 5%",
298-
Self::VolumeDown => "decrease playback volume by 5%",
299302
Self::Mute => "toggle playback volume between 0% and previous level",
300303
Self::SeekForward => "seek forward by 5s",
301304
Self::SeekBackward => "seek backward by 5s",
@@ -355,6 +358,8 @@ impl Command {
355358
Self::MovePlaylistItemUp => "move playlist item up one position",
356359
Self::MovePlaylistItemDown => "move playlist item down one position",
357360
Self::CreatePlaylist => "create a new playlist",
361+
Self::VolumeChange { offset: _ } => unreachable!(),
358362
}
363+
.to_string()
359364
}
360365
}

spotify_player/src/config/keymap.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -65,11 +65,11 @@ impl Default for KeymapConfig {
6565
},
6666
Keymap {
6767
key_sequence: "+".into(),
68-
command: Command::VolumeUp,
68+
command: Command::VolumeChange { offset: 5 },
6969
},
7070
Keymap {
7171
key_sequence: "-".into(),
72-
command: Command::VolumeDown,
72+
command: Command::VolumeChange { offset: -5 },
7373
},
7474
Keymap {
7575
key_sequence: "_".into(),

spotify_player/src/event/mod.rs

Lines changed: 2 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -547,18 +547,10 @@ fn handle_global_command(
547547
Command::Shuffle => {
548548
client_pub.send(ClientRequest::Player(PlayerRequest::Shuffle))?;
549549
}
550-
Command::VolumeUp => {
550+
Command::VolumeChange { offset } => {
551551
if let Some(ref playback) = state.player.read().buffered_playback {
552552
if let Some(volume) = playback.volume {
553-
let volume = std::cmp::min(volume + 5, 100_u32);
554-
client_pub.send(ClientRequest::Player(PlayerRequest::Volume(volume as u8)))?;
555-
}
556-
}
557-
}
558-
Command::VolumeDown => {
559-
if let Some(ref playback) = state.player.read().buffered_playback {
560-
if let Some(volume) = playback.volume {
561-
let volume = volume.saturating_sub(5_u32);
553+
let volume = std::cmp::min(volume as i32 + offset, 100_i32);
562554
client_pub.send(ClientRequest::Player(PlayerRequest::Volume(volume as u8)))?;
563555
}
564556
}

0 commit comments

Comments
 (0)