diff --git a/lib/ffmpeg_queue_v1.py b/lib/ffmpeg_queue_v1.py
index a384a11..f2aa7c1 100644
--- a/lib/ffmpeg_queue_v1.py
+++ b/lib/ffmpeg_queue_v1.py
@@ -7,18 +7,22 @@ import traceback
from datetime import datetime
import requests
+
# from flaskfarm.lib.plugin import get_model_setting
from flaskfarm.lib.support.expand.ffmpeg import SupportFfmpeg
+
# from flaskfarm.lib.system.setup import SystemModelSetting
from flaskfarm.lib.tool import ToolUtil
+
# from flaskfarm.lib.system.setup import P as SM
# from flaskfarm.lib.system.mod_setting import ModuleSetting as SM
from ..setup import *
+logger = P.logger
-class FfmpegQueueEntity(abc.ABCMeta('ABC', (object,), {'__slots__': ()})):
+class FfmpegQueueEntity(abc.ABCMeta("ABC", (object,), {"__slots__": ()})):
def __init__(self, P, module_logic, info):
self.P = P
# SupportFfmpeg.initialize()
@@ -29,11 +33,11 @@ class FfmpegQueueEntity(abc.ABCMeta('ABC', (object,), {'__slots__': ()})):
self.info = info
self.url = None
self.ffmpeg_status = -1
- self.ffmpeg_status_kor = u'대기중'
+ self.ffmpeg_status_kor = "대기중"
self.ffmpeg_percent = 0
self.ffmpeg_arg = None
self.cancel = False
- self.created_time = datetime.now().strftime('%m-%d %H:%M:%S')
+ self.created_time = datetime.now().strftime("%m-%d %H:%M:%S")
self.savepath = None
self.filename = None
self.filepath = None
@@ -61,26 +65,25 @@ class FfmpegQueueEntity(abc.ABCMeta('ABC', (object,), {'__slots__': ()})):
def as_dict(self):
tmp = {}
- tmp['entity_id'] = self.entity_id
- tmp['url'] = self.url
- tmp['ffmpeg_status'] = self.ffmpeg_status
- tmp['ffmpeg_status_kor'] = self.ffmpeg_status_kor
- tmp['ffmpeg_percent'] = self.ffmpeg_percent
- tmp['ffmpeg_arg'] = self.ffmpeg_arg
- tmp['cancel'] = self.cancel
- tmp['created_time'] = self.created_time # .strftime('%m-%d %H:%M:%S')
- tmp['savepath'] = self.savepath
- tmp['filename'] = self.filename
- tmp['filepath'] = self.filepath
- tmp['quality'] = self.quality
+ tmp["entity_id"] = self.entity_id
+ tmp["url"] = self.url
+ tmp["ffmpeg_status"] = self.ffmpeg_status
+ tmp["ffmpeg_status_kor"] = self.ffmpeg_status_kor
+ tmp["ffmpeg_percent"] = self.ffmpeg_percent
+ tmp["ffmpeg_arg"] = self.ffmpeg_arg
+ tmp["cancel"] = self.cancel
+ tmp["created_time"] = self.created_time # .strftime('%m-%d %H:%M:%S')
+ tmp["savepath"] = self.savepath
+ tmp["filename"] = self.filename
+ tmp["filepath"] = self.filepath
+ tmp["quality"] = self.quality
# tmp['current_speed'] = self.ffmpeg_arg['current_speed'] if self.ffmpeg_arg is not None else ''
tmp = self.info_dict(tmp)
return tmp
class FfmpegQueue(object):
-
- def __init__(self, P, max_ffmpeg_count):
+ def __init__(self, P, max_ffmpeg_count, sub_package_name, caller=None):
self.P = P
self.static_index = 1
@@ -89,20 +92,34 @@ class FfmpegQueue(object):
self.download_queue = None
self.download_thread = None
self.max_ffmpeg_count = max_ffmpeg_count
- if self.max_ffmpeg_count is None or self.max_ffmpeg_count == '':
+ self.name = sub_package_name
+ if self.max_ffmpeg_count is None or self.max_ffmpeg_count == "":
self.max_ffmpeg_count = 1
+ self.caller = caller
+ # self.support_init()
+
+ def support_init(self):
+ SupportFfmpeg.initialize(
+ "ffmpeg",
+ os.path.join(F.config["path_data"], "tmp"),
+ self.callback_function,
+ P.ModelSetting.get(f"{self.name}_max_ffmpeg_process_count"),
+ )
+
def queue_start(self):
try:
if self.download_queue is None:
self.download_queue = queue.Queue()
if self.download_thread is None:
- self.download_thread = threading.Thread(target=self.download_thread_function, args=())
+ self.download_thread = threading.Thread(
+ target=self.download_thread_function, args=()
+ )
self.download_thread.daemon = True
# todo: 동작 방식 고찰
self.download_thread.start()
except Exception as exception:
- self.P.logger.error(f'Exception: {exception}')
+ self.P.logger.error(f"Exception: {exception}")
self.P.logger.error(traceback.format_exc())
def download_thread_function(self):
@@ -114,12 +131,17 @@ class FfmpegQueue(object):
break
time.sleep(5)
except Exception as exception:
- self.P.logger.error(f'Exception: {exception}')
+ self.P.logger.error(f"Exception: {exception}")
self.P.logger.error(traceback.format_exc())
- self.P.logger.error('current_ffmpeg_count : %s', self.current_ffmpeg_count)
- self.P.logger.error('max_ffmpeg_count : %s', self.max_ffmpeg_count)
+ self.P.logger.error(
+ "current_ffmpeg_count : %s", self.current_ffmpeg_count
+ )
+ self.P.logger.error(
+ "max_ffmpeg_count : %s", self.max_ffmpeg_count
+ )
break
entity = self.download_queue.get()
+ logger.debug(f"entity: {entity}")
if entity.cancel:
continue
@@ -127,7 +149,7 @@ class FfmpegQueue(object):
# entity.url = LogicAni24.get_video_url(entity.info['code'])
video_url = entity.get_video_url()
if video_url is None:
- entity.ffmpeg_status_kor = 'URL실패'
+ entity.ffmpeg_status_kor = "URL실패"
entity.refresh_status()
# plugin.socketio_list_refresh()
continue
@@ -145,17 +167,18 @@ class FfmpegQueue(object):
# except:
# logger.debug('program path make fail!!')
# 파일 존재여부 체크
+ print("here...................")
P.logger.info(entity.info)
filepath = entity.get_video_filepath()
- P.logger.debug(f'filepath:: {filepath}')
+ P.logger.debug(f"filepath:: {filepath}")
if os.path.exists(filepath):
- entity.ffmpeg_status_kor = '파일 있음'
+ entity.ffmpeg_status_kor = "파일 있음"
entity.ffmpeg_percent = 100
entity.refresh_status()
# plugin.socketio_list_refresh()
continue
dirname = os.path.dirname(filepath)
- # filename = os.path.f
+ filename = os.path.basename(filepath)
if not os.path.exists(dirname):
os.makedirs(dirname)
# f = ffmpeg.Ffmpeg(video_url, os.path.basename(filepath), plugin_id=entity.entity_id, listener=self.ffmpeg_listener, call_plugin=self.P.package_name, save_path=dirname, headers=entity.headers)
@@ -165,11 +188,21 @@ class FfmpegQueue(object):
# aa_sm = get_model_setting("system", P.logger)
P.logger.debug(P)
# P.logger.debug(P.system_setting.get("port"))
+ P.logger.debug(filename)
+ # P.logger.debug(filepath)
- ffmpeg = SupportFfmpeg(video_url, str(os.path.basename(filepath)),
- callback_function=self.callback_function,
- max_pf_count=0, save_path=ToolUtil.make_path(dirname), timeout_minute=60,
- )
+ # SupportFfmpeg 초기화
+ self.support_init()
+
+ ffmpeg = SupportFfmpeg(
+ url=video_url,
+ filename=filename,
+ callback_function=self.callback_function,
+ headers=self.caller.headers,
+ max_pf_count=0,
+ save_path=ToolUtil.make_path(dirname),
+ timeout_minute=60,
+ )
#
# todo: 임시로 start() 중지
ffmpeg.start()
@@ -177,108 +210,152 @@ class FfmpegQueue(object):
self.download_queue.task_done()
except Exception as exception:
- self.P.logger.error('Exception:%s', exception)
+ self.P.logger.error("Exception:%s", exception)
self.P.logger.error(traceback.format_exc())
- # def callback_function(self, **args):
- # refresh_type = None
- # if args['type'] == 'status_change':
- # if args['status'] == SupportFfmpeg.Status.DOWNLOADING:
- # refresh_type = 'status_change'
- # elif args['status'] == SupportFfmpeg.Status.COMPLETED:
- # refresh_type = 'status_change'
- # elif args['status'] == SupportFfmpeg.Status.READY:
- # data = {'type': 'info',
- # 'msg': '다운로드중 Duration(%s)' % args['data']['duration_str'] + '
' + args['data'][
- # 'save_fullpath'], 'url': '/ffmpeg/download/list'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'add'
- # elif args['type'] == 'last':
- # if args['status'] == SupportFfmpeg.Status.WRONG_URL:
- # data = {'type': 'warning', 'msg': '잘못된 URL입니다'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'add'
- # elif args['status'] == SupportFfmpeg.Status.WRONG_DIRECTORY:
- # data = {'type': 'warning', 'msg': '잘못된 디렉토리입니다.
' + args['data']['save_fullpath']}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'add'
- # elif args['status'] == SupportFfmpeg.Status.ERROR or args['status'] == SupportFfmpeg.Status.EXCEPTION:
- # data = {'type': 'warning', 'msg': '다운로드 시작 실패.
' + args['data']['save_fullpath']}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'add'
- # elif args['status'] == SupportFfmpeg.Status.USER_STOP:
- # data = {'type': 'warning', 'msg': '다운로드가 중지 되었습니다.
' + args['data']['save_fullpath'],
- # 'url': '/ffmpeg/download/list'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'last'
- # elif args['status'] == SupportFfmpeg.Status.COMPLETED:
- # data = {'type': 'success', 'msg': '다운로드가 완료 되었습니다.
' + args['data']['save_fullpath'],
- # 'url': '/ffmpeg/download/list'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'last'
- # elif args['status'] == SupportFfmpeg.Status.TIME_OVER:
- # data = {'type': 'warning', 'msg': '시간초과로 중단 되었습니다.
' + args['data']['save_fullpath'],
- # 'url': '/ffmpeg/download/list'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'last'
- # elif args['status'] == SupportFfmpeg.Status.PF_STOP:
- # data = {'type': 'warning', 'msg': 'PF초과로 중단 되었습니다.
' + args['data']['save_fullpath'],
- # 'url': '/ffmpeg/download/list'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'last'
- # elif args['status'] == SupportFfmpeg.Status.FORCE_STOP:
- # data = {'type': 'warning', 'msg': '강제 중단 되었습니다.
' + args['data']['save_fullpath'],
- # 'url': '/ffmpeg/download/list'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'last'
- # elif args['status'] == SupportFfmpeg.Status.HTTP_FORBIDDEN:
- # data = {'type': 'warning', 'msg': '403에러로 중단 되었습니다.
' + args['data']['save_fullpath'],
- # 'url': '/ffmpeg/download/list'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'last'
- # elif args['status'] == SupportFfmpeg.Status.ALREADY_DOWNLOADING:
- # data = {'type': 'warning', 'msg': '임시파일폴더에 파일이 있습니다.
' + args['data']['temp_fullpath'],
- # 'url': '/ffmpeg/download/list'}
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
- # refresh_type = 'last'
- # elif args['type'] == 'normal':
- # if args['status'] == SupportFfmpeg.Status.DOWNLOADING:
- # refresh_type = 'status'
- # # P.logger.info(refresh_type)
- # self.socketio_callback(refresh_type, args['data'])
+ def callback_function(self, **args):
+ refresh_type = None
+ # entity = self.get_entity_by_entity_id(arg['plugin_id'])
+ entity = self.get_entity_by_entity_id(args["data"]["callback_id"])
- def ffmpeg_listener(self, **arg):
- import ffmpeg
- entity = self.get_entity_by_entity_id(arg['plugin_id'])
- if entity is None:
- return
- if arg['type'] == 'status_change':
- if arg['status'] == ffmpeg.Status.DOWNLOADING:
- pass
- elif arg['status'] == ffmpeg.Status.COMPLETED:
- entity.donwload_completed()
- elif arg['status'] == ffmpeg.Status.READY:
- pass
- elif arg['type'] == 'last':
- self.current_ffmpeg_count += -1
- elif arg['type'] == 'log':
- pass
- elif arg['type'] == 'normal':
- pass
+ if args["type"] == "status_change":
+ if args["status"] == SupportFfmpeg.Status.DOWNLOADING:
+ refresh_type = "status_change"
+ elif args["status"] == SupportFfmpeg.Status.COMPLETED:
+ logger.debug("ffmpeg_queue_v1.py:: download completed........")
+ refresh_type = "status_change"
+ elif args["status"] == SupportFfmpeg.Status.READY:
+ data = {
+ "type": "info",
+ "msg": "다운로드중 Duration(%s)" % args["data"]["duration_str"]
+ + "
"
+ + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "add"
+ elif args["type"] == "last":
+ if args["status"] == SupportFfmpeg.Status.WRONG_URL:
+ data = {"type": "warning", "msg": "잘못된 URL입니다"}
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "add"
+ elif args["status"] == SupportFfmpeg.Status.WRONG_DIRECTORY:
+ data = {
+ "type": "warning",
+ "msg": "잘못된 디렉토리입니다.
" + args["data"]["save_fullpath"],
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "add"
+ elif (
+ args["status"] == SupportFfmpeg.Status.ERROR
+ or args["status"] == SupportFfmpeg.Status.EXCEPTION
+ ):
+ data = {
+ "type": "warning",
+ "msg": "다운로드 시작 실패.
" + args["data"]["save_fullpath"],
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "add"
+ elif args["status"] == SupportFfmpeg.Status.USER_STOP:
+ data = {
+ "type": "warning",
+ "msg": "다운로드가 중지 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.COMPLETED:
+ print("print():: ffmpeg download completed..")
+ logger.debug("ffmpeg download completed......")
+ entity.download_completed()
+ data = {
+ "type": "success",
+ "msg": "다운로드가 완료 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
- entity.ffmpeg_arg = arg
- entity.ffmpeg_status = int(arg['status'])
- entity.ffmpeg_status_kor = str(arg['status'])
- entity.ffmpeg_percent = arg['data']['percent']
- entity.ffmpeg_arg['status'] = str(arg['status'])
- # self.P.logger.debug(arg)
- # import plugin
- # arg['status'] = str(arg['status'])
- # plugin.socketio_callback('status', arg)
- entity.refresh_status()
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.TIME_OVER:
+ data = {
+ "type": "warning",
+ "msg": "시간초과로 중단 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.PF_STOP:
+ data = {
+ "type": "warning",
+ "msg": "PF초과로 중단 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.FORCE_STOP:
+ data = {
+ "type": "warning",
+ "msg": "강제 중단 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.HTTP_FORBIDDEN:
+ data = {
+ "type": "warning",
+ "msg": "403에러로 중단 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.ALREADY_DOWNLOADING:
+ data = {
+ "type": "warning",
+ "msg": "임시파일폴더에 파일이 있습니다.
" + args["data"]["temp_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["type"] == "normal":
+ if args["status"] == SupportFfmpeg.Status.DOWNLOADING:
+ refresh_type = "status"
+ # P.logger.info(refresh_type)
+ # Todo:
+ self.caller.socketio_callback(refresh_type, args["data"])
- # FfmpegQueueEntity.static_index += 1
- # FfmpegQueueEntity.entity_list.append(self)
+ # def ffmpeg_listener(self, **arg):
+ # import ffmpeg
+ #
+ # entity = self.get_entity_by_entity_id(arg["plugin_id"])
+ # if entity is None:
+ # return
+ # if arg["type"] == "status_change":
+ # if arg["status"] == ffmpeg.Status.DOWNLOADING:
+ # pass
+ # elif arg["status"] == ffmpeg.Status.COMPLETED:
+ # entity.download_completed()
+ # elif arg["status"] == ffmpeg.Status.READY:
+ # pass
+ # elif arg["type"] == "last":
+ # self.current_ffmpeg_count += -1
+ # elif arg["type"] == "log":
+ # pass
+ # elif arg["type"] == "normal":
+ # pass
+ #
+ # entity.ffmpeg_arg = arg
+ # entity.ffmpeg_status = int(arg["status"])
+ # entity.ffmpeg_status_kor = str(arg["status"])
+ # entity.ffmpeg_percent = arg["data"]["percent"]
+ # entity.ffmpeg_arg["status"] = str(arg["status"])
+ # # self.P.logger.debug(arg)
+ # # import plugin
+ # # arg['status'] = str(arg['status'])
+ # # plugin.socketio_callback('status', arg)
+ # entity.refresh_status()
+ #
+ # # FfmpegQueueEntity.static_index += 1
+ # # FfmpegQueueEntity.entity_list.append(self)
def add_queue(self, entity):
try:
@@ -292,7 +369,7 @@ class FfmpegQueue(object):
self.download_queue.put(entity)
return True
except Exception as exception:
- self.P.logger.error('Exception:%s', exception)
+ self.P.logger.error("Exception:%s", exception)
self.P.logger.error(traceback.format_exc())
return False
@@ -303,63 +380,65 @@ class FfmpegQueue(object):
return self.max_ffmpeg_count
def command(self, cmd, entity_id):
- self.P.logger.debug('command :%s %s', cmd, entity_id)
+ self.P.logger.debug("command :%s %s", cmd, entity_id)
ret = {}
try:
- if cmd == 'cancel':
- self.P.logger.debug('command :%s %s', cmd, entity_id)
+ if cmd == "cancel":
+ self.P.logger.debug("command :%s %s", cmd, entity_id)
entity = self.get_entity_by_entity_id(entity_id)
if entity is not None:
if entity.ffmpeg_status == -1:
entity.cancel = True
entity.ffmpeg_status_kor = "취소"
# entity.refresh_status()
- ret['ret'] = 'refresh'
+ ret["ret"] = "refresh"
elif entity.ffmpeg_status != 5:
- ret['ret'] = 'notify'
- ret['log'] = '다운로드중 상태가 아닙니다.'
+ ret["ret"] = "notify"
+ ret["log"] = "다운로드중 상태가 아닙니다."
else:
- idx = entity.ffmpeg_arg['data']['idx']
+ idx = entity.ffmpeg_arg["data"]["idx"]
import ffmpeg
+
ffmpeg.Ffmpeg.stop_by_idx(idx)
entity.refresh_status()
- ret['ret'] = 'refresh'
- elif cmd == 'reset':
+ ret["ret"] = "refresh"
+ elif cmd == "reset":
if self.download_queue is not None:
with self.download_queue.mutex:
self.download_queue.queue.clear()
for _ in self.entity_list:
if _.ffmpeg_status == 5:
import ffmpeg
- idx = _.ffmpeg_arg['data']['idx']
+
+ idx = _.ffmpeg_arg["data"]["idx"]
ffmpeg.Ffmpeg.stop_by_idx(idx)
self.entity_list = []
- ret['ret'] = 'refresh'
- elif cmd == 'delete_completed':
+ ret["ret"] = "refresh"
+ elif cmd == "delete_completed":
new_list = []
for _ in self.entity_list:
- if _.ffmpeg_status_kor in [u'파일 있음', u'취소', u'사용자중지']:
+ if _.ffmpeg_status_kor in ["파일 있음", "취소", "사용자중지"]:
continue
if _.ffmpeg_status != 7:
new_list.append(_)
self.entity_list = new_list
- ret['ret'] = 'refresh'
- elif cmd == 'remove':
+ ret["ret"] = "refresh"
+ elif cmd == "remove":
new_list = []
for _ in self.entity_list:
if _.entity_id == entity_id:
continue
new_list.append(_)
self.entity_list = new_list
- ret['ret'] = 'refresh'
+ ret["ret"] = "refresh"
return ret
except Exception as exception:
- self.P.logger.error('Exception:%s', exception)
+ self.P.logger.error("Exception:%s", exception)
self.P.logger.error(traceback.format_exc())
def get_entity_by_entity_id(self, entity_id):
for _ in self.entity_list:
- if _.entity_id == entity_id:
+ if _.entity_id == int(entity_id):
return _
return None
diff --git a/mod_anilife.py b/mod_anilife.py
index aebc096..ae2ff5c 100644
--- a/mod_anilife.py
+++ b/mod_anilife.py
@@ -66,6 +66,7 @@ T = TypeVar("T")
from .setup import *
logger = P.logger
+name = 'anilife'
class LogicAniLife(PluginModuleBase):
db_default = {
@@ -653,7 +654,7 @@ class LogicAniLife(PluginModuleBase):
def plugin_load(self):
self.queue = FfmpegQueue(
- P, P.ModelSetting.get_int("anilife_max_ffmpeg_process_count")
+ P, P.ModelSetting.get_int("anilife_max_ffmpeg_process_count"), name
)
self.current_data = None
self.queue.queue_start()
diff --git a/mod_ohli24.py b/mod_ohli24.py
index 8d5fe36..f87e49d 100644
--- a/mod_ohli24.py
+++ b/mod_ohli24.py
@@ -22,6 +22,7 @@ from urllib import parse
# third-party
import requests
+
# third-party
from flask import request, render_template, jsonify
from lxml import html
@@ -33,9 +34,11 @@ for pkg in pkgs:
importlib.import_module(pkg)
# except ImportError:
except ImportError:
- subprocess.check_call([sys.executable, '-m', 'pip', 'install', '--upgrade', 'pip'])
+ subprocess.check_call(
+ [sys.executable, "-m", "pip", "install", "--upgrade", "pip"]
+ )
# main(["install", pkg])
- subprocess.check_call([sys.executable, '-m', 'pip', 'install', pkg])
+ subprocess.check_call([sys.executable, "-m", "pip", "install", pkg])
importlib.import_module(pkg)
# third party package
@@ -47,11 +50,10 @@ import jsbeautifier
# sjva 공용
from framework import db, scheduler, path_data, socketio
from framework.util import Util
+
# from framework.common.util import headers
from framework import F
-from plugin import (
- PluginModuleBase
-)
+from plugin import PluginModuleBase
from .lib.ffmpeg_queue_v1 import FfmpegQueueEntity, FfmpegQueue
from support.expand.ffmpeg import SupportFfmpeg
@@ -63,8 +65,8 @@ from .setup import *
logger = P.logger
-print('*=' * 50)
-name = 'ohli24'
+print("*=" * 50)
+name = "ohli24"
class LogicOhli24(PluginModuleBase):
@@ -74,18 +76,17 @@ class LogicOhli24(PluginModuleBase):
session = requests.Session()
headers = {
- 'user-agent': 'Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.114 Whale/3.17.145.12 Safari/537.36',
- 'authority': 'ndoodle.xyz',
- 'accept': '*/*',
- 'accept-language': 'ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7',
- 'cache-control': 'no-cache',
- 'pragma': 'no-cache',
- 'referer': 'https://ndoodle.xyz/video/e6e31529675d0ef99d777d729c423382'
-
+ "user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/106.0.5249.114 Whale/3.17.145.12 Safari/537.36",
+ "authority": "ndoodle.xyz",
+ "accept": "*/*",
+ "accept-language": "ko-KR,ko;q=0.9,en-US;q=0.8,en;q=0.7",
+ "cache-control": "no-cache",
+ "pragma": "no-cache",
+ "referer": "https://ndoodle.xyz/video/e6e31529675d0ef99d777d729c423382",
}
useragent = {
"User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, "
- "like Gecko) Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
+ "like Gecko) Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
}
download_queue = None
@@ -109,7 +110,7 @@ class LogicOhli24(PluginModuleBase):
"ohli24_auto_start": "False",
"ohli24_interval": "* 5 * * *",
"ohli24_auto_mode_all": "False",
- "ohli24_auto_code_list": "all",
+ "ohli24_auto_code_list": "",
"ohli24_current_code": "",
"ohli24_uncompleted_auto_enqueue": "False",
"ohli24_image_url_prefix_series": "https://www.jetcloud.cc/series/",
@@ -118,7 +119,7 @@ class LogicOhli24(PluginModuleBase):
}
self.queue = None
# default_route_socketio(P, self)
- default_route_socketio_module(self, attach='/queue')
+ default_route_socketio_module(self, attach="/queue")
@staticmethod
def db_init():
@@ -251,9 +252,21 @@ class LogicOhli24(PluginModuleBase):
thread.daemon = True
thread.start()
return jsonify("")
+ elif sub == "web_list3":
+ print("web_list3")
+ print(request)
+ P.logger.debug(req)
+ P.logger.debug("web_list3")
+ ret = ModelOhli24Item.web_list(req)
+ print(ret)
+ # return jsonify("test")
+ # return jsonify(ModelOhli24Item.web_list(req))
+
elif sub == "web_list2":
+
logger.debug("web_list2")
return jsonify(ModelOhli24Item.web_list(request))
+
elif sub == "db_remove":
return jsonify(ModelOhli24Item.delete_by_id(req.form["id"]))
elif sub == "add_whitelist":
@@ -279,45 +292,51 @@ class LogicOhli24(PluginModuleBase):
def get_episode(self, clip_id):
for _ in self.current_data["episode"]:
- if _['title'] == clip_id:
+ if _["title"] == clip_id:
return _
def process_command(self, command, arg1, arg2, arg3, req):
- ret = {'ret': 'success'}
+ ret = {"ret": "success"}
- if command == 'queue_list':
- logger.debug('queue_list')
- logger.debug(f"self.queue.get_entity_list():: {self.queue.get_entity_list()}")
+ if command == "queue_list":
+ logger.debug("queue_list")
+ logger.debug(
+ f"self.queue.get_entity_list():: {self.queue.get_entity_list()}"
+ )
ret = [x for x in self.queue.get_entity_list()]
return ret
- elif command == 'download_program':
+ elif command == "download_program":
_pass = arg2
db_item = ModelOhli24Program.get(arg1)
- if _pass == 'false' and db_item != None:
- ret['ret'] = 'warning'
- ret['msg'] = '이미 DB에 있는 항목 입니다.'
- elif _pass == 'true' and db_item != None and ModelOhli24Program.get_by_id_in_queue(db_item.id) != None:
- ret['ret'] = 'warning'
- ret['msg'] = '이미 큐에 있는 항목 입니다.'
+ if _pass == "false" and db_item != None:
+ ret["ret"] = "warning"
+ ret["msg"] = "이미 DB에 있는 항목 입니다."
+ elif (
+ _pass == "true"
+ and db_item != None
+ and ModelOhli24Program.get_by_id_in_queue(db_item.id) != None
+ ):
+ ret["ret"] = "warning"
+ ret["msg"] = "이미 큐에 있는 항목 입니다."
else:
if db_item == None:
db_item = ModelOhli24Program(arg1, self.get_episode(arg1))
db_item.save()
db_item.init_for_queue()
self.download_queue.put(db_item)
- ret['msg'] = '다운로드를 추가 하였습니다.'
+ ret["msg"] = "다운로드를 추가 하였습니다."
- elif command == 'list':
+ elif command == "list":
ret = []
for ins in SupportFfmpeg.get_list():
ret.append(ins.get_data())
- elif command == 'queue_command':
- if arg1 == 'cancel':
+ elif command == "queue_command":
+ if arg1 == "cancel":
pass
- elif arg1 == 'reset':
- logger.debug('reset')
+ elif arg1 == "reset":
+ logger.debug("reset")
# if self.queue is not None:
# with self.queue.mutex:
# self.queue.queue.clear()
@@ -383,7 +402,7 @@ class LogicOhli24(PluginModuleBase):
def setting_save_after(self, change_list):
if self.queue.get_max_ffmpeg_count() != P.ModelSetting.get_int(
- "ohli24_max_ffmpeg_process_count"
+ "ohli24_max_ffmpeg_process_count"
):
self.queue.set_max_ffmpeg_count(
P.ModelSetting.get_int("ohli24_max_ffmpeg_process_count")
@@ -432,10 +451,12 @@ class LogicOhli24(PluginModuleBase):
elif len(content_code_list) > 0:
for item in content_code_list:
url = P.ModelSetting.get("ohli24_url") + "/c/" + item
- print("scheduling url: %s", url)
+ logger.debug(f"scheduling url: {url}")
# ret_data = LogicOhli24.get_auto_anime_info(self, url=url)
content_info = self.get_series_info(item, "", "")
+ logger.debug(content_info)
+
for episode_info in content_info["episode"]:
add_ret = self.add(episode_info)
if add_ret.startswith("enqueue"):
@@ -463,9 +484,9 @@ class LogicOhli24(PluginModuleBase):
try:
if (
- self.current_data is not None
- and "code" in self.current_data
- and self.current_data["code"] == code
+ self.current_data is not None
+ and "code" in self.current_data
+ and self.current_data["code"] == code
):
return self.current_data
@@ -497,16 +518,16 @@ class LogicOhli24(PluginModuleBase):
# print(len(wr_id))
if len(wr_id) > 0:
url = (
- P.ModelSetting.get("ohli24_url")
- + "/bbs/board.php?bo_table="
- + bo_table
- + "&wr_id="
- + wr_id
+ P.ModelSetting.get("ohli24_url")
+ + "/bbs/board.php?bo_table="
+ + bo_table
+ + "&wr_id="
+ + wr_id
)
else:
pass
- logger.debug('url:::> %s', url)
+ logger.debug("url:::> %s", url)
response_data = LogicOhli24.get_html(url, timeout=10)
tree = html.fromstring(response_data)
@@ -559,8 +580,8 @@ class LogicOhli24(PluginModuleBase):
thumbnail = image
# logger.info(li.xpath('//a[@class="item-subject"]/@href'))
link = (
- P.ModelSetting.get("ohli24_url")
- + li.xpath('.//a[@class="item-subject"]/@href')[0]
+ P.ModelSetting.get("ohli24_url")
+ + li.xpath('.//a[@class="item-subject"]/@href')[0]
)
# logger.debug(f"link:: {link}")
date = li.xpath('.//div[@class="wr-date"]/text()')[0]
@@ -628,27 +649,27 @@ class LogicOhli24(PluginModuleBase):
try:
if cate == "ing":
url = (
- P.ModelSetting.get("ohli24_url")
- + "/bbs/board.php?bo_table="
- + cate
- + "&page="
- + page
+ P.ModelSetting.get("ohli24_url")
+ + "/bbs/board.php?bo_table="
+ + cate
+ + "&page="
+ + page
)
elif cate == "movie":
url = (
- P.ModelSetting.get("ohli24_url")
- + "/bbs/board.php?bo_table="
- + cate
- + "&page="
- + page
+ P.ModelSetting.get("ohli24_url")
+ + "/bbs/board.php?bo_table="
+ + cate
+ + "&page="
+ + page
)
else:
url = (
- P.ModelSetting.get("ohli24_url")
- + "/bbs/board.php?bo_table="
- + cate
- + "&page="
- + page
+ P.ModelSetting.get("ohli24_url")
+ + "/bbs/board.php?bo_table="
+ + cate
+ + "&page="
+ + page
)
# cate == "complete":
logger.info("url:::> %s", url)
@@ -713,11 +734,11 @@ class LogicOhli24(PluginModuleBase):
try:
_query = urllib.parse.quote(query)
url = (
- P.ModelSetting.get("ohli24_url")
- + "/bbs/search.php?srows=24&gr_id=&sfl=wr_subject&stx="
- + _query
- + "&page="
- + page
+ P.ModelSetting.get("ohli24_url")
+ + "/bbs/search.php?srows=24&gr_id=&sfl=wr_subject&stx="
+ + _query
+ + "&page="
+ + page
)
logger.info("get_search_result()::url> %s", url)
@@ -748,16 +769,13 @@ class LogicOhli24(PluginModuleBase):
return data
except Exception as e:
- P.logger.error("Exception:%s", e)
+ P.logger.error(f"Exception: {str(e)}")
P.logger.error(traceback.format_exc())
return {"ret": "exception", "log": str(e)}
# @staticmethod
def plugin_load(self):
try:
-
- P.logger.debug(F.config['path_data'])
-
# SupportFfmpeg.initialize(ffmpeg_modelsetting.get('ffmpeg_path'), os.path.join(F.config['path_data'], 'tmp'),
# self.callback_function, ffmpeg_modelsetting.get_int('max_pf_count'))
@@ -765,12 +783,19 @@ class LogicOhli24(PluginModuleBase):
# if self.download_queue is None:
# self.download_queue = queue.Queue()
- SupportFfmpeg.initialize("ffmpeg", os.path.join(F.config['path_data'], 'tmp'),
- self.callback_function, 1)
+ SupportFfmpeg.initialize(
+ "ffmpeg",
+ os.path.join(F.config["path_data"], "tmp"),
+ self.callback_function,
+ P.ModelSetting.get(f"{name}_max_ffmpeg_process_count"),
+ )
logger.debug("%s plugin_load", P.package_name)
self.queue = FfmpegQueue(
- P, P.ModelSetting.get_int("ohli24_max_ffmpeg_process_count")
+ P,
+ P.ModelSetting.get_int(f"{name}_max_ffmpeg_process_count"),
+ name,
+ self,
)
self.current_data = None
self.queue.queue_start()
@@ -800,10 +825,10 @@ class LogicOhli24(PluginModuleBase):
headers = {
"referer": f"https://ohli24.net",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) "
- "Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
- "Mozilla/5.0 (Macintosh; Intel "
- "Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 "
- "Whale/3.12.129.46 Safari/537.36",
+ "Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
+ "Mozilla/5.0 (Macintosh; Intel "
+ "Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 "
+ "Whale/3.12.129.46 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}
try:
@@ -827,6 +852,7 @@ class LogicOhli24(PluginModuleBase):
if self.is_exist(episode_info):
return "queue_exist"
else:
+ logger.debug(f"episode_info:: {episode_info}")
db_entity = ModelOhli24Item.get_by_ohli24_id(episode_info["_id"])
logger.debug("db_entity:::> %s", db_entity)
@@ -857,14 +883,14 @@ class LogicOhli24(PluginModuleBase):
# P.logger.debug(F.config['path_data'])
# P.logger.debug(self.headers)
- filename = os.path.basename(entity.filepath)
- ffmpeg = SupportFfmpeg(entity.url, entity.filename, callback_function=self.callback_function,
- max_pf_count=0, save_path=entity.savepath, timeout_minute=60,
- headers=self.headers)
- ret = {'ret': 'success'}
- ret['json'] = ffmpeg.start()
+ # filename = os.path.basename(entity.filepath)
+ # ffmpeg = SupportFfmpeg(entity.url, entity.filename, callback_function=self.callback_function,
+ # max_pf_count=0, save_path=entity.savepath, timeout_minute=60,
+ # headers=self.headers)
+ # ret = {'ret': 'success'}
+ # ret['json'] = ffmpeg.start()
- # self.queue.add_queue(entity)
+ self.queue.add_queue(entity)
return "enqueue_db_exist"
else:
return "db_completed"
@@ -878,75 +904,111 @@ class LogicOhli24(PluginModuleBase):
# return False
def callback_function(self, **args):
- logger.debug('callback_function============')
+ logger.debug("callback_function============")
logger.debug(args)
refresh_type = None
- if args['type'] == 'status_change':
- if args['status'] == SupportFfmpeg.Status.DOWNLOADING:
- refresh_type = 'status_change'
- elif args['status'] == SupportFfmpeg.Status.COMPLETED:
- refresh_type = 'status_change'
- elif args['status'] == SupportFfmpeg.Status.READY:
- data = {'type': 'info',
- 'msg': '다운로드중 Duration(%s)' % args['data']['duration_str'] + '
' + args['data'][
- 'save_fullpath'], 'url': '/ffmpeg/download/list'}
+ if args["type"] == "status_change":
+ if args["status"] == SupportFfmpeg.Status.DOWNLOADING:
+ refresh_type = "status_change"
+ elif args["status"] == SupportFfmpeg.Status.COMPLETED:
+ refresh_type = "status_change"
+ logger.debug("mod_ohli24.py:: download completed........")
+ elif args["status"] == SupportFfmpeg.Status.READY:
+ data = {
+ "type": "info",
+ "msg": "다운로드중 Duration(%s)" % args["data"]["duration_str"]
+ + "
"
+ + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
# socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'add'
- elif args['type'] == 'last':
- if args['status'] == SupportFfmpeg.Status.WRONG_URL:
- data = {'type': 'warning', 'msg': '잘못된 URL입니다'}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'add'
- elif args['status'] == SupportFfmpeg.Status.WRONG_DIRECTORY:
- data = {'type': 'warning', 'msg': '잘못된 디렉토리입니다.
' + args['data']['save_fullpath']}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'add'
- elif args['status'] == SupportFfmpeg.Status.ERROR or args['status'] == SupportFfmpeg.Status.EXCEPTION:
- data = {'type': 'warning', 'msg': '다운로드 시작 실패.
' + args['data']['save_fullpath']}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'add'
- elif args['status'] == SupportFfmpeg.Status.USER_STOP:
- data = {'type': 'warning', 'msg': '다운로드가 중지 되었습니다.
' + args['data']['save_fullpath'],
- 'url': '/ffmpeg/download/list'}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'last'
- elif args['status'] == SupportFfmpeg.Status.COMPLETED:
- data = {'type': 'success', 'msg': '다운로드가 완료 되었습니다.
' + args['data']['save_fullpath'],
- 'url': '/ffmpeg/download/list'}
+ refresh_type = "add"
+ elif args["type"] == "last":
+ if args["status"] == SupportFfmpeg.Status.WRONG_URL:
+ data = {"type": "warning", "msg": "잘못된 URL입니다"}
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "add"
+ elif args["status"] == SupportFfmpeg.Status.WRONG_DIRECTORY:
+ data = {
+ "type": "warning",
+ "msg": "잘못된 디렉토리입니다.
" + args["data"]["save_fullpath"],
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "add"
+ elif (
+ args["status"] == SupportFfmpeg.Status.ERROR
+ or args["status"] == SupportFfmpeg.Status.EXCEPTION
+ ):
+ data = {
+ "type": "warning",
+ "msg": "다운로드 시작 실패.
" + args["data"]["save_fullpath"],
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "add"
+ elif args["status"] == SupportFfmpeg.Status.USER_STOP:
+ data = {
+ "type": "warning",
+ "msg": "다운로드가 중지 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.COMPLETED:
+ logger.debug("download completed........")
+ data = {
+ "type": "success",
+ "msg": "다운로드가 완료 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
- # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
- refresh_type = 'last'
- elif args['status'] == SupportFfmpeg.Status.TIME_OVER:
- data = {'type': 'warning', 'msg': '시간초과로 중단 되었습니다.
' + args['data']['save_fullpath'],
- 'url': '/ffmpeg/download/list'}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'last'
- elif args['status'] == SupportFfmpeg.Status.PF_STOP:
- data = {'type': 'warning', 'msg': 'PF초과로 중단 되었습니다.
' + args['data']['save_fullpath'],
- 'url': '/ffmpeg/download/list'}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'last'
- elif args['status'] == SupportFfmpeg.Status.FORCE_STOP:
- data = {'type': 'warning', 'msg': '강제 중단 되었습니다.
' + args['data']['save_fullpath'],
- 'url': '/ffmpeg/download/list'}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'last'
- elif args['status'] == SupportFfmpeg.Status.HTTP_FORBIDDEN:
- data = {'type': 'warning', 'msg': '403에러로 중단 되었습니다.
' + args['data']['save_fullpath'],
- 'url': '/ffmpeg/download/list'}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'last'
- elif args['status'] == SupportFfmpeg.Status.ALREADY_DOWNLOADING:
- data = {'type': 'warning', 'msg': '임시파일폴더에 파일이 있습니다.
' + args['data']['temp_fullpath'],
- 'url': '/ffmpeg/download/list'}
- socketio.emit("notify", data, namespace='/framework', broadcast=True)
- refresh_type = 'last'
- elif args['type'] == 'normal':
- if args['status'] == SupportFfmpeg.Status.DOWNLOADING:
- refresh_type = 'status'
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.TIME_OVER:
+ data = {
+ "type": "warning",
+ "msg": "시간초과로 중단 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.PF_STOP:
+ data = {
+ "type": "warning",
+ "msg": "PF초과로 중단 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.FORCE_STOP:
+ data = {
+ "type": "warning",
+ "msg": "강제 중단 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.HTTP_FORBIDDEN:
+ data = {
+ "type": "warning",
+ "msg": "403에러로 중단 되었습니다.
" + args["data"]["save_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["status"] == SupportFfmpeg.Status.ALREADY_DOWNLOADING:
+ data = {
+ "type": "warning",
+ "msg": "임시파일폴더에 파일이 있습니다.
" + args["data"]["temp_fullpath"],
+ "url": "/ffmpeg/download/list",
+ }
+ socketio.emit("notify", data, namespace="/framework", broadcast=True)
+ refresh_type = "last"
+ elif args["type"] == "normal":
+ if args["status"] == SupportFfmpeg.Status.DOWNLOADING:
+ refresh_type = "status"
# P.logger.info(refresh_type)
- self.socketio_callback(refresh_type, args['data'])
+ self.socketio_callback(refresh_type, args["data"])
class Ohli24QueueEntity(FfmpegQueueEntity):
@@ -981,7 +1043,8 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
tmp["epi_queue"] = self.epi_queue
return tmp
- def donwload_completed(self):
+ def download_completed(self):
+ logger.debug("download completed.......!!")
db_entity = ModelOhli24Item.get_by_ohli24_id(self.info["_id"])
if db_entity is not None:
db_entity.status = "completed"
@@ -993,7 +1056,7 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
def make_episode_info(self):
try:
# url = 'https://ohli24.net/e/' + self.info['va']
- base_url = "https://ohli24.net"
+ base_url = "https://ohli24.org"
iframe_url = ""
# https://ohli24.net/e/%EB%85%B9%EC%9D%84%20%EB%A8%B9%EB%8A%94%20%EB%B9%84%EC%8A%A4%EC%BD%94%206%ED%99%94
@@ -1002,13 +1065,17 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
ourls = parse.urlparse(url)
headers = {
- "referer": f"{ourls.scheme}://{ourls.netloc}",
- "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36",
+ "Referer": f"{ourls.scheme}://{ourls.netloc}",
+ "User-Agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) "
+ "Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36",
}
logger.debug("make_episode_info()::url==> %s", url)
logger.info(f"self.info:::> {self.info}")
- text = requests.get(url, headers=headers).text
+ # text = requests.get(url, headers=headers).text
+ text = LogicOhli24.get_html(
+ url, headers=headers, referer=f"{ourls.scheme}://{ourls.netloc}"
+ )
# logger.debug(text)
soup1 = BeautifulSoup(text, "lxml")
pattern = re.compile(r"url : \"\.\.(.*)\"")
@@ -1047,7 +1114,7 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
)
packed_script = soup3.find("script", text=s_pattern)
# packed_script = soup3.find('script')
- logger.info('packed_script>>> %s', packed_script.text)
+ logger.info("packed_script>>> %s", packed_script.text)
unpack_script = None
if packed_script is not None:
# logger.debug('zzzzzzzzzzzz')
@@ -1087,10 +1154,10 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
headers = {
"referer": f"{iframe_src}",
"user-agent": "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) "
- "Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
- "Mozilla/5.0 (Macintosh; Intel "
- "Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 "
- "Whale/3.12.129.46 Safari/537.36",
+ "Chrome/96.0.4664.110 Whale/3.12.129.46 Safari/537.36"
+ "Mozilla/5.0 (Macintosh; Intel "
+ "Mac OS X 10_15_7) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/96.0.4664.110 "
+ "Whale/3.12.129.46 Safari/537.36",
"X-Requested-With": "XMLHttpRequest",
}
# print(headers)
@@ -1115,8 +1182,8 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
logger.debug(f"stream_info:: {stream_info}")
self.headers = {
"user-agent": "Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) "
- "Chrome/71.0.3554.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
- "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36",
+ "Chrome/71.0.3554.0 Safari/537.36Mozilla/5.0 (Windows NT 10.0; Win64; x64) "
+ "AppleWebKit/537.36 (KHTML, like Gecko) Chrome/71.0.3554.0 Safari/537.36",
"Referer": "https://ndoodle.xyz/video/03a3655fff3e9bdea48de9f49e938e32",
}
@@ -1184,8 +1251,11 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
self.savepath, self.filename.replace(".mp4", ".ko.srt")
)
- if self.srt_url is not None and not os.path.exists(srt_filepath) and not self.srt_url.split("/")[
- -1] == 'thumbnails.vtt':
+ if (
+ self.srt_url is not None
+ and not os.path.exists(srt_filepath)
+ and not self.srt_url.split("/")[-1] == "thumbnails.vtt"
+ ):
if requests.get(self.srt_url, headers=headers).status_code == 200:
srt_data = requests.get(self.srt_url, headers=headers).text
Util.write_file(srt_data, srt_filepath)
@@ -1194,8 +1264,85 @@ class Ohli24QueueEntity(FfmpegQueueEntity):
P.logger.error("Exception:%s", e)
P.logger.error(traceback.format_exc())
+ # def callback_function(self, **args):
+ # refresh_type = None
+ # # entity = self.get_entity_by_entity_id(arg['plugin_id'])
+ # entity = self.get_entity_by_entity_id(args['data']['callback_id'])
+ #
+ # if args['type'] == 'status_change':
+ # if args['status'] == SupportFfmpeg.Status.DOWNLOADING:
+ # refresh_type = 'status_change'
+ # elif args['status'] == SupportFfmpeg.Status.COMPLETED:
+ # refresh_type = 'status_change'
+ # logger.debug('ffmpeg_queue_v1.py:: download completed........')
+ # elif args['status'] == SupportFfmpeg.Status.READY:
+ # data = {'type': 'info',
+ # 'msg': '다운로드중 Duration(%s)' % args['data']['duration_str'] + '
' + args['data'][
+ # 'save_fullpath'], 'url': '/ffmpeg/download/list'}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'add'
+ # elif args['type'] == 'last':
+ # if args['status'] == SupportFfmpeg.Status.WRONG_URL:
+ # data = {'type': 'warning', 'msg': '잘못된 URL입니다'}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'add'
+ # elif args['status'] == SupportFfmpeg.Status.WRONG_DIRECTORY:
+ # data = {'type': 'warning', 'msg': '잘못된 디렉토리입니다.
' + args['data']['save_fullpath']}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'add'
+ # elif args['status'] == SupportFfmpeg.Status.ERROR or args['status'] == SupportFfmpeg.Status.EXCEPTION:
+ # data = {'type': 'warning', 'msg': '다운로드 시작 실패.
' + args['data']['save_fullpath']}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'add'
+ # elif args['status'] == SupportFfmpeg.Status.USER_STOP:
+ # data = {'type': 'warning', 'msg': '다운로드가 중지 되었습니다.
' + args['data']['save_fullpath'],
+ # 'url': '/ffmpeg/download/list'}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'last'
+ # elif args['status'] == SupportFfmpeg.Status.COMPLETED:
+ # logger.debug('ffmpeg download completed......')
+ # entity.download_completed()
+ # data = {'type': 'success', 'msg': '다운로드가 완료 되었습니다.
' + args['data']['save_fullpath'],
+ # 'url': '/ffmpeg/download/list'}
+ #
+ #
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'last'
+ # elif args['status'] == SupportFfmpeg.Status.TIME_OVER:
+ # data = {'type': 'warning', 'msg': '시간초과로 중단 되었습니다.
' + args['data']['save_fullpath'],
+ # 'url': '/ffmpeg/download/list'}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'last'
+ # elif args['status'] == SupportFfmpeg.Status.PF_STOP:
+ # data = {'type': 'warning', 'msg': 'PF초과로 중단 되었습니다.
' + args['data']['save_fullpath'],
+ # 'url': '/ffmpeg/download/list'}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'last'
+ # elif args['status'] == SupportFfmpeg.Status.FORCE_STOP:
+ # data = {'type': 'warning', 'msg': '강제 중단 되었습니다.
' + args['data']['save_fullpath'],
+ # 'url': '/ffmpeg/download/list'}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'last'
+ # elif args['status'] == SupportFfmpeg.Status.HTTP_FORBIDDEN:
+ # data = {'type': 'warning', 'msg': '403에러로 중단 되었습니다.
' + args['data']['save_fullpath'],
+ # 'url': '/ffmpeg/download/list'}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'last'
+ # elif args['status'] == SupportFfmpeg.Status.ALREADY_DOWNLOADING:
+ # data = {'type': 'warning', 'msg': '임시파일폴더에 파일이 있습니다.
' + args['data']['temp_fullpath'],
+ # 'url': '/ffmpeg/download/list'}
+ # socketio.emit("notify", data, namespace='/framework', broadcast=True)
+ # refresh_type = 'last'
+ # elif args['type'] == 'normal':
+ # if args['status'] == SupportFfmpeg.Status.DOWNLOADING:
+ # refresh_type = 'status'
+ # # P.logger.info(refresh_type)
+ # # Todo:
+ # self.socketio_callback(refresh_type, args['data'])
-class ModelOhli24Item(db.Model):
+
+class ModelOhli24Item(ModelBase):
+ P = P
__tablename__ = "{package_name}_ohli24_item".format(package_name=P.package_name)
__table_args__ = {"mysql_collate": "utf8_general_ci"}
__bind_key__ = P.package_name
@@ -1238,16 +1385,32 @@ class ModelOhli24Item(db.Model):
return ret
def save(self):
- db.session.add(self)
- db.session.commit()
+ try:
+ with F.app.app_context():
+ F.db.session.add(self)
+ F.db.session.commit()
+ return self
+ except Exception as e:
+ self.P.logger.error(f"Exception:{str(e)}")
+ self.P.logger.error(traceback.format_exc())
@classmethod
- def get_by_id(cls, idx):
- return db.session.query(cls).filter_by(id=idx).first()
+ def get_by_id(cls, id):
+ try:
+ with F.app.app_context():
+ return F.db.session.query(cls).filter_by(id=int(id)).first()
+ except Exception as e:
+ cls.P.logger.error(f"Exception:{str(e)}")
+ cls.P.logger.error(traceback.format_exc())
@classmethod
def get_by_ohli24_id(cls, ohli24_id):
- return db.session.query(cls).filter_by(ohli24_id=ohli24_id).first()
+ try:
+ with F.app.app_context():
+ return F.db.session.query(cls).filter_by(ohli24_id=ohli24_id).first()
+ except Exception as e:
+ cls.P.logger.error(f"Exception:{str(e)}")
+ cls.P.logger.error(traceback.format_exc())
@classmethod
def delete_by_id(cls, idx):
@@ -1269,7 +1432,7 @@ class ModelOhli24Item(db.Model):
query = query.limit(page_size).offset((page - 1) * page_size)
lists = query.all()
ret["list"] = [item.as_dict() for item in lists]
- ret["paging"] = Util.get_paging_info(count, page, page_size)
+ ret["paging"] = cls.get_paging_info(count, page, page_size)
return ret
@classmethod
@@ -1327,8 +1490,8 @@ class ModelOhli24Item(db.Model):
class ModelOhli24Program(ModelBase):
P = P
- __tablename__ = f'{P.package_name}_{name}_program'
- __table_args__ = {'mysql_collate': 'utf8_general_ci'}
+ __tablename__ = f"{P.package_name}_{name}_program"
+ __table_args__ = {"mysql_collate": "utf8_general_ci"}
__bind_key__ = P.package_name
id = db.Column(db.Integer, primary_key=True)
@@ -1342,7 +1505,7 @@ class ModelOhli24Program(ModelBase):
call = db.Column(db.String)
queue_list = []
- def __init__(self, clip_id, info, call='user'):
+ def __init__(self, clip_id, info, call="user"):
self.clip_id = clip_id
self.info = info
self.completed = False
@@ -1357,29 +1520,34 @@ class ModelOhli24Program(ModelBase):
@classmethod
def get(cls, clip_id):
with F.app.app_context():
- return db.session.query(cls).filter_by(
- clip_id=clip_id,
- ).order_by(desc(cls.id)).first()
+ return (
+ db.session.query(cls)
+ .filter_by(
+ clip_id=clip_id,
+ )
+ .order_by(desc(cls.id))
+ .first()
+ )
@classmethod
def is_duplicate(cls, clip_id):
- return (cls.get(clip_id) != None)
+ return cls.get(clip_id) != None
# 오버라이딩
@classmethod
- def make_query(cls, req, order='desc', search='', option1='all', option2='all'):
+ def make_query(cls, req, order="desc", search="", option1="all", option2="all"):
with F.app.app_context():
query = F.db.session.query(cls)
# query = cls.make_query_search(query, search, cls.program_title)
- query = query.filter(cls.info['channel_name'].like('%' + search + '%'))
- if option1 == 'completed':
+ query = query.filter(cls.info["channel_name"].like("%" + search + "%"))
+ if option1 == "completed":
query = query.filter_by(completed=True)
- elif option1 == 'incompleted':
+ elif option1 == "incompleted":
query = query.filter_by(completed=False)
- elif option1 == 'auto':
+ elif option1 == "auto":
query = query.filter_by(call="user")
- if order == 'desc':
+ if order == "desc":
query = query.order_by(desc(cls.id))
else:
query = query.order_by(cls.id)
@@ -1395,9 +1563,7 @@ class ModelOhli24Program(ModelBase):
@classmethod
def get_failed(cls):
with F.app.app_context():
- return db.session.query(cls).filter_by(
- completed=False
- ).all()
+ return db.session.query(cls).filter_by(completed=False).all()
### only for queue
@classmethod
@@ -1405,4 +1571,5 @@ class ModelOhli24Program(ModelBase):
for _ in cls.queue_list:
if _.id == int(id):
return _
+
### only for queue END
diff --git a/setup.py b/setup.py
index 72296b6..d983240 100644
--- a/setup.py
+++ b/setup.py
@@ -132,5 +132,5 @@ try:
P.set_module_list([LogicOhli24, LogicAniLife, LogicLinkkf])
except Exception as e:
- P.logger.error(f'Exception:{str(e)}')
+ P.logger.error(f'Exception: {str(e)}')
P.logger.error(traceback.format_exc())
diff --git a/templates/anime_downloader_ohli24_list.html b/templates/anime_downloader_ohli24_list.html
index cbc5ac1..2e8d9d1 100644
--- a/templates/anime_downloader_ohli24_list.html
+++ b/templates/anime_downloader_ohli24_list.html
@@ -1,10 +1,10 @@
{% extends "base.html" %}
{% block content %}
-
-