From 681733c6c3778b10c9d48755a5526988693dc9d2 Mon Sep 17 00:00:00 2001 From: javara999 Date: Thu, 28 May 2026 17:09:34 +0900 Subject: [PATCH] Use static FreeGame scheduler entrypoint --- logic.py | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/logic.py b/logic.py index a2b95fe..3ab0b77 100644 --- a/logic.py +++ b/logic.py @@ -96,6 +96,7 @@ def _telegram_send(bot_token, chat_id, games): class Logic(PluginModuleBase): + instance = None db_default = { "auto_start": "False", "auto_interval": "0 */2 * * *", @@ -113,6 +114,7 @@ class Logic(PluginModuleBase): def __init__(self, PM): super().__init__(PM, name="main", first_menu="setting") + Logic.instance = self def plugin_load(self): ModelFreeGameItem.ensure_schema() @@ -150,7 +152,7 @@ class Logic(PluginModuleBase): self.scheduler_stop() return jsonify({"ret": "success"}) if sub == "execute_once": - threading.Thread(target=self.scheduler_function, daemon=True).start() + threading.Thread(target=Logic.scheduler_function_static, daemon=True).start() return jsonify({"ret": "success"}) if sub == "web_list": ModelFreeGameItem.ensure_schema() @@ -168,7 +170,7 @@ class Logic(PluginModuleBase): interval = ModelSetting.get("auto_interval") or "0 */2 * * *" if F.scheduler.is_include(package_name): scheduler.remove_job(package_name) - job = Job(package_name, package_name, interval, self.scheduler_function, "FreeGame fetch", True) + job = Job(package_name, package_name, interval, Logic.scheduler_function_static, "FreeGame fetch", True) scheduler.add_job_instance(job) logger.info("FreeGame scheduler registered: %s", interval) except Exception as e: @@ -182,11 +184,21 @@ class Logic(PluginModuleBase): logger.error("Exception:%s", e) logger.error(traceback.format_exc()) + @staticmethod + def scheduler_function_static(): + logic = Logic.instance + if logic is None: + logger.error("FreeGame scheduler skipped: Logic instance is not initialized") + return + with F.app.app_context(): + logic.scheduler_function() + def scheduler_function(self): if not _fetch_lock.acquire(blocking=False): logger.info("FreeGame fetch skipped: already running") return try: + logger.info("FreeGame scheduled fetch started") ModelFreeGameItem.ensure_schema() enabled_sources = set(_enabled_sources()) results = scraper.fetch_all() @@ -209,6 +221,7 @@ class Logic(PluginModuleBase): ModelFreeGameItem.delete_not_in_sources(enabled_sources) logger.info("FreeGame fetch completed: free_candidates=%d enabled_sources=%d", len(fresh_free_games), len(enabled_sources)) + ModelFetchLog("all", "ok", f"free_candidates={len(fresh_free_games)} enabled_sources={len(enabled_sources)}", len(fresh_free_games)).save() self._notify(fresh_free_games) except Exception as e: logger.error("Exception:%s", e)