core 정리
This commit is contained in:
2
.gitignore
vendored
Normal file
2
.gitignore
vendored
Normal file
@@ -0,0 +1,2 @@
|
|||||||
|
*.pyo
|
||||||
|
*.pyc
|
||||||
12
__init__.py
Normal file
12
__init__.py
Normal file
@@ -0,0 +1,12 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/02/08 2:55 PM
|
||||||
|
# @Author : yommi
|
||||||
|
# @Site :
|
||||||
|
# @File : __init__
|
||||||
|
# @Software: PyCharm
|
||||||
|
from .plugin import P
|
||||||
|
blueprint = P.blueprint
|
||||||
|
menu = P.menu
|
||||||
|
plugin_load = P.logic.plugin_load
|
||||||
|
plugin_unload = P.logic.plugin_unload
|
||||||
|
plugin_info = P.plugin_info
|
||||||
46
logic_linkkf.py
Normal file
46
logic_linkkf.py
Normal file
@@ -0,0 +1,46 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/02/08 3:44 PM
|
||||||
|
# @Author : yommi
|
||||||
|
# @Site :
|
||||||
|
# @File : logic_linkkf
|
||||||
|
# @Software: PyCharm
|
||||||
|
import os, sys, traceback, re, json, threading
|
||||||
|
from datetime import datetime
|
||||||
|
import copy
|
||||||
|
# third-party
|
||||||
|
import requests
|
||||||
|
# third-party
|
||||||
|
from flask import request, render_template, jsonify
|
||||||
|
from sqlalchemy import or_, and_, func, not_, desc
|
||||||
|
|
||||||
|
# sjva 공용
|
||||||
|
from framework import db, scheduler, path_data, socketio
|
||||||
|
from framework.util import Util
|
||||||
|
from framework.common.util import headers
|
||||||
|
from plugin import LogicModuleBase, FfmpegQueueEntity, FfmpegQueue, default_route_socketio
|
||||||
|
from tool_base import d
|
||||||
|
# 패키지
|
||||||
|
from .plugin import P
|
||||||
|
|
||||||
|
|
||||||
|
class LogicLinkkf(LogicModuleBase):
|
||||||
|
def __init__(self, P):
|
||||||
|
super(LogicLinkkf, self).__init__(P, 'setting', scheduler_desc='linkkf 자동 다운로드')
|
||||||
|
self.name = 'linkkf'
|
||||||
|
default_route_socketio(P, self)
|
||||||
|
|
||||||
|
def process_menu(self, sub, req):
|
||||||
|
arg = P.ModelSetting.to_dict()
|
||||||
|
arg['sub'] = self.name
|
||||||
|
if sub in ['setting', 'queue', 'list', 'request']:
|
||||||
|
if sub == 'request' and req.args.get('content_code') is not None:
|
||||||
|
arg['ani365_current_code'] = req.args.get('content_code')
|
||||||
|
if sub == 'setting':
|
||||||
|
job_id = '%s_%s' % (self.P.package_name, self.name)
|
||||||
|
arg['scheduler'] = str(scheduler.is_include(job_id))
|
||||||
|
arg['is_running'] = str(scheduler.is_running(job_id))
|
||||||
|
return render_template('{package_name}_{module_name}_{sub}.html'.format(package_name=P.package_name, module_name=self.name, sub=sub), arg=arg)
|
||||||
|
return render_template('sample.html', title='%s - %s' % (P.package_name, sub))
|
||||||
|
|
||||||
|
pass
|
||||||
272
logic_ohli24.py
Normal file
272
logic_ohli24.py
Normal file
@@ -0,0 +1,272 @@
|
|||||||
|
#!/usr/bin/env python
|
||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/02/08 3:44 PM
|
||||||
|
# @Author : yommi
|
||||||
|
# @Site :
|
||||||
|
# @File : logic_ohli24
|
||||||
|
# @Software: PyCharm
|
||||||
|
|
||||||
|
import os, sys, traceback, re, json, threading
|
||||||
|
from datetime import datetime
|
||||||
|
import copy
|
||||||
|
# third-party
|
||||||
|
import requests
|
||||||
|
# third-party
|
||||||
|
from flask import request, render_template, jsonify
|
||||||
|
from sqlalchemy import or_, and_, func, not_, desc
|
||||||
|
|
||||||
|
# sjva 공용
|
||||||
|
from framework import db, scheduler, path_data, socketio
|
||||||
|
from framework.util import Util
|
||||||
|
from framework.common.util import headers
|
||||||
|
from plugin import LogicModuleBase, FfmpegQueueEntity, FfmpegQueue, default_route_socketio
|
||||||
|
from tool_base import d
|
||||||
|
# 패키지
|
||||||
|
from .plugin import P
|
||||||
|
|
||||||
|
logger = P.logger
|
||||||
|
|
||||||
|
|
||||||
|
#########################################################
|
||||||
|
|
||||||
|
|
||||||
|
class LogicOhli24(LogicModuleBase):
|
||||||
|
db_default = {
|
||||||
|
'ohli24_db_version': '1',
|
||||||
|
'ohli24_url': 'https://ohli24.net',
|
||||||
|
'ohli24_download_path': os.path.join(path_data, P.package_name, 'ohli24'),
|
||||||
|
'ohli24_auto_make_folder': 'True',
|
||||||
|
'ohli24_auto_make_season_folder': 'True',
|
||||||
|
'ohli24_finished_insert': u'[완결]',
|
||||||
|
'ohli24_max_ffmpeg_process_count': '1',
|
||||||
|
'ohli24_order_desc': 'False',
|
||||||
|
'ohli24_auto_start': 'False',
|
||||||
|
'ohli24_interval': '* 5 * * *',
|
||||||
|
'ohli24_auto_mode_all': 'False',
|
||||||
|
'ohli24_auto_code_list': 'all',
|
||||||
|
'ohli24_current_code': '',
|
||||||
|
'ohli24_uncompleted_auto_enqueue': 'False',
|
||||||
|
'ohli24_image_url_prefix_series': 'https://www.jetcloud.cc/series/',
|
||||||
|
'ohli24_image_url_prefix_episode': 'https://www.jetcloud-list.cc/thumbnail/',
|
||||||
|
}
|
||||||
|
current_headers = None
|
||||||
|
|
||||||
|
def __init__(self, P):
|
||||||
|
super(LogicOhli24, self).__init__(P, 'setting', scheduler_desc='ani365 자동 다운로드')
|
||||||
|
self.name = 'ohli24'
|
||||||
|
default_route_socketio(P, self)
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def db_init():
|
||||||
|
pass
|
||||||
|
# try:
|
||||||
|
# for key, value in P.Logic.db_default.items():
|
||||||
|
# if db.session.query(ModelSetting).filter_by(key=key).count() == 0:
|
||||||
|
# db.session.add(ModelSetting(key, value))
|
||||||
|
# db.session.commit()
|
||||||
|
# except Exception as e:
|
||||||
|
# logger.error('Exception:%s', e)
|
||||||
|
# logger.error(traceback.format_exc())
|
||||||
|
|
||||||
|
def process_menu(self, sub, req):
|
||||||
|
arg = P.ModelSetting.to_dict()
|
||||||
|
arg['sub'] = self.name
|
||||||
|
if sub in ['setting', 'queue', 'list', 'request']:
|
||||||
|
if sub == 'request' and req.args.get('content_code') is not None:
|
||||||
|
arg['ani365_current_code'] = req.args.get('content_code')
|
||||||
|
if sub == 'setting':
|
||||||
|
job_id = '%s_%s' % (self.P.package_name, self.name)
|
||||||
|
arg['scheduler'] = str(scheduler.is_include(job_id))
|
||||||
|
arg['is_running'] = str(scheduler.is_running(job_id))
|
||||||
|
return render_template(
|
||||||
|
'{package_name}_{module_name}_{sub}.html'.format(package_name=P.package_name, module_name=self.name,
|
||||||
|
sub=sub), arg=arg)
|
||||||
|
return render_template('sample.html', title='%s - %s' % (P.package_name, sub))
|
||||||
|
|
||||||
|
# @staticmethod
|
||||||
|
def process_ajax(self, sub, req):
|
||||||
|
try:
|
||||||
|
if sub == 'analysis':
|
||||||
|
# code = req.form['code']
|
||||||
|
code = request.form['code']
|
||||||
|
data = []
|
||||||
|
print(code)
|
||||||
|
logger.info("code::: %s", code)
|
||||||
|
P.ModelSetting.set('ohli24_current_code', code)
|
||||||
|
data = self.get_series_info(code)
|
||||||
|
self.current_data = data
|
||||||
|
return jsonify({'ret': 'success', 'data': data, 'code': code})
|
||||||
|
elif sub == 'add_queue':
|
||||||
|
ret = {}
|
||||||
|
info = json.loads(request.form['data'])
|
||||||
|
ret['ret'] = self.add(info)
|
||||||
|
return jsonify(ret)
|
||||||
|
pass
|
||||||
|
except Exception as e:
|
||||||
|
P.logger.error('Exception:%s', e)
|
||||||
|
P.logger.error(traceback.format_exc())
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def plugin_load():
|
||||||
|
try:
|
||||||
|
logger.debug('%s plugin_load', P.package_name)
|
||||||
|
# self.queue = FfmpegQueue(P, P.ModelSetting.get_int('ani365_max_ffmpeg_process_count'))
|
||||||
|
# self.current_data = None
|
||||||
|
# self.queue.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', P.package_name)
|
||||||
|
scheduler.remove_job('%s_recent' % P.package_name)
|
||||||
|
except Exception as e:
|
||||||
|
logger.error('Exception:%s', e)
|
||||||
|
logger.error(traceback.format_exc())
|
||||||
|
|
||||||
|
@staticmethod
|
||||||
|
def reset_db() -> bool:
|
||||||
|
db.session.query(ModelOhli24Item).delete()
|
||||||
|
db.session.commit()
|
||||||
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class Ohli24QueueEntity(FfmpegQueueEntity):
|
||||||
|
def __init__(self, P, module_logic, info):
|
||||||
|
super(Ohli24QueueEntity, self).__init__(P, module_logic, info)
|
||||||
|
self.vtt = None
|
||||||
|
self.season = 1
|
||||||
|
self.content_title = None
|
||||||
|
self.make_episode_info()
|
||||||
|
|
||||||
|
# episode info
|
||||||
|
def make_episode_info(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class ModelOhli24Item(db.Model):
|
||||||
|
__tablename__ = '{package_name}_ohli24_item'.format(package_name=P.package_name)
|
||||||
|
__table_args__ = {'mysql_collate': 'utf8_general_ci'}
|
||||||
|
__bind_key__ = P.package_name
|
||||||
|
id = db.Column(db.Integer, primary_key=True)
|
||||||
|
created_time = db.Column(db.DateTime)
|
||||||
|
completed_time = db.Column(db.DateTime)
|
||||||
|
reserved = db.Column(db.JSON)
|
||||||
|
content_code = db.Column(db.String)
|
||||||
|
season = db.Column(db.Integer)
|
||||||
|
episode_no = db.Column(db.Integer)
|
||||||
|
title = db.Column(db.String)
|
||||||
|
episode_title = db.Column(db.String)
|
||||||
|
ani365_va = db.Column(db.String)
|
||||||
|
ani365_vi = db.Column(db.String)
|
||||||
|
ani365_id = db.Column(db.String)
|
||||||
|
quality = db.Column(db.String)
|
||||||
|
filepath = db.Column(db.String)
|
||||||
|
filename = db.Column(db.String)
|
||||||
|
savepath = db.Column(db.String)
|
||||||
|
video_url = db.Column(db.String)
|
||||||
|
vtt_url = db.Column(db.String)
|
||||||
|
thumbnail = db.Column(db.String)
|
||||||
|
status = db.Column(db.String)
|
||||||
|
ohli24_info = db.Column(db.JSON)
|
||||||
|
|
||||||
|
def __init__(self):
|
||||||
|
self.created_time = datetime.now()
|
||||||
|
|
||||||
|
def __repr__(self):
|
||||||
|
return repr(self.as_dict())
|
||||||
|
|
||||||
|
def as_dict(self):
|
||||||
|
ret = {x.name: getattr(self, x.name) for x in self.__table__.columns}
|
||||||
|
ret['created_time'] = self.created_time.strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
ret['completed_time'] = self.completed_time.strftime(
|
||||||
|
'%Y-%m-%d %H:%M:%S') if self.completed_time is not None else None
|
||||||
|
return ret
|
||||||
|
|
||||||
|
def save(self):
|
||||||
|
db.session.add(self)
|
||||||
|
db.session.commit()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_by_id(cls, id):
|
||||||
|
return db.session.query(cls).filter_by(id=id).first()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_by_ani365_id(cls, ani365_id):
|
||||||
|
return db.session.query(cls).filter_by(ani365_id=ani365_id).first()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def delete_by_id(cls, id):
|
||||||
|
db.session.query(cls).filter_by(id=id).delete()
|
||||||
|
db.session.commit()
|
||||||
|
return True
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def web_list(cls, req):
|
||||||
|
ret = {}
|
||||||
|
page = int(req.form['page']) if 'page' in req.form else 1
|
||||||
|
page_size = 30
|
||||||
|
job_id = ''
|
||||||
|
search = req.form['search_word'] if 'search_word' in req.form else ''
|
||||||
|
option = req.form['option'] if 'option' in req.form else 'all'
|
||||||
|
order = req.form['order'] if 'order' in req.form else 'desc'
|
||||||
|
query = cls.make_query(search=search, order=order, option=option)
|
||||||
|
count = query.count()
|
||||||
|
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)
|
||||||
|
return ret
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def make_query(cls, search='', order='desc', option='all'):
|
||||||
|
query = db.session.query(cls)
|
||||||
|
if search is not None and search != '':
|
||||||
|
if search.find('|') != -1:
|
||||||
|
tmp = search.split('|')
|
||||||
|
conditions = []
|
||||||
|
for tt in tmp:
|
||||||
|
if tt != '':
|
||||||
|
conditions.append(cls.filename.like('%' + tt.strip() + '%'))
|
||||||
|
query = query.filter(or_(*conditions))
|
||||||
|
elif search.find(',') != -1:
|
||||||
|
tmp = search.split(',')
|
||||||
|
for tt in tmp:
|
||||||
|
if tt != '':
|
||||||
|
query = query.filter(cls.filename.like('%' + tt.strip() + '%'))
|
||||||
|
else:
|
||||||
|
query = query.filter(cls.filename.like('%' + search + '%'))
|
||||||
|
if option == 'completed':
|
||||||
|
query = query.filter(cls.status == 'completed')
|
||||||
|
|
||||||
|
query = query.order_by(desc(cls.id)) if order == 'desc' else query.order_by(cls.id)
|
||||||
|
return query
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def get_list_uncompleted(cls):
|
||||||
|
return db.session.query(cls).filter(cls.status != 'completed').all()
|
||||||
|
|
||||||
|
@classmethod
|
||||||
|
def append(cls, q):
|
||||||
|
item = ModelOhli24Item()
|
||||||
|
item.content_code = q['content_code']
|
||||||
|
item.season = q['season']
|
||||||
|
item.episode_no = q['epi_queue']
|
||||||
|
item.title = q['content_title']
|
||||||
|
item.episode_title = q['title']
|
||||||
|
item.ani365_va = q['va']
|
||||||
|
item.ani365_vi = q['_vi']
|
||||||
|
item.ani365_id = q['_id']
|
||||||
|
item.quality = q['quality']
|
||||||
|
item.filepath = q['filepath']
|
||||||
|
item.filename = q['filename']
|
||||||
|
item.savepath = q['savepath']
|
||||||
|
item.video_url = q['url']
|
||||||
|
item.vtt_url = q['vtt']
|
||||||
|
item.thumbnail = q['thumbnail']
|
||||||
|
item.status = 'wait'
|
||||||
|
item.ani365_info = q['ani365_info']
|
||||||
|
item.save()
|
||||||
73
plugin.py
Normal file
73
plugin.py
Normal file
@@ -0,0 +1,73 @@
|
|||||||
|
# -*- coding: utf-8 -*-
|
||||||
|
# @Time : 2022/02/08 2:57 PM
|
||||||
|
# @Author : yommi
|
||||||
|
# @Site :
|
||||||
|
# @File : plugin
|
||||||
|
# @Software: PyCharm
|
||||||
|
|
||||||
|
import os, traceback
|
||||||
|
# third-party
|
||||||
|
from flask import Blueprint
|
||||||
|
# sjva 공용
|
||||||
|
from framework.logger import get_logger
|
||||||
|
from framework import app, path_data
|
||||||
|
from framework.util import Util
|
||||||
|
from plugin import get_model_setting, Logic, default_route, PluginUtil
|
||||||
|
|
||||||
|
|
||||||
|
#######################################################################
|
||||||
|
|
||||||
|
class P(object):
|
||||||
|
package_name = __name__.split('.')[0]
|
||||||
|
logger = get_logger(package_name)
|
||||||
|
blueprint = Blueprint(package_name, package_name, url_prefix='/%s' % package_name,
|
||||||
|
template_folder=os.path.join(os.path.dirname(__file__), 'templates'))
|
||||||
|
menu = {
|
||||||
|
'main': [package_name, u'애니 다운로드'],
|
||||||
|
'sub': [
|
||||||
|
['ohli24', u'ohli24'], ['linkkf', u'LINKKF'], ['log', u'로그']
|
||||||
|
],
|
||||||
|
'category': 'vod',
|
||||||
|
'sub2': {
|
||||||
|
'ohli24': [
|
||||||
|
['setting', u'설정'], ['request', u'요청'], ['queue', u'큐'], ['list', u'목록']
|
||||||
|
],
|
||||||
|
'linkkf': [
|
||||||
|
['setting', u'설정'], ['request', u'요청'], ['queue', u'큐'], ['list', u'목록']
|
||||||
|
],
|
||||||
|
}
|
||||||
|
}
|
||||||
|
plugin_info = {
|
||||||
|
'version': '0.1.1.0',
|
||||||
|
'name': 'anime_downloader',
|
||||||
|
'category_name': 'vod',
|
||||||
|
'icon': '',
|
||||||
|
'developer': 'soju6jan && projectdx',
|
||||||
|
'description': u'비디오 다운로드',
|
||||||
|
'home': 'http://yommi.duckdns.org:20080/projectdx/anime-downloader',
|
||||||
|
'more': '',
|
||||||
|
}
|
||||||
|
ModelSetting = get_model_setting(package_name, logger)
|
||||||
|
logic = None
|
||||||
|
module_list = None
|
||||||
|
home_module = 'ohli24'
|
||||||
|
|
||||||
|
|
||||||
|
# 초기화 함수
|
||||||
|
def initialize():
|
||||||
|
try:
|
||||||
|
app.config['SQLALCHEMY_BINDS'][P.package_name] = 'sqlite:///%s' % (
|
||||||
|
os.path.join(path_data, 'db', '{package_name}.db'.format(package_name=P.package_name)))
|
||||||
|
PluginUtil.make_info_json(P.plugin_info, __file__)
|
||||||
|
from .logic_ohli24 import LogicOhli24
|
||||||
|
from .logic_linkkf import LogicLinkkf
|
||||||
|
# P.module_list = [LogicOhli24(P), LogicLinkkf(P)]
|
||||||
|
P.module_list = [LogicOhli24(P)]
|
||||||
|
P.logic = Logic(P)
|
||||||
|
default_route(P)
|
||||||
|
except Exception as e:
|
||||||
|
P.logger.error('Exception:%s', e)
|
||||||
|
P.logger.error(traceback.format_exc())
|
||||||
|
|
||||||
|
|
||||||
|
initialize()
|
||||||
10
templates/anime_downloader_ohli24_list.html
Normal file
10
templates/anime_downloader_ohli24_list.html
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
10
templates/anime_downloader_ohli24_queue.html
Normal file
10
templates/anime_downloader_ohli24_queue.html
Normal file
@@ -0,0 +1,10 @@
|
|||||||
|
<!DOCTYPE html>
|
||||||
|
<html lang="en">
|
||||||
|
<head>
|
||||||
|
<meta charset="UTF-8">
|
||||||
|
<title>Title</title>
|
||||||
|
</head>
|
||||||
|
<body>
|
||||||
|
|
||||||
|
</body>
|
||||||
|
</html>
|
||||||
54
templates/anime_downloader_ohli24_request.html
Normal file
54
templates/anime_downloader_ohli24_request.html
Normal file
@@ -0,0 +1,54 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
|
||||||
|
<div>
|
||||||
|
<form id='program_list'>
|
||||||
|
{{ macros.setting_input_text_and_buttons('code', '작품 Code', [['analysis_btn', '분석'], ['go_ohli24_btn', 'Go OHLI24']], desc='예) "https://ohli24.net/c/녹을 먹는 비스코" 이나 "녹을 먹는 비스코"') }}
|
||||||
|
</form>
|
||||||
|
<form id="program_auto_form">
|
||||||
|
<div id='episode_list'></div>
|
||||||
|
</form>
|
||||||
|
</div> <!--전체-->
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
const package_name = "{{arg['package_name'] }}";
|
||||||
|
const sub = "{{arg['sub'] }}";
|
||||||
|
const ohli24_url = "{{arg['ohli24_url']}}";
|
||||||
|
const current_data = null;
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
if ( "{{arg['ohli24_current_code']}}" !== "" ) {
|
||||||
|
document.getElementById("code").value = "{{arg['ohli24_current_code']}}";
|
||||||
|
document.getElementById("analysis_btn").click();
|
||||||
|
}
|
||||||
|
|
||||||
|
// 분석 버튼 클릭시 호출
|
||||||
|
$("body").on('click', '#analysis_btn', function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
const code = document.getElementById("code").value
|
||||||
|
console.log(code)
|
||||||
|
$.ajax({
|
||||||
|
url: '/' + package_name + '/ajax/' + sub + '/analysis',
|
||||||
|
type: "POST",
|
||||||
|
cache: false,
|
||||||
|
data: {code:code},
|
||||||
|
dataType: "json",
|
||||||
|
success: function (ret) {
|
||||||
|
if (ret.ret === 'success' && ret.data != null) {
|
||||||
|
console.log(ret.code)
|
||||||
|
{#make_program(ret.data)#}
|
||||||
|
} else {
|
||||||
|
$.notify('<strong>분석 실패</strong><br>' + ret.log, {type: 'warning'});
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
$("body").on('click', '#go_ohli24_btn', function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
window.open("{{arg['ohli24_url']}}", "_blank");
|
||||||
|
});
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
69
templates/anime_downloader_ohli24_setting.html
Normal file
69
templates/anime_downloader_ohli24_setting.html
Normal file
@@ -0,0 +1,69 @@
|
|||||||
|
{% extends "base.html" %}
|
||||||
|
{% block content %}
|
||||||
|
<div>
|
||||||
|
{{ macros.m_button_group([['global_setting_save_btn', '설정 저장']])}}
|
||||||
|
{{ macros.m_row_start('5') }}
|
||||||
|
{{ macros.m_row_end() }}
|
||||||
|
<nav>
|
||||||
|
{{ macros.m_tab_head_start() }}
|
||||||
|
{{ macros.m_tab_head2('normal', '일반', true) }}
|
||||||
|
{{ macros.m_tab_head2('auto', '홈화면 자동', false) }}
|
||||||
|
{{ macros.m_tab_head2('action', '기타', false) }}
|
||||||
|
{{ macros.m_tab_head_end() }}
|
||||||
|
</nav>
|
||||||
|
<form id="setting">
|
||||||
|
<div class="tab-content" id="nav-tabContent">
|
||||||
|
{{ macros.m_tab_content_start('normal', true) }}
|
||||||
|
{{ macros.setting_input_text_and_buttons('ohli24_url', 'ohli24 URL', [['go_btn', 'GO']], value=arg['ohli24_url']) }}
|
||||||
|
{{ macros.setting_input_text('ohli24_download_path', '저장 폴더', value=arg['ohli24_download_path'], desc='정상적으로 다운 완료 된 파일이 이동할 폴더 입니다. ') }}
|
||||||
|
{{ macros.setting_input_int('ohli24_max_ffmpeg_process_count', '동시 다운로드 수', value=arg['ohli24_max_ffmpeg_process_count'], desc='동시에 다운로드 할 에피소드 갯수입니다.') }}
|
||||||
|
{{ macros.setting_checkbox('ohli24_order_desc', '요청 화면 최신순 정렬', value=arg['ohli24_order_desc'], desc='On : 최신화부터, Off : 1화부터') }}
|
||||||
|
{{ macros.setting_checkbox('ohli24_auto_make_folder', '제목 폴더 생성', value=arg['ohli24_auto_make_folder'], desc='제목으로 폴더를 생성하고 폴더 안에 다운로드합니다.') }}
|
||||||
|
<div id="ohli24_auto_make_folder_div" class="collapse">
|
||||||
|
{{ macros.setting_input_text('ohli24_finished_insert', '완결 표시', col='3', value=arg['ohli24_finished_insert'], desc=['완결된 컨텐츠 폴더명 앞에 넣을 문구입니다.']) }}
|
||||||
|
{{ macros.setting_checkbox('ohli24_auto_make_season_folder', '시즌 폴더 생성', value=arg['ohli24_auto_make_season_folder'], desc=['On : Season 번호 폴더를 만듭니다.']) }}
|
||||||
|
</div>
|
||||||
|
{# {{ macros.setting_checkbox('ani365_incompleted_auto_enqueue', '자동으로 다시 받기', value=arg['ani365_incompleted_auto_enqueue'], desc=['On : 플러그인 로딩시 미완료인 항목은 자동으로 다시 받습니다.']) }}#}
|
||||||
|
{{ macros.setting_checkbox('ohli24_uncompleted_auto_enqueue', '자동으로 다시 받기', value=arg['ohli24_uncompleted_auto_enqueue'], desc=['On : 플러그인 로딩시 미완료인 항목은 자동으로 다시 받습니다.']) }}
|
||||||
|
{{ macros.m_tab_content_end() }}
|
||||||
|
|
||||||
|
{{ macros.m_tab_content_start('auto', false) }}
|
||||||
|
{{ macros.setting_global_scheduler_sub_button(arg['scheduler'], arg['is_running']) }}
|
||||||
|
{{ macros.setting_input_text('ohli24_interval', '스케쥴링 실행 정보', value=arg['ohli24_interval'], col='3', desc=['Inverval(minute 단위)이나 Cron 설정']) }}
|
||||||
|
{{ macros.setting_checkbox('ohli24_auto_start', '시작시 자동실행', value=arg['ohli24_auto_start'], desc='On : 시작시 자동으로 스케쥴러에 등록됩니다.') }}
|
||||||
|
{{ macros.setting_input_textarea('ohli24_auto_code_list', '자동 다운로드할 작품 코드', desc=['all 입력시 모두 받기', '구분자 | 또는 엔터'], value=arg['ohli24_auto_code_list'], row='10') }}
|
||||||
|
{{ macros.setting_checkbox('ohli24_auto_mode_all', '에피소드 모두 받기', value=arg['ohli24_auto_mode_all'], desc=['On : 이전 에피소드를 모두 받습니다.', 'Off : 최신 에피소드만 받습니다.']) }}
|
||||||
|
{{ macros.m_tab_content_end() }}
|
||||||
|
|
||||||
|
{{ macros.m_tab_content_start('action', false) }}
|
||||||
|
{{ macros.setting_button([['global_one_execute_sub_btn', '1회 실행']], left='1회 실행' ) }}
|
||||||
|
{{ macros.setting_button([['global_reset_db_sub_btn', 'DB 초기화']], left='DB정리' ) }}
|
||||||
|
{{ macros.m_tab_content_end() }}
|
||||||
|
|
||||||
|
</div><!--tab-content-->
|
||||||
|
</form>
|
||||||
|
</div> <!--전체-->
|
||||||
|
|
||||||
|
<script type="text/javascript">
|
||||||
|
var package_name = "{{arg['package_name'] }}";
|
||||||
|
var sub = "{{arg['sub'] }}";
|
||||||
|
var current_data = null;
|
||||||
|
|
||||||
|
|
||||||
|
$(document).ready(function(){
|
||||||
|
use_collapse('ohli24_auto_make_folder');
|
||||||
|
});
|
||||||
|
|
||||||
|
$('#ani365_auto_make_folder').change(function() {
|
||||||
|
use_collapse('ohli24_auto_make_folder');
|
||||||
|
});
|
||||||
|
|
||||||
|
|
||||||
|
$("body").on('click', '#go_btn', function(e){
|
||||||
|
e.preventDefault();
|
||||||
|
let url = document.getElementById("ohli24_url").value
|
||||||
|
window.open(url, "_blank");
|
||||||
|
});
|
||||||
|
|
||||||
|
</script>
|
||||||
|
{% endblock %}
|
||||||
Reference in New Issue
Block a user