From a670d2afd79f68c9945b7976826ff0c82a7ca934 Mon Sep 17 00:00:00 2001 From: leyoda Date: Mon, 18 May 2026 17:26:13 +0200 Subject: [PATCH] player: register MPEG and WMV support cleanly --- redeploy.sh | 22 ++++++++++++++++++++++ src/main.rs | 1 + src/mime.rs | 27 +++++++++++++++++++++++++++ src/mpris.rs | 4 ++-- 4 files changed, 52 insertions(+), 2 deletions(-) create mode 100644 src/mime.rs diff --git a/redeploy.sh b/redeploy.sh index 5f61724..553579e 100755 --- a/redeploy.sh +++ b/redeploy.sh @@ -42,6 +42,28 @@ while IFS= read -r icon; do sudo install -Dm0644 "$icon" "$PREFIX/share/icons/hicolor/$rel" done < <(find "res/icons/hicolor" -type f -name "$APPID.svg" | sort) +if command -v update-desktop-database >/dev/null 2>&1; then + echo "==> Refresh desktop database" + if [[ -w "$PREFIX/share/applications" ]]; then + update-desktop-database "$PREFIX/share/applications" || true + else + sudo -n update-desktop-database "$PREFIX/share/applications" 2>/dev/null || \ + echo " skipped: sudo authentication required" + fi +fi + +if command -v xdg-mime >/dev/null 2>&1; then + echo "==> Register common legacy video defaults" + xdg-mime default "$APPID.desktop" \ + video/mpeg \ + video/x-mpeg \ + video/x-mpeg2 \ + video/x-ms-wmv \ + video/x-ms-wm \ + video/x-ms-asf \ + application/vnd.ms-asf +fi + echo "==> Installed version" "$bin_target" --version diff --git a/src/main.rs b/src/main.rs index d9c2233..836fc31 100644 --- a/src/main.rs +++ b/src/main.rs @@ -33,6 +33,7 @@ mod config; mod key_bind; mod localize; mod menu; +mod mime; #[cfg(feature = "mpris-server")] mod mpris; mod project; diff --git a/src/mime.rs b/src/mime.rs new file mode 100644 index 0000000..dd37736 --- /dev/null +++ b/src/mime.rs @@ -0,0 +1,27 @@ +const DESKTOP_ENTRY: &str = include_str!("../res/com.system76.CosmicPlayer.desktop"); + +pub fn supported_mime_types() -> Vec { + DESKTOP_ENTRY + .lines() + .find_map(|line| line.strip_prefix("MimeType=")) + .map(|mime_types| { + mime_types + .split(';') + .filter(|mime_type| !mime_type.is_empty()) + .map(ToOwned::to_owned) + .collect() + }) + .unwrap_or_default() +} + +pub fn supported_uri_schemes() -> Vec { + supported_mime_types() + .into_iter() + .filter_map(|mime_type| { + mime_type + .strip_prefix("x-scheme-handler/") + .map(ToOwned::to_owned) + }) + .chain(["file".to_string(), "http".to_string(), "https".to_string()]) + .collect() +} diff --git a/src/mpris.rs b/src/mpris.rs index 8c87244..92dfcef 100644 --- a/src/mpris.rs +++ b/src/mpris.rs @@ -138,12 +138,12 @@ impl RootInterface for Player { async fn supported_uri_schemes(&self) -> fdo::Result> { log::info!("SupportedUriSchemes"); - Ok(vec![]) + Ok(crate::mime::supported_uri_schemes()) } async fn supported_mime_types(&self) -> fdo::Result> { log::info!("SupportedMimeTypes"); - Ok(vec![]) + Ok(crate::mime::supported_mime_types()) } }