From fa8d4c4b1d1283bc09ea8623623af140d9459982 Mon Sep 17 00:00:00 2001 From: nocci Date: Fri, 9 May 2025 10:53:09 +0200 Subject: [PATCH] dual language game descriptions stored in DB --- setup.sh | 105 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 64 insertions(+), 41 deletions(-) diff --git a/setup.sh b/setup.sh index a7fe3b6..9cad0fd 100644 --- a/setup.sh +++ b/setup.sh @@ -478,8 +478,9 @@ class Game(db.Model): historical_low = db.Column(db.Float) release_date = db.Column(db.DateTime) release_date = db.Column(db.DateTime) - steam_description = db.Column(db.Text) itad_slug = db.Column(db.String(200)) + steam_description_en = db.Column(db.Text) + steam_description_de = db.Column(db.Text) # with users.id user_id = db.Column(db.Integer, db.ForeignKey('users.id', ondelete='CASCADE'), nullable=False) @@ -579,26 +580,28 @@ def log_activity(user_id, action, details=None): db.session.commit() # Game Infos Helper -def fetch_steam_data(appid): +def fetch_steam_data(appid, lang='en'): + lang_map = { + 'en': 'english', + 'de': 'german' + } + steam_lang = lang_map.get(lang, 'english') try: response = requests.get( "https://store.steampowered.com/api/appdetails", - params={"appids": appid, "l": "german"}, + params={"appids": appid, "l": steam_lang}, timeout=15 ) - if response.status_code != 200: - app.logger.error(f"Steam API Error: Status {response.status_code}") - return None - data = response.json().get(str(appid), {}) - if not data.get("success"): - app.logger.error(f"Steam API Error: {data.get('error', 'Unknown error')}") - return None - - return data.get("data", {}) + if data.get("success"): + return { + "name": data["data"].get("name"), + "detailed_description": data["data"].get("detailed_description"), + "release_date": data["data"].get("release_date", {}).get("date"), + } except Exception as e: - app.logger.error(f"Steam API Exception: {str(e)}") - return None + app.logger.error(f"Steam API error: {str(e)}") + return None def parse_steam_release_date(date_str): """Parsing Steam-Release-Date (the german us thingy, you know)""" @@ -1241,35 +1244,32 @@ def update_game_data(game_id): steam_appid = request.form.get('steam_appid', '').strip() app.logger.info(f"🚀 Update gestartet für Game {game_id} mit AppID: {steam_appid}") - # 2. Steam-Data - steam_data = None + # 2. Steam-Data (Multilingual) if steam_appid: try: - app.logger.debug(f"🔍 Steam-API-Aufruf für AppID: {steam_appid}") - steam_data = fetch_steam_data(steam_appid) - - if steam_data: - # 3. Daten in Datenbank schreiben - game.name = steam_data.get("name", game.name) - game.steam_description = steam_data.get("detailed_description") or "No Infos available" - - # Release-Datum mit Zeitzone - date_str = steam_data.get("release_date", {}).get("date") - if date_str: - parsed_date = parse_steam_release_date(date_str) - if parsed_date: - game.release_date = local_tz.localize(parsed_date) - else: - app.logger.warning(f"Could not parse Steam release date: {date_str}") - - app.logger.info("✅ Steam-Daten erfolgreich aktualisiert") - else: - app.logger.warning("⚠️ Keine Steam-Daten empfangen") - flash(translate('Steam-API lieferte keine Daten'), 'warning') - + app.logger.debug(f"🔍 Fetching Steam data for AppID: {steam_appid}") + for lang in ['en', 'de']: + steam_data = fetch_steam_data(steam_appid, lang=lang) + if steam_data: + if lang == 'en' and steam_data.get("name"): + game.name = steam_data.get("name", game.name) + setattr(game, f'steam_description_{lang}', steam_data.get("detailed_description") or "No Infos available") + if lang == 'en': + date_str = steam_data.get("release_date", {}) + if date_str: + parsed_date = parse_steam_release_date(date_str) + if parsed_date: + game.release_date = local_tz.localize(parsed_date) + else: + app.logger.warning(f"Could not parse Steam release date: {date_str}") + app.logger.info("✅ Steam data successfully updated") except Exception as e: app.logger.error(f"💥 Kritischer Steam-Fehler: {str(e)}", exc_info=True) - flash(translate('Fehler bei Steam-Abfrage'), 'danger') + flash(translate('Error during Steam query'), 'danger') + else: + app.logger.warning("⚠️ Keine Steam-AppID vorhanden, Steam-Daten werden nicht aktualisiert") + flash(translate('Steam-AppID missing, no Steam Data transferred'), 'warning') + # ITAD-Slug donings and such itad_slug = fetch_itad_slug(steam_appid) @@ -1439,6 +1439,27 @@ scheduler.add_job( ) +def update_missing_steam_descriptions_job(): + with app.app_context(): + games = Game.query.filter( + (Game.steam_description_en == None) | (Game.steam_description_en == '') | + (Game.steam_description_de == None) | (Game.steam_description_de == '') + ).all() + for game in games: + for lang in ['en', 'de']: + if not getattr(game, f'steam_description_{lang}', None): + steam_data = fetch_steam_data(game.steam_appid, lang=lang) + if steam_data: + setattr(game, f'steam_description_{lang}', steam_data.get('detailed_description')) + db.session.commit() + +scheduler.add_job( + update_missing_steam_descriptions_job, + 'interval', + hours=24, + id='update_missing_steam_descriptions' +) + # start Scheduler scheduler.start() atexit.register(lambda: scheduler.shutdown(wait=False)) @@ -2351,13 +2372,15 @@ cat < templates/game_details.html - {% if game.steam_description %} + {% set lang = session.get('lang', 'en') %} + {% set desc = getattr(game, 'steam_description_' + lang) %} + {% if desc %}
{{ _('Game Description') }}
- {{ game.steam_description|safe }} + {{ desc|safe }}