Fix exclude filtering
This commit is contained in:
11
src/files.rs
11
src/files.rs
@@ -111,10 +111,19 @@ pub async fn list_photos<TagD: TagDao, FS: FileSystemAccess>(
|
|||||||
.filter_map(|t| t.parse().ok())
|
.filter_map(|t| t.parse().ok())
|
||||||
.collect::<Vec<i32>>();
|
.collect::<Vec<i32>>();
|
||||||
|
|
||||||
|
let excluded_tag_ids = &req
|
||||||
|
.exclude_tag_ids
|
||||||
|
.clone()
|
||||||
|
.unwrap_or(String::new())
|
||||||
|
.split(',')
|
||||||
|
.filter_map(|t| t.parse().ok())
|
||||||
|
.collect::<Vec<i32>>();
|
||||||
|
|
||||||
let filter_mode = &req.tag_filter_mode.unwrap_or(FilterMode::Any);
|
let filter_mode = &req.tag_filter_mode.unwrap_or(FilterMode::Any);
|
||||||
let file_tags = tag_dao.get_tags_for_path(file_path).unwrap_or_default();
|
let file_tags = tag_dao.get_tags_for_path(file_path).unwrap_or_default();
|
||||||
|
let excluded = file_tags.iter().any(|t| excluded_tag_ids.contains(&t.id));
|
||||||
|
|
||||||
return match filter_mode {
|
return !excluded && match filter_mode {
|
||||||
FilterMode::Any => file_tags.iter().any(|t| tag_ids.contains(&t.id)),
|
FilterMode::Any => file_tags.iter().any(|t| tag_ids.contains(&t.id)),
|
||||||
FilterMode::All => tag_ids
|
FilterMode::All => tag_ids
|
||||||
.iter()
|
.iter()
|
||||||
|
|||||||
Reference in New Issue
Block a user