mirror of
https://github.com/qbittorrent/qBittorrent
synced 2025-07-14 17:23:07 -07:00
* Add copy options to webui context menu Add Copy Hash to gui (closes #6964) * Use switch statement * Use camel case, switch from signal to qaction. * Rename variable * Change variable name
This commit is contained in:
parent
08aa827366
commit
145641ac41
8 changed files with 90 additions and 0 deletions
|
@ -527,6 +527,15 @@ void TransferListWidget::copySelectedNames() const
|
||||||
qApp->clipboard()->setText(torrent_names.join("\n"));
|
qApp->clipboard()->setText(torrent_names.join("\n"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void TransferListWidget::copySelectedHashes() const
|
||||||
|
{
|
||||||
|
QStringList torrentHashes;
|
||||||
|
foreach (BitTorrent::TorrentHandle *const torrent, getSelectedTorrents())
|
||||||
|
torrentHashes << torrent->hash();
|
||||||
|
|
||||||
|
qApp->clipboard()->setText(torrentHashes.join('\n'));
|
||||||
|
}
|
||||||
|
|
||||||
void TransferListWidget::hidePriorityColumn(bool hide)
|
void TransferListWidget::hidePriorityColumn(bool hide)
|
||||||
{
|
{
|
||||||
qDebug("hidePriorityColumn(%d)", hide);
|
qDebug("hidePriorityColumn(%d)", hide);
|
||||||
|
@ -870,6 +879,8 @@ void TransferListWidget::displayListMenu(const QPoint&)
|
||||||
connect(&actionCopy_magnet_link, SIGNAL(triggered()), this, SLOT(copySelectedMagnetURIs()));
|
connect(&actionCopy_magnet_link, SIGNAL(triggered()), this, SLOT(copySelectedMagnetURIs()));
|
||||||
QAction actionCopy_name(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy name"), 0);
|
QAction actionCopy_name(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy name"), 0);
|
||||||
connect(&actionCopy_name, SIGNAL(triggered()), this, SLOT(copySelectedNames()));
|
connect(&actionCopy_name, SIGNAL(triggered()), this, SLOT(copySelectedNames()));
|
||||||
|
QAction actionCopyHash(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy hash"), 0);
|
||||||
|
connect(&actionCopyHash, &QAction::triggered, this, &TransferListWidget::copySelectedHashes);
|
||||||
QAction actionSuper_seeding_mode(tr("Super seeding mode"), 0);
|
QAction actionSuper_seeding_mode(tr("Super seeding mode"), 0);
|
||||||
actionSuper_seeding_mode.setCheckable(true);
|
actionSuper_seeding_mode.setCheckable(true);
|
||||||
connect(&actionSuper_seeding_mode, SIGNAL(triggered()), this, SLOT(toggleSelectedTorrentsSuperSeeding()));
|
connect(&actionSuper_seeding_mode, SIGNAL(triggered()), this, SLOT(toggleSelectedTorrentsSuperSeeding()));
|
||||||
|
@ -1081,6 +1092,7 @@ void TransferListWidget::displayListMenu(const QPoint&)
|
||||||
listMenu.addSeparator();
|
listMenu.addSeparator();
|
||||||
listMenu.addAction(&actionCopy_name);
|
listMenu.addAction(&actionCopy_name);
|
||||||
listMenu.addAction(&actionCopy_magnet_link);
|
listMenu.addAction(&actionCopy_magnet_link);
|
||||||
|
listMenu.addAction(&actionCopyHash);
|
||||||
// Call menu
|
// Call menu
|
||||||
QAction *act = 0;
|
QAction *act = 0;
|
||||||
act = listMenu.exec(QCursor::pos());
|
act = listMenu.exec(QCursor::pos());
|
||||||
|
|
|
@ -82,6 +82,7 @@ public slots:
|
||||||
void bottomPrioSelectedTorrents();
|
void bottomPrioSelectedTorrents();
|
||||||
void copySelectedMagnetURIs() const;
|
void copySelectedMagnetURIs() const;
|
||||||
void copySelectedNames() const;
|
void copySelectedNames() const;
|
||||||
|
void copySelectedHashes() const;
|
||||||
void openSelectedTorrentsFolder() const;
|
void openSelectedTorrentsFolder() const;
|
||||||
void recheckSelectedTorrents();
|
void recheckSelectedTorrents();
|
||||||
void setDlLimitSelectedTorrents();
|
void setDlLimitSelectedTorrents();
|
||||||
|
|
|
@ -76,6 +76,7 @@ static const int CACHE_DURATION_MS = 1500; // 1500ms
|
||||||
// Torrent keys
|
// Torrent keys
|
||||||
static const char KEY_TORRENT_HASH[] = "hash";
|
static const char KEY_TORRENT_HASH[] = "hash";
|
||||||
static const char KEY_TORRENT_NAME[] = "name";
|
static const char KEY_TORRENT_NAME[] = "name";
|
||||||
|
static const char KEY_TORRENT_MAGNET_URI[] = "magnet_uri";
|
||||||
static const char KEY_TORRENT_SIZE[] = "size";
|
static const char KEY_TORRENT_SIZE[] = "size";
|
||||||
static const char KEY_TORRENT_PROGRESS[] = "progress";
|
static const char KEY_TORRENT_PROGRESS[] = "progress";
|
||||||
static const char KEY_TORRENT_DLSPEED[] = "dlspeed";
|
static const char KEY_TORRENT_DLSPEED[] = "dlspeed";
|
||||||
|
@ -789,6 +790,7 @@ QVariantMap toMap(BitTorrent::TorrentHandle *const torrent)
|
||||||
QVariantMap ret;
|
QVariantMap ret;
|
||||||
ret[KEY_TORRENT_HASH] = QString(torrent->hash());
|
ret[KEY_TORRENT_HASH] = QString(torrent->hash());
|
||||||
ret[KEY_TORRENT_NAME] = torrent->name();
|
ret[KEY_TORRENT_NAME] = torrent->name();
|
||||||
|
ret[KEY_TORRENT_MAGNET_URI] = torrent->toMagnetUri();
|
||||||
ret[KEY_TORRENT_SIZE] = torrent->wantedSize();
|
ret[KEY_TORRENT_SIZE] = torrent->wantedSize();
|
||||||
ret[KEY_TORRENT_PROGRESS] = torrent->progress();
|
ret[KEY_TORRENT_PROGRESS] = torrent->progress();
|
||||||
ret[KEY_TORRENT_DLSPEED] = torrent->downloadPayloadRate();
|
ret[KEY_TORRENT_DLSPEED] = torrent->downloadPayloadRate();
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
<file>www/public/css/Tabs.css</file>
|
<file>www/public/css/Tabs.css</file>
|
||||||
<file>www/public/css/Window.css</file>
|
<file>www/public/css/Window.css</file>
|
||||||
<file>www/public/scripts/client.js</file>
|
<file>www/public/scripts/client.js</file>
|
||||||
|
<file>www/public/scripts/clipboard.min.js</file>
|
||||||
<file>www/public/scripts/contextmenu.js</file>
|
<file>www/public/scripts/contextmenu.js</file>
|
||||||
<file>www/public/scripts/download.js</file>
|
<file>www/public/scripts/download.js</file>
|
||||||
<file>www/public/scripts/dynamicTable.js</file>
|
<file>www/public/scripts/dynamicTable.js</file>
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
<![endif]-->
|
<![endif]-->
|
||||||
<script type="text/javascript" src="scripts/mocha-yc.js"></script>
|
<script type="text/javascript" src="scripts/mocha-yc.js"></script>
|
||||||
<script type="text/javascript" src="scripts/mocha-init.js"></script>
|
<script type="text/javascript" src="scripts/mocha-init.js"></script>
|
||||||
|
<script type="text/javascript" src="scripts/clipboard.min.js"></script>
|
||||||
<script type="text/javascript" src="scripts/misc.js"></script>
|
<script type="text/javascript" src="scripts/misc.js"></script>
|
||||||
<script type="text/javascript" src="scripts/progressbar.js"></script>
|
<script type="text/javascript" src="scripts/progressbar.js"></script>
|
||||||
<script type="text/javascript" src="scripts/dynamicTable.js" charset="utf-8"></script>
|
<script type="text/javascript" src="scripts/dynamicTable.js" charset="utf-8"></script>
|
||||||
|
@ -125,6 +126,9 @@
|
||||||
<li class="separator"><a href="#SequentialDownload"><img src="theme/checked" alt="QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
<li class="separator"><a href="#SequentialDownload"><img src="theme/checked" alt="QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Download in sequential order)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
<li><a href="#FirstLastPiecePrio"><img src="theme/checked" alt="QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
<li><a href="#FirstLastPiecePrio"><img src="theme/checked" alt="QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Download first and last pieces first)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
<li class="separator"><a href="#ForceRecheck"><img src="theme/document-edit-verify" alt="QBT_TR(Force recheck)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Force recheck)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
<li class="separator"><a href="#ForceRecheck"><img src="theme/document-edit-verify" alt="QBT_TR(Force recheck)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Force recheck)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
|
<li class="separator"><a href="#" id="CopyName" class="copyToClipboard"><img src="theme/edit-copy" alt="QBT_TR(Copy name)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Copy name)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
|
<li><a href="#" id="CopyMagnetLink" class="copyToClipboard"><img src="theme/kt-magnet" alt="QBT_TR(Copy magnet link)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Copy magnet link)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
|
<li><a href="#" id="CopyHash" class="copyToClipboard"><img src="theme/kt-magnet" alt="QBT_TR(Copy hash)QBT_TR[CONTEXT=TransferListWidget]"/> QBT_TR(Copy hash)QBT_TR[CONTEXT=TransferListWidget]</a></li>
|
||||||
</ul>
|
</ul>
|
||||||
<ul id="categoriesFilterMenu" class="contextMenu">
|
<ul id="categoriesFilterMenu" class="contextMenu">
|
||||||
<li><a href="#CreateCategory"><img src="theme/list-add" alt="QBT_TR(Add category...)QBT_TR[CONTEXT=CategoryFilterWidget]"/> QBT_TR(Add category...)QBT_TR[CONTEXT=CategoryFilterWidget]</a></li>
|
<li><a href="#CreateCategory"><img src="theme/list-add" alt="QBT_TR(Add category...)QBT_TR[CONTEXT=CategoryFilterWidget]"/> QBT_TR(Add category...)QBT_TR[CONTEXT=CategoryFilterWidget]</a></li>
|
||||||
|
|
|
@ -38,6 +38,8 @@ var alternativeSpeedLimits = false;
|
||||||
var queueing_enabled = true;
|
var queueing_enabled = true;
|
||||||
var syncMainDataTimerPeriod = 1500;
|
var syncMainDataTimerPeriod = 1500;
|
||||||
|
|
||||||
|
var clipboardEvent;
|
||||||
|
|
||||||
var CATEGORIES_ALL = 1;
|
var CATEGORIES_ALL = 1;
|
||||||
var CATEGORIES_UNCATEGORIZED = 2;
|
var CATEGORIES_UNCATEGORIZED = 2;
|
||||||
|
|
||||||
|
@ -309,6 +311,7 @@ window.addEvent('load', function () {
|
||||||
update_categories = true;
|
update_categories = true;
|
||||||
}
|
}
|
||||||
if (response['torrents']) {
|
if (response['torrents']) {
|
||||||
|
var updateTorrentList = false;
|
||||||
for (var key in response['torrents']) {
|
for (var key in response['torrents']) {
|
||||||
response['torrents'][key]['hash'] = key;
|
response['torrents'][key]['hash'] = key;
|
||||||
response['torrents'][key]['rowId'] = key;
|
response['torrents'][key]['rowId'] = key;
|
||||||
|
@ -317,7 +320,12 @@ window.addEvent('load', function () {
|
||||||
torrentsTable.updateRowData(response['torrents'][key]);
|
torrentsTable.updateRowData(response['torrents'][key]);
|
||||||
if (addTorrentToCategoryList(response['torrents'][key]))
|
if (addTorrentToCategoryList(response['torrents'][key]))
|
||||||
update_categories = true;
|
update_categories = true;
|
||||||
|
if (response['torrents'][key]['name'])
|
||||||
|
updateTorrentList = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (updateTorrentList)
|
||||||
|
setupCopyEventHandler();
|
||||||
}
|
}
|
||||||
if (response['torrents_removed'])
|
if (response['torrents_removed'])
|
||||||
response['torrents_removed'].each(function (hash) {
|
response['torrents_removed'].each(function (hash) {
|
||||||
|
@ -590,6 +598,31 @@ function closeWindows() {
|
||||||
MochaUI.closeAll();
|
MochaUI.closeAll();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function setupCopyEventHandler() {
|
||||||
|
if (clipboardEvent)
|
||||||
|
clipboardEvent.destroy();
|
||||||
|
|
||||||
|
clipboardEvent = new Clipboard('.copyToClipboard', {
|
||||||
|
text: function(trigger) {
|
||||||
|
var textToCopy;
|
||||||
|
|
||||||
|
switch (trigger.id) {
|
||||||
|
case "CopyName":
|
||||||
|
textToCopy = copyNameFN();
|
||||||
|
break;
|
||||||
|
case "CopyMagnetLink":
|
||||||
|
textToCopy = copyMagnetLinkFN();
|
||||||
|
break;
|
||||||
|
case "CopyHash":
|
||||||
|
textToCopy = copyHashFN();
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
return textToCopy;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
var keyboardEvents = new Keyboard({
|
var keyboardEvents = new Keyboard({
|
||||||
defaultEventType: 'keydown',
|
defaultEventType: 'keydown',
|
||||||
events: {
|
events: {
|
||||||
|
|
7
src/webui/www/public/scripts/clipboard.min.js
vendored
Normal file
7
src/webui/www/public/scripts/clipboard.min.js
vendored
Normal file
File diff suppressed because one or more lines are too long
|
@ -451,6 +451,36 @@ initializeWindows = function() {
|
||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
copyNameFN = function() {
|
||||||
|
var selectedRows = torrentsTable.selectedRowsIds();
|
||||||
|
var names = [];
|
||||||
|
if (selectedRows.length) {
|
||||||
|
var rows = torrentsTable.getFilteredAndSortedRows();
|
||||||
|
for (var i = 0; i < selectedRows.length; i++) {
|
||||||
|
var hash = selectedRows[i];
|
||||||
|
names.push(rows[hash].full_data.name);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return names.join("\n");
|
||||||
|
};
|
||||||
|
|
||||||
|
copyMagnetLinkFN = function() {
|
||||||
|
var selectedRows = torrentsTable.selectedRowsIds();
|
||||||
|
var magnets = [];
|
||||||
|
if (selectedRows.length) {
|
||||||
|
var rows = torrentsTable.getFilteredAndSortedRows();
|
||||||
|
for (var i = 0; i < selectedRows.length; i++) {
|
||||||
|
var hash = selectedRows[i];
|
||||||
|
magnets.push(rows[hash].full_data.magnet_uri);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return magnets.join("\n");
|
||||||
|
};
|
||||||
|
|
||||||
|
copyHashFN = function() {
|
||||||
|
return torrentsTable.selectedRowsIds().join("\n");
|
||||||
|
};
|
||||||
|
|
||||||
['pauseAll', 'resumeAll'].each(function(item) {
|
['pauseAll', 'resumeAll'].each(function(item) {
|
||||||
addClickEvent(item, function(e) {
|
addClickEvent(item, function(e) {
|
||||||
new Event(e).stop();
|
new Event(e).stop();
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue