chore: adjust isbn input c470d662
Steve · 2026-04-25 14:08 1 file(s) · +16 −2
apps/library/src/google_books.rs +16 −2
49 49
}
50 50
51 51
pub async fn search(query: &str, api_key: Option<&str>) -> Result<Vec<SearchHit>, String> {
52 -
    let q = urlencoding::encode(query.trim());
53 -
    if q.is_empty() {
52 +
    let trimmed = query.trim();
53 +
    if trimmed.is_empty() {
54 54
        return Ok(Vec::new());
55 55
    }
56 +
    let normalized: String = trimmed
57 +
        .chars()
58 +
        .filter(|c| !c.is_whitespace() && *c != '-')
59 +
        .collect();
60 +
    let is_isbn = matches!(normalized.len(), 10 | 13)
61 +
        && normalized
62 +
            .chars()
63 +
            .all(|c| c.is_ascii_digit() || c == 'X' || c == 'x');
64 +
    let query_str = if is_isbn {
65 +
        format!("isbn:{}", normalized.to_uppercase())
66 +
    } else {
67 +
        trimmed.to_string()
68 +
    };
69 +
    let q = urlencoding::encode(&query_str);
56 70
    let mut url = format!(
57 71
        "https://www.googleapis.com/books/v1/volumes?q={q}&maxResults=10&printType=books"
58 72
    );