Skip to content

Commit 48aec70

Browse files
committed
populate author in book lookup queries for better search results
Upgrade to rs-plugin-common-interfaces 0.35.0 which adds author field to RsLookupBook. Resolve first associated person name and pass it in lookup and lookup_stream handlers so source plugins can search by title + author instead of title alone.
1 parent 77880d3 commit 48aec70

File tree

4 files changed

+29
-5
lines changed

4 files changed

+29
-5
lines changed

Cargo.lock

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -74,7 +74,7 @@ sha2 = "0.10"
7474
axum-extra = { version = "0.9.2", features = ["query"] }
7575
http = "1.1.0"
7676
extism = "1.13.0"
77-
rs-plugin-common-interfaces = { version = "0.34.4", features = ["rusqlite",] }
77+
rs-plugin-common-interfaces = { version = "0.35.0", features = ["rusqlite",] }
7878
async-recursion = "1.1.0"
7979
async-compression = { version = "0.4.6", features = ["tokio"] }
8080
youtube_dl = { version = "0.10.0", features = ["tokio", "downloader-rustls-tls"] }

src/model/books.rs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -103,6 +103,7 @@ impl ModelController {
103103
let lookup_query = RsLookupQuery::Book(RsLookupBook {
104104
name: Some(String::new()),
105105
ids: Some(ids.clone()),
106+
author: None,
106107
page_key: None,
107108
});
108109
let plugin_results = self
@@ -348,6 +349,7 @@ impl ModelController {
348349

349350
let lookup_query = RsLookupQuery::Book(RsLookupBook {
350351
name: None,
352+
author: None,
351353
ids: Some(ids.clone()),
352354
page_key: None,
353355
});
@@ -508,6 +510,7 @@ impl ModelController {
508510
}
509511
let lookup_query = RsLookupQuery::Book(RsLookupBook {
510512
name: None,
513+
author: None,
511514
ids: Some(book_ids),
512515
page_key: None,
513516
});
@@ -563,6 +566,7 @@ impl ModelController {
563566
let ids: RsIds = book.clone().into();
564567
let lookup_query = RsLookupQuery::Book(RsLookupBook {
565568
name: Some(book.name.clone()),
569+
author: None,
566570
ids: Some(ids),
567571
page_key: None,
568572
});

src/routes/books.rs

Lines changed: 22 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11,9 +11,11 @@ use axum::{
1111
Json, Router,
1212
};
1313
use futures::{Stream, TryStreamExt};
14-
use rs_plugin_common_interfaces::domain::{rs_ids::RsIds, ItemWithRelations};
14+
use rs_plugin_common_interfaces::domain::{rs_ids::RsIds, Relations, ItemWithRelations};
1515
use rs_plugin_common_interfaces::lookup::{RsLookupBook, RsLookupQuery};
1616
use rs_plugin_common_interfaces::{ElementType, ExternalImage, ImageType};
17+
18+
use crate::tools::log::{log_info, LogServiceType};
1719
use serde_json::{json, Value};
1820
use tokio_util::io::{ReaderStream, StreamReader};
1921

@@ -26,6 +28,19 @@ use crate::{
2628
Error, Result,
2729
};
2830

31+
async fn first_person_name(mc: &ModelController, library_id: &str, relations: &Option<Relations>, user: &ConnectedUser) -> Option<String> {
32+
let person_id = relations
33+
.as_ref()
34+
.and_then(|r| r.people.as_ref())
35+
.and_then(|people| people.first())
36+
.map(|p| p.id.clone())?;
37+
mc.get_person(library_id, person_id, user)
38+
.await
39+
.ok()
40+
.flatten()
41+
.map(|p| p.name)
42+
}
43+
2944
pub fn routes(mc: ModelController) -> Router {
3045
Router::new()
3146
.route("/", get(handler_list))
@@ -167,13 +182,15 @@ async fn handler_lookup(
167182
) -> Result<Json<Value>> {
168183
let book = mc.get_book(&library_id, book_id, &user).await?;
169184
let name = book.item.name.clone();
185+
let author = first_person_name(&mc, &library_id, &book.relations, &user).await;
170186
let ids: RsIds = book.item.into();
171187
let query = RsLookupQuery::Book(RsLookupBook {
172188
name: Some(name),
189+
author,
173190
ids: Some(ids),
174191
page_key: None,
175192
});
176-
print!("Executing lookup with query: {:?}", query);
193+
log_info(LogServiceType::Source, format!("Executing lookup with query: {:?}", query));
177194
let results = mc.exec_lookup(query, Some(library_id), &user, None).await?;
178195
Ok(Json(json!(results)))
179196
}
@@ -185,9 +202,11 @@ async fn handler_lookup_stream(
185202
) -> Result<Sse<impl Stream<Item = std::result::Result<Event, Infallible>>>> {
186203
let book = mc.get_book(&library_id, book_id, &user).await?;
187204
let name = book.item.name.clone();
205+
let author = first_person_name(&mc, &library_id, &book.relations, &user).await;
188206
let ids: RsIds = book.item.into();
189207
let query = RsLookupQuery::Book(RsLookupBook {
190208
name: Some(name),
209+
author,
191210
ids: Some(ids),
192211
page_key: None,
193212
});
@@ -290,6 +309,7 @@ async fn handler_image_search(
290309
let ids: RsIds = book.item.into();
291310
let query = RsLookupBook {
292311
name: Some(title),
312+
author: None,
293313
ids: Some(ids),
294314
page_key: None,
295315
};

0 commit comments

Comments
 (0)