From a1baae5adf2a72f36ed13d81e706560577fdeafc Mon Sep 17 00:00:00 2001 From: seth Date: Wed, 26 Aug 2026 13:05:06 -0500 Subject: [PATCH 1/2] Added simple search refinement --- app/internal/audible/search.py | 13 +++++++++++-- app/routers/api/search.py | 2 ++ app/routers/pages/search/__init__.py | 3 +++ templates/pages/Search/Index.jinja | 15 +++++++++++++-- 4 files changed, 29 insertions(+), 4 deletions(-) diff --git a/app/internal/audible/search.py b/app/internal/audible/search.py index e3e464e8..caff8fe4 100644 --- a/app/internal/audible/search.py +++ b/app/internal/audible/search.py @@ -35,6 +35,7 @@ class CacheQuery(BaseModel, frozen=True): num_results: int page: int audible_region: audible_region_type + search_type: str = "all" class CacheResult[T](BaseModel, frozen=True): @@ -135,6 +136,7 @@ async def search_audible_books( num_results: int = 20, page: int = 0, audible_region: audible_region_type | None = None, + search_type: str = "all", ) -> list[Audiobook]: """ https://audible.readthedocs.io/en/latest/misc/external_api.html#get--1.0-catalog-products @@ -149,6 +151,7 @@ async def search_audible_books( num_results=num_results, page=page, audible_region=audible_region, + search_type=search_type, ) cache_result = search_cache.get(cache_key) @@ -161,9 +164,9 @@ async def search_audible_books( params = { "num_results": num_results, "products_sort_by": "Relevance", - "keywords": query, "page": page, "response_groups": ["media"], + "keywords": query, } try: @@ -184,9 +187,15 @@ async def search_audible_books( ) return [] - # do not fetch book results we already have locally books = audible_response.audiobooks() + if search_type == "title": + query_lower = query.lower() + books = [b for b in books if query_lower in b.title.lower()] + elif search_type == "author": + query_lower = query.lower() + books = [b for b in books if any(query_lower in author.lower() for author in b.authors)] + logger.debug( "Search results fetched", query=query, diff --git a/app/routers/api/search.py b/app/routers/api/search.py index 3c6d23fe..52188922 100644 --- a/app/routers/api/search.py +++ b/app/routers/api/search.py @@ -28,6 +28,7 @@ async def search_books( num_results: int = 20, page: int = 0, region: audible_region_type | None = None, + search_type: str = "all", ): if region is None: region = get_region_from_settings() @@ -40,6 +41,7 @@ async def search_books( num_results=num_results, page=page, audible_region=region, + search_type=search_type, ) else: results = [] diff --git a/app/routers/pages/search/__init__.py b/app/routers/pages/search/__init__.py index 1e8a5dd7..22921278 100644 --- a/app/routers/pages/search/__init__.py +++ b/app/routers/pages/search/__init__.py @@ -33,6 +33,7 @@ async def read_search( num_results: int = 20, page: int = 0, region: audible_region_type | None = None, + search_type: str = "all", ): if region is None: region = get_region_from_settings() @@ -45,6 +46,7 @@ async def read_search( num_results=num_results, page=page, region=region, + search_type=search_type, ) prowlarr_configured = prowlarr_config.is_valid(session) @@ -55,6 +57,7 @@ async def read_search( search_term=query or "", search_results=results, selected_region=region, + selected_search_type=search_type, page=page, auto_start_download=quality_config.get_auto_download(session) and user.is_above(GroupEnum.trusted), diff --git a/templates/pages/Search/Index.jinja b/templates/pages/Search/Index.jinja index 9360c236..f8f9c721 100644 --- a/templates/pages/Search/Index.jinja +++ b/templates/pages/Search/Index.jinja @@ -2,6 +2,7 @@ user: DetailedUser, search_term: str, selected_region: audible_region_type, + selected_search_type: str = "all", search_results: list[AudiobookSearchResult], page: int, auto_start_download: bool, @@ -12,11 +13,14 @@