mirror of
https://github.com/ngfchl/ptools
synced 2023-07-10 13:41:22 +08:00
优化下载器分类数据获取与界面显示
This commit is contained in:
@@ -13,7 +13,9 @@ urlpatterns = [
|
||||
path(r'do_update', views.do_update, name='do_update'),
|
||||
path(r'import_from_ptpp', views.import_from_ptpp, name='import_from_ptpp'),
|
||||
path(r'page_downloading', views.page_downloading, name='page_downloading'),
|
||||
path(r'get_downloader', views.get_downloader, name='get_downloader'),
|
||||
path(r'get_downloaders', views.get_downloaders, name='get_downloaders'),
|
||||
path(r'get_downloader_categories', views.get_downloader_categories, name='get_downloader_categories'),
|
||||
path(r'get_trackers', views.get_trackers, name='get_trackers'),
|
||||
path(r'downloading', views.get_downloading, name='downloading'),
|
||||
path(r'control_torrent', views.control_torrent, name='control_torrent'),
|
||||
path(r'torrent_info_page', views.render_torrents_page, name='torrent_info_page'),
|
||||
|
||||
@@ -90,18 +90,17 @@ def page_downloading(request):
|
||||
return render(request, 'auto_pt/downloading.html')
|
||||
|
||||
|
||||
def get_downloader(request):
|
||||
def get_downloaders(request):
|
||||
downloader_list = Downloader.objects.filter(category=DownloaderCategory.qBittorrent).values('id', 'name', 'host')
|
||||
if len(downloader_list) <= 0:
|
||||
return JsonResponse(CommonResponse.error(msg='请先添加下载器!目前仅支持qBittorrent!').to_dict(), safe=False)
|
||||
return JsonResponse(CommonResponse.success(data=list(downloader_list)).to_dict(), safe=False)
|
||||
|
||||
|
||||
def get_downloading(request):
|
||||
id = request.GET.get('id')
|
||||
def get_downloader(id):
|
||||
"""根据id获取下载实例"""
|
||||
logger.info('当前下载器id:{}'.format(id))
|
||||
downloader = Downloader.objects.filter(id=id).first()
|
||||
tracker_list = Site.objects.all().values('id', 'name', 'tracker')
|
||||
qb_client = qbittorrentapi.Client(
|
||||
host=downloader.host,
|
||||
port=downloader.port,
|
||||
@@ -109,18 +108,53 @@ def get_downloading(request):
|
||||
password=downloader.password,
|
||||
SIMPLE_RESPONSES=True
|
||||
)
|
||||
return qb_client
|
||||
|
||||
|
||||
def get_trackers(request):
|
||||
"""从已支持的站点获取tracker关键字列表"""
|
||||
tracker_list = Site.objects.all().values('id', 'name', 'tracker')
|
||||
# print(tracker_filters)
|
||||
return JsonResponse(CommonResponse.success(data={
|
||||
'tracker_list': list(tracker_list)
|
||||
}).to_dict(), safe=False)
|
||||
|
||||
|
||||
def get_downloader_categories(request):
|
||||
id = request.GET.get('id')
|
||||
if not id:
|
||||
id = Downloader.objects.all().first().id
|
||||
qb_client = get_downloader(id)
|
||||
try:
|
||||
qb_client.auth_log_in()
|
||||
categories = [index for index, value in qb_client.torrents_categories().items()]
|
||||
logger.info('下载器{}分类:'.format(id))
|
||||
logger.info(categories)
|
||||
tracker_list = Site.objects.all().values('id', 'name', 'tracker')
|
||||
logger.info('当前支持的筛选tracker的站点:')
|
||||
logger.info(tracker_list)
|
||||
return JsonResponse(CommonResponse.success(data={
|
||||
'categories': categories,
|
||||
'tracker_list': list(tracker_list)
|
||||
}).to_dict(), safe=False)
|
||||
except Exception as e:
|
||||
logger.warning(e)
|
||||
# raise
|
||||
return JsonResponse(CommonResponse.error(
|
||||
msg='连接下载器出错咯!'
|
||||
).to_dict(), safe=False)
|
||||
|
||||
|
||||
def get_downloading(request):
|
||||
id = request.GET.get('id')
|
||||
logger.info('当前下载器id:{}'.format(id))
|
||||
qb_client = get_downloader(id)
|
||||
try:
|
||||
qb_client.auth_log_in()
|
||||
# transfer = qb_client.transfer_info()
|
||||
# torrents = qb_client.torrents_info()
|
||||
main_data = qb_client.sync_maindata()
|
||||
torrent_list = main_data.get('torrents')
|
||||
categories = main_data.get('categories')
|
||||
# print(main_data.get('server_state'))
|
||||
# print(transfer)
|
||||
# print(categories)
|
||||
|
||||
# print(json.dumps(main_data))
|
||||
torrents = []
|
||||
for index, torrent in torrent_list.items():
|
||||
# print(type(torrent))
|
||||
@@ -164,15 +198,11 @@ def get_downloading(request):
|
||||
torrent['dlspeed'] = '' if torrent['dlspeed'] == 0 else torrent['dlspeed']
|
||||
torrent['hash'] = index
|
||||
torrents.append(torrent)
|
||||
print()
|
||||
logger.info('当前下载器共有种子:{}个'.format(len(torrents)))
|
||||
main_data['torrents'] = torrents
|
||||
# print(tracker_filters)
|
||||
main_data['tracker_list'] = list(tracker_list)
|
||||
# return JsonResponse(CommonResponse.success(data=torrents).to_dict(), safe=False)
|
||||
return JsonResponse(CommonResponse.success(data=main_data).to_dict(), safe=False)
|
||||
except Exception as e:
|
||||
logger.warning(e)
|
||||
logger.error(e)
|
||||
# raise
|
||||
return JsonResponse(CommonResponse.error(
|
||||
msg='连接下载器出错咯!'
|
||||
|
||||
@@ -65,16 +65,27 @@
|
||||
|
||||
<div id="app">
|
||||
<div style="text-align: center">
|
||||
<el-button-group style="margin: auto;">
|
||||
<el-button size="small"
|
||||
type="warning" plain
|
||||
v-for="downloader in downloaders"
|
||||
icon="el-icon-s-promotion"
|
||||
@click="handleButtonClick(downloader.id)">
|
||||
<span v-text="downloader.name"></span>
|
||||
</el-button>
|
||||
|
||||
</el-button-group>
|
||||
{# <el-button-group style="margin: auto;">#}
|
||||
{# <el-button size="small"#}
|
||||
{# type="warning" plain#}
|
||||
{# v-for="downloader in downloaders"#}
|
||||
{# icon="el-icon-s-promotion"#}
|
||||
{# @click="handleButtonClick(downloader.id)">#}
|
||||
{# <span v-text="downloader.name"></span>#}
|
||||
{# </el-button>#}
|
||||
{##}
|
||||
{# </el-button-group>#}
|
||||
<el-tabs type="card" @tab-click="handleButtonClick">
|
||||
<el-tab-pane v-for="downloader in downloaders"
|
||||
:label="downloader.name"
|
||||
icon="el-icon-s-promotion"
|
||||
:name="downloader.id">
|
||||
{# <span v-text="downloader.name"></span>#}
|
||||
</el-tab-pane>
|
||||
{# <el-tab-pane label="配置管理" name="second">配置管理</el-tab-pane>#}
|
||||
{# <el-tab-pane label="角色管理" name="third">角色管理</el-tab-pane>#}
|
||||
{# <el-tab-pane label="定时任务补偿" name="fourth">定时任务补偿</el-tab-pane>#}
|
||||
</el-tabs>
|
||||
</div>
|
||||
<div>
|
||||
<el-dialog title="删除任务" :visible.sync="deleteForm" min-width="180" width="30%" center>
|
||||
@@ -111,7 +122,6 @@
|
||||
<el-button circle size="mini" type="success" icon="el-icon-video-play"></el-button>
|
||||
<el-button circle size="mini" type="warning" icon="el-icon-video-pause"></el-button>
|
||||
|
||||
|
||||
<el-dropdown split-button type="primary" size="mini" @command="handleSelected">
|
||||
操作
|
||||
<el-dropdown-menu slot="dropdown">
|
||||
@@ -188,6 +198,7 @@
|
||||
:formatter="handleTracker"
|
||||
:filter-method="filterTrackerMethod"
|
||||
:filter-multiple="false"
|
||||
:filter-change="handlerTrackerFilter"
|
||||
min-width="110"
|
||||
title="Tracker"></vxe-table-column>
|
||||
<vxe-table-column field="state" sortable width="85" :formatter="handleState" column-key="state"
|
||||
@@ -439,20 +450,8 @@
|
||||
},
|
||||
mounted() {
|
||||
this.loading = true
|
||||
this.get_downloader()
|
||||
|
||||
{#console.log("获取下载器数量:", this.downloaders.length)#}
|
||||
{#this.get_downloading(this.downloaders[0].id)#}
|
||||
this.timer = setInterval(() => {
|
||||
let ff = this.$refs.dataTable.getCheckedFilters()
|
||||
console.log(ff)
|
||||
{#let filters = this.$refs.dataTable.isFilter()#}
|
||||
{#let cls = this.$refs.dataTable.getCheckedFilters()#}
|
||||
{#console.log('filters', filters)#}
|
||||
{#console.log('cls', cls)#}
|
||||
this.get_downloading(this.downloaders[0].id)
|
||||
}, 1500)
|
||||
|
||||
},
|
||||
updated() {
|
||||
// 十分钟后停止刷新
|
||||
@@ -481,6 +480,7 @@
|
||||
console.log($table)
|
||||
$table.connect(this.$refs.xToolbar)
|
||||
})
|
||||
this.get_downloaders()
|
||||
},
|
||||
watch: {},
|
||||
methods: {
|
||||
@@ -504,36 +504,81 @@
|
||||
}, 1500)
|
||||
},
|
||||
handleButtonClick(id) {
|
||||
{#const loading = this.$loading({#}
|
||||
{# lock: true, //lock的修改符--默认是false#}
|
||||
{# text: 'Loading', //显示在加载图标下方的加载文案#}
|
||||
{# spinner: 'el-icon-loading', //自定义加载图标类名#}
|
||||
{# background: 'rgba(0, 0, 0, 0.7)', //遮罩层颜色#}
|
||||
{# target: document.querySelector('#table') //loadin覆盖的dom元素节点#}
|
||||
//});
|
||||
console.log(id.name)
|
||||
{#handleButtonClick({value, $event}) {#}
|
||||
this.loading = true
|
||||
this.downloader_id = id.name
|
||||
clearInterval(this.timer)
|
||||
this.timer = null
|
||||
this.mainData = []
|
||||
this.get_downloading(id)
|
||||
this.refresh = false
|
||||
{#this.loading = false#}
|
||||
{#loading.close()#}
|
||||
{#this.loading = false#}
|
||||
this.get_downloader_categories(this.downloader_id)
|
||||
this.timer = setInterval(() => {
|
||||
this.get_downloading(id)
|
||||
this.get_downloading(this.downloader_id)
|
||||
}, 1500)
|
||||
this.refresh = false
|
||||
},
|
||||
get_downloader() {
|
||||
get_downloaders() {
|
||||
axios.get(
|
||||
"{% url "get_downloader" %}"
|
||||
"{% url "get_downloaders" %}"
|
||||
).then(res => {
|
||||
this.loading = true
|
||||
if (res.data.code === 0) {
|
||||
console.log('获取下载器列表成功', res.data.data)
|
||||
this.downloaders = res.data.data
|
||||
this.downloader_id = this.downloaders[0].id
|
||||
this.get_downloading(this.downloader_id)
|
||||
this.get_downloader_categories(this.downloader_id)
|
||||
this.timer = setInterval(() => {
|
||||
this.get_downloading(this.downloader_id)
|
||||
}, 1500)
|
||||
} else {
|
||||
this.$message({
|
||||
type: 'warning', message: '获取下载器列表失败!'
|
||||
});
|
||||
}
|
||||
}).catch(res => {
|
||||
console.log('获取下载器列表失败', res)
|
||||
this.$message({type: 'warning', message: '获取下载器列表失败!' + res});
|
||||
})
|
||||
},
|
||||
get_downloader_categories(downloader_id) {
|
||||
axios.get(
|
||||
"{% url "get_downloader_categories" %}",
|
||||
{
|
||||
params: {
|
||||
id: downloader_id
|
||||
}
|
||||
}
|
||||
).then(res => {
|
||||
this.loading = true
|
||||
if (res.data.code === 0) {
|
||||
console.log('获取下载器分类列表成功', res.data.data)
|
||||
this.tracker_list = res.data.data.tracker_list;
|
||||
const trackerFilter = [{label: '无', value: ''}]
|
||||
this.tracker_list.forEach((value, index, array) => {
|
||||
{#console.log(value, index)#}
|
||||
trackerFilter.push({'label': value.name, 'value': value.tracker})
|
||||
})
|
||||
let categoryFilters = [{label: '未分类', value: ''}]
|
||||
let categories = res.data.data.categories
|
||||
categories.forEach((value, index, array) => {
|
||||
categoryFilters.push({'label': value, 'value': value})
|
||||
this.categories.push({'title': value, 'value': value})
|
||||
})
|
||||
// 异步加载筛选数据
|
||||
const $table = this.$refs.dataTable
|
||||
{#console.log($table)#}
|
||||
if ($table) {
|
||||
const categoryColumn = $table.getColumnByField('category')
|
||||
{#console.log(nameColumn)#}
|
||||
if (categoryColumn) {
|
||||
$table.setFilter(categoryColumn, categoryFilters)
|
||||
}
|
||||
const trackerColumn = $table.getColumnByField('tracker')
|
||||
{#console.log(trackerColumn)#}
|
||||
if (trackerColumn) {
|
||||
$table.setFilter(trackerColumn, trackerFilter)
|
||||
}
|
||||
}
|
||||
} else {
|
||||
this.$message({
|
||||
type: 'warning', message: '获取下载器列表失败!'
|
||||
@@ -555,36 +600,6 @@
|
||||
).then(res => {
|
||||
if (res.data.code === 0) {
|
||||
this.mainData = res.data.data
|
||||
this.tracker_list = this.mainData.tracker_list;
|
||||
const trackerFilter = [{label: '无', value: ''}]
|
||||
this.tracker_list.forEach((value, index, array) => {
|
||||
{#console.log(value, index)#}
|
||||
trackerFilter.push({'label': value.name, 'value': value.tracker})
|
||||
})
|
||||
{#console.log(trackerFilter)#}
|
||||
// 任务状态过滤器数据
|
||||
this.categoryFilters = [{label: '未分类', value: ''}]
|
||||
this.categories = []
|
||||
for (let x in res.data.data.categories) {
|
||||
{#console.log(download_state[x])#}
|
||||
this.categoryFilters.push({'label': x, 'value': x})
|
||||
this.categories.push({'title': x, 'value': x})
|
||||
}
|
||||
// 异步加载筛选数据
|
||||
const $table = this.$refs.dataTable
|
||||
{#console.log($table)#}
|
||||
if ($table) {
|
||||
const categoryColumn = $table.getColumnByField('category')
|
||||
{#console.log(nameColumn)#}
|
||||
if (categoryColumn) {
|
||||
$table.setFilter(categoryColumn, this.categoryFilters)
|
||||
}
|
||||
const trackerColumn = $table.getColumnByField('tracker')
|
||||
{#console.log(trackerColumn)#}
|
||||
if (trackerColumn) {
|
||||
$table.setFilter(trackerColumn, trackerFilter)
|
||||
}
|
||||
}
|
||||
{#console.log(res.data.data.tracker_filters)#}
|
||||
this.server_state = res.data.data.server_state
|
||||
this.loading = false
|
||||
@@ -602,6 +617,9 @@
|
||||
})
|
||||
|
||||
},
|
||||
handlerTrackerFilter({column, property, values, datas, filterList, $event}) {
|
||||
console.log(column, property, values, datas, filterList, $event)
|
||||
},
|
||||
handleSize({row, column, cellValue, index}) {
|
||||
return this.renderSize(cellValue)
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user