Match FreeGame scheduler to plugin instance pattern
This commit is contained in:
@@ -5,7 +5,7 @@ import traceback
|
|||||||
import requests
|
import requests
|
||||||
from flask import jsonify, render_template
|
from flask import jsonify, render_template
|
||||||
from plugin import PluginModuleBase
|
from plugin import PluginModuleBase
|
||||||
from framework import F, Job, scheduler
|
from framework import F, Job
|
||||||
|
|
||||||
from .model import ModelFetchLog, ModelFreeGameItem, ModelSetting
|
from .model import ModelFetchLog, ModelFreeGameItem, ModelSetting
|
||||||
from . import scraper
|
from . import scraper
|
||||||
@@ -96,7 +96,6 @@ def _telegram_send(bot_token, chat_id, games):
|
|||||||
|
|
||||||
|
|
||||||
class Logic(PluginModuleBase):
|
class Logic(PluginModuleBase):
|
||||||
instance = None
|
|
||||||
db_default = {
|
db_default = {
|
||||||
"auto_start": "False",
|
"auto_start": "False",
|
||||||
"auto_interval": "0 */2 * * *",
|
"auto_interval": "0 */2 * * *",
|
||||||
@@ -114,7 +113,6 @@ class Logic(PluginModuleBase):
|
|||||||
|
|
||||||
def __init__(self, PM):
|
def __init__(self, PM):
|
||||||
super().__init__(PM, name="main", first_menu="setting")
|
super().__init__(PM, name="main", first_menu="setting")
|
||||||
Logic.instance = self
|
|
||||||
|
|
||||||
def plugin_load(self):
|
def plugin_load(self):
|
||||||
ModelFreeGameItem.ensure_schema()
|
ModelFreeGameItem.ensure_schema()
|
||||||
@@ -152,7 +150,7 @@ class Logic(PluginModuleBase):
|
|||||||
self.scheduler_stop()
|
self.scheduler_stop()
|
||||||
return jsonify({"ret": "success"})
|
return jsonify({"ret": "success"})
|
||||||
if sub == "execute_once":
|
if sub == "execute_once":
|
||||||
Logic.execute_once()
|
threading.Thread(target=self.scheduler_function, daemon=True).start()
|
||||||
return jsonify({"ret": "success"})
|
return jsonify({"ret": "success"})
|
||||||
if sub == "web_list":
|
if sub == "web_list":
|
||||||
ModelFreeGameItem.ensure_schema()
|
ModelFreeGameItem.ensure_schema()
|
||||||
@@ -169,9 +167,9 @@ class Logic(PluginModuleBase):
|
|||||||
try:
|
try:
|
||||||
interval = ModelSetting.get("auto_interval") or "0 */2 * * *"
|
interval = ModelSetting.get("auto_interval") or "0 */2 * * *"
|
||||||
if F.scheduler.is_include(package_name):
|
if F.scheduler.is_include(package_name):
|
||||||
scheduler.remove_job(package_name)
|
F.scheduler.remove_job(package_name)
|
||||||
job = Job(package_name, package_name, interval, Logic.execute_once, "FreeGame fetch", True)
|
job = Job(package_name, package_name, interval, self.scheduler_function, "FreeGame fetch", True)
|
||||||
scheduler.add_job_instance(job)
|
F.scheduler.add_job_instance(job)
|
||||||
logger.info("FreeGame scheduler registered: %s", interval)
|
logger.info("FreeGame scheduler registered: %s", interval)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Exception:%s", e)
|
logger.error("Exception:%s", e)
|
||||||
@@ -179,24 +177,11 @@ class Logic(PluginModuleBase):
|
|||||||
|
|
||||||
def scheduler_stop(self):
|
def scheduler_stop(self):
|
||||||
try:
|
try:
|
||||||
scheduler.remove_job(package_name)
|
F.scheduler.remove_job(package_name)
|
||||||
except Exception as e:
|
except Exception as e:
|
||||||
logger.error("Exception:%s", e)
|
logger.error("Exception:%s", e)
|
||||||
logger.error(traceback.format_exc())
|
logger.error(traceback.format_exc())
|
||||||
|
|
||||||
@staticmethod
|
|
||||||
def execute_once():
|
|
||||||
threading.Thread(target=Logic.scheduler_function_static, daemon=True).start()
|
|
||||||
|
|
||||||
@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):
|
def scheduler_function(self):
|
||||||
if not _fetch_lock.acquire(blocking=False):
|
if not _fetch_lock.acquire(blocking=False):
|
||||||
logger.info("FreeGame fetch skipped: already running")
|
logger.info("FreeGame fetch skipped: already running")
|
||||||
|
|||||||
Reference in New Issue
Block a user