Skip to content

Commit

Permalink
WebAPI: add new method setTags to upsert tags on torrents
Browse files Browse the repository at this point in the history
This is another optimization for torrent management on large scale instances with the goal to minimize the amount of required API calls. Ref #22128.

This new function and endpoint torrents/setTags does an upsert to replace the torrent tags and handles the removal and add internally, instead of doing multiple calls to add and remove tags on torrents from the client.

PR #22156.

---------

Co-authored-by: Chocobo1 <Chocobo1@users.noreply.github.com>
Co-authored-by: Vladimir Golovnev <glassez@yandex.ru>
  • Loading branch information
3 people authored Jan 24, 2025
1 parent 05787d9 commit 82c36ae
Show file tree
Hide file tree
Showing 3 changed files with 24 additions and 1 deletion.
21 changes: 21 additions & 0 deletions src/webui/api/torrentscontroller.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -1496,6 +1496,27 @@ void TorrentsController::addTagsAction()
}
}

void TorrentsController::setTagsAction()
{
requireParams({u"hashes"_s, u"tags"_s});

const QStringList hashes {params()[u"hashes"_s].split(u'|', Qt::SkipEmptyParts)};
const QStringList tags {params()[u"tags"_s].split(u',', Qt::SkipEmptyParts)};

const TagSet newTags {tags.begin(), tags.end()};
applyToTorrents(hashes, [&newTags](BitTorrent::Torrent *const torrent)
{
TagSet tmpTags {newTags};
for (const Tag &tag : asConst(torrent->tags()))
{
if (tmpTags.erase(tag) == 0)
torrent->removeTag(tag);
}
for (const Tag &tag : tmpTags)
torrent->addTag(tag);
});
}

void TorrentsController::removeTagsAction()
{
requireParams({u"hashes"_s});
Expand Down
1 change: 1 addition & 0 deletions src/webui/api/torrentscontroller.h
Original file line number Diff line number Diff line change
Expand Up @@ -61,6 +61,7 @@ private slots:
void removeCategoriesAction();
void categoriesAction();
void addTagsAction();
void setTagsAction();
void removeTagsAction();
void createTagsAction();
void deleteTagsAction();
Expand Down
3 changes: 2 additions & 1 deletion src/webui/webapplication.h
Original file line number Diff line number Diff line change
Expand Up @@ -54,7 +54,7 @@
#include "base/utils/version.h"
#include "api/isessionmanager.h"

inline const Utils::Version<3, 2> API_VERSION {2, 11, 3};
inline const Utils::Version<3, 2> API_VERSION {2, 11, 4};

class QTimer;

Expand Down Expand Up @@ -212,6 +212,7 @@ class WebApplication final : public ApplicationComponent<QObject>
{{u"torrents"_s, u"setShareLimits"_s}, Http::METHOD_POST},
{{u"torrents"_s, u"setSSLParameters"_s}, Http::METHOD_POST},
{{u"torrents"_s, u"setSuperSeeding"_s}, Http::METHOD_POST},
{{u"torrents"_s, u"setTags"_s}, Http::METHOD_POST},
{{u"torrents"_s, u"setUploadLimit"_s}, Http::METHOD_POST},
{{u"transfer"_s, u"setDownloadLimit"_s}, Http::METHOD_POST},
{{u"transfer"_s, u"setSpeedLimitsMode"_s}, Http::METHOD_POST},
Expand Down

0 comments on commit 82c36ae

Please sign in to comment.