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:
vicrodh committed 2026-01-09 09:30:26 -06:00
1 parent d1a13110ea
commit 62e59f599a
5 files changed
+213

No files matched your search

+18
View File
@@ -236,6 +236,15 @@
console.log('play_track invoke succeeded');
isPlaying = true;
showToast(`Playing: ${track.title}`, 'success');
// Update MPRIS metadata for system media controls
await invoke('set_media_metadata', {
title: track.title,
artist: track.performer?.name || 'Unknown Artist',
album: track.album?.title || '',
durationSecs: track.duration,
coverUrl: artwork || null
});
} catch (err) {
console.error('Failed to play track:', err);
showToast(`Playback error: ${err}`, 'error');
@@ -274,6 +283,15 @@
console.log('play_track invoke succeeded');
isPlaying = true;
showToast(`Playing: ${track.title}`, 'success');
// Update MPRIS metadata for system media controls
await invoke('set_media_metadata', {
title: track.title,
artist: track.artist || selectedAlbum?.artist || 'Unknown Artist',
album: selectedAlbum?.title || '',
durationSecs: track.durationSeconds,
coverUrl: artwork || null
});
} catch (err) {
console.error('Failed to play track:', err);
showToast(`Playback error: ${err}`, 'error');