Spieleinträge: quellen_url speichern + als klickbaren Quellen-Link anzeigen
This commit is contained in:
@@ -276,11 +276,29 @@ class NeuheitenPlugin(BasePlugin):
|
||||
"ALTER TABLE neuheiten ADD COLUMN bild_url VARCHAR(500)"
|
||||
)
|
||||
|
||||
def quellen_url_spalte(conn) -> None:
|
||||
"""Migration 0005: Spalte quellen_url für den Link zur Quelle."""
|
||||
info = conn.exec_driver_sql("PRAGMA table_info(neuheiten)").fetchall()
|
||||
vorhanden = any(zeile[1] == "quellen_url" for zeile in info)
|
||||
if conn.dialect.name == "sqlite" and vorhanden:
|
||||
return
|
||||
if conn.dialect.name != "sqlite":
|
||||
existiert = conn.exec_driver_sql(
|
||||
"SELECT column_name FROM information_schema.columns "
|
||||
"WHERE table_name = 'neuheiten' AND column_name = 'quellen_url'"
|
||||
).scalar()
|
||||
if existiert is not None:
|
||||
return
|
||||
conn.exec_driver_sql(
|
||||
"ALTER TABLE neuheiten ADD COLUMN quellen_url VARCHAR(500)"
|
||||
)
|
||||
|
||||
return [
|
||||
Migration(version="0001_neuheiten_tabelle", up=neuheiten_tabelle),
|
||||
Migration(version="0002_bgg_id_nullable", up=bgg_id_nullable),
|
||||
Migration(version="0003_quellen_status", up=quellen_status_tabelle),
|
||||
Migration(version="0004_bild_url", up=bild_url_spalte),
|
||||
Migration(version="0005_quellen_url", up=quellen_url_spalte),
|
||||
]
|
||||
|
||||
def navigation(self) -> list[NavEntry]:
|
||||
|
||||
@@ -33,6 +33,7 @@ class Neuheit(Base):
|
||||
# URL des Coverbildes (BGG-Image/Thumbnail bzw. Bild der Web-Quelle);
|
||||
# wird direkt verlinkt (Hotlinking), kein Download (Migration 0004).
|
||||
bild_url: Mapped[str | None] = mapped_column(String(500))
|
||||
quellen_url: Mapped[str | None] = mapped_column(String(500))
|
||||
status: Mapped[str] = mapped_column(String(50), default=STATUS_NEUHEIT, index=True)
|
||||
quelle: Mapped[str] = mapped_column(String(100), default="boardgamegeek")
|
||||
erstellt_am: Mapped[datetime] = mapped_column(DateTime, server_default=func.now())
|
||||
|
||||
@@ -234,6 +234,7 @@ class WebQuellenSyncService:
|
||||
),
|
||||
bgg_id=None,
|
||||
bild_url=einzel.bild_url,
|
||||
quellen_url=einzel.quellen_url,
|
||||
status=STATUS_NEUHEIT,
|
||||
quelle=quelle,
|
||||
)
|
||||
@@ -259,10 +260,12 @@ class WebQuellenSyncService:
|
||||
eintrag.erscheinungsjahr = jahr_aus_datumsangabe(
|
||||
treffer.erscheinungsdatum_oder_quartal
|
||||
)
|
||||
# Coverbild mitpflegen; fehlt es im Treffer, bleibt das
|
||||
# bereits gespeicherte Bild erhalten.
|
||||
# Coverbild + Quellen-URL mitpflegen; fehlen sie im Treffer,
|
||||
# bleiben die bereits gespeicherten Werte erhalten.
|
||||
if treffer.bild_url:
|
||||
eintrag.bild_url = treffer.bild_url
|
||||
if treffer.quellen_url:
|
||||
eintrag.quellen_url = treffer.quellen_url
|
||||
return True
|
||||
return False
|
||||
|
||||
|
||||
@@ -18,7 +18,9 @@
|
||||
<a href="https://boardgamegeek.com/boardgame/{{ eintrag.bgg_id }}" target="_blank" rel="noopener"
|
||||
class="ml-0.5 text-[10px] text-slate-400 hover:text-emerald-700 align-super">BGG {{ eintrag.bgg_id }}</a>
|
||||
{% elif eintrag.quelle and eintrag.quelle != 'boardgamegeek' %}
|
||||
<span class="ml-0.5 text-[10px] uppercase tracking-wide text-sky-600/70 align-super">{{ eintrag.quelle }}</span>
|
||||
<a href="{{ eintrag.quellen_url or '#' }}" target="_blank" rel="noopener"
|
||||
title="Zur Quelle ({{ eintrag.quelle }})"
|
||||
class="ml-0.5 text-[10px] uppercase tracking-wide text-sky-600/70 hover:text-sky-800 align-super">{{ eintrag.quelle }} ↗</a>
|
||||
{% endif %}
|
||||
</h3>
|
||||
<span class="ml-auto shrink-0 inline-block px-2 py-0.5 rounded-full bg-emerald-100 text-emerald-800 text-xs">{{ eintrag.status }}</span>
|
||||
@@ -82,7 +84,9 @@
|
||||
<a href="https://boardgamegeek.com/boardgame/{{ eintrag.bgg_id }}" target="_blank" rel="noopener"
|
||||
class="ml-1 text-[10px] text-slate-400 hover:text-emerald-700 align-super">BGG {{ eintrag.bgg_id }}</a>
|
||||
{% elif eintrag.quelle and eintrag.quelle != 'boardgamegeek' %}
|
||||
<span class="ml-1 text-[10px] uppercase tracking-wide text-sky-600/70 align-super">{{ eintrag.quelle }}</span>
|
||||
<a href="{{ eintrag.quellen_url or '#' }}" target="_blank" rel="noopener"
|
||||
title="Zur Quelle ({{ eintrag.quelle }})"
|
||||
class="ml-1 text-[10px] uppercase tracking-wide text-sky-600/70 hover:text-sky-800 align-super">{{ eintrag.quelle }} ↗</a>
|
||||
{% endif %}
|
||||
</td>
|
||||
<td class="px-4 py-3">{{ eintrag.verlag or '—' }}</td>
|
||||
|
||||
Reference in New Issue
Block a user