2022-10-29 17:21:14 +09:00
{% extends "base.html" %}
{% block content %}
2025-12-29 23:08:08 +09:00
< div id = "ohli24_setting_wrapper" class = "container-fluid mt-4 mx-auto" style = "max-width: 100%;" >
< div class = "glass-card p-4" >
< div class = "d-flex justify-content-between align-items-center mb-4" >
< h2 class = "text-white font-weight-bold" >< i class = "bi bi-gear-fill mr-2" ></ i > Ohli24 설정</ h2 >
{{ macros.m_button_group([['globalSettingSaveBtn', '설정 저장']])}}
2022-10-29 17:21:14 +09:00
</ div >
2025-12-29 23:08:08 +09:00
{{ macros.m_row_start('5') }}
{{ macros.m_row_end() }}
< nav >
{{ macros.m_tab_head_start() }}
{{ macros.m_tab_head('normal', '일반', true) }}
{{ macros.m_tab_head('auto', '홈화면 자동', false) }}
{{ macros.m_tab_head('action', '기타', false) }}
{{ macros.m_tab_head_end() }}
</ nav >
< form id = "setting" class = "mt-4" >
< 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_select('ohli24_download_method', '다운로드 방법', [['ffmpeg', 'ffmpeg (기본)'], ['ytdlp', 'yt-dlp']], value=arg.get('ohli24_download_method', 'ffmpeg'), desc='m3u8 다운로드에 사용할 도구를 선택합니다.') }}
{{ 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 pl-4 border-left ml-3" style = "border-color: rgba(255,255,255,0.1) !important;" >
{{ 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('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.global_setting_scheduler_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=['구분자 | 또는 엔터'], 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) }}
< div class = "p-3" style = "background: rgba(0,0,0,0.2); border-radius: 8px;" >
< h5 class = "text-info mb-3" >< i class = "bi bi-lightning-charge-fill mr-2" ></ i > Actions</ h5 >
{{ macros.setting_buttons([['global_one_execute_btn', '1회 실행']], left='1회 실행' ) }}
< hr style = "border-color: rgba(255,255,255,0.1);" >
{{ macros.setting_buttons([['global_reset_db_btn', 'DB 초기화']], left='DB정리' ) }}
</ div >
{{ macros.m_tab_content_end() }}
</ div > <!--tab-content-->
</ form >
</ div >
2022-10-29 17:21:14 +09:00
</ div > <!--전체-->
2025-12-29 23:08:08 +09:00
< link rel = "stylesheet" href = "https://cdn.jsdelivr.net/npm/bootstrap-icons@1.7.2/font/bootstrap-icons.css" >
< style >
/* Navigation Menu Override (Top Sub-menu) */
ul . nav . nav-pills . bg-light {
background-color : rgba ( 30 , 41 , 59 , 0.6 ) !important ;
backdrop-filter : blur ( 10 px );
border : 1 px solid rgba ( 255 , 255 , 255 , 0.08 );
border-radius : 50 rem !important ; /* Pill shape container */
padding : 6 px !important ;
box-shadow : 0 4 px 20 px rgba ( 0 , 0 , 0 , 0.2 ) !important ;
display : inline-flex !important ; /* Fit content */
flex-wrap : wrap ; /* allow wrap on small screens */
justify-content : center ;
width : auto !important ; /* Prevent full width */
margin-bottom : 20 px ;
}
ul . nav . nav-pills . nav-item {
margin : 0 2 px ;
}
ul . nav . nav-pills . nav-link {
border-radius : 50 rem !important ;
padding : 8 px 20 px !important ;
color : #94a3b8 !important ; /* Muted text */
font-weight : 600 ;
transition : all 0.3 s ease ;
}
ul . nav . nav-pills . nav-link : hover {
background-color : rgba ( 255 , 255 , 255 , 0.1 );
color : #fff !important ;
transform : translateY ( -1 px );
}
ul . nav . nav-pills . nav-link . active {
background : linear-gradient ( 135 deg , #3b82f6 0 % , #2563eb 100 % ) !important ;
color : #fff !important ;
box-shadow : 0 4 px 12 px rgba ( 37 , 99 , 235 , 0.4 );
}
/* Global Background */
body {
font-family : 'NamumSquareNeo' , system-ui , - apple-system , Segoe UI , Roboto , Helvetica Neue , Noto Sans , Liberation Sans , Arial , sans-serif ;
background-image : linear-gradient ( 135 deg , #1f2937 , #111827 , #0f172a );
color : #e2e8f0 ;
min-height : 100 vh ;
}
/* Glass Card Container */
. glass-card {
background : rgba ( 30 , 41 , 59 , 0.7 );
backdrop-filter : blur ( 12 px );
border : 1 px solid rgba ( 255 , 255 , 255 , 0.08 );
border-radius : 16 px ;
box-shadow : 0 4 px 6 px -1 px rgba ( 0 , 0 , 0 , 0.1 ), 0 2 px 4 px -1 px rgba ( 0 , 0 , 0 , 0.06 );
}
/* Tabs Styling */
. nav-tabs {
border-bottom : 2 px solid rgba ( 255 , 255 , 255 , 0.1 );
}
. nav-tabs . nav-link {
color : #94a3b8 ;
border : none ;
font-weight : 600 ;
padding : 10 px 20 px ;
border-radius : 8 px 8 px 0 0 ;
transition : all 0.2 s ;
}
. nav-tabs . nav-link : hover {
color : #e2e8f0 ;
background : rgba ( 255 , 255 , 255 , 0.05 );
}
. nav-tabs . nav-link . active {
color : #60a5fa !important ;
background : rgba ( 30 , 41 , 59 , 0.8 ) !important ;
border-bottom : 2 px solid #60a5fa !important ;
}
/* Form Controls */
. form-control , . custom-select , textarea {
background-color : rgba ( 0 , 0 , 0 , 0.3 ) !important ;
border : 1 px solid rgba ( 255 , 255 , 255 , 0.1 ) !important ;
color : #f1f5f9 !important ;
border-radius : 8 px !important ;
}
. form-control : focus , . custom-select : focus , textarea : focus {
background-color : rgba ( 0 , 0 , 0 , 0.5 ) !important ;
border-color : #3b82f6 !important ;
box-shadow : 0 0 0 2 px rgba ( 59 , 130 , 246 , 0.25 ) !important ;
}
/* Labels & Text */
label , . col-form-label {
font-weight : 600 ;
color : #cbd5e1 ;
}
. text-muted {
color : #94a3b8 !important ;
}
/* Buttons */
. btn {
border : none ;
border-radius : 8 px ;
font-weight : 600 ;
transition : all 0.3 s ease ;
padding : 8 px 16 px ;
text-transform : uppercase ;
letter-spacing : 0.5 px ;
}
. btn-primary , # globalSettingSaveBtn {
background : linear-gradient ( 135 deg , #3b82f6 0 % , #2563eb 100 % );
color : white ;
box-shadow : 0 4 px 15 px rgba ( 37 , 99 , 235 , 0.4 );
}
. btn-primary : hover , # globalSettingSaveBtn : hover {
background : linear-gradient ( 135 deg , #60a5fa 0 % , #3b82f6 100 % );
transform : translateY ( -2 px );
box-shadow : 0 6 px 20 px rgba ( 37 , 99 , 235 , 0.6 );
}
/* GO Button specific (Input Group) */
# go_btn {
background : linear-gradient ( 135 deg , #10b981 0 % , #059669 100 % );
color : white ;
box-shadow : 0 4 px 15 px rgba ( 16 , 185 , 129 , 0.4 );
border-radius : 0 8 px 8 px 0 !important ; /* Fix for input group */
margin-left : -1 px ;
}
# go_btn : hover {
background : linear-gradient ( 135 deg , #34d399 0 % , #10b981 100 % );
transform : translateY ( -1 px );
box-shadow : 0 6 px 20 px rgba ( 16 , 185 , 129 , 0.6 );
z-index : 5 ;
}
. btn-outline-primary {
color : #60a5fa ;
border : 1 px solid #60a5fa ;
background : transparent ;
}
. btn-outline-primary : hover {
background : rgba ( 96 , 165 , 250 , 0.1 );
color : #93c5fd ;
box-shadow : 0 0 15 px rgba ( 96 , 165 , 250 , 0.3 );
}
. btn : active {
transform : translateY ( 0 ) !important ;
box-shadow : inset 0 2 px 4 px rgba ( 0 , 0 , 0 , 0.2 ) !important ;
}
/* Custom Checkbox/Switch Override (if Bootstrap switch is used) */
. custom-control-label :: before {
background-color : rgba ( 0 , 0 , 0 , 0.3 );
border-color : rgba ( 255 , 255 , 255 , 0.2 );
}
. custom-control-input : checked ~ . custom-control-label :: before {
background-color : #3b82f6 ;
border-color : #3b82f6 ;
}
/* Collapse Borders */
. border-left {
border-left : 3 px solid rgba ( 255 , 255 , 255 , 0.1 ) !important ;
}
</ style >
2022-10-29 17:21:14 +09:00
< script type = "text/javascript" >
var package_name = "{{arg['package_name'] }}" ;
var sub = "{{arg['sub'] }}" ;
var current_data = null ;
$ ( document ). ready ( function (){
2025-12-29 23:08:08 +09:00
// Width Fix
$ ( "#main_container" ). removeClass ( "container" ). addClass ( "container-fluid" );
2022-10-29 17:21:14 +09:00
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" );
});
2025-12-29 20:13:05 +09:00
// 1회 실행 버튼
$ ( "body" ). on ( 'click' , '#global_one_execute_btn' , function ( e ){
e . preventDefault ();
$ . ajax ({
url : '/' + package_name + '/ajax/' + sub + '/immediately_execute' ,
type : "POST" ,
cache : false ,
dataType : "json" ,
success : function ( ret ) {
if ( ret . ret == 'success' ) {
2025-12-29 23:08:08 +09:00
$ . notify ( '스케줄러 1회 실행을 시작합니다.' , { type : 'success' });
2025-12-29 20:13:05 +09:00
} else {
2025-12-29 23:08:08 +09:00
$ . notify ( ret . msg || '실행 실패' , { type : 'danger' });
2025-12-29 20:13:05 +09:00
}
},
error : function ( xhr , status , error ) {
2025-12-29 23:08:08 +09:00
$ . notify ( '에러: ' + error , { type : 'danger' });
2025-12-29 20:13:05 +09:00
}
});
});
// DB 초기화 버튼
$ ( "body" ). on ( 'click' , '#global_reset_db_btn' , function ( e ){
e . preventDefault ();
if ( ! confirm ( '정말 DB를 초기화하시겠습니까?' )) return ;
$ . ajax ({
url : '/' + package_name + '/ajax/' + sub + '/reset_db' ,
type : "POST" ,
cache : false ,
dataType : "json" ,
success : function ( ret ) {
if ( ret . ret == 'success' ) {
2025-12-29 23:08:08 +09:00
$ . notify ( 'DB가 초기화되었습니다.' , { type : 'success' });
2025-12-29 20:13:05 +09:00
} else {
2025-12-29 23:08:08 +09:00
$ . notify ( ret . msg || '초기화 실패' , { type : 'danger' });
2025-12-29 20:13:05 +09:00
}
},
error : function ( xhr , status , error ) {
2025-12-29 23:08:08 +09:00
$ . notify ( '에러: ' + error , { type : 'danger' });
2025-12-29 20:13:05 +09:00
}
});
});
2022-10-29 17:21:14 +09:00
</ script >
{% endblock %}