Sprint 12+13: Tagebuch Day-One-Redesign, Notiz-Feature, Icon-Fixes, SW by-v405
Tagebuch:
- Day-One-Listenansicht: Wochentag + Tageszahl + Meta-Zeile (Zeit/Ort/Wetter)
- 4 Ansichten: Liste, Medien-Mosaik, Kalender (mit Sprungbuttons), Karte (GPS-Marker)
- Detail-Ansicht inline im Content-Bereich (kein Fullscreen-Overlay mehr)
- Hero-Bild vollständig sichtbar (object-fit:contain), Lightbox mit Safe-Area
- 2-Spalten-Layout Desktop: Text + Leaflet-Karte + POI-Liste
- EXIF-GPS-Extraktion bei Foto-Upload, historisches Wetter via Archive-API
- NoteStation-Import: Fotos in diary_media (80 Einträge migriert, 94 Medien)
- Stats-Endpoints: /diary/stats, /diary/calendar, /diary/locations
Notiz-Feature:
- Generische notes-Tabelle (parent_type + parent_id + meta_json)
- 📝-Button in 8 Bereichen, Notizblock-Seite mit KI-Analyse
- KI-Toggle in Einstellungen, notes_ki_enabled in User-Profil
Icons & Design:
- fill:currentColor Fix für welcome/onboarding/friends.js
- --c-icon Variable, --c-text-muted Dark Mode aufgehellt
- 15+ neue Phosphor-Icons aus lokaler Kopie
- CSS Network-First im SW, Cache-Control-Middleware
Infrastruktur:
- Wiki-Anreicherungs-Scheduler-Jobs entfernt (abgeschlossen)
- auth.py: notes_ki_enabled + is_social_media im User-Response
This commit is contained in:
parent
95f91fdc00
commit
553e9e7854
35 changed files with 4558 additions and 370 deletions
|
|
@ -90,14 +90,6 @@ def start():
|
|||
id="seed_wikidata_startup",
|
||||
replace_existing=True,
|
||||
)
|
||||
# Täglich 02:30 Uhr — KI-Anreicherung für 20 noch nicht angereicherte Rassen
|
||||
_scheduler.add_job(
|
||||
_job_wiki_enrich,
|
||||
CronTrigger(hour=2, minute=30),
|
||||
id="wiki_enrich_nightly",
|
||||
replace_existing=True,
|
||||
misfire_grace_time=3600,
|
||||
)
|
||||
# Jeden Montag 09:00 — Wöchentlicher Fortschritts-Lober
|
||||
_scheduler.add_job(
|
||||
_job_weekly_praise,
|
||||
|
|
@ -114,16 +106,8 @@ def start():
|
|||
replace_existing=True,
|
||||
misfire_grace_time=1800,
|
||||
)
|
||||
# Einmalig beim Start (nach 90s) — erste 50 Rassen sofort anreichern
|
||||
_scheduler.add_job(
|
||||
_job_wiki_enrich_startup,
|
||||
'date',
|
||||
run_date=datetime.now(tz=_TZ) + timedelta(seconds=90),
|
||||
id="wiki_enrich_startup",
|
||||
replace_existing=True,
|
||||
)
|
||||
_scheduler.start()
|
||||
logger.info("Scheduler gestartet — Health-Reminder 08:00, Giftköder-Archiv 03:00, Wetter-Alert 07:30, Meilenstein-Check 00:05, Event-Import So 02:00, Rassen-Seed beim Start, Wiki-KI-Anreicherung 02:30.")
|
||||
logger.info("Scheduler gestartet — Health-Reminder 08:00, Giftköder-Archiv 03:00, Wetter-Alert 07:30, Meilenstein-Check 00:05, Event-Import So 02:00, Rassen-Seed beim Start.")
|
||||
|
||||
|
||||
def stop():
|
||||
|
|
@ -629,35 +613,6 @@ def _log_job(job_id: str, status: str, result: str):
|
|||
}
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# JOB: KI-Anreicherung der Rassen-Daten (nächtlich)
|
||||
# ------------------------------------------------------------------
|
||||
async def _job_wiki_enrich():
|
||||
"""Reichert alle noch nicht angereicherten Rassen mit KI-Daten an."""
|
||||
try:
|
||||
from scraper.breed_enricher import enrich_breeds
|
||||
enriched = await enrich_breeds(limit=2000)
|
||||
msg = f"{enriched} Rassen angereichert"
|
||||
logger.info(f"Wiki-KI-Anreicherung (nächtlich): {msg}.")
|
||||
_log_job("wiki_enrich_nightly", "ok", msg)
|
||||
except Exception as e:
|
||||
logger.error(f"Wiki-KI-Anreicherung: Fehler: {e}")
|
||||
_log_job("wiki_enrich_nightly", "error", str(e))
|
||||
|
||||
|
||||
async def _job_wiki_enrich_startup():
|
||||
"""Beim Start: alle Rassen sofort anreichern."""
|
||||
try:
|
||||
from scraper.breed_enricher import enrich_breeds
|
||||
enriched = await enrich_breeds(limit=2000)
|
||||
msg = f"{enriched} Rassen angereichert (Startup)"
|
||||
logger.info(f"Wiki-KI-Anreicherung (Startup): {msg}.")
|
||||
_log_job("wiki_enrich_startup", "ok", msg)
|
||||
except Exception as e:
|
||||
logger.error(f"Wiki-KI-Anreicherung (Startup): Fehler: {e}")
|
||||
_log_job("wiki_enrich_startup", "error", str(e))
|
||||
|
||||
|
||||
# ------------------------------------------------------------------
|
||||
# Hilfsfunktion: Lob-Text für einen Hund generieren
|
||||
# ------------------------------------------------------------------
|
||||
|
|
@ -815,12 +770,6 @@ async def _job_status_report():
|
|||
metrics = {}
|
||||
try:
|
||||
with db() as conn:
|
||||
# Rassen-Anreicherung
|
||||
metrics["rassen_total"] = conn.execute("SELECT COUNT(*) FROM wiki_rassen").fetchone()[0]
|
||||
metrics["rassen_enriched"] = conn.execute("SELECT COUNT(*) FROM wiki_rassen WHERE ki_enriched=1").fetchone()[0]
|
||||
metrics["rassen_mit_foto"] = conn.execute("SELECT COUNT(*) FROM wiki_rassen WHERE foto_url IS NOT NULL AND foto_url NOT LIKE 'http%'").fetchone()[0]
|
||||
metrics["rassen_mit_desc"] = conn.execute("SELECT COUNT(*) FROM wiki_rassen WHERE beschreibung IS NOT NULL AND beschreibung != ''").fetchone()[0]
|
||||
|
||||
# Züchter
|
||||
try:
|
||||
metrics["zuchter_pending"] = conn.execute("SELECT COUNT(*) FROM wiki_zuchter WHERE verified=0").fetchone()[0]
|
||||
|
|
@ -848,16 +797,6 @@ async def _job_status_report():
|
|||
logger.error(f"Status-Report: DB-Fehler: {e}")
|
||||
return
|
||||
|
||||
# --- Wiki-Fortschritt berechnen ---
|
||||
total = metrics["rassen_total"] or 1
|
||||
enriched = metrics["rassen_enriched"]
|
||||
pct = round(enriched / total * 100)
|
||||
remaining = total - enriched
|
||||
nights_left = (remaining + 19) // 20 # bei 20/Nacht
|
||||
|
||||
bar_filled = round(pct / 5)
|
||||
progress_bar = "█" * bar_filled + "░" * (20 - bar_filled)
|
||||
|
||||
# --- Job-Log-Tabelle ---
|
||||
job_labels = {
|
||||
"health_reminders": "Gesundheits-Erinnerungen",
|
||||
|
|
@ -865,8 +804,6 @@ async def _job_status_report():
|
|||
"weather_alert": "Wetter-Alert",
|
||||
"milestone_check": "Meilenstein-Check",
|
||||
"import_events": "Event-Import (VDH)",
|
||||
"wiki_enrich_nightly": "Wiki KI-Anreicherung (nächtlich)",
|
||||
"wiki_enrich_startup": "Wiki KI-Anreicherung (Startup)",
|
||||
"seed_breeds_startup": "Rassen-Seed (TheDogAPI)",
|
||||
"seed_wikidata_startup":"Rassen-Seed (Wikidata)",
|
||||
"weekly_praise": "Wöchentlicher Lober (Mo 09:00)",
|
||||
|
|
@ -899,18 +836,6 @@ async def _job_status_report():
|
|||
<div style="opacity:.88;font-size:13px">{now_str} Uhr</div>
|
||||
</div>
|
||||
|
||||
<!-- Wiki-Fortschritt -->
|
||||
<div style="padding:20px 28px;border-bottom:1px solid #f0e8dc">
|
||||
<div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#C4843A;margin-bottom:10px">Wiki KI-Anreicherung</div>
|
||||
<div style="font-family:monospace;font-size:13px;background:#fdf6ef;border-radius:8px;padding:12px 14px;line-height:1.8">
|
||||
<span style="color:#555">{progress_bar}</span> <strong>{pct}%</strong><br>
|
||||
✅ Angereichert: <strong>{enriched}</strong> / {total}<br>
|
||||
⏳ Verbleibend: <strong>{remaining}</strong> Rassen (~{nights_left} Nächte)<br>
|
||||
📷 Mit lokalem Foto: <strong>{metrics['rassen_mit_foto']}</strong><br>
|
||||
📝 Mit Beschreibung: <strong>{metrics['rassen_mit_desc']}</strong>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<!-- Scheduler-Status -->
|
||||
<div style="padding:20px 28px;border-bottom:1px solid #f0e8dc">
|
||||
<div style="font-size:11px;font-weight:700;text-transform:uppercase;letter-spacing:.06em;color:#C4843A;margin-bottom:10px">Scheduler-Jobs</div>
|
||||
|
|
@ -947,13 +872,6 @@ async def _job_status_report():
|
|||
|
||||
plain = f"""Ban Yaro Status-Report — {now_str}
|
||||
|
||||
=== Wiki KI-Anreicherung ===
|
||||
{progress_bar} {pct}%
|
||||
Angereichert: {enriched}/{total}
|
||||
Verbleibend: {remaining} Rassen (~{nights_left} Nächte à 20/Nacht)
|
||||
Mit Foto: {metrics['rassen_mit_foto']}
|
||||
Mit Beschreibung: {metrics['rassen_mit_desc']}
|
||||
|
||||
=== Scheduler-Jobs ===
|
||||
{job_rows_txt}
|
||||
=== Community ===
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue