From a5de58593b8de643aa15d368a0847c57c2d0d6ec Mon Sep 17 00:00:00 2001 From: Lucas Winther Date: Fri, 20 Nov 2020 17:01:39 +0100 Subject: [PATCH] server: qBittorrent: set tags after removing all existing tags APIs of qBittorrent (removeTags, addTags) are incremental. However, currently it is being used to "set" tags. As a result, tags are never removed. This change removes all existing tags before adding new set of tags in order to simulate the idempotent set function. --- .../services/qBittorrent/clientGatewayService.ts | 8 +++++--- .../services/qBittorrent/clientRequestManager.ts | 14 ++++++++++++++ 2 files changed, 19 insertions(+), 3 deletions(-) diff --git a/server/services/qBittorrent/clientGatewayService.ts b/server/services/qBittorrent/clientGatewayService.ts index 1505045d..4e0c7730 100644 --- a/server/services/qBittorrent/clientGatewayService.ts +++ b/server/services/qBittorrent/clientGatewayService.ts @@ -179,9 +179,11 @@ class QBittorrentClientGatewayService extends ClientGatewayService { } async setTorrentsTags({hashes, tags}: SetTorrentsTagsOptions): Promise { - return this.clientRequestManager - .torrentsAddTags(hashes, tags) - .then(this.processClientRequestSuccess, this.processClientRequestError); + return this.clientRequestManager.torrentsRemoveTags(hashes).then(() => { + this.clientRequestManager + .torrentsAddTags(hashes, tags) + .then(this.processClientRequestSuccess, this.processClientRequestError); + }); } async setTorrentsTrackers({hashes, trackers}: SetTorrentsTrackersOptions): Promise { diff --git a/server/services/qBittorrent/clientRequestManager.ts b/server/services/qBittorrent/clientRequestManager.ts index f86dbb71..826ce3db 100644 --- a/server/services/qBittorrent/clientRequestManager.ts +++ b/server/services/qBittorrent/clientRequestManager.ts @@ -253,6 +253,20 @@ class ClientRequestManager { }); } + async torrentsRemoveTags(hashes: Array, tags?: Array): Promise { + return axios + .get(`${this.apiBase}/torrents/removeTags`, { + params: { + hashes: hashes.join('|'), + tags: tags?.join(','), + }, + headers: {Cookie: await this.authCookie}, + }) + .then(() => { + // returns nothing + }); + } + async torrentsAddTrackers(hash: string, urls: Array): Promise { return axios .get(`${this.apiBase}/torrents/addTrackers?hash=${hash}&urls=${urls.join('|')}`, {