From 98eb022573ae4dd20aee9de1af8e2a5b64bd61c4 Mon Sep 17 00:00:00 2001 From: thekiwismarthome Date: Sun, 9 Aug 2026 22:34:48 +1200 Subject: [PATCH] fix: OFT search URL encoding and barcode field MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit - URL-encode search query so multi-word product names return correct results - Add code (EAN barcode) to fields returned by both name search and barcode lookup — frontend can now auto-populate barcode on OFT apply - Add sort_by=unique_scans_n to name search for more relevant ordering Co-Authored-By: Claude Sonnet 4.6 --- .../shopping_list_manager/websocket/handlers.py | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/custom_components/shopping_list_manager/websocket/handlers.py b/custom_components/shopping_list_manager/websocket/handlers.py index f961d11..da45567 100644 --- a/custom_components/shopping_list_manager/websocket/handlers.py +++ b/custom_components/shopping_list_manager/websocket/handlers.py @@ -4,6 +4,7 @@ import logging import re from pathlib import Path from typing import Any, Dict +from urllib.parse import quote_plus import voluptuous as vol from aiohttp import ClientTimeout @@ -1159,7 +1160,7 @@ async def websocket_off_fetch( try: if msg.get("barcode"): barcode = msg["barcode"] - fields = "product_name,categories_tags,image_front_thumb_url,image_front_url,image_url,price" + fields = "code,product_name,categories_tags,image_front_thumb_url,image_front_url,image_url,price" url = f"{base_url}/api/v2/product/{barcode}.json?fields={fields}" async with session.get(url, timeout=ClientTimeout(total=10), headers=headers) as resp: if not resp.ok: @@ -1173,10 +1174,11 @@ async def websocket_off_fetch( else: query = msg.get("query", "") page_size = msg.get("page_size", 5) - fields = "product_name,categories_tags,image_front_thumb_url,image_front_url,image_url,price" + fields = "code,product_name,categories_tags,image_front_thumb_url,image_front_url,image_url,price" url = ( f"{base_url}/api/v2/search" - f"?search_terms={query}&fields={fields}&page_size={page_size}" + f"?search_terms={quote_plus(query)}&fields={fields}" + f"&page_size={page_size}&sort_by=unique_scans_n" ) async with session.get(url, timeout=ClientTimeout(total=10), headers=headers) as resp: if not resp.ok: