diff --git a/src/files.rs b/src/files.rs index 9704118..121f8d9 100644 --- a/src/files.rs +++ b/src/files.rs @@ -111,10 +111,19 @@ pub async fn list_photos( .filter_map(|t| t.parse().ok()) .collect::>(); + let excluded_tag_ids = &req + .exclude_tag_ids + .clone() + .unwrap_or(String::new()) + .split(',') + .filter_map(|t| t.parse().ok()) + .collect::>(); + 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 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::All => tag_ids .iter()