Fix recursive filtering under base path

This commit is contained in:
Cameron
2024-12-04 19:50:04 -05:00
parent b7f13d4cbf
commit 2b2a811cae

View File

@@ -67,6 +67,12 @@ pub async fn list_photos<TagD: TagDao, FS: FileSystemAccess>(
"Failed to get files with tag_ids: {:?} with filter_mode: {:?}", "Failed to get files with tag_ids: {:?} with filter_mode: {:?}",
tag_ids, filter_mode tag_ids, filter_mode
)) ))
.map(|tagged_files| {
tagged_files
.into_iter()
.filter(|f| f.starts_with(search_path))
.collect::<Vec<String>>()
})
.inspect(|files| debug!("Found {:?} files", files.len())) .inspect(|files| debug!("Found {:?} files", files.len()))
.map(|tagged_files: Vec<String>| { .map(|tagged_files: Vec<String>| {
trace!( trace!(
@@ -123,12 +129,13 @@ pub async fn list_photos<TagD: TagDao, FS: FileSystemAccess>(
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)); let excluded = file_tags.iter().any(|t| excluded_tag_ids.contains(&t.id));
return !excluded && match filter_mode { return !excluded
FilterMode::Any => file_tags.iter().any(|t| tag_ids.contains(&t.id)), && match filter_mode {
FilterMode::All => tag_ids FilterMode::Any => file_tags.iter().any(|t| tag_ids.contains(&t.id)),
.iter() FilterMode::All => tag_ids
.all(|id| file_tags.iter().any(|tag| &tag.id == id)), .iter()
}; .all(|id| file_tags.iter().any(|tag| &tag.id == id)),
};
} }
true true