Remove buffer mode feature and relocate cache metrics
All checks were successful
Build and Release / build-and-release (push) Successful in 56s
All checks were successful
Build and Release / build-and-release (push) Successful in 56s
- Remove buffer mode toggle (Normal/Large/Huge) as demuxer settings do not significantly impact local file playback - Move cache duration metric from title bar to bottom status bar - Display cache alongside codec, bitrate, and sample rate info - Remove 'b' key binding and Buffer context menu option - Update version to 0.1.15
This commit is contained in:
parent
ed6765039c
commit
ea72368841
@ -1,6 +1,6 @@
|
||||
[package]
|
||||
name = "cm-player"
|
||||
version = "0.1.14"
|
||||
version = "0.1.15"
|
||||
edition = "2021"
|
||||
|
||||
[dependencies]
|
||||
|
||||
@ -348,7 +348,7 @@ async fn handle_key_event<B: ratatui::backend::Backend>(terminal: &mut Terminal<
|
||||
let max_items = match menu.menu_type {
|
||||
ContextMenuType::FilePanel => 2,
|
||||
ContextMenuType::Playlist => 2,
|
||||
ContextMenuType::TitleBar => 3,
|
||||
ContextMenuType::TitleBar => 4,
|
||||
};
|
||||
if menu.selected_index < max_items - 1 {
|
||||
menu.selected_index += 1;
|
||||
@ -700,7 +700,7 @@ fn handle_mouse_event(state: &mut AppState, mouse: MouseEvent, title_bar_area: r
|
||||
let items = match menu.menu_type {
|
||||
ContextMenuType::FilePanel => 2,
|
||||
ContextMenuType::Playlist => 2,
|
||||
ContextMenuType::TitleBar => 3,
|
||||
ContextMenuType::TitleBar => 4,
|
||||
};
|
||||
let popup_width = 13;
|
||||
let popup_height = items as u16 + 2; // +2 for borders
|
||||
|
||||
@ -21,6 +21,7 @@ pub struct Player {
|
||||
pub audio_codec: Option<String>,
|
||||
pub audio_bitrate: Option<f64>,
|
||||
pub sample_rate: Option<i64>,
|
||||
pub cache_duration: Option<f64>,
|
||||
}
|
||||
|
||||
impl Player {
|
||||
@ -62,6 +63,7 @@ impl Player {
|
||||
audio_codec: None,
|
||||
audio_bitrate: None,
|
||||
sample_rate: None,
|
||||
cache_duration: None,
|
||||
})
|
||||
}
|
||||
|
||||
@ -119,6 +121,7 @@ impl Player {
|
||||
self.audio_codec = None;
|
||||
self.audio_bitrate = None;
|
||||
self.sample_rate = None;
|
||||
self.cache_duration = None;
|
||||
|
||||
// Wait for socket to be created and mpv to be ready
|
||||
std::thread::sleep(Duration::from_millis(800));
|
||||
@ -246,6 +249,13 @@ impl Player {
|
||||
self.is_idle = idle;
|
||||
}
|
||||
}
|
||||
|
||||
// Update cache duration (how many seconds are buffered ahead)
|
||||
if let Some(val) = self.get_property("demuxer-cache-duration") {
|
||||
self.cache_duration = val.as_f64();
|
||||
} else {
|
||||
self.cache_duration = None;
|
||||
}
|
||||
}
|
||||
|
||||
pub fn update_metadata(&mut self) {
|
||||
|
||||
@ -34,7 +34,7 @@ pub fn render(frame: &mut Frame, state: &mut AppState, player: &Player) -> (Rect
|
||||
.constraints([Constraint::Percentage(50), Constraint::Percentage(50)])
|
||||
.split(main_chunks[1]);
|
||||
|
||||
render_title_bar(frame, state, main_chunks[0]);
|
||||
render_title_bar(frame, state, player, main_chunks[0]);
|
||||
render_file_panel(frame, state, content_chunks[0]);
|
||||
render_right_panel(frame, state, content_chunks[1]);
|
||||
render_status_bar(frame, state, player, main_chunks[2]);
|
||||
@ -349,7 +349,7 @@ fn render_right_panel(frame: &mut Frame, state: &mut AppState, area: Rect) {
|
||||
frame.render_stateful_widget(playlist_widget, area, &mut playlist_state);
|
||||
}
|
||||
|
||||
fn render_title_bar(frame: &mut Frame, state: &AppState, area: Rect) {
|
||||
fn render_title_bar(frame: &mut Frame, state: &AppState, _player: &Player, area: Rect) {
|
||||
let background_color = match state.player_state {
|
||||
PlayerState::Playing => Theme::success(), // Green for playing
|
||||
PlayerState::Paused => Theme::highlight(), // Blue for paused
|
||||
@ -521,7 +521,7 @@ fn render_status_bar(frame: &mut Frame, state: &AppState, player: &Player, area:
|
||||
left_parts.push(title.clone());
|
||||
}
|
||||
|
||||
// Right side: Bitrate | Codec | Sample rate
|
||||
// Right side: Bitrate | Codec | Sample rate | Cache
|
||||
if let Some(bitrate) = player.audio_bitrate {
|
||||
right_parts.push(format!("{:.0} kbps", bitrate));
|
||||
}
|
||||
@ -534,6 +534,12 @@ fn render_status_bar(frame: &mut Frame, state: &AppState, player: &Player, area:
|
||||
right_parts.push(format!("{} Hz", samplerate));
|
||||
}
|
||||
|
||||
if let Some(cache_dur) = player.cache_duration {
|
||||
if cache_dur > 0.0 {
|
||||
right_parts.push(format!("Cache:{:.1}s", cache_dur));
|
||||
}
|
||||
}
|
||||
|
||||
// Create layout for left and right sections
|
||||
let chunks = Layout::default()
|
||||
.direction(Direction::Horizontal)
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user