add multi-keyword search support

This commit is contained in:
yggverse 2025-08-12 00:28:16 +03:00
parent 59e668ba67
commit 6a2e4b586f

View file

@ -114,32 +114,45 @@ impl Public {
&& !k.is_empty() && !k.is_empty()
&& !librqbit_core::torrent_metainfo::torrent_from_bytes(&fs::read(&path)?) && !librqbit_core::torrent_metainfo::torrent_from_bytes(&fs::read(&path)?)
.is_ok_and(|m: librqbit_core::torrent_metainfo::TorrentMetaV1Owned| { .is_ok_and(|m: librqbit_core::torrent_metainfo::TorrentMetaV1Owned| {
let q = k.to_lowercase(); k.split([
m.info_hash.as_string().to_lowercase().contains(&q) '_', '-', ':', ';', ',', '(', ')', '[', ']', '/', '!', '?',
|| m.info ' ', // @TODO make separators list optional
.name ])
.is_some_and(|n| n.to_string().to_lowercase().contains(&q)) .filter(|s| !s.is_empty())
|| m.comment .map(|s| s.trim().to_lowercase())
.is_some_and(|c| c.to_string().to_lowercase().contains(&q)) .all(|q| {
|| m.created_by m.info_hash.as_string().to_lowercase().contains(&q)
.is_some_and(|c| c.to_string().to_lowercase().contains(&q)) || m.info
|| m.publisher .name
.is_some_and(|p| p.to_string().to_lowercase().contains(&q)) .as_ref()
|| m.publisher_url .is_some_and(|n| n.to_string().to_lowercase().contains(&q))
.is_some_and(|u| u.to_string().to_lowercase().contains(&q)) || m.comment
|| m.announce .as_ref()
.is_some_and(|a| a.to_string().to_lowercase().contains(&q)) .is_some_and(|c| c.to_string().to_lowercase().contains(&q))
|| m.announce_list.iter().any(|l| { || m.created_by
l.iter().any(|a| a.to_string().to_lowercase().contains(&q)) .as_ref()
}) .is_some_and(|c| c.to_string().to_lowercase().contains(&q))
|| m.info.files.is_some_and(|f| { || m.publisher
f.iter().any(|f| { .as_ref()
let mut p = PathBuf::new(); .is_some_and(|p| p.to_string().to_lowercase().contains(&q))
f.full_path(&mut p).is_ok_and(|_| { || m.publisher_url
p.to_string_lossy().to_lowercase().contains(&q) .as_ref()
.is_some_and(|u| u.to_string().to_lowercase().contains(&q))
|| m.announce
.as_ref()
.is_some_and(|a| a.to_string().to_lowercase().contains(&q))
|| m.announce_list.iter().any(|l| {
l.iter().any(|a| a.to_string().to_lowercase().contains(&q))
})
|| m.info.files.as_ref().is_some_and(|f| {
f.iter().any(|f| {
let mut p = PathBuf::new();
f.full_path(&mut p).is_ok_and(|_| {
p.to_string_lossy().to_lowercase().contains(&q)
})
}) })
}) })
}) })
}) })
{ {
continue; continue;