From 904b690c27da87d2950ae9914db247beb43b6b75 Mon Sep 17 00:00:00 2001 From: Michael Aaron Murphy Date: Wed, 1 Oct 2025 00:18:53 +0200 Subject: [PATCH] fix: flatpaks with multiple entries only show one --- Cargo.lock | 16 ++++++++++++++-- plugins/Cargo.toml | 2 +- plugins/src/desktop_entries/mod.rs | 13 ++++++++++--- 3 files changed, 25 insertions(+), 6 deletions(-) diff --git a/Cargo.lock b/Cargo.lock index 95c2c92..6a149c6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -302,6 +302,17 @@ dependencies = [ "piper", ] +[[package]] +name = "bstr" +version = "1.12.0" +source = "registry+https://github.com/rust-lang/crates.io-index" +checksum = "234113d19d0d7d613b40e86fb654acf958910802bcceab913a4f9e7cda03b1a4" +dependencies = [ + "memchr", + "regex-automata", + "serde", +] + [[package]] name = "bumpalo" version = "3.19.0" @@ -756,10 +767,11 @@ dependencies = [ [[package]] name = "freedesktop-desktop-entry" -version = "0.7.17" +version = "0.7.19" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "6cad6ec36904c816446700d81a2a2b7968aa9f678c24821974fa9bd53b315228" +checksum = "528df05c8ed0bfd569c7018914ba1995be2a133ba9ead17628ddb0ff94b86331" dependencies = [ + "bstr", "gettext-rs", "log", "memchr", diff --git a/plugins/Cargo.toml b/plugins/Cargo.toml index 465e6cf..a9b9d1a 100644 --- a/plugins/Cargo.toml +++ b/plugins/Cargo.toml @@ -9,7 +9,7 @@ publish = false [dependencies] async-pidfd = "0.1.5" fork = "0.2.0" -freedesktop-desktop-entry = "0.7.17" +freedesktop-desktop-entry = "0.7.19" human_format = "1.1.0" human-sort = "0.2.2" new_mime_guess = "4.0.4" diff --git a/plugins/src/desktop_entries/mod.rs b/plugins/src/desktop_entries/mod.rs index 29783d0..4d9ee24 100644 --- a/plugins/src/desktop_entries/mod.rs +++ b/plugins/src/desktop_entries/mod.rs @@ -72,9 +72,16 @@ impl App { let desktop_entries = paths .flat_map(|path| DesktopEntry::from_path(path, Some(&locales))) .filter_map(|de| { - // Treat Flatpak and system apps differently in the cache so they don't - // override each other - let appid = de.flatpak().unwrap_or_else(|| de.appid.as_ref()); + // Cache flatpak apps separately from non-flatpak apps. + let _flatpak_appid; + let appid = match de.flatpak() { + Some(base_id) => { + _flatpak_appid = [base_id, ".", de.appid.as_str()].concat(); + _flatpak_appid.as_str() + } + None => de.appid.as_str(), + }; + if deduplicator.contains(appid) { return None; }