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) },