__menu = { 'uri': __package__, 'name': '애니 다운로더', 'list': [ { 'uri': 'ohli24', 'name': '애니24', 'list': [ { 'uri': 'setting', 'name': '설정' }, { 'uri': 'request', 'name': '요청' }, { 'uri': 'queue', 'name': '큐' }, { 'uri': 'search', 'name': '검색', }, { 'uri': 'list', 'name': '목록', } ] }, { 'uri': 'anilife', 'name': '애니라이프', 'list': [ { 'uri': 'setting', 'name': '설정' }, { 'uri': 'request', 'name': '요청' }, { 'uri': 'queue', 'name': '큐' }, { 'uri': 'search', 'name': '검색', }, { 'uri': 'list', 'name': '목록', } ] }, { 'uri': 'linkkf', 'name': '링크애니', 'list': [ { 'uri': 'setting', 'name': '설정' }, { 'uri': 'request', 'name': '요청' }, { 'uri': 'queue', 'name': '큐' }, { 'uri': 'search', 'name': '검색', }, { 'uri': 'list', 'name': '목록', } ] }, { 'uri': 'guide', 'name': '매뉴얼', 'list': [ { 'uri': 'README.md', 'name': 'README', }, ] }, { 'uri': 'log', 'name': '로그', }, ] } setting = { 'filepath': __file__, 'use_db': True, 'use_default_setting': True, 'home_module': 'ohli24', 'menu': __menu, # 'setting_menu': None, 'default_route': 'normal', } from plugin import * import os import importlib import subprocess import sys import traceback from flask import render_template class LogicLog(PluginModuleBase): def __init__(self, P): super(LogicLog, self).__init__(P, name='log', first_menu='log') def process_menu(self, sub, req): return render_template('anime_downloader_log.html', package=self.P.package_name) class LogicGuide(PluginModuleBase): def __init__(self, P): super(LogicGuide, self).__init__(P, name='guide', first_menu='README.md') def process_menu(self, sub, req): try: # sub is likely the filename e.g., 'README.md' plugin_root = os.path.dirname(self.P.blueprint.template_folder) filepath = os.path.join(plugin_root, *sub.split('/')) from support import SupportFile data = SupportFile.read_file(filepath) # Override to use our custom manual template return render_template('anime_downloader_manual.html', data=data) except Exception as e: self.P.logger.error(f"Exception:{str(e)}") self.P.logger.error(traceback.format_exc()) return render_template('sample.html', title=f"Error loading manual: {sub}") DEFINE_DEV = True P = create_plugin_instance(setting) REQUIRED_PACKAGES = [ {"import_name": "bs4", "package_name": "beautifulsoup4"}, {"import_name": "requests_cache", "package_name": "requests-cache"}, {"import_name": "cloudscraper", "package_name": "cloudscraper"}, {"import_name": "PIL", "package_name": "Pillow"}, {"import_name": "lxml", "package_name": "lxml"}, {"import_name": "aiohttp", "package_name": "aiohttp"}, {"import_name": "jsbeautifier", "package_name": "jsbeautifier"}, {"import_name": "curl_cffi", "package_name": "curl-cffi"}, {"import_name": "loguru", "package_name": "loguru"}, {"import_name": "zendriver", "package_name": "zendriver==0.15.3"}, ] def ensure_dependencies(): missing_packages = [] for dependency in REQUIRED_PACKAGES: try: importlib.import_module(dependency["import_name"]) except ImportError: missing_packages.append(dependency) if not missing_packages: return package_names = [dependency["package_name"] for dependency in missing_packages] P.logger.warning(f"Missing plugin dependencies detected: {package_names}") try: subprocess.check_call([sys.executable, "-m", "pip", "install"] + package_names) P.logger.info(f"Plugin dependencies installed successfully: {package_names}") except Exception as e: P.logger.error(f"Failed to install plugin dependencies: {package_names}") P.logger.error(f"Install error: {e}") raise ensure_dependencies() try: if DEFINE_DEV: from .mod_ohli24 import LogicOhli24 from .mod_anilife import LogicAniLife from .mod_linkkf import LogicLinkkf # Include our custom logic modules P.set_module_list([LogicOhli24, LogicAniLife, LogicLinkkf, LogicLog, LogicGuide]) else: from support import SupportSC ModuleOhli24 = SupportSC.load_module_P(P, 'mod_ohli24').LogicOhli24 ModuleAnilife = SupportSC.load_module_P(P, 'mod_anilife').LogicAnilife ModuleLinkkf = SupportSC.load_module_P(P, 'mod_linkkf').LogicLinkkf # Note: LogicLog/Guide are defined here, we can use them in prod too if needed, # but focused on dev environment for now. P.set_module_list([ModuleOhli24, ModuleAnilife, ModuleLinkkf, LogicLog, LogicGuide]) except Exception as e: P.logger.error(f'Exception: {str(e)}') P.logger.error(traceback.format_exc())