Feature: Ratings, Lightbox, Forum-Standort, Notifications, Routen-Recording, Chat-Picker

- Bewertungssystem (ratings.py): Sterne für Sitter/Walks/Places/Routen
- Admin: Server-Log-Viewer + OSM-Cache-Statistiken
- Chat: "Neue Nachricht"-Button mit Freundesliste-Picker
- Forum: 5 neue Kategorien, Standorteingabe (locationPicker), Absende-Toast, Lightbox
- Freunde: Aktivitäts-Filter (Chips), Freundschaftsanfrage → In-App-Notification
- Sitter: locationPicker statt manuelle Koordinateneingabe + ratingStars
- Tagebuch: Bilder-Lightbox im Detail-View, iOS-Modal-Header-Fix (90svh)
- Routen: Start/Stopp-Button wechselt Zustand, nutzt Page_map.isRecording()
- Benachrichtigungen: Delete-Button sichtbar, typ-basierte Navigation, Toast-Feedback
- OSM: globales Semaphore + 429-Retry-Logic; Scheduler: München-Umland, täglich
- SW by-v225, APP_VER 202
This commit is contained in:
rene 2026-04-19 09:40:35 +02:00
parent aa70a838f2
commit e56183b642
21 changed files with 648 additions and 175 deletions

View file

@ -58,7 +58,7 @@ def start():
)
_scheduler.add_job(
_job_prewarm_cities,
CronTrigger(day_of_week='sun', hour=1), # jeden Sonntag 01:00 Uhr
CronTrigger(hour=2, minute=0), # täglich 02:00 Uhr
id="prewarm_cities",
replace_existing=True,
misfire_grace_time=7200,
@ -71,14 +71,6 @@ def start():
id="import_events_startup",
replace_existing=True,
)
# Einmalig beim Start (nach 90s) — OSM-Tiles für Großstädte vorwärmen
_scheduler.add_job(
_job_prewarm_cities,
'date',
run_date=datetime.now(tz=_TZ) + timedelta(seconds=90),
id="prewarm_cities_startup",
replace_existing=True,
)
# Einmalig beim Start (nach 15s Verzögerung) — Rassen aus TheDogAPI befüllen
_scheduler.add_job(
_job_seed_breeds,
@ -482,6 +474,15 @@ _CITIES_DE = [
(52.2763, 8.0479, "Osnabrück"),
(53.8755, 10.7000, "Lübeck-Ost"),
(51.9333, 6.8667, "Borken"),
# München Umland
(48.0734, 11.9661, "Ebersberg"),
(47.9947, 11.6612, "Holzkirchen"),
(48.0628, 11.6574, "Ottobrunn"),
(48.2456, 11.3712, "Dachau"),
(48.1667, 11.7833, "Vaterstetten"),
(48.2667, 11.6667, "Garching"),
(48.0667, 11.4667, "Gauting"),
(47.9833, 11.3000, "Starnberg"),
]
async def _job_prewarm_cities():
@ -493,7 +494,7 @@ async def _job_prewarm_cities():
REPORT_INTERVAL = 5 * 3600 # alle 5 Stunden
logger.info("City-Prewarm Job startet…")
sem = asyncio.Semaphore(2)
sem = asyncio.Semaphore(1)
total_fetched = 0
cities_done = 0
start_time = time.monotonic()
@ -504,7 +505,7 @@ async def _job_prewarm_cities():
async with sem:
await _fetch_and_store_tile(poi_type, x, y)
total_fetched += 1
await asyncio.sleep(1.5)
await asyncio.sleep(5)
async def _send_progress(subject_prefix, cities_done, total_cities, eta_str=""):
if not ADMIN: