feat: add MPRIS media controls integration
Backend (Rust): - Add souvlaki crate for MPRIS support on Linux - Create media_controls module with MediaControlsManager - Track metadata (title, artist, album, duration, cover) - Playback state (playing/paused/stopped) - Wire pause/resume/stop commands to update MPRIS - Add set_media_metadata Tauri command Frontend (Svelte): - Call set_media_metadata when track starts playing - Send track info to MPRIS for system integration Now shows track info in system media controls and supports media key events (logged for now).
This commit is contained in:
1 parent
d1a13110ea
commit
62e59f599a
5 files changed
+213
No files matched your search
@@ -24,6 +24,7 @@ pub async fn play_track(track_id: u64, state: State<'_, AppState>) -> Result<(),
|
||||
#[tauri::command]
|
||||
pub fn pause_playback(state: State<'_, AppState>) -> Result<(), String> {
|
||||
log::info!("Command: pause_playback");
|
||||
state.media_controls.set_playback(false);
|
||||
state.player.pause()
|
||||
}
|
||||
|
||||
@@ -31,6 +32,7 @@ pub fn pause_playback(state: State<'_, AppState>) -> Result<(), String> {
|
||||
#[tauri::command]
|
||||
pub fn resume_playback(state: State<'_, AppState>) -> Result<(), String> {
|
||||
log::info!("Command: resume_playback");
|
||||
state.media_controls.set_playback(true);
|
||||
state.player.resume()
|
||||
}
|
||||
|
||||
@@ -38,9 +40,33 @@ pub fn resume_playback(state: State<'_, AppState>) -> Result<(), String> {
|
||||
#[tauri::command]
|
||||
pub fn stop_playback(state: State<'_, AppState>) -> Result<(), String> {
|
||||
log::info!("Command: stop_playback");
|
||||
state.media_controls.set_stopped();
|
||||
state.player.stop()
|
||||
}
|
||||
|
||||
/// Set media controls metadata (for MPRIS integration)
|
||||
#[tauri::command]
|
||||
pub fn set_media_metadata(
|
||||
title: String,
|
||||
artist: String,
|
||||
album: String,
|
||||
duration_secs: Option<u64>,
|
||||
cover_url: Option<String>,
|
||||
state: State<'_, AppState>,
|
||||
) -> Result<(), String> {
|
||||
log::info!("Command: set_media_metadata - {} by {}", title, artist);
|
||||
crate::update_media_controls_metadata(
|
||||
&state.media_controls,
|
||||
&title,
|
||||
&artist,
|
||||
&album,
|
||||
duration_secs,
|
||||
cover_url,
|
||||
);
|
||||
state.media_controls.set_playback(true);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
/// Set volume (0.0 - 1.0)
|
||||
#[tauri::command]
|
||||
pub fn set_volume(volume: f32, state: State<'_, AppState>) -> Result<(), String> {
|
||||
|
||||
Reference in new issue
Block a user