nas-tools/web/templates/site/brushtask.html
2023-02-13 12:52:00 +08:00

1110 lines
51 KiB
HTML
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

{% import 'macro/svg.html' as SVG %}
{% import 'macro/oops.html' as OOPS %}
<div class="container-xl">
<!-- Page title -->
<div class="page-header d-print-none">
<div class="row align-items-center">
<div class="col">
<h2 class="page-title">
刷流任务
</h2>
</div>
<div class="col-auto ms-auto d-print-none">
<div class="btn-list">
<a href="javascript:show_brushtask_modal()" class="btn btn-primary d-none d-sm-inline-block">
{{ SVG.plus() }}
新建任务
</a>
<a href="javascript:show_brushtask_modal()" class="btn btn-primary d-sm-none btn-icon">
{{ SVG.plus() }}
</a>
<a href="javascript:navmenu('userdownloader')" class="btn d-none d-sm-inline-block" title="自定义下载器">
{{ SVG.apps() }}
自定义下载器
</a>
<a href="javascript:navmenu('userdownloader')" class="btn d-sm-none btn-icon" title="自定义下载器">
{{ SVG.apps() }}
</a>
</div>
</div>
</div>
</div>
</div>
{% if Count > 0 %}
<div class="page-body">
<div class="container-xl">
<div class="row row-cards">
{% for Task in Tasks %}
<div class="card">
<div class="card-header">
<a href="javascript:show_brushtask_detail('{{ Task.id }}')"
title="展开/折叠" data-bs-toggle="tooltip">
<div>
{% if Task.state == 'Y' %}
<span class="badge bg-green"></span>
{% else %}
<span class="badge bg-red"></span>
{% endif %}
</div>
</a>
<a href="javascript:show_brushtask_detail('{{ Task.id }}')" style="text-decoration-line: none; color: unset"
title="展开/折叠" data-bs-toggle="tooltip">
<div class="ms-3">
<h3 class="card-title">{{ Task.name }}</h3>
</div>
</a>
<div class="ms-2 d-none d-sm-block">
<a href="javascript:run_brushtask_now('{{ Task.id }}')" class="btn-icon" title="立即运行任务"
data-bs-toggle="tooltip">
{{ SVG.bolt('icon-filled') }}
</a>
</div>
<div class="text-muted ms-3" id="detail_size_{{ Task.id }}"
style="display: {% if Count > 2 %}block{% else %}none{% endif %};">↑{{ Task.upload_size }} ↓{{ Task.download_size }}</div>
<a href="#" class="link-secondary ms-auto d-sm-none" data-bs-toggle="dropdown" aria-expanded="false">
{{ SVG.dots() }}
</a>
<div class="dropdown-menu dropdown-menu-end">
<button class="dropdown-item text-info" onclick="run_brushtask_now('{{ Task.id }}')">
立即运行
</button>
<button class="dropdown-item" onclick="show_brushtask_torrents_modal('{{ Task.id }}')">
预览
</button>
<button class="dropdown-item" onclick="edit_brushtask_modal('{{ Task.id }}')">
编辑
</button>
<button class="dropdown-item text-danger" onclick="del_brushtask_modal('{{ Task.id }}', '{{ Task.name }}')">
删除
</button>
</div>
<div class="card-actions btn-actions d-none d-sm-block">
<a href="javascript:show_brushtask_detail('{{ Task.id }}')" class="btn-action"
title="展开/折叠" data-bs-toggle="tooltip">
{{ SVG.menu_2() }}
</a>
<a href="javascript:show_brushtask_torrents_modal('{{ Task.id }}')" class="btn-action"
title="查看种子明细" data-bs-toggle="tooltip">
{{ SVG.eye() }}
</a>
<a href="javascript:edit_brushtask_modal('{{ Task.id }}')" class="btn-action"
title="编辑任务" data-bs-toggle="tooltip">
{{ SVG.edit() }}
</a>
<a href="javascript:del_brushtask_modal('{{ Task.id }}', '{{ Task.name }}')" class="btn-action"
title="删除任务" data-bs-toggle="tooltip">
{{ SVG.x() }}
</a>
</div>
</div>
<div class="card-body" id="detail_{{ Task.id }}"
style="display: {% if Count > 2 %}none{% else %}block{% endif %};">
<div class="datagrid">
<div class="datagrid-item">
<div class="datagrid-title">站点</div>
<div class="datagrid-content">
<div class="d-flex align-items-center">
<span class="avatar avatar-sm rounded me-2 siteicon-{{ Task.site|hash }}" width="24" height="24" alt="" style="cursor:pointer"></span>
<h3>{{ Task.site }}</h3>
</div>
</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">促销</div>
<div class="datagrid-content">
{% if Task.free %}<span class="badge me-2 bg-green">{{ Task.free }}</span>
{% else %}
<span class="badge me-2 bg-orange">全部</span>
{% endif %}
</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">选种规则</div>
<div class="datagrid-content">
{% if Task.rss_rule|brush_rule_string|safe %}
{{ Task.rss_rule|brush_rule_string|safe }}
{% else %}
无限制
{% endif %}
</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">删种规则</div>
<div class="datagrid-content">
{% if Task.remove_rule|brush_rule_string|safe %}
{{ Task.remove_rule|brush_rule_string|safe }}
{% else %}
未启用
{% endif %}
</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">保种体积</div>
<div class="datagrid-content">
{% if Task.seed_size %}{{ Task.seed_size }} GB{% else %}无限制{% endif %}</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">刷新间隔</div>
<div class="datagrid-content">{{ Task.interval }} 分钟</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">下载器</div>
<div class="datagrid-content">{{ Task.downloader_name or "" }}</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">消息推送</div>
<div class="datagrid-content">
{% if Task.sendmessage == 'Y' %}
<span class="status status-green"></span>
{% else %}
<span class="status status-red"></span>
{% endif %}
</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">强制做种</div>
<div class="datagrid-content">
{% if Task.forceupload == 'Y' %}
<span class="status status-green"></span>
{% else %}
<span class="status status-red"></span>
{% endif %}
</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">转移到媒体库</div>
<div class="datagrid-content">
{% if Task.transfer == 'Y' %}
<span class="status status-green"></span>
{% else %}
<span class="status status-red"></span>
{% endif %}
</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">已下载种子数</div>
<div class="datagrid-content">{{ Task.download_count }}</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">已删除种子数</div>
<div class="datagrid-content">{{ Task.remove_count }}</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">下载量</div>
<div class="datagrid-content">{{ Task.download_size }}</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">上传量</div>
<div class="datagrid-content">{{ Task.upload_size }}</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">最后更新时间</div>
<div class="datagrid-content">
{{ Task.lst_mod_date }}
</div>
</div>
<div class="datagrid-item">
<div class="datagrid-title">状态</div>
<div class="datagrid-content">
{% if Task.state == 'Y' %}
<span class="badge me-2 bg-green">正在运行</span>
{% else %}
<span class="badge me-2 bg-red">已停用</span>
{% endif %}
</div>
</div>
</div>
</div>
</div>
{% endfor %}
</div>
</div>
</div>
{% else %}
{{ OOPS.nodatafound('没有任务', '当前没有正在运行的刷流任务。') }}
{% endif %}
<div class="modal modal-blur fade" id="modal-brushtask" tabindex="-1" role="dialog" aria-hidden="true"
data-bs-backdrop="static" data-bs-keyboard="false">
<div class="modal-dialog modal-lg modal-dialog-centered modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title" id="brushtask_modal_title">新建任务</h5>
<input type="hidden" id="brushtask_id">
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="modal-body">
<div class="row">
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label required">任务名称</label>
<input type="text" id="brushtask_name" class="form-control">
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label required">站点</label>
<select class="form-select" id="brushtask_site">
<option value="" selected>请选择</option>
{% for site in Sites %}
<option value="{{ site.id }}">{{ site.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label required">刷新间隔(分钟) <span class="form-help"
title="检查站点RSS更新的间隔时间为了减小站点压力建议不小于5分钟"
data-bs-toggle="tooltip">?</span></label>
<input type="text" id="brushtask_interval" class="form-control" placeholder="10">
</div>
</div>
</div>
<div class="row">
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label required">下载器 <span class="form-help"
title="选择刷流任务使用的下载器,在自定义下载器中添加,如需识别转移到媒体库,需与正在使用的下载器相同"
data-bs-toggle="tooltip">?</span></label>
<select class="form-select" id="brushtask_downloader">
<option value="" selected>请选择</option>
{% for downloader in Downloaders %}
<option value="{{ downloader.id }}">{{ downloader.name }}</option>
{% endfor %}
</select>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">保种体积(GB) <span class="form-help"
title="该任务所有下载任务的保种体积超过设定值时不再新增下载"
data-bs-toggle="tooltip">?</span></label>
<input type="text" id="brushtask_totalsize" class="form-control" placeholder="">
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label required">状态</label>
<select class="form-select" id="brushtask_state">
<option value="Y">正常</option>
<option value="N">暂停</option>
</select>
</div>
</div>
</div>
<div class="row">
<div class="col-lg-4">
<div class="mb-3">
<label class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="brushtask_sendmessage">
<span class="form-check-label">消息推送 <span class="form-help" title="开启后会将当前任务的情况进行推送"
data-bs-toggle="tooltip">?</span></span>
</label>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="brushtask_forceupload">
<span class="form-check-label">强制做种 <span class="form-help"
title="开启后当前任务的新增下载将设置为强制下载/做种状态"
data-bs-toggle="tooltip">?</span></span>
</label>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-check form-switch">
<input class="form-check-input" type="checkbox" id="brushtask_transfer">
<span class="form-check-label">转移到媒体库 <span class="form-help"
title="开启后刷流的下载也会进行转移并识别重命名到媒体库"
data-bs-toggle="tooltip">?</span></span>
</label>
</div>
</div>
</div>
<div class="hr-text hr-text-center hr-text-spaceless mt-1 mb-3">选种规则</div>
<div class="row">
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">促销 <span class="form-help"
title="选全部即不过滤会下载到非促销的种子免费包括2X免费"
data-bs-toggle="tooltip">?</span></label>
<select class="form-select" id="brushtask_free">
<option value="" selected>全部</option>
<option value="FREE">免费</option>
<option value="2XFREE">2X免费</option>
</select>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">Hit&Run</label>
<select class="form-select" id="brushtask_hr">
<option value="" selected>全部</option>
<option value="HR">排除HR</option>
</select>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">同时下载任务数 <span class="form-help"
title="下载器中正在下载的任务数超过此值时不再添加下载"
data-bs-toggle="tooltip">?</span></label>
<input type="text" id="brushtask_dlcount" class="form-control" placeholder="10">
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">包含 <span class="form-help"
title="种子名称或副标题中包括对应关键字或者匹配正则式时才会下载"
data-bs-toggle="tooltip">?</span></label>
<input type="text" id="brushtask_include" class="form-control" placeholder="关键字或正则表达式">
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">排除 <span class="form-help"
title="种子名称或副标题中包括对应关键字或者匹配正则式时不会下载"
data-bs-toggle="tooltip">?</span></label>
<input type="text" id="brushtask_exclude" class="form-control" placeholder="关键字或正则表达式">
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">上传限速KB/S <span class="form-help" title="限制添加下载后的上传速度"
data-bs-toggle="tooltip">?</span></label>
<input type="text" id="brushtask_upspeed" class="form-control" placeholder="">
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">下载限速KB/S <span class="form-help" title="限制添加下载后的下载速度"
data-bs-toggle="tooltip">?</span></label>
<input type="text" id="brushtask_downspeed" class="form-control" placeholder="">
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">种子大小(GB) <span class="form-help"
title="设置大小范围的种子才会下载,介于时使用英文逗号,分隔两个值"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_torrent_size_btn">
全部
</button>
<input type="hidden" id="brushtask_torrent_size_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_torrent_size_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_torrent_size',$(this))">
全部
</a>
<a class="dropdown-item" id="brushtask_torrent_size_do_gt" href="javascript:void(0)"
onclick="filter_item_change('gt', 'brushtask_torrent_size',$(this))">
大于
</a>
<a class="dropdown-item" id="brushtask_torrent_size_do_lt" href="javascript:void(0)"
onclick="filter_item_change('lt', 'brushtask_torrent_size',$(this))">
小于
</a>
<a class="dropdown-item" id="brushtask_torrent_size_do_bw" href="javascript:void(0)"
onclick="filter_item_change('bw', 'brushtask_torrent_size',$(this))">
介于
</a>
</div>
<input type="text" class="form-control" id="brushtask_torrent_size" readonly>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">做种人数限制 <span class="form-help"
title="种子当前做种人数限制,介于时使用英文逗号,分隔两个值,比较值时均包括边界值本身"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_peercount_btn">
全部
</button>
<input type="hidden" id="brushtask_peercount_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_peercount_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_peercount',$(this))">
全部
</a>
<a class="dropdown-item" id="brushtask_peercount_do_gt" href="javascript:void(0)"
onclick="filter_item_change('gt', 'brushtask_peercount',$(this))">
大于
</a>
<a class="dropdown-item" id="brushtask_peercount_do_lt" href="javascript:void(0)"
onclick="filter_item_change('lt', 'brushtask_peercount',$(this))">
小于
</a>
<a class="dropdown-item" id="brushtask_peercount_do_bw" href="javascript:void(0)"
onclick="filter_item_change('bw', 'brushtask_peercount',$(this))">
介于
</a>
</div>
<input type="text" id="brushtask_peercount" class="form-control" placeholder="" readonly/>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">发布时间(小时) <span class="form-help"
title="种子的发布时间在选定范围内时才会下载"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_pubdate_btn">
全部
</button>
<input type="hidden" id="brushtask_pubdate_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_pubdate_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_pubdate',$(this))">
全部
</a>
<a class="dropdown-item" id="brushtask_pubdate_do_lt" href="javascript:void(0)"
onclick="filter_item_change('lt', 'brushtask_pubdate',$(this))">
小于
</a>
</div>
<input type="text" id="brushtask_pubdate" class="form-control" placeholder="" readonly/>
</div>
</div>
</div>
</div>
<div class="hr-text hr-text-center hr-text-spaceless mt-1 mb-3">删种规则</div>
<div class="row">
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">做种时间(小时) <span class="form-help" title="做种超过设定时间时会删除下载任务"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_seedtime_btn">
忽略
</button>
<input type="hidden" id="brushtask_seedtime_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_seedtime_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_seedtime',$(this))">
忽略
</a>
<a class="dropdown-item" id="brushtask_seedtime_do_gt" href="javascript:void(0)"
onclick="filter_item_change('gt', 'brushtask_seedtime',$(this))">
大于
</a>
</div>
<input type="text" class="form-control" id="brushtask_seedtime" readonly>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">分享率 <span class="form-help" title="分享率超过设定值时会删除下载任务"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_seedratio_btn">
忽略
</button>
<input type="hidden" id="brushtask_seedratio_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_seedratio_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_seedratio',$(this))">
忽略
</a>
<a class="dropdown-item" id="brushtask_seedratio_do_gt" href="javascript:void(0)"
onclick="filter_item_change('gt', 'brushtask_seedratio',$(this))">
大于
</a>
</div>
<input type="text" class="form-control" id="brushtask_seedratio" readonly>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">上传量(GB) <span class="form-help" title="上传量超过设定值时会删除下载任务"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_seedsize_btn">
忽略
</button>
<input type="hidden" id="brushtask_seedsize_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_seedsize_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_seedsize',$(this))">
忽略
</a>
<a class="dropdown-item" id="brushtask_seedsize_do_gt" href="javascript:void(0)"
onclick="filter_item_change('gt', 'brushtask_seedsize',$(this))">
大于
</a>
</div>
<input type="text" class="form-control" id="brushtask_seedsize" readonly>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">下载耗时(小时) <span class="form-help"
title="下载耗时超过设定值仍然未下载完成时会删除下载任务"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_dltime_btn">
忽略
</button>
<input type="hidden" id="brushtask_dltime_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_dltime_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_dltime',$(this))">
忽略
</a>
<a class="dropdown-item" id="brushtask_dltime_do_gt" href="javascript:void(0)"
onclick="filter_item_change('gt', 'brushtask_dltime',$(this))">
大于
</a>
</div>
<input type="text" class="form-control" id="brushtask_dltime" readonly>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">平均上传速度(KB/S) <span class="form-help"
title="平均上传速度低于设定值时删除下载任务检查周期为10分钟"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_avg_upspeed_btn">
忽略
</button>
<input type="hidden" id="brushtask_avg_upspeed_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_avg_upspeed_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_avg_upspeed',$(this))">
忽略
</a>
<a class="dropdown-item" id="brushtask_avg_upspeed_do_lt" href="javascript:void(0)"
onclick="filter_item_change('lt', 'brushtask_avg_upspeed',$(this))">
小于
</a>
</div>
<input type="text" class="form-control" id="brushtask_avg_upspeed" readonly>
</div>
</div>
</div>
<div class="col-lg-4">
<div class="mb-3">
<label class="form-label">未活动时间(小时) <span class="form-help" title="超过设定时间未活动时会删除下载任务"
data-bs-toggle="tooltip">?</span></label>
<div class="input-group">
<button type="button" class="btn dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true"
aria-expanded="false" id="brushtask_iatime_btn">
忽略
</button>
<input type="hidden" id="brushtask_iatime_do">
<div class="dropdown-menu" style="">
<a class="dropdown-item" id="brushtask_iatime_do_" href="javascript:void(0)"
onclick="filter_item_change('', 'brushtask_iatime',$(this))">
忽略
</a>
<a class="dropdown-item" id="brushtask_iatime_do_gt" href="javascript:void(0)"
onclick="filter_item_change('gt', 'brushtask_iatime',$(this))">
大于
</a>
</div>
<input type="text" class="form-control" id="brushtask_iatime" readonly>
</div>
</div>
</div>
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-link me-auto" data-bs-dismiss="modal">取消</button>
<a href="javascript:add_brushtask_job()" id="brushtask_add_btn" class="btn btn-primary">确定</a>
</div>
</div>
</div>
</div>
<div class="modal modal-blur fade" id="modal-brushtask-torrents" tabindex="-1" role="dialog" aria-hidden="true">
<div class="modal-dialog modal-xl modal-dialog-centered modal-dialog-scrollable" role="document">
<div class="modal-content">
<div class="modal-header">
<h5 class="modal-title">刷流种子明细</h5>
<button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button>
</div>
<div class="table-responsive" style="overflow-y: auto; max-height: 35em;">
<table id="table-brushtask-torrents" class="table table-vcenter card-table table-hover table-striped">
</table>
</div>
</div>
</div>
</div>
<script type="text/javascript">
// 显示新增刷流任务
function show_brushtask_modal() {
if (!{{ Sites|length }}) {
show_fail_modal("没有可用于刷流的站点,请先维护站点信息!", function () {
navmenu('site');
});
return;
}
$("#brushtask_modal_title").text("新建任务");
$("#brushtask_id").val("");
$("#modal-brushtask").modal('show');
}
// 折叠任务详情
function show_brushtask_detail(taskid) {
$(`#detail_${taskid}`).slideToggle();
$(`#detail_size_${taskid}`).slideToggle();
}
// 显示编辑刷流任务
function edit_brushtask_modal(brushid) {
$("#brushtask_id").val(brushid);
ajax_post("brushtask_detail", {"id": brushid}, function (ret) {
if (ret.code == 0) {
//赋值
$("#brushtask_modal_title").text("编辑任务");
$("#brushtask_name").val(ret.task.name);
$("#brushtask_site").val(ret.task.site);
brushtask_site_change(ret.task.site, ret.task.free, ret.task.rss_rule.hr);
$("#brushtask_interval").val(ret.task.interval);
$("#brushtask_downloader").val(ret.task.downloader);
$("#brushtask_totalsize").val(ret.task.seed_size);
$("#brushtask_state").val(ret.task.state);
if (ret.task.transfer == "Y") {
$("#brushtask_transfer").prop("checked", true);
} else {
$("#brushtask_transfer").prop("checked", false);
}
if (ret.task.sendmessage == "Y") {
$("#brushtask_sendmessage").prop("checked", true);
} else {
$("#brushtask_sendmessage").prop("checked", false);
}
if (ret.task.forceupload == "Y") {
$("#brushtask_forceupload").prop("checked", true);
} else {
$("#brushtask_forceupload").prop("checked", false);
}
$("#brushtask_dlcount").val(ret.task.rss_rule.dlcount)
$("#brushtask_peercount").val(ret.task.rss_rule.peercount)
$("#brushtask_include").val(ret.task.rss_rule.include);
$("#brushtask_exclude").val(ret.task.rss_rule.exclude);
//种子大小
if (ret.task.rss_rule.size) {
let size_str = ret.task.rss_rule.size.split('#');
filter_item_change(size_str[0], 'brushtask_torrent_size', $('#brushtask_torrent_size_do_' + size_str[0]), size_str[1])
}
//种子大小
if (ret.task.rss_rule.peercount) {
let peercount_str = ret.task.rss_rule.peercount;
if (peercount_str === '') {
peercount_str = '#';
} else if (peercount_str.indexOf('#') === -1) {
peercount_str = 'lt#' + peercount_str;
}
let peercount_strs = peercount_str.split('#');
filter_item_change(peercount_strs[0], 'brushtask_peercount', $('#brushtask_peercount_do_' + peercount_strs[0]), peercount_strs[1])
}
//做种时间
if (ret.task.remove_rule.time) {
let seedtime_str = ret.task.remove_rule.time.split('#');
filter_item_change(seedtime_str[0], 'brushtask_seedtime', $('#brushtask_seedtime_do_' + seedtime_str[0]), seedtime_str[1])
}
//做种大小
if (ret.task.remove_rule.uploadsize) {
let seedsize_str = ret.task.remove_rule.uploadsize.split('#');
filter_item_change(seedsize_str[0], 'brushtask_seedsize', $('#brushtask_seedsize_do_' + seedsize_str[0]), seedsize_str[1])
}
//分享率
if (ret.task.remove_rule.ratio) {
let seedratio_str = ret.task.remove_rule.ratio.split('#');
filter_item_change(seedratio_str[0], 'brushtask_seedratio', $('#brushtask_seedratio_do_' + seedratio_str[0]), seedratio_str[1])
}
//下载耗时
if (ret.task.remove_rule.dltime) {
let dltime_str = ret.task.remove_rule.dltime.split('#');
filter_item_change(dltime_str[0], 'brushtask_dltime', $('#brushtask_dltime_do_' + dltime_str[0]), dltime_str[1])
}
//平均上传速度
if (ret.task.remove_rule.avg_upspeed) {
let avg_upspeed_str = ret.task.remove_rule.avg_upspeed.split('#');
filter_item_change(avg_upspeed_str[0], 'brushtask_avg_upspeed', $('#brushtask_avg_upspeed_do_' + avg_upspeed_str[0]), avg_upspeed_str[1])
}
//未活动时间
if (ret.task.remove_rule.iatime) {
let iatime_str = ret.task.remove_rule.iatime.split('#');
filter_item_change(iatime_str[0], 'brushtask_iatime', $('#brushtask_iatime_do_' + iatime_str[0]), iatime_str[1])
}
//发布日期
if (ret.task.rss_rule.pubdate) {
let pubdate_str = ret.task.rss_rule.pubdate.split('#');
filter_item_change(pubdate_str[0], 'brushtask_pubdate', $('#brushtask_pubdate_do_' + pubdate_str[0]), pubdate_str[1])
}
//上传限速
$("#brushtask_upspeed").val(ret.task.rss_rule.upspeed);
//下载限速
$("#brushtask_downspeed").val(ret.task.rss_rule.downspeed);
//弹窗
$("#modal-brushtask").modal('show');
}
});
}
// 显示删除刷流任务
function del_brushtask_modal(brushid, name) {
show_confirm_modal("删除刷流任务 " + name + " ", function () {
hide_confirm_modal();
ajax_post("del_brushtask", {"id": brushid}, function (ret) {
window_history_refresh();
});
});
}
// 选择了站点
function brushtask_site_change(site_id, free_value, hr_value) {
if (!site_id) {
return;
}
ajax_post("get_site", {"id": site_id}, function (ret) {
$("#brushtask_free").empty().append('<option value="" selected>全部</option>');
if (ret.site_free) {
$("#brushtask_free").append('<option value="FREE">免费</option>');
}
if (ret.site_2xfree) {
$("#brushtask_free").append('<option value="2XFREE">2X免费</option>');
}
if (free_value) {
$("#brushtask_free").val(free_value);
}
$("#brushtask_hr").empty().append('<option value="" selected>全部</option>');
if (ret.site_hr) {
$("#brushtask_hr").append('<option value="HR">排除HR</option>');
}
if (hr_value) {
$("#brushtask_hr").val(hr_value);
}
});
}
// 范围条件
function filter_item_change(type, id, item, value) {
let input_obj = $("#" + id);
let button_obj = $("#" + id + "_btn");
let do_obj = $("#" + id + "_do");
if (!type) {
input_obj.val("");
do_obj.val("");
input_obj.attr("readonly", "readonly");
} else {
input_obj.removeAttr("readonly");
do_obj.val(type);
}
button_obj.text(item.text());
if (value) {
input_obj.val(value);
}
}
// 新增任务保存
function add_brushtask_job() {
// 检查输入项
let brushtask_id = $("#brushtask_id").val();
let brushtask_name = $("#brushtask_name").val();
if (!brushtask_name) {
$("#brushtask_name").addClass("is-invalid");
return;
} else {
$("#brushtask_name").removeClass("is-invalid");
}
let brushtask_site = $("#brushtask_site").val();
if (!brushtask_site) {
$("#brushtask_site").addClass("is-invalid");
return;
} else {
$("#brushtask_site").removeClass("is-invalid");
}
let brushtask_interval = $("#brushtask_interval").val();
if (!brushtask_interval || isNaN(brushtask_interval)) {
$("#brushtask_interval").addClass("is-invalid");
return;
} else {
$("#brushtask_interval").removeClass("is-invalid");
}
let brushtask_downloader = $("#brushtask_downloader").val();
if (!brushtask_downloader) {
$("#brushtask_downloader").addClass("is-invalid");
return;
} else {
$("#brushtask_downloader").removeClass("is-invalid");
}
let brushtask_totalsize = $("#brushtask_totalsize").val();
if (brushtask_totalsize && isNaN(brushtask_totalsize)) {
$("#brushtask_totalsize").addClass("is-invalid");
return;
}
let brushtask_state = $("#brushtask_state").val();
let brushtask_transfer = $("#brushtask_transfer").prop('checked');
let brushtask_sendmessage = $("#brushtask_sendmessage").prop('checked');
let brushtask_forceupload = $("#brushtask_forceupload").prop('checked');
let brushtask_free = $("#brushtask_free").val();
let brushtask_hr = $("#brushtask_hr").val();
//种子大小
let brushtask_torrent_size_do = $("#brushtask_torrent_size_do").val();
let brushtask_torrent_size = $("#brushtask_torrent_size").val();
if (brushtask_torrent_size_do && !brushtask_torrent_size) {
$("#brushtask_torrent_size").addClass("is-invalid");
return;
} else {
if (brushtask_torrent_size && brushtask_torrent_size_do != 'bw' && isNaN(brushtask_torrent_size)) {
$("#brushtask_torrent_size").addClass("is-invalid");
return;
} else if (brushtask_torrent_size && brushtask_torrent_size_do == 'bw' && !/\d+,\d+/.test(brushtask_torrent_size)) {
$("#brushtask_torrent_size").addClass("is-invalid");
return;
}
$("#brushtask_torrent_size").removeClass("is-invalid");
}
//包含
let brushtask_include = $("#brushtask_include").val();
//排除
let brushtask_exclude = $("#brushtask_exclude").val();
//同时下载数
let brushtask_dlcount = $("#brushtask_dlcount").val();
if (brushtask_dlcount && isNaN(brushtask_dlcount)) {
$("#brushtask_dlcount").addClass("is-invalid");
return;
} else {
$("#brushtask_dlcount").removeClass("is-invalid");
}
//上传限速
let brushtask_upspeed = $("#brushtask_upspeed").val();
if (brushtask_upspeed && isNaN(brushtask_upspeed)) {
$("#brushtask_upspeed").addClass("is-invalid");
return;
} else {
$("#brushtask_upspeed").removeClass("is-invalid");
}
//下载限速
let brushtask_downspeed = $("#brushtask_downspeed").val();
if (brushtask_downspeed && isNaN(brushtask_downspeed)) {
$("#brushtask_downspeed").addClass("is-invalid");
return;
} else {
$("#brushtask_downspeed").removeClass("is-invalid");
}
//发布时间
let brushtask_pubdate_do = $("#brushtask_pubdate_do").val();
let brushtask_pubdate = $("#brushtask_pubdate").val();
if (brushtask_pubdate_do && !brushtask_pubdate) {
$("#brushtask_pubdate").addClass("is-invalid");
return;
} else {
if (brushtask_pubdate && brushtask_pubdate_do != 'bw' && isNaN(brushtask_pubdate)) {
$("#brushtask_pubdate").addClass("is-invalid");
return;
} else if (brushtask_pubdate && brushtask_pubdate_do == 'bw' && !/\d+,\d+/.test(brushtask_pubdate)) {
$("#brushtask_pubdate").addClass("is-invalid");
return;
}
$("#brushtask_pubdate").removeClass("is-invalid");
}
//做种人数
let brushtask_peercount_do = $("#brushtask_peercount_do").val();
let brushtask_peercount = $("#brushtask_peercount").val();
if (brushtask_peercount_do && !brushtask_peercount) {
$("#brushtask_peercount").addClass("is-invalid");
return;
} else {
if (brushtask_peercount && brushtask_peercount_do != 'bw' && isNaN(brushtask_peercount)) {
$("#brushtask_peercount").addClass("is-invalid");
return;
} else if (brushtask_peercount && brushtask_peercount_do == 'bw' && !/\d+,\d+/.test(brushtask_peercount)) {
$("#brushtask_peercount").addClass("is-invalid");
return;
}
$("#brushtask_peercount").removeClass("is-invalid");
}
//做种时间
let brushtask_seedtime_do = $("#brushtask_seedtime_do").val();
let brushtask_seedtime = $("#brushtask_seedtime").val();
if (brushtask_seedtime_do && !brushtask_seedtime) {
$("#brushtask_seedtime").addClass("is-invalid");
return;
} else {
if (brushtask_seedtime && isNaN(brushtask_seedtime)) {
$("#brushtask_seedtime").addClass("is-invalid");
return;
}
$("#brushtask_seedtime").removeClass("is-invalid");
}
//分享率
let brushtask_seedratio_do = $("#brushtask_seedratio_do").val();
let brushtask_seedratio = $("#brushtask_seedratio").val();
if (brushtask_seedratio_do && !brushtask_seedratio) {
$("#brushtask_seedratio").addClass("is-invalid");
return;
} else {
if (brushtask_seedratio && isNaN(brushtask_seedratio)) {
$("#brushtask_seedratio").addClass("is-invalid");
return;
}
$("#brushtask_seedratio").removeClass("is-invalid");
}
//上传量
let brushtask_seedsize_do = $("#brushtask_seedsize_do").val();
let brushtask_seedsize = $("#brushtask_seedsize").val();
if (brushtask_seedsize_do && !brushtask_seedsize) {
$("#brushtask_seedsize").addClass("is-invalid");
return;
} else {
if (brushtask_seedsize && isNaN(brushtask_seedsize)) {
$("#brushtask_seedsize").addClass("is-invalid");
return;
}
$("#brushtask_seedsize").removeClass("is-invalid");
}
//下载耗时
let brushtask_dltime_do = $("#brushtask_dltime_do").val();
let brushtask_dltime = $("#brushtask_dltime").val();
if (brushtask_dltime_do && !brushtask_dltime) {
$("#brushtask_dltime").addClass("is-invalid");
return;
} else {
if (brushtask_dltime && isNaN(brushtask_dltime)) {
$("#brushtask_dltime").addClass("is-invalid");
return;
}
$("#brushtask_dltime").removeClass("is-invalid");
}
//平均上传速度
let brushtask_avg_upspeed_do = $("#brushtask_avg_upspeed_do").val();
let brushtask_avg_upspeed = $("#brushtask_avg_upspeed").val();
if (brushtask_avg_upspeed_do && !brushtask_avg_upspeed) {
$("#brushtask_avg_upspeed").addClass("is-invalid");
return;
} else {
if (brushtask_avg_upspeed && isNaN(brushtask_avg_upspeed)) {
$("#brushtask_avg_upspeed").addClass("is-invalid");
return;
}
$("#brushtask_avg_upspeed").removeClass("is-invalid");
}
//未活动时间
let brushtask_iatime_do = $("#brushtask_iatime_do").val();
let brushtask_iatime = $("#brushtask_iatime").val();
if (brushtask_iatime_do && !brushtask_iatime) {
$("#brushtask_iatime").addClass("is-invalid");
return;
} else {
if (brushtask_iatime && isNaN(brushtask_iatime)) {
$("#brushtask_iatime").addClass("is-invalid");
return;
}
$("#brushtask_iatime").removeClass("is-invalid");
}
// 参数
const params = {
brushtask_id: brushtask_id,
brushtask_name: brushtask_name,
brushtask_site: brushtask_site,
brushtask_interval: brushtask_interval,
brushtask_downloader: brushtask_downloader,
brushtask_totalsize: brushtask_totalsize,
brushtask_state: brushtask_state,
brushtask_transfer: brushtask_transfer,
brushtask_sendmessage: brushtask_sendmessage,
brushtask_forceupload: brushtask_forceupload,
brushtask_free: brushtask_free,
brushtask_hr: brushtask_hr,
brushtask_torrent_size: brushtask_torrent_size_do + "#" + brushtask_torrent_size,
brushtask_include: brushtask_include,
brushtask_exclude: brushtask_exclude,
brushtask_dlcount: brushtask_dlcount,
brushtask_peercount: brushtask_peercount_do + "#" + brushtask_peercount,
brushtask_seedtime: brushtask_seedtime_do + "#" + brushtask_seedtime,
brushtask_seedratio: brushtask_seedratio_do + "#" + brushtask_seedratio,
brushtask_seedsize: brushtask_seedsize_do + "#" + brushtask_seedsize,
brushtask_dltime: brushtask_dltime_do + "#" + brushtask_dltime,
brushtask_avg_upspeed: brushtask_avg_upspeed_do + "#" + brushtask_avg_upspeed,
brushtask_iatime: brushtask_iatime_do + "#" + brushtask_iatime,
brushtask_upspeed: brushtask_upspeed,
brushtask_downspeed: brushtask_downspeed,
brushtask_pubdate: brushtask_pubdate_do + "#" + brushtask_pubdate
};
ajax_post("add_brushtask", params, function (ret) {
$("#modal-brushtask").modal('hide');
window_history_refresh();
});
}
// 绑定事件
$(document).ready(function () {
$("#brushtask_site").change(function () {
brushtask_site_change($(this).val());
});
});
//立即运行任务
function run_brushtask_now(id) {
ajax_post("run_brushtask", {"id": id}, function (ret) {
show_success_modal("任务运行完成!", function () {
window_history_refresh();
});
});
}
// 刷流种子下载记录
function show_brushtask_torrents_modal(id) {
ajax_post("list_brushtask_torrents", { "id": id }, function (ret) {
let content;
if (ret.code == 0) {
const downloads = ret.data;
let content_th = `<thead><tr>
<th>标题</th>
<th>状态</th>
<th>添加时间</th>
</tr></thead>`;
let content_td = '';
for (let i = 0; i < downloads.length; i++) {
const download = downloads[i];
let title = '';
let state = '';
let date = '';
if (download.TORRENT_NAME) {
title = `<span class="text-muted">${download.TORRENT_NAME}</span>`
};
if (download.LST_MOD_DATE) {
let dates = download.LST_MOD_DATE.split(" ");
date = `<small class="text-muted">${dates[0]}<br>${dates[1]}</small>`;
};
if (download.DOWNLOAD_ID == '0') {
state = `<span class="badge bg-red me-1 mb-1">已删除</span>`;
} else {
state = `<span class="badge bg-green me-1 mb-1">正常</span>`;
}
content_td = `${content_td}<tr><td>${title}</td>><td>${state}</td><td class="text-nowrap">${date}</td></tr>`;
let content_tb = `<tbody>${content_td}</tbody>`;
content = `${content_th}${content_tb}`;
};
} else {
content= `<div class="empty"><p class="empty-title">${ret.msg}</p></div>`;
}
$("#table-brushtask-torrents").empty().append(content);
$("#modal-brushtask-torrents").modal('show');
});
}
</script>