Fix 29 audit findings across all severity tiers
Critical: fix unsquashfs arg order, quote Exec paths with spaces, fix compare_versions antisymmetry, chunk-based signature detection, bounded ELF header reads. High: handle NULL CVE severity, prevent pipe deadlock in inspector, fix glob_match edge case, fix backup archive path collisions, async crash detection with stderr capture. Medium: gate scan on auto-scan setting, fix window size persistence, fix announce() for Stack containers, claim lightbox gesture, use serde_json for CLI output, remove dead CSS @media blocks, add detail-tab persistence, remove invalid metainfo categories, byte-level fuse signature search. Low: tighten Wayland env var detection, ELF magic validation, timeout for update info extraction, quoted arg parsing, stop watcher timer on window destroy, GSettings choices/range constraints, remove unused CSS classes, define status-ok/status-attention CSS.
This commit is contained in:
@@ -2,6 +2,8 @@ use adw::prelude::*;
|
||||
use gtk::gio;
|
||||
|
||||
use crate::config::APP_ID;
|
||||
use crate::core::appstream;
|
||||
use crate::core::database::Database;
|
||||
use crate::i18n::i18n;
|
||||
|
||||
pub fn show_preferences_dialog(parent: &impl IsA<gtk::Widget>) {
|
||||
@@ -153,6 +155,47 @@ fn build_general_page(settings: &gio::Settings, dialog: &adw::PreferencesDialog)
|
||||
scan_group.add(&add_button);
|
||||
page.add(&scan_group);
|
||||
|
||||
// Desktop Integration group - AppStream catalog for GNOME Software/Discover
|
||||
let integration_group = adw::PreferencesGroup::builder()
|
||||
.title(&i18n("Desktop Integration"))
|
||||
.description(&i18n(
|
||||
"Make your AppImages visible in GNOME Software and KDE Discover",
|
||||
))
|
||||
.build();
|
||||
|
||||
let catalog_row = adw::SwitchRow::builder()
|
||||
.title(&i18n("AppStream catalog"))
|
||||
.subtitle(&i18n(
|
||||
"Generate a local catalog so software centers can list your AppImages",
|
||||
))
|
||||
.active(appstream::is_catalog_installed())
|
||||
.build();
|
||||
|
||||
catalog_row.connect_active_notify(|row| {
|
||||
let enable = row.is_active();
|
||||
glib::spawn_future_local(async move {
|
||||
let result = gio::spawn_blocking(move || {
|
||||
if enable {
|
||||
let db = Database::open().expect("Failed to open database");
|
||||
appstream::install_catalog(&db)
|
||||
.map(|p| log::info!("AppStream catalog installed: {}", p.display()))
|
||||
.map_err(|e| e.to_string())
|
||||
} else {
|
||||
appstream::uninstall_catalog()
|
||||
.map(|()| log::info!("AppStream catalog removed"))
|
||||
.map_err(|e| e.to_string())
|
||||
}
|
||||
})
|
||||
.await;
|
||||
if let Ok(Err(e)) = result {
|
||||
log::warn!("AppStream catalog toggle failed: {}", e);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
integration_group.add(&catalog_row);
|
||||
page.add(&integration_group);
|
||||
|
||||
page
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user