Files
youtube-dl/lib/system/mod_plugin.py
2025-12-25 19:42:32 +09:00

112 lines
4.6 KiB
Python

import shutil
from support import SupportFile, SupportYaml
from .setup import *
name = 'plugin'
class ModulePlugin(PluginModuleBase):
def __init__(self, P):
super(ModulePlugin, self).__init__(P, name=name, first_menu='list')
self.all_plugin_list = None
def process_menu(self, page, req):
arg = P.ModelSetting.to_dict()
try:
return render_template(f'{__package__}_{name}_{page}.html', arg=arg)
except Exception as e:
P.logger.error(f'Exception:{str(e)}')
P.logger.error(traceback.format_exc())
return render_template('sample.html', title=f"{__package__}/{name}/{page}")
def process_command(self, command, arg1, arg2, arg3, req):
ret = {'ret':'success'}
if command == 'plugin_install':
ret = F.PluginManager.plugin_install(arg1)
elif command == 'get_plugin_list':
data = []
"""
for name, entity in F.PluginManager.plugin_list.items():
if entity['version'] == '3':
data.append({'package_name':name})
else:
data.append(entity['P'].plugin_info)
"""
for name, entity in F.PluginManager.all_package_list.items():
try:
if 'P' in entity:
data.append(entity['P'].plugin_info)
data[-1]['loading'] = entity.get('loading')
data[-1]['status'] = entity.get('status')
data[-1]['log'] = entity.get('log')
else:
data.append({'package_name':name})
data[-1]['loading'] = entity.get('loading')
data[-1]['status'] = entity.get('status')
data[-1]['log'] = entity.get('log')
except Exception as e:
data.append({'package_name':name})
P.logger.error(f'Exception:{str(e)}')
P.logger.error(traceback.format_exc())
ret['data'] = data
#P.logger.debug(data)
elif command == 'uninstall':
info = F.PluginManager.all_package_list[arg1]
if os.path.exists(info['path']):
try:
shutil.rmtree(info['path'])
ret['msg'] = '삭제하였습니다.<br>재시작시 적용됩니다.'
except Exception as e:
P.logger.error(f'Exception:{str(e)}')
P.logger.error(traceback.format_exc())
ret['msg'] = info['path'] + "<br>삭제에 실패하였습니다.<br>" + str(e)
ret['ret'] = 'danger'
else:
ret['msg'] = info['path'] + "<br>폴더가 없습니다."
ret['ret'] = 'danger'
elif command == 'get_plugin_list_all':
if self.all_plugin_list == None:
filepath = os.path.join(os.path.dirname(__file__), 'files', 'all_plugin.yaml')
self.all_plugin_list = SupportYaml.read_yaml(filepath)
def get_plugin(_name):
for _cate in self.all_plugin_list:
for _plugin in _cate['list']:
if _plugin['package_name'] == _name:
P.logger.info(_name)
if _name == 'ff_reystream':
P.logger.info(_name)
return _plugin
for name, entity in F.PluginManager.all_package_list.items():
try:
_plugin = get_plugin(name)
if _plugin != None:
_plugin['loading'] = entity.get('loading')
_plugin['status'] = entity.get('status')
_plugin['log'] = entity.get('log')
_plugin['version'] = entity['P'].plugin_info['version']
except Exception as e:
data.append({'package_name':name})
P.logger.error(f'Exception:{str(e)}')
P.logger.error(traceback.format_exc())
ret['data'] = self.all_plugin_list
return jsonify(ret)
def plugin_load(self):
try:
pass
except Exception as e:
P.logger.error(f'Exception:{str(e)}')
P.logger.error(traceback.format_exc())