|
|
@ -109,6 +109,7 @@ PeerListWidget::PeerListWidget(PropertiesWidget *parent): |
|
|
|
// SIGNAL/SLOT
|
|
|
|
// SIGNAL/SLOT
|
|
|
|
connect(header(), SIGNAL(sectionClicked(int)), SLOT(handleSortColumnChanged(int))); |
|
|
|
connect(header(), SIGNAL(sectionClicked(int)), SLOT(handleSortColumnChanged(int))); |
|
|
|
handleSortColumnChanged(header()->sortIndicatorSection()); |
|
|
|
handleSortColumnChanged(header()->sortIndicatorSection()); |
|
|
|
|
|
|
|
copyHotkey = new QShortcut(QKeySequence(Qt::ControlModifier + Qt::Key_C), this, SLOT(copySelectedPeers()), 0, Qt::WidgetShortcut); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
PeerListWidget::~PeerListWidget() |
|
|
|
PeerListWidget::~PeerListWidget() |
|
|
@ -119,6 +120,7 @@ PeerListWidget::~PeerListWidget() |
|
|
|
delete m_listDelegate; |
|
|
|
delete m_listDelegate; |
|
|
|
if (m_resolver) |
|
|
|
if (m_resolver) |
|
|
|
delete m_resolver; |
|
|
|
delete m_resolver; |
|
|
|
|
|
|
|
delete copyHotkey; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PeerListWidget::updatePeerHostNameResolutionState() |
|
|
|
void PeerListWidget::updatePeerHostNameResolutionState() |
|
|
@ -151,19 +153,6 @@ void PeerListWidget::showPeerListMenu(const QPoint&) |
|
|
|
BitTorrent::TorrentHandle *const torrent = m_properties->getCurrentTorrent(); |
|
|
|
BitTorrent::TorrentHandle *const torrent = m_properties->getCurrentTorrent(); |
|
|
|
if (!torrent) return; |
|
|
|
if (!torrent) return; |
|
|
|
|
|
|
|
|
|
|
|
QModelIndexList selectedIndexes = selectionModel()->selectedRows(); |
|
|
|
|
|
|
|
QStringList selectedPeerIPs; |
|
|
|
|
|
|
|
QStringList selectedPeerIPPort; |
|
|
|
|
|
|
|
foreach (const QModelIndex &index, selectedIndexes) { |
|
|
|
|
|
|
|
int row = m_proxyModel->mapToSource(index).row(); |
|
|
|
|
|
|
|
QString myip = m_listModel->data(m_listModel->index(row, PeerListDelegate::IP_HIDDEN)).toString(); |
|
|
|
|
|
|
|
QString myport = m_listModel->data(m_listModel->index(row, PeerListDelegate::PORT)).toString(); |
|
|
|
|
|
|
|
selectedPeerIPs << myip; |
|
|
|
|
|
|
|
if (myip.indexOf(".") == -1) // IPv6
|
|
|
|
|
|
|
|
selectedPeerIPPort << "[" + myip + "]:" + myport; |
|
|
|
|
|
|
|
else // IPv4
|
|
|
|
|
|
|
|
selectedPeerIPPort << myip + ":" + myport; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
// Add Peer Action
|
|
|
|
// Add Peer Action
|
|
|
|
QAction *addPeerAct = 0; |
|
|
|
QAction *addPeerAct = 0; |
|
|
|
if (!torrent->isQueued() && !torrent->isChecking()) { |
|
|
|
if (!torrent->isQueued() && !torrent->isChecking()) { |
|
|
@ -172,7 +161,7 @@ void PeerListWidget::showPeerListMenu(const QPoint&) |
|
|
|
} |
|
|
|
} |
|
|
|
QAction *banAct = 0; |
|
|
|
QAction *banAct = 0; |
|
|
|
QAction *copyPeerAct = 0; |
|
|
|
QAction *copyPeerAct = 0; |
|
|
|
if (!selectedPeerIPs.isEmpty()) { |
|
|
|
if (!selectionModel()->selectedRows().isEmpty()) { |
|
|
|
copyPeerAct = menu.addAction(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy selected")); |
|
|
|
copyPeerAct = menu.addAction(GuiIconProvider::instance()->getIcon("edit-copy"), tr("Copy selected")); |
|
|
|
menu.addSeparator(); |
|
|
|
menu.addSeparator(); |
|
|
|
banAct = menu.addAction(GuiIconProvider::instance()->getIcon("user-group-delete"), tr("Ban peer permanently")); |
|
|
|
banAct = menu.addAction(GuiIconProvider::instance()->getIcon("user-group-delete"), tr("Ban peer permanently")); |
|
|
@ -201,28 +190,28 @@ void PeerListWidget::showPeerListMenu(const QPoint&) |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (act == banAct) { |
|
|
|
if (act == banAct) { |
|
|
|
banSelectedPeers(selectedPeerIPs); |
|
|
|
banSelectedPeers(); |
|
|
|
return; |
|
|
|
return; |
|
|
|
} |
|
|
|
} |
|
|
|
if (act == copyPeerAct) { |
|
|
|
if (act == copyPeerAct) { |
|
|
|
#if defined(Q_OS_WIN) || defined(Q_OS_OS2) |
|
|
|
copySelectedPeers(); |
|
|
|
QApplication::clipboard()->setText(selectedPeerIPPort.join("\r\n")); |
|
|
|
return; |
|
|
|
#else |
|
|
|
|
|
|
|
QApplication::clipboard()->setText(selectedPeerIPPort.join("\n")); |
|
|
|
|
|
|
|
#endif |
|
|
|
|
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PeerListWidget::banSelectedPeers(const QStringList& peer_ips) |
|
|
|
void PeerListWidget::banSelectedPeers() |
|
|
|
{ |
|
|
|
{ |
|
|
|
// Confirm first
|
|
|
|
// Confirm first
|
|
|
|
int ret = QMessageBox::question(this, tr("Are you sure? -- qBittorrent"), tr("Are you sure you want to ban permanently the selected peers?"), |
|
|
|
int ret = QMessageBox::question(this, tr("Ban peer permanently"), tr("Are you sure you want to ban permanently the selected peers?"), |
|
|
|
tr("&Yes"), tr("&No"), |
|
|
|
tr("&Yes"), tr("&No"), |
|
|
|
QString(), 0, 1); |
|
|
|
QString(), 0, 1); |
|
|
|
if (ret) |
|
|
|
if (ret) |
|
|
|
return; |
|
|
|
return; |
|
|
|
|
|
|
|
|
|
|
|
foreach (const QString &ip, peer_ips) { |
|
|
|
QModelIndexList selectedIndexes = selectionModel()->selectedRows(); |
|
|
|
|
|
|
|
foreach (const QModelIndex &index, selectedIndexes) { |
|
|
|
|
|
|
|
int row = m_proxyModel->mapToSource(index).row(); |
|
|
|
|
|
|
|
QString ip = m_listModel->data(m_listModel->index(row, PeerListDelegate::IP_HIDDEN)).toString(); |
|
|
|
qDebug("Banning peer %s...", ip.toLocal8Bit().data()); |
|
|
|
qDebug("Banning peer %s...", ip.toLocal8Bit().data()); |
|
|
|
Logger::instance()->addMessage(tr("Manually banning peer %1...").arg(ip)); |
|
|
|
Logger::instance()->addMessage(tr("Manually banning peer %1...").arg(ip)); |
|
|
|
BitTorrent::Session::instance()->banIP(ip); |
|
|
|
BitTorrent::Session::instance()->banIP(ip); |
|
|
@ -231,6 +220,22 @@ void PeerListWidget::banSelectedPeers(const QStringList& peer_ips) |
|
|
|
loadPeers(m_properties->getCurrentTorrent()); |
|
|
|
loadPeers(m_properties->getCurrentTorrent()); |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
void PeerListWidget::copySelectedPeers() |
|
|
|
|
|
|
|
{ |
|
|
|
|
|
|
|
QModelIndexList selectedIndexes = selectionModel()->selectedRows(); |
|
|
|
|
|
|
|
QStringList selectedPeers; |
|
|
|
|
|
|
|
foreach (const QModelIndex &index, selectedIndexes) { |
|
|
|
|
|
|
|
int row = m_proxyModel->mapToSource(index).row(); |
|
|
|
|
|
|
|
QString ip = m_listModel->data(m_listModel->index(row, PeerListDelegate::IP_HIDDEN)).toString(); |
|
|
|
|
|
|
|
QString myport = m_listModel->data(m_listModel->index(row, PeerListDelegate::PORT)).toString(); |
|
|
|
|
|
|
|
if (ip.indexOf(".") == -1) // IPv6
|
|
|
|
|
|
|
|
selectedPeers << "[" + ip + "]:" + myport; |
|
|
|
|
|
|
|
else // IPv4
|
|
|
|
|
|
|
|
selectedPeers << ip + ":" + myport; |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
QApplication::clipboard()->setText(selectedPeers.join("\n")); |
|
|
|
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
void PeerListWidget::clear() { |
|
|
|
void PeerListWidget::clear() { |
|
|
|
qDebug("clearing peer list"); |
|
|
|
qDebug("clearing peer list"); |
|
|
|
m_peerItems.clear(); |
|
|
|
m_peerItems.clear(); |
|
|
|