diff --git a/src/gui/transferlistwidget.cpp b/src/gui/transferlistwidget.cpp index c677c8e94..c731775db 100644 --- a/src/gui/transferlistwidget.cpp +++ b/src/gui/transferlistwidget.cpp @@ -574,6 +574,18 @@ void TransferListWidget::copySelectedIDs() const qApp->clipboard()->setText(torrentIDs.join(u'\n')); } +void TransferListWidget::copySelectedComments() const +{ + QStringList torrentComments; + for (const BitTorrent::Torrent *torrent : asConst(getSelectedTorrents())) + { + if (!torrent->comment().isEmpty()) + torrentComments << torrent->comment(); + } + + qApp->clipboard()->setText(torrentComments.join(u"\n---------\n"_s)); +} + void TransferListWidget::hideQueuePosColumn(bool hide) { setColumnHidden(TransferListModel::TR_QUEUE_POSITION, hide); @@ -986,6 +998,8 @@ void TransferListWidget::displayListMenu() connect(actionCopyMagnetLink, &QAction::triggered, this, &TransferListWidget::copySelectedMagnetURIs); auto *actionCopyID = new QAction(UIThemeManager::instance()->getIcon(u"help-about"_s, u"edit-copy"_s), tr("Torrent &ID"), listMenu); connect(actionCopyID, &QAction::triggered, this, &TransferListWidget::copySelectedIDs); + auto *actionCopyComment = new QAction(UIThemeManager::instance()->getIcon(u"edit-copy"_s), tr("&Comment"), listMenu); + connect(actionCopyComment, &QAction::triggered, this, &TransferListWidget::copySelectedComments); auto *actionCopyName = new QAction(UIThemeManager::instance()->getIcon(u"name"_s, u"edit-copy"_s), tr("&Name"), listMenu); connect(actionCopyName, &QAction::triggered, this, &TransferListWidget::copySelectedNames); auto *actionCopyHash1 = new QAction(UIThemeManager::instance()->getIcon(u"hash"_s, u"edit-copy"_s), tr("Info &hash v1"), listMenu); @@ -1277,6 +1291,7 @@ void TransferListWidget::displayListMenu() actionCopyHash2->setEnabled(hasInfohashV2); copySubMenu->addAction(actionCopyMagnetLink); copySubMenu->addAction(actionCopyID); + copySubMenu->addAction(actionCopyComment); actionExportTorrent->setToolTip(tr("Exported torrent is not necessarily the same as the imported")); listMenu->addAction(actionExportTorrent); diff --git a/src/gui/transferlistwidget.h b/src/gui/transferlistwidget.h index ad9b0f37b..88a00662b 100644 --- a/src/gui/transferlistwidget.h +++ b/src/gui/transferlistwidget.h @@ -86,6 +86,7 @@ public slots: void copySelectedNames() const; void copySelectedInfohashes(CopyInfohashPolicy policy) const; void copySelectedIDs() const; + void copySelectedComments() const; void openSelectedTorrentsFolder() const; void recheckSelectedTorrents(); void reannounceSelectedTorrents(); diff --git a/src/webui/api/serialize/serialize_torrent.cpp b/src/webui/api/serialize/serialize_torrent.cpp index 604b301b5..15c4007af 100644 --- a/src/webui/api/serialize/serialize_torrent.cpp +++ b/src/webui/api/serialize/serialize_torrent.cpp @@ -160,6 +160,7 @@ QVariantMap serialize(const BitTorrent::Torrent &torrent) {KEY_TORRENT_LAST_ACTIVITY_TIME, getLastActivityTime()}, {KEY_TORRENT_AVAILABILITY, torrent.distributedCopies()}, {KEY_TORRENT_REANNOUNCE, torrent.nextAnnounce()}, + {KEY_TORRENT_COMMENT, torrent.comment()}, {KEY_TORRENT_TOTAL_SIZE, torrent.totalSize()} }; diff --git a/src/webui/api/serialize/serialize_torrent.h b/src/webui/api/serialize/serialize_torrent.h index d5ac92999..3a67551a9 100644 --- a/src/webui/api/serialize/serialize_torrent.h +++ b/src/webui/api/serialize/serialize_torrent.h @@ -91,5 +91,6 @@ inline const QString KEY_TORRENT_TIME_ACTIVE = u"time_active"_s; inline const QString KEY_TORRENT_SEEDING_TIME = u"seeding_time"_s; inline const QString KEY_TORRENT_AVAILABILITY = u"availability"_s; inline const QString KEY_TORRENT_REANNOUNCE = u"reannounce"_s; +inline const QString KEY_TORRENT_COMMENT = u"comment"_s; QVariantMap serialize(const BitTorrent::Torrent &torrent); diff --git a/src/webui/www/private/index.html b/src/webui/www/private/index.html index 9aa01c063..768ffac2f 100644 --- a/src/webui/www/private/index.html +++ b/src/webui/www/private/index.html @@ -180,6 +180,7 @@