fix(downloads,playback): re-encode undecodable audio and carry the media source through

Work from a parallel session in the same working tree, committed here so the
branch is not left half-written. Attribution note: authored in a concurrent
Claude session, not by the author of the preceding commit.

- DR-171: a downloaded video keeps audio the device can actually decode.
  `original` quality asked for a straight copy, so an E-AC-3/AC-3/DTS/TrueHD
  track came down untouched and the webview had nothing to play it with.
- `get_video_download_url` gains the media source, so the URL is built against
  the source actually chosen rather than the item's default.
- Device profile and repository plumbing updated to match.

Verified green as a whole: 656 Rust tests, 945 frontend tests, svelte-check clean.
This commit is contained in:
2026-08-15 23:54:00 +02:00
parent a5535f2941
commit ac4fccd499
10 changed files with 385 additions and 46 deletions
+4 -1
View File
@@ -872,10 +872,11 @@ impl MediaRepository for HybridRepository {
item_id: &str,
quality: &str,
media_source_id: Option<&str>,
source_audio_codec: Option<&str>,
) -> String {
// Always use online URL for downloads
self.online
.get_video_download_url(item_id, quality, media_source_id)
.get_video_download_url(item_id, quality, media_source_id, source_audio_codec)
}
async fn mark_favorite(&self, item_id: &str) -> Result<(), RepoError> {
@@ -1299,6 +1300,7 @@ mod tests {
_item_id: &str,
_quality: &str,
_media_source_id: Option<&str>,
_source_audio_codec: Option<&str>,
) -> String {
unimplemented!()
}
@@ -1573,6 +1575,7 @@ mod tests {
_item_id: &str,
_quality: &str,
_media_source_id: Option<&str>,
_source_audio_codec: Option<&str>,
) -> String {
unimplemented!()
}