diff --git a/crates/catalog/src/query.rs b/crates/catalog/src/query.rs index be6ab6cdc..a9956703d 100644 --- a/crates/catalog/src/query.rs +++ b/crates/catalog/src/query.rs @@ -253,8 +253,8 @@ impl Filter { return false; } match &self.folder { - // browsed photos only show in folder views - None if p.local => return false, + // browsed photos only show in folder views, and in Recently Deleted once deleted (#1430) + None if p.local && !p.deleted => return false, None => {} Some(dir) => { let crate::Source::File { path } = &p.source else { return false }; diff --git a/crates/catalog/src/tests_folders.rs b/crates/catalog/src/tests_folders.rs index 556f77def..51a9db10a 100644 --- a/crates/catalog/src/tests_folders.rs +++ b/crates/catalog/src/tests_folders.rs @@ -237,6 +237,23 @@ fn recently_deleted_shows_the_deleted_photos_of_the_chosen_folder() { assert!(!f.matches(c.photo(kept).unwrap(), &c)); } +#[test] +fn a_deleted_browsed_photo_shows_in_recently_deleted_and_comes_back() { + let mut c = Catalog::new(); + let browsed = add_with(&mut c, "/pics/trip/a.jpg", |p| p.local = true); + let recently_deleted = Filter { deleted: true, ..Default::default() }; + let library = Filter::default(); + assert!(!recently_deleted.matches(c.photo(browsed).unwrap(), &c)); + assert!(!library.matches(c.photo(browsed).unwrap(), &c), "browsed photos stay out of the library view"); + + c.apply(Op::SetDeleted { id: browsed, deleted: true }).unwrap(); + assert_eq!(c.query(&recently_deleted, &Sort::default()), vec![browsed], "#1430: it was invisible everywhere"); + assert!(c.query(&library, &Sort::default()).is_empty()); + + c.apply(Op::SetDeleted { id: browsed, deleted: false }).unwrap(); + assert!(c.query(&recently_deleted, &Sort::default()).is_empty()); +} + #[test] fn an_empty_folder_choice_is_no_choice() { let c = library(&["/pics/a.jpg"]);