matches.json changed image from full res to low res
This commit is contained in:
+33
-1
@@ -400,7 +400,7 @@ class ComicInfoBuilder:
|
||||
title,
|
||||
mangabaka_id=series.get("id"),
|
||||
mangabaka_name=series.get("title") or "",
|
||||
image_url=_pick_cover_url(series.get("cover")),
|
||||
image_url=_pick_thumbnail_url(series.get("cover")),
|
||||
)
|
||||
|
||||
return series
|
||||
@@ -1053,6 +1053,38 @@ def _pick_cover_url(cover) -> "str | None":
|
||||
return None
|
||||
|
||||
|
||||
def _pick_thumbnail_url(cover) -> "str | None":
|
||||
"""
|
||||
Picks a small cover variant suitable for a UI thumbnail.
|
||||
|
||||
Order of preference: x150@x2 > x150@x1 > x150@x3 > x250@x2 > x250@x1 >
|
||||
x250@x3 > x350@x2 > x350@x1 > x350@x3 > raw. x150@x2 is roughly 300px
|
||||
wide — sharp on HiDPI displays at the ~90px thumbnail size used in
|
||||
the matches table, while still being a fraction of the raw image
|
||||
weight (often 50KB vs. several MB).
|
||||
|
||||
Falls back to `_pick_cover_url` if no thumbnail variant is available.
|
||||
"""
|
||||
if not cover:
|
||||
return None
|
||||
if isinstance(cover, str):
|
||||
return cover
|
||||
if not isinstance(cover, dict):
|
||||
return None
|
||||
|
||||
for size_key in ("x150", "x250", "x350"):
|
||||
variant = cover.get(size_key)
|
||||
if isinstance(variant, dict):
|
||||
for density in ("x2", "x1", "x3"):
|
||||
url = variant.get(density)
|
||||
if isinstance(url, str) and url:
|
||||
return url
|
||||
elif isinstance(variant, str) and variant:
|
||||
return variant
|
||||
|
||||
return _pick_cover_url(cover)
|
||||
|
||||
|
||||
def _guess_extension(url: str, content_type: str) -> str:
|
||||
url_ext = Path(url.split("?")[0]).suffix.lower()
|
||||
if url_ext in _IMAGE_EXTS:
|
||||
|
||||
@@ -29,7 +29,7 @@ import threading
|
||||
from flask import Flask, jsonify, request, Response
|
||||
|
||||
from MatchesCache import MatchesCache
|
||||
from ComicInfoBuilder import _pick_cover_url
|
||||
from ComicInfoBuilder import _pick_thumbnail_url
|
||||
|
||||
|
||||
_INDEX_HTML = """<!doctype html>
|
||||
@@ -427,7 +427,7 @@ class MatchesWebApp:
|
||||
f"MangaBaka has no series with id {new_id}",
|
||||
status=404)
|
||||
new_name = series.get("title") or ""
|
||||
new_image = _pick_cover_url(series.get("cover")) or ""
|
||||
new_image = _pick_thumbnail_url(series.get("cover")) or ""
|
||||
|
||||
entry = cache.upsert(
|
||||
title,
|
||||
|
||||
@@ -51,7 +51,7 @@ from pathlib import Path
|
||||
|
||||
import requests
|
||||
|
||||
from ComicInfoBuilder import ComicInfoBuilder, _pick_cover_url, _SEARCH_TYPES
|
||||
from ComicInfoBuilder import (ComicInfoBuilder, _pick_cover_url, _pick_thumbnail_url, _SEARCH_TYPES)
|
||||
from MangadexVolumeResolver import MangaDexVolumeResolver
|
||||
from MangaBakaWorksResolver import MangaBakaWorksResolver
|
||||
from MALResolver import MALResolver
|
||||
@@ -438,7 +438,7 @@ class SuwayomiMover:
|
||||
builder_title,
|
||||
mangabaka_id=series.get("id"),
|
||||
mangabaka_name=series.get("title") or "",
|
||||
image_url=_pick_cover_url(series.get("cover")),
|
||||
image_url=_pick_thumbnail_url(series.get("cover")),
|
||||
)
|
||||
except Exception as exc:
|
||||
print(f" [warn] search failed for {builder_title!r}: {exc}")
|
||||
|
||||
Reference in New Issue
Block a user