Use undo toast for integration removal instead of immediate action
This commit is contained in:
@@ -921,10 +921,35 @@ impl DriftwoodWindow {
|
|||||||
let toast_overlay = window.imp().toast_overlay.get().unwrap().clone();
|
let toast_overlay = window.imp().toast_overlay.get().unwrap().clone();
|
||||||
if let Ok(Some(record)) = db.get_appimage_by_id(record_id) {
|
if let Ok(Some(record)) = db.get_appimage_by_id(record_id) {
|
||||||
if record.integrated {
|
if record.integrated {
|
||||||
|
// Remove integration immediately, offer undo toast
|
||||||
integrator::undo_all_modifications(&db, record_id).ok();
|
integrator::undo_all_modifications(&db, record_id).ok();
|
||||||
integrator::remove_integration(&record).ok();
|
integrator::remove_integration(&record).ok();
|
||||||
db.set_integrated(record_id, false, None).ok();
|
db.set_integrated(record_id, false, None).ok();
|
||||||
toast_overlay.add_toast(adw::Toast::new("Integration removed"));
|
|
||||||
|
let undo_toast = adw::Toast::builder()
|
||||||
|
.title("Removed from app menu")
|
||||||
|
.button_label("Undo")
|
||||||
|
.build();
|
||||||
|
|
||||||
|
let db_undo = db.clone();
|
||||||
|
let window_weak_undo = window.downgrade();
|
||||||
|
undo_toast.connect_button_clicked(move |_| {
|
||||||
|
let Some(win) = window_weak_undo.upgrade() else { return };
|
||||||
|
if let Ok(Some(rec)) = db_undo.get_appimage_by_id(record_id) {
|
||||||
|
match integrator::integrate_tracked(&rec, &db_undo) {
|
||||||
|
Ok(result) => {
|
||||||
|
let desktop_path = result.desktop_file_path.to_string_lossy().to_string();
|
||||||
|
db_undo.set_integrated(record_id, true, Some(&desktop_path)).ok();
|
||||||
|
}
|
||||||
|
Err(e) => log::error!("Re-integration failed: {}", e),
|
||||||
|
}
|
||||||
|
let lib_view = win.imp().library_view.get().unwrap();
|
||||||
|
if let Ok(records) = db_undo.get_all_appimages() {
|
||||||
|
lib_view.populate(records);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
toast_overlay.add_toast(undo_toast);
|
||||||
} else {
|
} else {
|
||||||
match integrator::integrate_tracked(&record, &db) {
|
match integrator::integrate_tracked(&record, &db) {
|
||||||
Ok(result) => {
|
Ok(result) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user