diff --git a/auto_pt/urls.py b/auto_pt/urls.py
index e5f6fd3..c3cca7f 100644
--- a/auto_pt/urls.py
+++ b/auto_pt/urls.py
@@ -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'),
diff --git a/auto_pt/views.py b/auto_pt/views.py
index 37e2ae0..f326808 100644
--- a/auto_pt/views.py
+++ b/auto_pt/views.py
@@ -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='连接下载器出错咯!'
diff --git a/templates/auto_pt/downloading.html b/templates/auto_pt/downloading.html
index 74b0bee..1c9b466 100644
--- a/templates/auto_pt/downloading.html
+++ b/templates/auto_pt/downloading.html
@@ -65,16 +65,27 @@
-
-
-
-
-
-
+ {# #}
+ {# #}
+ {# #}
+ {# #}
+ {##}
+ {# #}
+
+
+ {# #}
+
+ {# 配置管理#}
+ {# 角色管理#}
+ {# 定时任务补偿#}
+
@@ -111,7 +122,6 @@
-
操作
@@ -188,6 +198,7 @@
:formatter="handleTracker"
:filter-method="filterTrackerMethod"
:filter-multiple="false"
+ :filter-change="handlerTrackerFilter"
min-width="110"
title="Tracker">
{
- 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)
},