diff --git a/Store/ZeroTier.py b/Store/ZeroTier.py index 0c08022..d971152 100644 --- a/Store/ZeroTier.py +++ b/Store/ZeroTier.py @@ -242,11 +242,18 @@ class ZeroTier(Store): # CLI prefers 'path' and 'size_bytes' if "file_path" in f and "path" not in f: f["path"] = f["file_path"] - if "title" not in f: + + # Try to extract title from tags + tags = f.get("tag") or [] + title_tag = next((t for t in tags if str(t).lower().startswith("title:")), None) + if title_tag and ":" in title_tag: + f["title"] = title_tag.split(":", 1)[1].strip() + elif "title" not in f: try: f["title"] = Path(f["file_path"]).stem except Exception: f["title"] = f["file_path"] + if "size" in f and "size_bytes" not in f: f["size_bytes"] = f["size"] return files @@ -364,6 +371,11 @@ class ZeroTier(Store): res = self._request_remote("GET", f"/files/{file_hash}") if isinstance(res, dict): + # Extract title from tags for the details panel/metadata view + tags = res.get("tag") or [] + title_tag = next((t for t in tags if str(t).lower().startswith("title:")), None) + if title_tag and ":" in title_tag: + res["title"] = title_tag.split(":", 1)[1].strip() return res return None diff --git a/scripts/remote_storage_server.py b/scripts/remote_storage_server.py index ea58e37..5a8d22e 100644 --- a/scripts/remote_storage_server.py +++ b/scripts/remote_storage_server.py @@ -233,7 +233,7 @@ def create_app(): @require_storage() def search_files(): """Search for files by name or tag.""" - from API.folder import LocalLibrarySearchOptimizer + from API.folder import LocalLibrarySearchOptimizer, API_folder_store query = request.args.get("q", "") limit = request.args.get("limit", 100, type=int) @@ -242,20 +242,26 @@ def create_app(): db_query = query if query and query != "*" else "" try: - with LocalLibrarySearchOptimizer(STORAGE_PATH) as db: - results = db.search_by_name(db_query, limit) - tag_results = db.search_by_tag(db_query, limit) - all_results = { + with LocalLibrarySearchOptimizer(STORAGE_PATH) as search_db: + results = search_db.search_by_name(db_query, limit) + tag_results = search_db.search_by_tag(db_query, limit) + all_results_dict = { r["hash"]: r for r in (results + tag_results) } + # Fetch tags for each result to support title extraction on client + with API_folder_store(STORAGE_PATH) as db: + for res in all_results_dict.values(): + if res.get("file_path"): + res["tag"] = db.get_tags(Path(res["file_path"])) + return ( jsonify( { "query": query, - "count": len(all_results), - "files": list(all_results.values()), + "count": len(all_results_dict), + "files": list(all_results_dict.values()), } ), 200,