Fixed DHT republish after TTL

This commit is contained in:
Ultradesu
2026-07-20 14:22:15 +03:00
parent 3f15e9aebd
commit fdbc0e2ad0
3 changed files with 280 additions and 192 deletions
+20 -4
View File
@@ -84,7 +84,7 @@ pub trait MusicDhtStorage: std::fmt::Debug + Send + Sync {
}
/// Searches locally owned active items: exact normalized match, or all
/// query tokens present in the item's token set.
/// query tokens present in the item's token set, including artist names.
async fn search_local(&self, normalized_query: String) -> Result<Vec<LibraryItem>> {
let all = self.list_local_items(false).await?;
let query_tokens = tokenize(&normalized_query);
@@ -97,7 +97,7 @@ pub trait MusicDhtStorage: std::fmt::Debug + Send + Sync {
if query_tokens.is_empty() {
return false;
}
let artist_tokens = tokenize(&item.normalized_name);
let artist_tokens = item.search_tokens();
query_tokens
.iter()
.all(|token| artist_tokens.iter().any(|t| t == token))
@@ -237,7 +237,7 @@ impl Database {
}
/// Searches locally owned active items: exact normalized match, or all
/// query tokens present in the item's token set.
/// query tokens present in the item's token set, including artist names.
pub async fn search_local(&self, normalized_query: String) -> Result<Vec<LibraryItem>> {
let all = self.list_local_items(false).await?;
let query_tokens = tokenize(&normalized_query);
@@ -250,7 +250,7 @@ impl Database {
if query_tokens.is_empty() {
return false;
}
let artist_tokens = tokenize(&item.normalized_name);
let artist_tokens = item.search_tokens();
query_tokens
.iter()
.all(|token| artist_tokens.iter().any(|t| t == token))
@@ -522,6 +522,22 @@ mod tests {
assert!(none.is_empty());
}
#[tokio::test]
async fn local_search_uses_artist_names() {
let (_dir, db) = open_temp().await;
let owner = test_peer(1);
let mut track = item(owner, "Teardrop", 1, false);
track.kind = ItemKind::Track;
track.artist_names = vec!["Massive Attack".into()];
db.upsert_local_item(&track).await.expect("upsert");
let found = db
.search_local("massive attack".into())
.await
.expect("search");
assert_eq!(found, vec![track]);
}
#[tokio::test]
async fn expired_dht_record_is_not_returned() {
let (_dir, db) = open_temp().await;