From 218ec686bba6f6ee883d03ba4201130f12a4d560 Mon Sep 17 00:00:00 2001 From: Brad Date: Sun, 13 Jul 2025 20:22:29 +0100 Subject: [PATCH] fix(deep-link): duplicate MimeType entries added to .desktop just check that it isn't already in there before appending it --- .changes/deep-link-xdg-mime-fix.md | 1 + plugins/deep-link/src/lib.rs | 15 +++++++++------ 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/.changes/deep-link-xdg-mime-fix.md b/.changes/deep-link-xdg-mime-fix.md index 11b01afa..6b25d4ea 100644 --- a/.changes/deep-link-xdg-mime-fix.md +++ b/.changes/deep-link-xdg-mime-fix.md @@ -4,3 +4,4 @@ --- Fix deep link protocol handler not set as default on linux +Fix duplicate protocols added to MimeType section in .desktop files on linux diff --git a/plugins/deep-link/src/lib.rs b/plugins/deep-link/src/lib.rs index b5fd963e..17bf8033 100644 --- a/plugins/deep-link/src/lib.rs +++ b/plugins/deep-link/src/lib.rs @@ -303,12 +303,15 @@ mod imp { if let Ok(mut desktop_file) = ini::Ini::load_from_file(&target_file) { if let Some(section) = desktop_file.section_mut(Some("Desktop Entry")) { - let old_mimes = section.remove("MimeType"); - section.append( - "MimeType", - format!("{mime_type};{}", old_mimes.unwrap_or_default()), - ); - desktop_file.write_to_file(&target_file)?; + // it's ok to remove it - we only write to the file if it's missing + // and in that case we include old_mimes + let old_mimes = section.remove("MimeType").unwrap_or_default(); + + if !old_mimes.split(';').any(|mime| mime == mime_type) { + section.remove("MimeType"); + section.append("MimeType", format!("{mime_type};{}", old_mimes)); + desktop_file.write_to_file(&target_file)?; + } } } else { let mut file = File::create(target_file)?;