Revert FreeGame load-time scheduler changes
This commit is contained in:
@@ -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,14 +114,12 @@ 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()
|
||||
if _truthy(ModelSetting.get("auto_start")):
|
||||
Logic.scheduler_start()
|
||||
|
||||
def plugin_unload(self):
|
||||
Logic.scheduler_stop()
|
||||
self.scheduler_start()
|
||||
|
||||
def process_menu(self, sub, req):
|
||||
arg = ModelSetting.to_dict()
|
||||
@@ -140,17 +139,17 @@ class Logic(PluginModuleBase):
|
||||
if sub == "setting_save":
|
||||
ret, _ = ModelSetting.setting_save(req)
|
||||
if F.scheduler.is_include(package_name):
|
||||
Logic.scheduler_stop()
|
||||
Logic.scheduler_start()
|
||||
self.scheduler_stop()
|
||||
self.scheduler_start()
|
||||
elif _truthy(ModelSetting.get("auto_start")):
|
||||
Logic.scheduler_start()
|
||||
self.scheduler_start()
|
||||
ret["ret"] = "success"
|
||||
return jsonify(ret)
|
||||
if sub == "scheduler_toggle":
|
||||
if req.form["scheduler"] == "true":
|
||||
Logic.scheduler_start()
|
||||
self.scheduler_start()
|
||||
else:
|
||||
Logic.scheduler_stop()
|
||||
self.scheduler_stop()
|
||||
return jsonify({"ret": "success"})
|
||||
if sub == "execute_once":
|
||||
Logic.execute_once()
|
||||
@@ -166,8 +165,7 @@ class Logic(PluginModuleBase):
|
||||
logger.error(traceback.format_exc())
|
||||
return jsonify({"ret": "error", "log": str(e)})
|
||||
|
||||
@staticmethod
|
||||
def scheduler_start():
|
||||
def scheduler_start(self):
|
||||
try:
|
||||
interval = ModelSetting.get("auto_interval") or "0 */2 * * *"
|
||||
if F.scheduler.is_include(package_name):
|
||||
@@ -179,26 +177,31 @@ class Logic(PluginModuleBase):
|
||||
logger.error("Exception:%s", e)
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
@staticmethod
|
||||
def scheduler_stop():
|
||||
def scheduler_stop(self):
|
||||
try:
|
||||
if F.scheduler.is_include(package_name):
|
||||
scheduler.remove_job(package_name)
|
||||
except Exception as e:
|
||||
logger.error("FreeGame scheduler stop failed: %s", e)
|
||||
logger.error("Exception:%s", e)
|
||||
logger.error(traceback.format_exc())
|
||||
|
||||
@staticmethod
|
||||
def execute_once():
|
||||
threading.Thread(target=Logic.scheduler_function, daemon=True).start()
|
||||
threading.Thread(target=Logic.scheduler_function_static, daemon=True).start()
|
||||
|
||||
@staticmethod
|
||||
def scheduler_function():
|
||||
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:
|
||||
with F.app.app_context():
|
||||
logger.info("FreeGame scheduled fetch started")
|
||||
ModelFreeGameItem.ensure_schema()
|
||||
enabled_sources = set(_enabled_sources())
|
||||
@@ -223,7 +226,7 @@ class Logic(PluginModuleBase):
|
||||
|
||||
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()
|
||||
Logic._notify(fresh_free_games)
|
||||
self._notify(fresh_free_games)
|
||||
except Exception as e:
|
||||
logger.error("Exception:%s", e)
|
||||
logger.error(traceback.format_exc())
|
||||
@@ -231,8 +234,7 @@ class Logic(PluginModuleBase):
|
||||
finally:
|
||||
_fetch_lock.release()
|
||||
|
||||
@staticmethod
|
||||
def _notify(games):
|
||||
def _notify(self, games):
|
||||
if _truthy(ModelSetting.get("notify_enabled")) is False:
|
||||
return
|
||||
targets = list(games or [])
|
||||
|
||||
Reference in New Issue
Block a user