feat: improve text display for dynamic search

This commit is contained in:
Benexl
2025-12-02 17:12:27 +03:00
parent 80771f65ea
commit 725754ea1a
3 changed files with 90 additions and 89 deletions

View File

@@ -23,9 +23,11 @@ try:
strip_markdown,
wrap_text,
)
ANSI_UTILS_AVAILABLE = True
except ImportError:
ANSI_UTILS_AVAILABLE = False
# Fallback if _ansi_utils is not available
def get_terminal_width():
return int(os.environ.get("FZF_PREVIEW_COLUMNS", "80"))
@@ -41,15 +43,18 @@ except ImportError:
def strip_markdown(text):
import re
text = re.sub(r'\*\*(.+?)\*\*', r'\1', text)
text = re.sub(r'__(.+?)__', r'\1', text)
text = re.sub(r'\*(.+?)\*', r'\1', text)
text = re.sub(r'_(.+?)_', r'\1', text)
text = re.sub(r"\*\*(.+?)\*\*", r"\1", text)
text = re.sub(r"__(.+?)__", r"\1", text)
text = re.sub(r"\*(.+?)\*", r"\1", text)
text = re.sub(r"_(.+?)_", r"\1", text)
return text
def wrap_text(text, width):
import textwrap
return '\n'.join(textwrap.wrap(text, width))
return "\n".join(textwrap.wrap(text, width))
# --- Template Variables (Injected by Python) ---
SEARCH_RESULTS_FILE = Path("{SEARCH_RESULTS_FILE}")
@@ -325,7 +330,12 @@ def main():
# Extract media information
title_obj = media.get("title", {})
title = title_obj.get("english") or title_obj.get("romaji") or title_obj.get("native") or "Unknown"
title = (
title_obj.get("english")
or title_obj.get("romaji")
or title_obj.get("native")
or "Unknown"
)
# Show image if in image or full mode
if PREVIEW_MODE in ("image", "full"):

View File

@@ -31,7 +31,9 @@ if not QUERY.strip():
sys.exit(0)
def make_graphql_request(endpoint: str, query: str, variables: dict, auth_token: str = "") -> dict | None:
def make_graphql_request(
endpoint: str, query: str, variables: dict, auth_token: str = ""
) -> dict | None:
"""
Make a GraphQL request to the specified endpoint.
@@ -44,15 +46,9 @@ def make_graphql_request(endpoint: str, query: str, variables: dict, auth_token:
Returns:
Response JSON as a dictionary, or None if request fails
"""
payload = {
"query": query,
"variables": variables
}
payload = {"query": query, "variables": variables}
headers = {
"Content-Type": "application/json",
"User-Agent": "viu/1.0"
}
headers = {"Content-Type": "application/json", "User-Agent": "viu/1.0"}
if auth_token:
headers["Authorization"] = auth_token
@@ -62,7 +58,7 @@ def make_graphql_request(endpoint: str, query: str, variables: dict, auth_token:
endpoint,
data=json.dumps(payload).encode("utf-8"),
headers=headers,
method="POST"
method="POST",
)
with request.urlopen(req, timeout=10) as response:
@@ -84,10 +80,10 @@ def extract_title(media_item: dict) -> str:
"""
title_obj = media_item.get("title", {})
return (
title_obj.get("english") or
title_obj.get("romaji") or
title_obj.get("native") or
"Unknown"
title_obj.get("english")
or title_obj.get("romaji")
or title_obj.get("native")
or "Unknown"
)
@@ -100,15 +96,12 @@ def main():
"query": QUERY,
"type": "ANIME",
"per_page": 50,
"genre_not_in": ["Hentai"]
"genre_not_in": ["Hentai"],
}
# Make the GraphQL request
response = make_graphql_request(
GRAPHQL_ENDPOINT,
GRAPHQL_QUERY,
variables,
AUTH_HEADER
GRAPHQL_ENDPOINT, GRAPHQL_QUERY, variables, AUTH_HEADER
)
if response is None:

View File

@@ -12,9 +12,7 @@ logger = logging.getLogger(__name__)
SEARCH_CACHE_DIR = APP_CACHE_DIR / "search"
SEARCH_RESULTS_FILE = SEARCH_CACHE_DIR / "current_search_results.json"
FZF_SCRIPTS_DIR = SCRIPTS_DIR / "fzf"
SEARCH_TEMPLATE_SCRIPT = (FZF_SCRIPTS_DIR / "search.py").read_text(
encoding="utf-8"
)
SEARCH_TEMPLATE_SCRIPT = (FZF_SCRIPTS_DIR / "search.py").read_text(encoding="utf-8")
@session.menu