From bb931906244eb8c7b7248ce5685f269e3f27fe15 Mon Sep 17 00:00:00 2001 From: javara999 Date: Wed, 1 Apr 2026 11:34:28 +0900 Subject: [PATCH] Add linkkf backend files --- linkkf/logic.py | 137 ++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 137 insertions(+) create mode 100644 linkkf/logic.py diff --git a/linkkf/logic.py b/linkkf/logic.py new file mode 100644 index 0000000..cba6dd1 --- /dev/null +++ b/linkkf/logic.py @@ -0,0 +1,137 @@ +# -*- coding: utf-8 -*- +import os +import traceback + +from framework import F, Job, db, get_logger, path_data, scheduler +from support import SupportFile + +from .logic_linkkf import LogicLinkkf +from .logic_queue import LogicQueue +from .model import ModelLinkkf, ModelSetting + + +package_name = __name__.split(".")[0] +logger = get_logger(package_name) + + +class Logic(object): + db_default = { + "linkkf_url": "https://linkkf.tv", + "download_path": os.path.join(path_data, "linkkf"), + "linkkf_auto_make_folder": "True", + "linkkf_auto_make_season_folder": "True", + "linkkf_finished_insert": "[완결]", + "include_date": "False", + "date_option": "0", + "auto_make_folder": "True", + "max_ffmpeg_process_count": "4", + "auto_interval": "* 20 * * *", + "auto_start": "False", + "whitelist_program": "", + } + + @staticmethod + def db_init(): + try: + with F.app.app_context(): + logger.debug(Logic.db_default.items()) + for key, value in Logic.db_default.items(): + logger.debug(f"{key}: {value}") + if db.session.query(ModelSetting).filter_by(key=key).count() == 0: + db.session.add(ModelSetting(key, value)) + db.session.commit() + Logic.db_migration() + except Exception as e: + logger.error("Exception:%s", e) + logger.error(traceback.format_exc()) + + @staticmethod + def plugin_load(): + try: + logger.debug("%s plugin_load", package_name) + Logic.db_init() + + if ModelSetting.get("auto_start") == "True": + Logic.scheduler_start() + + from .plugin import plugin_info + + SupportFile.write_json( + os.path.join(os.path.dirname(__file__), "info.json"), + plugin_info, + ) + LogicQueue.queue_start() + except Exception as e: + logger.error("Exception:%s", e) + logger.error(traceback.format_exc()) + + @staticmethod + def plugin_unload(): + try: + logger.debug("%s plugin_unload", package_name) + except Exception as e: + logger.error("Exception:%s", e) + logger.error(traceback.format_exc()) + + @staticmethod + def db_migration(): + logger.debug("db_migration::=======================") + try: + migrated = ModelLinkkf.migrate_existing_rows() + logger.debug("ModelLinkkf migrate_existing_rows: %s", migrated) + except Exception as e: + logger.error("Exception:%s", e) + logger.error(traceback.format_exc()) + + @staticmethod + def scheduler_start(): + try: + interval = ModelSetting.get("auto_interval") + job = Job( + package_name, + package_name, + interval, + Logic.scheduler_function, + "linkkf 다운로드", + True, + ) + scheduler.add_job_instance(job) + except Exception as e: + logger.error("Exception:%s", e) + logger.error(traceback.format_exc()) + + @staticmethod + def scheduler_stop(): + try: + scheduler.remove_job(package_name) + except Exception as e: + logger.error("Exception:%s", e) + logger.error(traceback.format_exc()) + + @staticmethod + def setting_save(req): + try: + for key, value in req.form.items(): + logger.debug("Key:%s Value:%s", key, value) + entity = ( + db.session.query(ModelSetting) + .filter_by(key=key) + .with_for_update() + .first() + ) + entity.value = value + db.session.commit() + return True + except Exception as e: + logger.error("Exception:%s", e) + logger.error(traceback.format_exc()) + logger.error("key:%s value:%s", key, value) + return False + + @staticmethod + def scheduler_function(): + try: + LogicLinkkf.scheduler_function() + except Exception as e: + logger.error("Exception:%s", e) + logger.error(traceback.format_exc())