aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xREADME.md1
-rwxr-xr-xsrc/app.rs2
-rwxr-xr-xsrc/connection.rs17
-rwxr-xr-xsrc/event/handler.rs17
4 files changed, 36 insertions, 1 deletions
diff --git a/README.md b/README.md
index f6fe5e9..d886d91 100755
--- a/README.md
+++ b/README.md
@@ -15,6 +15,7 @@ rmptui is a minimal tui mpd client made with rust.
| `p` | Toggle pause |
| `+`/`=` | Increase volume |
| `-` | Decrease volume |
+| `m` | Toggle Mute |
| `D` | Get dmenu prompt |
| `j`/`Down` | Scroll down |
| `k`/`Up` | Scroll up |
diff --git a/src/app.rs b/src/app.rs
index baea0a2..9b2d2fd 100755
--- a/src/app.rs
+++ b/src/app.rs
@@ -429,7 +429,7 @@ impl App {
}
}
- pub fn handle_mouse_left_click(&mut self, x: u16, y: u16) -> AppResult<()> {
+ pub fn handle_mouse_left_click(&mut self, _x: u16, _y: u16) -> AppResult<()> {
Ok(())
}
}
diff --git a/src/connection.rs b/src/connection.rs
index c31c346..d3ff3a5 100755
--- a/src/connection.rs
+++ b/src/connection.rs
@@ -6,6 +6,12 @@ use simple_dmenu::dmenu;
use std::time::Duration;
#[derive(Debug)]
+pub enum VolumeStatus {
+ Muted(i8),
+ Unmuted,
+}
+
+#[derive(Debug)]
/// struct storing the mpd Client related stuff
pub struct Connection {
pub conn: Client,
@@ -16,6 +22,7 @@ pub struct Connection {
pub current_song: Song,
pub stats: mpd::Stats,
pub status: mpd::Status,
+ pub volume_status: VolumeStatus,
}
impl Connection {
@@ -41,6 +48,13 @@ impl Connection {
.currentsong()
.unwrap_or_else(|_| Some(empty_song.clone()))
.unwrap_or(empty_song);
+
+ let volume_status = if status.volume == 0 {
+ VolumeStatus::Muted(status.volume)
+ } else {
+ VolumeStatus::Unmuted
+ };
+
Ok(Self {
conn,
songs_filenames,
@@ -50,6 +64,7 @@ impl Connection {
current_song,
stats,
status,
+ volume_status,
})
}
@@ -207,6 +222,7 @@ impl Connection {
pub fn inc_volume(&mut self, v: i8) {
let cur = self.status.volume;
if cur + v <= 100 {
+ self.volume_status = VolumeStatus::Unmuted;
self.conn.volume(cur + v).unwrap();
}
}
@@ -215,6 +231,7 @@ impl Connection {
pub fn dec_volume(&mut self, v: i8) {
let cur = self.status.volume;
if cur - v >= 0 {
+ self.volume_status = VolumeStatus::Unmuted;
self.conn.volume(cur - v).unwrap();
}
}
diff --git a/src/event/handler.rs b/src/event/handler.rs
index fcd1416..02bdb14 100755
--- a/src/event/handler.rs
+++ b/src/event/handler.rs
@@ -1,5 +1,6 @@
use crate::{
app::{App, AppResult, SelectedTab},
+ connection::VolumeStatus,
ui::InputMode,
};
use crossterm::event::{KeyCode, KeyEvent, KeyModifiers, MouseEvent, MouseEventKind};
@@ -138,6 +139,22 @@ pub fn handle_key_events(key_event: KeyEvent, app: &mut App) -> AppResult<()> {
app.conn.update_status();
}
+ // Toggle Mute
+ KeyCode::Char('m') => {
+ match app.conn.volume_status {
+ VolumeStatus::Muted(v) => {
+ app.conn.conn.volume(v)?;
+ app.conn.volume_status = VolumeStatus::Unmuted;
+ }
+ VolumeStatus::Unmuted => {
+ let current_volume = app.conn.status.volume;
+ app.conn.conn.volume(0)?;
+ app.conn.volume_status = VolumeStatus::Muted(current_volume);
+ }
+ }
+ app.conn.update_status();
+ }
+
// Update MPD database
KeyCode::Char('U') => {
app.conn.conn.rescan()?;