improv(default-apps): add video players to music player selection
This commit is contained in:
parent
818eb24329
commit
1d2c027478
1 changed files with 34 additions and 22 deletions
|
|
@ -115,13 +115,13 @@ impl page::Page<crate::pages::Message> for Page {
|
||||||
let assocs = mime_apps::associations::by_app();
|
let assocs = mime_apps::associations::by_app();
|
||||||
|
|
||||||
let apps = vec![
|
let apps = vec![
|
||||||
load_defaults(&assocs, "x-scheme-handler/http").await,
|
load_defaults(&assocs, &["x-scheme-handler/http"]).await,
|
||||||
load_defaults(&assocs, "inode/directory").await,
|
load_defaults(&assocs, &["inode/directory"]).await,
|
||||||
load_defaults(&assocs, "x-scheme-handler/mailto").await,
|
load_defaults(&assocs, &["x-scheme-handler/mailto"]).await,
|
||||||
load_defaults(&assocs, "audio/mp3").await,
|
load_defaults(&assocs, &["audio/mp3", "video/mp4"]).await,
|
||||||
load_defaults(&assocs, "video/mp4").await,
|
load_defaults(&assocs, &["video/mp4"]).await,
|
||||||
load_defaults(&assocs, "image/png").await,
|
load_defaults(&assocs, &["image/png"]).await,
|
||||||
load_defaults(&assocs, "text/calendar").await,
|
load_defaults(&assocs, &["text/calendar"]).await,
|
||||||
AppMeta {
|
AppMeta {
|
||||||
selected: None,
|
selected: None,
|
||||||
app_ids: Vec::new(),
|
app_ids: Vec::new(),
|
||||||
|
|
@ -348,25 +348,37 @@ fn apps() -> Section<crate::pages::Message> {
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
async fn load_defaults(assocs: &BTreeMap<Arc<str>, Arc<App>>, for_mime: &str) -> AppMeta {
|
async fn load_defaults(assocs: &BTreeMap<Arc<str>, Arc<App>>, for_mimes: &[&str]) -> AppMeta {
|
||||||
let Ok(mime) = for_mime.parse() else {
|
let mut unsorted = Vec::new();
|
||||||
return AppMeta {
|
let mut current_app = None;
|
||||||
selected: None,
|
|
||||||
app_ids: Vec::new(),
|
for for_mime in for_mimes {
|
||||||
apps: Vec::new(),
|
let Ok(mime) = for_mime.parse() else {
|
||||||
icons: Vec::new(),
|
return AppMeta {
|
||||||
|
selected: None,
|
||||||
|
app_ids: Vec::new(),
|
||||||
|
apps: Vec::new(),
|
||||||
|
icons: Vec::new(),
|
||||||
|
};
|
||||||
};
|
};
|
||||||
};
|
|
||||||
|
|
||||||
let current_app_entry = xdg_mime_query_default(for_mime).await;
|
let current_app_entry = xdg_mime_query_default(for_mime).await;
|
||||||
let current_appid = current_app_entry
|
let current_appid = current_app_entry
|
||||||
.as_ref()
|
.as_ref()
|
||||||
.and_then(|entry| entry.strip_suffix(".desktop"));
|
.and_then(|entry| entry.strip_suffix(".desktop"));
|
||||||
|
|
||||||
let current_app = current_appid.and_then(|appid| assocs.get(appid));
|
if unsorted.is_empty() {
|
||||||
|
current_app = current_appid.and_then(|appid| assocs.get(appid));
|
||||||
|
}
|
||||||
|
|
||||||
let mut unsorted = mime_apps::apps_for_mime(&mime, assocs).collect::<Vec<_>>();
|
unsorted.extend(
|
||||||
unsorted.sort_unstable_by_key(|(_, app)| &app.name);
|
mime_apps::apps_for_mime(&mime, assocs)
|
||||||
|
.map(|(app_id, app)| (app_id.clone(), app.clone())),
|
||||||
|
);
|
||||||
|
}
|
||||||
|
|
||||||
|
unsorted.sort_unstable_by_key(|(_, app)| app.name.clone());
|
||||||
|
unsorted.dedup_by_key(|(app_id, _)| app_id.clone());
|
||||||
|
|
||||||
let mut selected = None;
|
let mut selected = None;
|
||||||
let mut app_ids = Vec::new();
|
let mut app_ids = Vec::new();
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue