mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-11-29 13:58:51 +03:00
Add copy comment functionality to the torrent list's context menu
PR #19846. Closes #18890.
This commit is contained in:
parent
f067ab1692
commit
30d9978c97
7 changed files with 37 additions and 0 deletions
|
@ -574,6 +574,18 @@ void TransferListWidget::copySelectedIDs() const
|
||||||
qApp->clipboard()->setText(torrentIDs.join(u'\n'));
|
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)
|
void TransferListWidget::hideQueuePosColumn(bool hide)
|
||||||
{
|
{
|
||||||
setColumnHidden(TransferListModel::TR_QUEUE_POSITION, hide);
|
setColumnHidden(TransferListModel::TR_QUEUE_POSITION, hide);
|
||||||
|
@ -986,6 +998,8 @@ void TransferListWidget::displayListMenu()
|
||||||
connect(actionCopyMagnetLink, &QAction::triggered, this, &TransferListWidget::copySelectedMagnetURIs);
|
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);
|
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);
|
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);
|
auto *actionCopyName = new QAction(UIThemeManager::instance()->getIcon(u"name"_s, u"edit-copy"_s), tr("&Name"), listMenu);
|
||||||
connect(actionCopyName, &QAction::triggered, this, &TransferListWidget::copySelectedNames);
|
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);
|
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);
|
actionCopyHash2->setEnabled(hasInfohashV2);
|
||||||
copySubMenu->addAction(actionCopyMagnetLink);
|
copySubMenu->addAction(actionCopyMagnetLink);
|
||||||
copySubMenu->addAction(actionCopyID);
|
copySubMenu->addAction(actionCopyID);
|
||||||
|
copySubMenu->addAction(actionCopyComment);
|
||||||
|
|
||||||
actionExportTorrent->setToolTip(tr("Exported torrent is not necessarily the same as the imported"));
|
actionExportTorrent->setToolTip(tr("Exported torrent is not necessarily the same as the imported"));
|
||||||
listMenu->addAction(actionExportTorrent);
|
listMenu->addAction(actionExportTorrent);
|
||||||
|
|
|
@ -86,6 +86,7 @@ public slots:
|
||||||
void copySelectedNames() const;
|
void copySelectedNames() const;
|
||||||
void copySelectedInfohashes(CopyInfohashPolicy policy) const;
|
void copySelectedInfohashes(CopyInfohashPolicy policy) const;
|
||||||
void copySelectedIDs() const;
|
void copySelectedIDs() const;
|
||||||
|
void copySelectedComments() const;
|
||||||
void openSelectedTorrentsFolder() const;
|
void openSelectedTorrentsFolder() const;
|
||||||
void recheckSelectedTorrents();
|
void recheckSelectedTorrents();
|
||||||
void reannounceSelectedTorrents();
|
void reannounceSelectedTorrents();
|
||||||
|
|
|
@ -160,6 +160,7 @@ QVariantMap serialize(const BitTorrent::Torrent &torrent)
|
||||||
{KEY_TORRENT_LAST_ACTIVITY_TIME, getLastActivityTime()},
|
{KEY_TORRENT_LAST_ACTIVITY_TIME, getLastActivityTime()},
|
||||||
{KEY_TORRENT_AVAILABILITY, torrent.distributedCopies()},
|
{KEY_TORRENT_AVAILABILITY, torrent.distributedCopies()},
|
||||||
{KEY_TORRENT_REANNOUNCE, torrent.nextAnnounce()},
|
{KEY_TORRENT_REANNOUNCE, torrent.nextAnnounce()},
|
||||||
|
{KEY_TORRENT_COMMENT, torrent.comment()},
|
||||||
|
|
||||||
{KEY_TORRENT_TOTAL_SIZE, torrent.totalSize()}
|
{KEY_TORRENT_TOTAL_SIZE, torrent.totalSize()}
|
||||||
};
|
};
|
||||||
|
|
|
@ -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_SEEDING_TIME = u"seeding_time"_s;
|
||||||
inline const QString KEY_TORRENT_AVAILABILITY = u"availability"_s;
|
inline const QString KEY_TORRENT_AVAILABILITY = u"availability"_s;
|
||||||
inline const QString KEY_TORRENT_REANNOUNCE = u"reannounce"_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);
|
QVariantMap serialize(const BitTorrent::Torrent &torrent);
|
||||||
|
|
|
@ -180,6 +180,7 @@
|
||||||
<li><a href="#" id="copyInfohash2" class="copyToClipboard"><img src="images/hash.svg" alt="QBT_TR(Info hash v2)QBT_TR[CONTEXT=TransferListWidget]" /> QBT_TR(Info hash v2)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
<li><a href="#" id="copyInfohash2" class="copyToClipboard"><img src="images/hash.svg" alt="QBT_TR(Info hash v2)QBT_TR[CONTEXT=TransferListWidget]" /> QBT_TR(Info hash v2)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
<li><a href="#" id="copyMagnetLink" class="copyToClipboard"><img src="images/torrent-magnet.svg" alt="QBT_TR(Magnet link)QBT_TR[CONTEXT=TransferListWidget]" /> QBT_TR(Magnet link)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
<li><a href="#" id="copyMagnetLink" class="copyToClipboard"><img src="images/torrent-magnet.svg" alt="QBT_TR(Magnet link)QBT_TR[CONTEXT=TransferListWidget]" /> QBT_TR(Magnet link)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
<li><a href="#" id="copyID" class="copyToClipboard"><img src="images/help-about.svg" alt="QBT_TR(Torrent ID)QBT_TR[CONTEXT=TransferListWidget]" /> QBT_TR(Torrent ID)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
<li><a href="#" id="copyID" class="copyToClipboard"><img src="images/help-about.svg" alt="QBT_TR(Torrent ID)QBT_TR[CONTEXT=TransferListWidget]" /> QBT_TR(Torrent ID)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
|
<li><a href="#" id="copyComment" class="copyToClipboard"><img src="images/edit-copy.svg" alt="QBT_TR(Comment)QBT_TR[CONTEXT=TransferListWidget]" /> QBT_TR(Comment)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
</li>
|
</li>
|
||||||
<li>
|
<li>
|
||||||
|
|
|
@ -1528,6 +1528,8 @@ function setupCopyEventHandler() {
|
||||||
return copyMagnetLinkFN();
|
return copyMagnetLinkFN();
|
||||||
case "copyID":
|
case "copyID":
|
||||||
return copyIdFN();
|
return copyIdFN();
|
||||||
|
case "copyComment":
|
||||||
|
return copyCommentFN();
|
||||||
default:
|
default:
|
||||||
return "";
|
return "";
|
||||||
}
|
}
|
||||||
|
|
|
@ -89,6 +89,7 @@ let copyNameFN = function() {};
|
||||||
let copyInfohashFN = function(policy) {};
|
let copyInfohashFN = function(policy) {};
|
||||||
let copyMagnetLinkFN = function() {};
|
let copyMagnetLinkFN = function() {};
|
||||||
let copyIdFN = function() {};
|
let copyIdFN = function() {};
|
||||||
|
let copyCommentFN = function() {};
|
||||||
let setQueuePositionFN = function() {};
|
let setQueuePositionFN = function() {};
|
||||||
let exportTorrentFN = function() {};
|
let exportTorrentFN = function() {};
|
||||||
|
|
||||||
|
@ -1005,6 +1006,21 @@ const initializeWindows = function() {
|
||||||
return torrentsTable.selectedRowsIds().join("\n");
|
return torrentsTable.selectedRowsIds().join("\n");
|
||||||
};
|
};
|
||||||
|
|
||||||
|
copyCommentFN = function() {
|
||||||
|
const selectedRows = torrentsTable.selectedRowsIds();
|
||||||
|
const comments = [];
|
||||||
|
if (selectedRows.length > 0) {
|
||||||
|
const rows = torrentsTable.getFilteredAndSortedRows();
|
||||||
|
for (let i = 0; i < selectedRows.length; ++i) {
|
||||||
|
const hash = selectedRows[i];
|
||||||
|
const comment = rows[hash].full_data.comment;
|
||||||
|
if (comment && (comment !== ""))
|
||||||
|
comments.push(comment);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return comments.join("\n---------\n");
|
||||||
|
};
|
||||||
|
|
||||||
exportTorrentFN = async function() {
|
exportTorrentFN = async function() {
|
||||||
const hashes = torrentsTable.selectedRowsIds();
|
const hashes = torrentsTable.selectedRowsIds();
|
||||||
for (const hash of hashes) {
|
for (const hash of hashes) {
|
||||||
|
|
Loading…
Reference in a new issue