mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-25 22:14:32 +00:00
Split some "header only" sources.
This commit is contained in:
parent
5f288d228d
commit
7d73bddfd2
@ -28,22 +28,6 @@
|
|||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "addnewtorrentdialog.h"
|
|
||||||
#include "ui_addnewtorrentdialog.h"
|
|
||||||
#include "proplistdelegate.h"
|
|
||||||
#include "torrentcontentmodel.h"
|
|
||||||
#include "torrentcontentfiltermodel.h"
|
|
||||||
#include "core/preferences.h"
|
|
||||||
#include "core/net/downloadmanager.h"
|
|
||||||
#include "core/net/downloadhandler.h"
|
|
||||||
#include "core/bittorrent/session.h"
|
|
||||||
#include "core/bittorrent/magneturi.h"
|
|
||||||
#include "core/bittorrent/torrentinfo.h"
|
|
||||||
#include "guiiconprovider.h"
|
|
||||||
#include "core/utils/fs.h"
|
|
||||||
#include "autoexpandabledialog.h"
|
|
||||||
#include "messageboxraised.h"
|
|
||||||
|
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QString>
|
#include <QString>
|
||||||
#include <QFile>
|
#include <QFile>
|
||||||
@ -51,6 +35,24 @@
|
|||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QFileDialog>
|
#include <QFileDialog>
|
||||||
|
|
||||||
|
#include "core/preferences.h"
|
||||||
|
#include "core/net/downloadmanager.h"
|
||||||
|
#include "core/net/downloadhandler.h"
|
||||||
|
#include "core/bittorrent/session.h"
|
||||||
|
#include "core/bittorrent/magneturi.h"
|
||||||
|
#include "core/bittorrent/torrentinfo.h"
|
||||||
|
#include "core/bittorrent/torrenthandle.h"
|
||||||
|
#include "core/utils/fs.h"
|
||||||
|
#include "core/utils/misc.h"
|
||||||
|
#include "guiiconprovider.h"
|
||||||
|
#include "autoexpandabledialog.h"
|
||||||
|
#include "messageboxraised.h"
|
||||||
|
#include "ui_addnewtorrentdialog.h"
|
||||||
|
#include "proplistdelegate.h"
|
||||||
|
#include "torrentcontentmodel.h"
|
||||||
|
#include "torrentcontentfiltermodel.h"
|
||||||
|
#include "addnewtorrentdialog.h"
|
||||||
|
|
||||||
AddNewTorrentDialog::AddNewTorrentDialog(QWidget *parent)
|
AddNewTorrentDialog::AddNewTorrentDialog(QWidget *parent)
|
||||||
: QDialog(parent)
|
: QDialog(parent)
|
||||||
, ui(new Ui::AddNewTorrentDialog)
|
, ui(new Ui::AddNewTorrentDialog)
|
||||||
|
81
src/gui/properties/peeraddition.cpp
Normal file
81
src/gui/properties/peeraddition.cpp
Normal file
@ -0,0 +1,81 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QRegExp>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
#include "core/bittorrent/peerinfo.h"
|
||||||
|
#include "peeraddition.h"
|
||||||
|
|
||||||
|
PeerAdditionDlg::PeerAdditionDlg(QWidget *parent)
|
||||||
|
: QDialog(parent)
|
||||||
|
{
|
||||||
|
setupUi(this);
|
||||||
|
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
|
||||||
|
connect(buttonBox, SIGNAL(accepted()), this, SLOT(validateInput()));
|
||||||
|
}
|
||||||
|
|
||||||
|
QHostAddress PeerAdditionDlg::getAddress() const
|
||||||
|
{
|
||||||
|
return QHostAddress(lineIP->text());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
ushort PeerAdditionDlg::getPort() const
|
||||||
|
{
|
||||||
|
return spinPort->value();
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
BitTorrent::PeerAddress PeerAdditionDlg::askForPeerAddress()
|
||||||
|
{
|
||||||
|
BitTorrent::PeerAddress addr;
|
||||||
|
|
||||||
|
PeerAdditionDlg dlg;
|
||||||
|
if (dlg.exec() == QDialog::Accepted) {
|
||||||
|
addr.ip = dlg.getAddress();
|
||||||
|
if (addr.ip.isNull())
|
||||||
|
qDebug("Unable to parse the provided IP.");
|
||||||
|
else
|
||||||
|
qDebug("Provided IP is correct");
|
||||||
|
addr.port = dlg.getPort();
|
||||||
|
}
|
||||||
|
|
||||||
|
return addr;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void PeerAdditionDlg::validateInput()
|
||||||
|
{
|
||||||
|
if (getAddress().isNull())
|
||||||
|
QMessageBox::warning(this, tr("Invalid IP"), tr("The IP you provided is invalid."), QMessageBox::Ok);
|
||||||
|
else
|
||||||
|
accept();
|
||||||
|
}
|
@ -32,64 +32,29 @@
|
|||||||
#define PEERADDITION_H
|
#define PEERADDITION_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QRegExp>
|
|
||||||
#include <QMessageBox>
|
|
||||||
|
|
||||||
#include "core/bittorrent/peerinfo.h"
|
|
||||||
#include "ui_peer.h"
|
#include "ui_peer.h"
|
||||||
|
|
||||||
class PeerAdditionDlg: public QDialog, private Ui::addPeerDialog
|
class QHostAddress;
|
||||||
|
|
||||||
|
namespace BitTorrent
|
||||||
|
{
|
||||||
|
struct PeerAddress;
|
||||||
|
}
|
||||||
|
|
||||||
|
class PeerAdditionDlg : public QDialog, private Ui::addPeerDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PeerAdditionDlg(QWidget *parent=0)
|
PeerAdditionDlg(QWidget *parent = 0);
|
||||||
: QDialog(parent)
|
|
||||||
{
|
|
||||||
setupUi(this);
|
|
||||||
connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject()));
|
|
||||||
connect(buttonBox, SIGNAL(accepted()), this, SLOT(validateInput()));
|
|
||||||
}
|
|
||||||
|
|
||||||
~PeerAdditionDlg()
|
QHostAddress getAddress() const;
|
||||||
{
|
ushort getPort() const;
|
||||||
}
|
|
||||||
|
|
||||||
QHostAddress getAddress() const
|
|
||||||
{
|
|
||||||
return QHostAddress(lineIP->text());
|
|
||||||
}
|
|
||||||
|
|
||||||
ushort getPort() const
|
|
||||||
{
|
|
||||||
return spinPort->value();
|
|
||||||
}
|
|
||||||
|
|
||||||
static BitTorrent::PeerAddress askForPeerAddress()
|
|
||||||
{
|
|
||||||
BitTorrent::PeerAddress addr;
|
|
||||||
|
|
||||||
PeerAdditionDlg dlg;
|
|
||||||
if (dlg.exec() == QDialog::Accepted) {
|
|
||||||
addr.ip = dlg.getAddress();
|
|
||||||
if (addr.ip.isNull())
|
|
||||||
qDebug("Unable to parse the provided IP.");
|
|
||||||
else
|
|
||||||
qDebug("Provided IP is correct");
|
|
||||||
addr.port = dlg.getPort();
|
|
||||||
}
|
|
||||||
|
|
||||||
return addr;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
static BitTorrent::PeerAddress askForPeerAddress();
|
||||||
|
|
||||||
protected slots:
|
protected slots:
|
||||||
void validateInput() {
|
void validateInput();
|
||||||
if (getAddress().isNull())
|
|
||||||
QMessageBox::warning(this, tr("Invalid IP"), tr("The IP you provided is invalid."), QMessageBox::Ok);
|
|
||||||
else
|
|
||||||
accept();
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // PEERADDITION_H
|
#endif // PEERADDITION_H
|
||||||
|
@ -28,26 +28,27 @@
|
|||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include "peerlistwidget.h"
|
|
||||||
#include "peerlistdelegate.h"
|
|
||||||
#include "peerlistsortmodel.h"
|
|
||||||
#include "core/net/reverseresolution.h"
|
|
||||||
#include "core/preferences.h"
|
|
||||||
#include "propertieswidget.h"
|
|
||||||
#include "geoipmanager.h"
|
|
||||||
#include "peeraddition.h"
|
|
||||||
#include "speedlimitdlg.h"
|
|
||||||
#include "guiiconprovider.h"
|
|
||||||
#include "core/bittorrent/torrenthandle.h"
|
|
||||||
#include "core/bittorrent/peerinfo.h"
|
|
||||||
#include "core/logger.h"
|
|
||||||
|
|
||||||
#include <QStandardItemModel>
|
#include <QStandardItemModel>
|
||||||
#include <QSortFilterProxyModel>
|
#include <QSortFilterProxyModel>
|
||||||
#include <QSet>
|
#include <QSet>
|
||||||
#include <QHeaderView>
|
#include <QHeaderView>
|
||||||
#include <QMenu>
|
#include <QMenu>
|
||||||
#include <QClipboard>
|
#include <QClipboard>
|
||||||
|
#include <QMessageBox>
|
||||||
|
|
||||||
|
#include "core/net/reverseresolution.h"
|
||||||
|
#include "core/bittorrent/torrenthandle.h"
|
||||||
|
#include "core/bittorrent/peerinfo.h"
|
||||||
|
#include "core/preferences.h"
|
||||||
|
#include "core/logger.h"
|
||||||
|
#include "propertieswidget.h"
|
||||||
|
#include "geoipmanager.h"
|
||||||
|
#include "peeraddition.h"
|
||||||
|
#include "speedlimitdlg.h"
|
||||||
|
#include "guiiconprovider.h"
|
||||||
|
#include "peerlistdelegate.h"
|
||||||
|
#include "peerlistsortmodel.h"
|
||||||
|
#include "peerlistwidget.h"
|
||||||
|
|
||||||
PeerListWidget::PeerListWidget(PropertiesWidget *parent):
|
PeerListWidget::PeerListWidget(PropertiesWidget *parent):
|
||||||
QTreeView(parent), m_properties(parent), m_displayFlags(false)
|
QTreeView(parent), m_properties(parent), m_displayFlags(false)
|
||||||
|
@ -17,8 +17,11 @@ HEADERS += $$PWD/propertieswidget.h \
|
|||||||
$$PWD/proptabbar.h
|
$$PWD/proptabbar.h
|
||||||
|
|
||||||
SOURCES += $$PWD/propertieswidget.cpp \
|
SOURCES += $$PWD/propertieswidget.cpp \
|
||||||
|
$$PWD/proplistdelegate.cpp \
|
||||||
$$PWD/peerlistwidget.cpp \
|
$$PWD/peerlistwidget.cpp \
|
||||||
$$PWD/trackerlist.cpp \
|
$$PWD/trackerlist.cpp \
|
||||||
$$PWD/proptabbar.cpp \
|
$$PWD/proptabbar.cpp \
|
||||||
$$PWD/downloadedpiecesbar.cpp \
|
$$PWD/downloadedpiecesbar.cpp \
|
||||||
|
$$PWD/peeraddition.cpp \
|
||||||
|
$$PWD/trackersadditiondlg.cpp \
|
||||||
$$PWD/pieceavailabilitybar.cpp
|
$$PWD/pieceavailabilitybar.cpp
|
||||||
|
@ -42,9 +42,11 @@
|
|||||||
#include <QDesktopServices>
|
#include <QDesktopServices>
|
||||||
#include <QBitArray>
|
#include <QBitArray>
|
||||||
|
|
||||||
#include "propertieswidget.h"
|
|
||||||
#include "transferlistwidget.h"
|
|
||||||
#include "core/bittorrent/session.h"
|
#include "core/bittorrent/session.h"
|
||||||
|
#include "core/preferences.h"
|
||||||
|
#include "core/utils/fs.h"
|
||||||
|
#include "core/utils/misc.h"
|
||||||
|
#include "core/utils/string.h"
|
||||||
#include "proplistdelegate.h"
|
#include "proplistdelegate.h"
|
||||||
#include "torrentcontentfiltermodel.h"
|
#include "torrentcontentfiltermodel.h"
|
||||||
#include "torrentcontentmodel.h"
|
#include "torrentcontentmodel.h"
|
||||||
@ -53,13 +55,12 @@
|
|||||||
#include "mainwindow.h"
|
#include "mainwindow.h"
|
||||||
#include "downloadedpiecesbar.h"
|
#include "downloadedpiecesbar.h"
|
||||||
#include "pieceavailabilitybar.h"
|
#include "pieceavailabilitybar.h"
|
||||||
#include "core/preferences.h"
|
|
||||||
#include "proptabbar.h"
|
#include "proptabbar.h"
|
||||||
#include "guiiconprovider.h"
|
#include "guiiconprovider.h"
|
||||||
#include "lineedit.h"
|
#include "lineedit.h"
|
||||||
#include "core/utils/fs.h"
|
#include "transferlistwidget.h"
|
||||||
#include "core/utils/string.h"
|
|
||||||
#include "autoexpandabledialog.h"
|
#include "autoexpandabledialog.h"
|
||||||
|
#include "propertieswidget.h"
|
||||||
|
|
||||||
PropertiesWidget::PropertiesWidget(QWidget *parent, MainWindow* main_window, TransferListWidget *transferList):
|
PropertiesWidget::PropertiesWidget(QWidget *parent, MainWindow* main_window, TransferListWidget *transferList):
|
||||||
QWidget(parent), transferList(transferList), main_window(main_window), m_torrent(0) {
|
QWidget(parent), transferList(transferList), main_window(main_window), m_torrent(0) {
|
||||||
|
191
src/gui/properties/proplistdelegate.cpp
Normal file
191
src/gui/properties/proplistdelegate.cpp
Normal file
@ -0,0 +1,191 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QStyleOptionProgressBarV2>
|
||||||
|
#include <QStyleOptionViewItemV2>
|
||||||
|
#include <QStyleOptionComboBox>
|
||||||
|
#include <QComboBox>
|
||||||
|
#include <QModelIndex>
|
||||||
|
#include <QPainter>
|
||||||
|
#include <QProgressBar>
|
||||||
|
#include <QApplication>
|
||||||
|
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
|
||||||
|
#include <QPlastiqueStyle>
|
||||||
|
#else
|
||||||
|
#include <QProxyStyle>
|
||||||
|
#endif
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#include "core/utils/misc.h"
|
||||||
|
#include "core/utils/string.h"
|
||||||
|
#include "propertieswidget.h"
|
||||||
|
#include "proplistdelegate.h"
|
||||||
|
|
||||||
|
PropListDelegate::PropListDelegate(PropertiesWidget *properties, QObject *parent)
|
||||||
|
: QItemDelegate(parent)
|
||||||
|
, m_properties(properties)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropListDelegate::paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
painter->save();
|
||||||
|
QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option);
|
||||||
|
|
||||||
|
switch(index.column()) {
|
||||||
|
case PCSIZE:
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::friendlyUnit(index.data().toLongLong()));
|
||||||
|
break;
|
||||||
|
case PROGRESS:
|
||||||
|
if (index.data().toDouble() >= 0) {
|
||||||
|
QStyleOptionProgressBarV2 newopt;
|
||||||
|
qreal progress = index.data().toDouble() * 100.;
|
||||||
|
newopt.rect = opt.rect;
|
||||||
|
newopt.text = ((progress == 100.0) ? QString("100%") : Utils::String::fromDouble(progress, 1) + "%");
|
||||||
|
newopt.progress = (int)progress;
|
||||||
|
newopt.maximum = 100;
|
||||||
|
newopt.minimum = 0;
|
||||||
|
newopt.state |= QStyle::State_Enabled;
|
||||||
|
newopt.textVisible = true;
|
||||||
|
#ifndef Q_OS_WIN
|
||||||
|
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
|
||||||
|
#else
|
||||||
|
// XXX: To avoid having the progress text on the right of the bar
|
||||||
|
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
|
||||||
|
QPlastiqueStyle st;
|
||||||
|
#else
|
||||||
|
QProxyStyle st("fusion");
|
||||||
|
#endif
|
||||||
|
st.drawControl(QStyle::CE_ProgressBar, &newopt, painter, 0);
|
||||||
|
#endif
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
// Do not display anything if the file is disabled (progress == 0)
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
case PRIORITY: {
|
||||||
|
QItemDelegate::drawBackground(painter, opt, index);
|
||||||
|
QString text = "";
|
||||||
|
switch (index.data().toInt()) {
|
||||||
|
case -1:
|
||||||
|
text = tr("Mixed", "Mixed (priorities");
|
||||||
|
break;
|
||||||
|
case 0:
|
||||||
|
text = tr("Not downloaded");
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
text = tr("High", "High (priority)");
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
text = tr("Maximum", "Maximum (priority)");
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
text = tr("Normal", "Normal (priority)");
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
QItemDelegate::drawDisplay(painter, opt, option.rect, text);
|
||||||
|
}
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
QItemDelegate::paint(painter, option, index);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
painter->restore();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropListDelegate::setEditorData(QWidget *editor, const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
QComboBox *combobox = static_cast<QComboBox*>(editor);
|
||||||
|
// Set combobox index
|
||||||
|
switch(index.data().toInt()) {
|
||||||
|
case 2:
|
||||||
|
combobox->setCurrentIndex(1);
|
||||||
|
break;
|
||||||
|
case 7:
|
||||||
|
combobox->setCurrentIndex(2);
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
combobox->setCurrentIndex(0);
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
QWidget *PropListDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &, const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
if (index.column() != PRIORITY) return 0;
|
||||||
|
|
||||||
|
if (m_properties) {
|
||||||
|
BitTorrent::TorrentHandle *const torrent = m_properties->getCurrentTorrent();
|
||||||
|
if (!torrent || !torrent->hasMetadata() || torrent->isSeed())
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (index.data().toInt() <= 0) {
|
||||||
|
// IGNORED or MIXED
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QComboBox* editor = new QComboBox(parent);
|
||||||
|
editor->setFocusPolicy(Qt::StrongFocus);
|
||||||
|
editor->addItem(tr("Normal", "Normal (priority)"));
|
||||||
|
editor->addItem(tr("High", "High (priority)"));
|
||||||
|
editor->addItem(tr("Maximum", "Maximum (priority)"));
|
||||||
|
return editor;
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropListDelegate::setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
QComboBox *combobox = static_cast<QComboBox*>(editor);
|
||||||
|
int value = combobox->currentIndex();
|
||||||
|
qDebug("PropListDelegate: setModelData(%d)", value);
|
||||||
|
|
||||||
|
switch(value) {
|
||||||
|
case 1:
|
||||||
|
model->setData(index, 2); // HIGH
|
||||||
|
break;
|
||||||
|
case 2:
|
||||||
|
model->setData(index, 7); // MAX
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
model->setData(index, 1); // NORMAL
|
||||||
|
}
|
||||||
|
|
||||||
|
emit filteredFilesChanged();
|
||||||
|
}
|
||||||
|
|
||||||
|
void PropListDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &) const
|
||||||
|
{
|
||||||
|
qDebug("UpdateEditor Geometry called");
|
||||||
|
editor->setGeometry(option.rect);
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Bittorrent Client using Qt4 and libtorrent.
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
* Copyright (C) 2006 Christophe Dumez
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
@ -32,168 +32,42 @@
|
|||||||
#define PROPLISTDELEGATE_H
|
#define PROPLISTDELEGATE_H
|
||||||
|
|
||||||
#include <QItemDelegate>
|
#include <QItemDelegate>
|
||||||
#include <QStyleOptionProgressBarV2>
|
|
||||||
#include <QStyleOptionViewItemV2>
|
|
||||||
#include <QStyleOptionComboBox>
|
|
||||||
#include <QComboBox>
|
|
||||||
#include <QModelIndex>
|
|
||||||
#include <QPainter>
|
|
||||||
#include <QProgressBar>
|
|
||||||
#include <QApplication>
|
|
||||||
#include "core/utils/misc.h"
|
|
||||||
#include "core/utils/string.h"
|
|
||||||
#include "propertieswidget.h"
|
|
||||||
|
|
||||||
#ifdef Q_OS_WIN
|
class QPainter;
|
||||||
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
|
class QModelIndex;
|
||||||
#include <QPlastiqueStyle>
|
class QStyleOptionViewItem;
|
||||||
#else
|
class QAbstractItemModel;
|
||||||
#include <QProxyStyle>
|
class PropertiesWidget;
|
||||||
#endif
|
|
||||||
#endif
|
|
||||||
|
|
||||||
// Defines for properties list columns
|
// Defines for properties list columns
|
||||||
enum PropColumn {NAME, PCSIZE, PROGRESS, PRIORITY};
|
enum PropColumn
|
||||||
|
{
|
||||||
|
NAME,
|
||||||
|
PCSIZE,
|
||||||
|
PROGRESS,
|
||||||
|
PRIORITY
|
||||||
|
};
|
||||||
|
|
||||||
class PropListDelegate: public QItemDelegate {
|
class PropListDelegate : public QItemDelegate
|
||||||
Q_OBJECT
|
{
|
||||||
|
Q_OBJECT
|
||||||
private:
|
|
||||||
PropertiesWidget *properties;
|
|
||||||
|
|
||||||
signals:
|
|
||||||
void filteredFilesChanged() const;
|
|
||||||
|
|
||||||
public:
|
public:
|
||||||
PropListDelegate(PropertiesWidget* properties=0, QObject *parent=0) : QItemDelegate(parent), properties(properties) {
|
PropListDelegate(PropertiesWidget *properties = 0, QObject *parent = 0);
|
||||||
}
|
|
||||||
|
|
||||||
~PropListDelegate() {}
|
void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const;
|
||||||
|
void setEditorData(QWidget *editor, const QModelIndex &index) const;
|
||||||
void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const {
|
QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &index) const;
|
||||||
painter->save();
|
|
||||||
QStyleOptionViewItemV2 opt = QItemDelegate::setOptions(index, option);
|
|
||||||
switch(index.column()) {
|
|
||||||
case PCSIZE:
|
|
||||||
QItemDelegate::drawBackground(painter, opt, index);
|
|
||||||
QItemDelegate::drawDisplay(painter, opt, option.rect, Utils::Misc::friendlyUnit(index.data().toLongLong()));
|
|
||||||
break;
|
|
||||||
case PROGRESS:{
|
|
||||||
if (index.data().toDouble() >= 0) {
|
|
||||||
QStyleOptionProgressBarV2 newopt;
|
|
||||||
qreal progress = index.data().toDouble()*100.;
|
|
||||||
newopt.rect = opt.rect;
|
|
||||||
newopt.text = ((progress == 100.0) ? QString("100%") : Utils::String::fromDouble(progress, 1) + "%");
|
|
||||||
newopt.progress = (int)progress;
|
|
||||||
newopt.maximum = 100;
|
|
||||||
newopt.minimum = 0;
|
|
||||||
newopt.state |= QStyle::State_Enabled;
|
|
||||||
newopt.textVisible = true;
|
|
||||||
#ifndef Q_OS_WIN
|
|
||||||
QApplication::style()->drawControl(QStyle::CE_ProgressBar, &newopt, painter);
|
|
||||||
#else
|
|
||||||
// XXX: To avoid having the progress text on the right of the bar
|
|
||||||
#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0))
|
|
||||||
QPlastiqueStyle st;
|
|
||||||
#else
|
|
||||||
QProxyStyle st("fusion");
|
|
||||||
#endif
|
|
||||||
st.drawControl(QStyle::CE_ProgressBar, &newopt, painter, 0);
|
|
||||||
#endif
|
|
||||||
} else {
|
|
||||||
// Do not display anything if the file is disabled (progress == -1)
|
|
||||||
QItemDelegate::drawBackground(painter, opt, index);
|
|
||||||
}
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
case PRIORITY: {
|
|
||||||
QItemDelegate::drawBackground(painter, opt, index);
|
|
||||||
QString text = "";
|
|
||||||
switch(index.data().toInt()) {
|
|
||||||
case -1:
|
|
||||||
text = tr("Mixed", "Mixed (priorities");
|
|
||||||
break;
|
|
||||||
case 0:
|
|
||||||
text = tr("Not downloaded");
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
text = tr("High", "High (priority)");
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
text = tr("Maximum", "Maximum (priority)");
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
text = tr("Normal", "Normal (priority)");
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
QItemDelegate::drawDisplay(painter, opt, option.rect, text);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
default:
|
|
||||||
QItemDelegate::paint(painter, option, index);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
painter->restore();
|
|
||||||
}
|
|
||||||
|
|
||||||
void setEditorData(QWidget *editor, const QModelIndex &index) const {
|
|
||||||
QComboBox *combobox = static_cast<QComboBox*>(editor);
|
|
||||||
// Set combobox index
|
|
||||||
switch(index.data().toInt()) {
|
|
||||||
case 2:
|
|
||||||
combobox->setCurrentIndex(1);
|
|
||||||
break;
|
|
||||||
case 7:
|
|
||||||
combobox->setCurrentIndex(2);
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
combobox->setCurrentIndex(0);
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QWidget* createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &index) const {
|
|
||||||
if (index.column() != PRIORITY) return 0;
|
|
||||||
if (properties) {
|
|
||||||
BitTorrent::TorrentHandle *const torrent = properties->getCurrentTorrent();
|
|
||||||
if (!torrent || !torrent->hasMetadata() || torrent->isSeed())
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
if (index.data().toInt() <= 0) {
|
|
||||||
// IGNORED or MIXED
|
|
||||||
return 0;
|
|
||||||
}
|
|
||||||
QComboBox* editor = new QComboBox(parent);
|
|
||||||
editor->setFocusPolicy(Qt::StrongFocus);
|
|
||||||
editor->addItem(tr("Normal", "Normal (priority)"));
|
|
||||||
editor->addItem(tr("High", "High (priority)"));
|
|
||||||
editor->addItem(tr("Maximum", "Maximum (priority)"));
|
|
||||||
return editor;
|
|
||||||
}
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const {
|
void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const;
|
||||||
QComboBox *combobox = static_cast<QComboBox*>(editor);
|
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const;
|
||||||
int value = combobox->currentIndex();
|
|
||||||
qDebug("PropListDelegate: setModelData(%d)", value);
|
|
||||||
switch(value) {
|
|
||||||
case 1:
|
|
||||||
model->setData(index, 2); // HIGH
|
|
||||||
break;
|
|
||||||
case 2:
|
|
||||||
model->setData(index, 7); // MAX
|
|
||||||
break;
|
|
||||||
default:
|
|
||||||
model->setData(index, 1); // NORMAL
|
|
||||||
}
|
|
||||||
emit filteredFilesChanged();
|
|
||||||
}
|
|
||||||
|
|
||||||
void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const {
|
signals:
|
||||||
qDebug("UpdateEditor Geometry called");
|
void filteredFilesChanged() const;
|
||||||
editor->setGeometry(option.rect);
|
|
||||||
}
|
|
||||||
|
|
||||||
|
private:
|
||||||
|
PropertiesWidget *m_properties;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
@ -36,17 +36,19 @@
|
|||||||
#include <QColor>
|
#include <QColor>
|
||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QUrl>
|
#include <QUrl>
|
||||||
#include "trackerlist.h"
|
#include <QMessageBox>
|
||||||
#include "propertieswidget.h"
|
|
||||||
#include "trackersadditiondlg.h"
|
|
||||||
#include "guiiconprovider.h"
|
|
||||||
#include "core/bittorrent/session.h"
|
#include "core/bittorrent/session.h"
|
||||||
#include "core/bittorrent/torrenthandle.h"
|
#include "core/bittorrent/torrenthandle.h"
|
||||||
#include "core/bittorrent/peerinfo.h"
|
#include "core/bittorrent/peerinfo.h"
|
||||||
#include "core/bittorrent/trackerentry.h"
|
#include "core/bittorrent/trackerentry.h"
|
||||||
#include "core/preferences.h"
|
#include "core/preferences.h"
|
||||||
#include "core/utils/misc.h"
|
#include "core/utils/misc.h"
|
||||||
|
#include "propertieswidget.h"
|
||||||
|
#include "trackersadditiondlg.h"
|
||||||
|
#include "guiiconprovider.h"
|
||||||
#include "autoexpandabledialog.h"
|
#include "autoexpandabledialog.h"
|
||||||
|
#include "trackerlist.h"
|
||||||
|
|
||||||
TrackerList::TrackerList(PropertiesWidget *properties): QTreeWidget(), properties(properties) {
|
TrackerList::TrackerList(PropertiesWidget *properties): QTreeWidget(), properties(properties) {
|
||||||
// Graphical settings
|
// Graphical settings
|
||||||
|
130
src/gui/properties/trackersadditiondlg.cpp
Normal file
130
src/gui/properties/trackersadditiondlg.cpp
Normal file
@ -0,0 +1,130 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
|
*
|
||||||
|
* This program is free software; you can redistribute it and/or
|
||||||
|
* modify it under the terms of the GNU General Public License
|
||||||
|
* as published by the Free Software Foundation; either version 2
|
||||||
|
* of the License, or (at your option) any later version.
|
||||||
|
*
|
||||||
|
* This program is distributed in the hope that it will be useful,
|
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||||
|
* GNU General Public License for more details.
|
||||||
|
*
|
||||||
|
* You should have received a copy of the GNU General Public License
|
||||||
|
* along with this program; if not, write to the Free Software
|
||||||
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
||||||
|
*
|
||||||
|
* In addition, as a special exception, the copyright holders give permission to
|
||||||
|
* link this program with the OpenSSL project's "OpenSSL" library (or with
|
||||||
|
* modified versions of it that use the same license as the "OpenSSL" library),
|
||||||
|
* and distribute the linked executables. You must obey the GNU General Public
|
||||||
|
* License in all respects for all of the code used other than "OpenSSL". If you
|
||||||
|
* modify file(s), you may extend this exception to your version of the file(s),
|
||||||
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
|
* exception statement from your version.
|
||||||
|
*
|
||||||
|
* Contact : chris@qbittorrent.org
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <QStringList>
|
||||||
|
#include <QMessageBox>
|
||||||
|
#include <QFile>
|
||||||
|
#include <QUrl>
|
||||||
|
|
||||||
|
#include "core/utils/misc.h"
|
||||||
|
#include "core/utils/fs.h"
|
||||||
|
#include "core/net/downloadmanager.h"
|
||||||
|
#include "core/net/downloadhandler.h"
|
||||||
|
#include "core/bittorrent/trackerentry.h"
|
||||||
|
#include "core/bittorrent/torrenthandle.h"
|
||||||
|
#include "guiiconprovider.h"
|
||||||
|
#include "trackersadditiondlg.h"
|
||||||
|
|
||||||
|
TrackersAdditionDlg::TrackersAdditionDlg(BitTorrent::TorrentHandle *const torrent, QWidget *parent)
|
||||||
|
: QDialog(parent)
|
||||||
|
, m_torrent(torrent)
|
||||||
|
{
|
||||||
|
setupUi(this);
|
||||||
|
// Icons
|
||||||
|
uTorrentListButton->setIcon(GuiIconProvider::instance()->getIcon("download"));
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList TrackersAdditionDlg::newTrackers() const
|
||||||
|
{
|
||||||
|
return trackers_list->toPlainText().trimmed().split("\n");
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackersAdditionDlg::on_uTorrentListButton_clicked()
|
||||||
|
{
|
||||||
|
uTorrentListButton->setEnabled(false);
|
||||||
|
Net::DownloadHandler *handler = Net::DownloadManager::instance()->downloadUrl(QString("http://www.torrentz.com/announce_%1").arg(m_torrent->hash()));
|
||||||
|
connect(handler, SIGNAL(downloadFinished(QString, QString)), this, SLOT(parseUTorrentList(QString, QString)));
|
||||||
|
connect(handler, SIGNAL(downloadFailed(QString, QString)), this, SLOT(getTrackerError(QString, QString)));
|
||||||
|
//Just to show that it takes times
|
||||||
|
setCursor(Qt::WaitCursor);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackersAdditionDlg::parseUTorrentList(const QString &, const QString &path)
|
||||||
|
{
|
||||||
|
QFile list_file(path);
|
||||||
|
if (!list_file.open(QFile::ReadOnly)) {
|
||||||
|
QMessageBox::warning(this, tr("I/O Error"), tr("Error while trying to open the downloaded file."), QMessageBox::Ok);
|
||||||
|
setCursor(Qt::ArrowCursor);
|
||||||
|
uTorrentListButton->setEnabled(true);
|
||||||
|
Utils::Fs::forceRemove(path);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Load from torrent handle
|
||||||
|
QList<BitTorrent::TrackerEntry> existingTrackers = m_torrent->trackers();
|
||||||
|
// Load from current user list
|
||||||
|
QStringList tmp = trackers_list->toPlainText().split("\n");
|
||||||
|
foreach (const QString &user_url, tmp) {
|
||||||
|
BitTorrent::TrackerEntry userTracker(user_url);
|
||||||
|
if (!existingTrackers.contains(userTracker))
|
||||||
|
existingTrackers << userTracker;
|
||||||
|
}
|
||||||
|
|
||||||
|
// Add new trackers to the list
|
||||||
|
if (!trackers_list->toPlainText().isEmpty() && !trackers_list->toPlainText().endsWith("\n"))
|
||||||
|
trackers_list->insertPlainText("\n");
|
||||||
|
int nb = 0;
|
||||||
|
while (!list_file.atEnd()) {
|
||||||
|
const QByteArray line = list_file.readLine().trimmed();
|
||||||
|
if (line.isEmpty()) continue;
|
||||||
|
BitTorrent::TrackerEntry newTracker(line);
|
||||||
|
if (!existingTrackers.contains(newTracker)) {
|
||||||
|
trackers_list->insertPlainText(line + "\n");
|
||||||
|
++nb;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Clean up
|
||||||
|
list_file.close();
|
||||||
|
Utils::Fs::forceRemove(path);
|
||||||
|
//To restore the cursor ...
|
||||||
|
setCursor(Qt::ArrowCursor);
|
||||||
|
uTorrentListButton->setEnabled(true);
|
||||||
|
// Display information message if necessary
|
||||||
|
if (nb == 0)
|
||||||
|
QMessageBox::information(this, tr("No change"), tr("No additional trackers were found."), QMessageBox::Ok);
|
||||||
|
}
|
||||||
|
|
||||||
|
void TrackersAdditionDlg::getTrackerError(const QString &, const QString &error)
|
||||||
|
{
|
||||||
|
//To restore the cursor ...
|
||||||
|
setCursor(Qt::ArrowCursor);
|
||||||
|
uTorrentListButton->setEnabled(true);
|
||||||
|
QMessageBox::warning(this, tr("Download error"), tr("The trackers list could not be downloaded, reason: %1").arg(error), QMessageBox::Ok);
|
||||||
|
}
|
||||||
|
|
||||||
|
QStringList TrackersAdditionDlg::askForTrackers(BitTorrent::TorrentHandle *const torrent)
|
||||||
|
{
|
||||||
|
QStringList trackers;
|
||||||
|
TrackersAdditionDlg dlg(torrent);
|
||||||
|
if (dlg.exec() == QDialog::Accepted)
|
||||||
|
return dlg.newTrackers();
|
||||||
|
|
||||||
|
return trackers;
|
||||||
|
}
|
@ -1,5 +1,5 @@
|
|||||||
/*
|
/*
|
||||||
* Bittorrent Client using Qt4 and libtorrent.
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
* Copyright (C) 2006 Christophe Dumez
|
* Copyright (C) 2006 Christophe Dumez
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
@ -32,110 +32,33 @@
|
|||||||
#define TRACKERSADDITION_H
|
#define TRACKERSADDITION_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QStringList>
|
|
||||||
#include <QMessageBox>
|
|
||||||
#include <QFile>
|
|
||||||
#include <QUrl>
|
|
||||||
#include "guiiconprovider.h"
|
|
||||||
#include "core/utils/misc.h"
|
|
||||||
#include "ui_trackersadditiondlg.h"
|
#include "ui_trackersadditiondlg.h"
|
||||||
#include "core/net/downloadmanager.h"
|
|
||||||
#include "core/net/downloadhandler.h"
|
|
||||||
#include "core/bittorrent/trackerentry.h"
|
|
||||||
#include "core/bittorrent/torrenthandle.h"
|
|
||||||
#include "core/utils/fs.h"
|
|
||||||
|
|
||||||
class TrackersAdditionDlg : public QDialog, private Ui::TrackersAdditionDlg{
|
class QString;
|
||||||
Q_OBJECT
|
class QStringList;
|
||||||
|
|
||||||
private:
|
namespace BitTorrent
|
||||||
BitTorrent::TorrentHandle *const m_torrent;
|
{
|
||||||
|
class TorrentHandle;
|
||||||
|
}
|
||||||
|
|
||||||
|
class TrackersAdditionDlg : public QDialog, private Ui::TrackersAdditionDlg
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
TrackersAdditionDlg(BitTorrent::TorrentHandle *const torrent, QWidget *parent = 0): QDialog(parent), m_torrent(torrent) {
|
TrackersAdditionDlg(BitTorrent::TorrentHandle *const torrent, QWidget *parent = 0);
|
||||||
setupUi(this);
|
|
||||||
// Icons
|
|
||||||
uTorrentListButton->setIcon(GuiIconProvider::instance()->getIcon("download"));
|
|
||||||
}
|
|
||||||
|
|
||||||
~TrackersAdditionDlg() {}
|
QStringList newTrackers() const;
|
||||||
|
static QStringList askForTrackers(BitTorrent::TorrentHandle *const torrent);
|
||||||
QStringList newTrackers() const {
|
|
||||||
return trackers_list->toPlainText().trimmed().split("\n");
|
|
||||||
}
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void on_uTorrentListButton_clicked() {
|
void on_uTorrentListButton_clicked();
|
||||||
uTorrentListButton->setEnabled(false);
|
void parseUTorrentList(const QString &, const QString &path);
|
||||||
Net::DownloadHandler *handler = Net::DownloadManager::instance()->downloadUrl(QString("http://www.torrentz.com/announce_%1").arg(m_torrent->hash()));
|
void getTrackerError(const QString &, const QString &error);
|
||||||
connect(handler, SIGNAL(downloadFinished(QString, QString)), this, SLOT(parseUTorrentList(QString, QString)));
|
|
||||||
connect(handler, SIGNAL(downloadFailed(QString, QString)), this, SLOT(getTrackerError(QString, QString)));
|
|
||||||
//Just to show that it takes times
|
|
||||||
setCursor(Qt::WaitCursor);
|
|
||||||
}
|
|
||||||
|
|
||||||
void parseUTorrentList(const QString &, const QString &path) {
|
private:
|
||||||
QFile list_file(path);
|
BitTorrent::TorrentHandle *const m_torrent;
|
||||||
if (!list_file.open(QFile::ReadOnly)) {
|
|
||||||
QMessageBox::warning(this, tr("I/O Error"), tr("Error while trying to open the downloaded file."), QMessageBox::Ok);
|
|
||||||
setCursor(Qt::ArrowCursor);
|
|
||||||
uTorrentListButton->setEnabled(true);
|
|
||||||
Utils::Fs::forceRemove(path);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Load from torrent handle
|
|
||||||
QList<BitTorrent::TrackerEntry> existingTrackers = m_torrent->trackers();
|
|
||||||
// Load from current user list
|
|
||||||
QStringList tmp = trackers_list->toPlainText().split("\n");
|
|
||||||
foreach (const QString &user_url, tmp) {
|
|
||||||
BitTorrent::TrackerEntry userTracker(user_url);
|
|
||||||
if (!existingTrackers.contains(userTracker))
|
|
||||||
existingTrackers << userTracker;
|
|
||||||
}
|
|
||||||
|
|
||||||
// Add new trackers to the list
|
|
||||||
if (!trackers_list->toPlainText().isEmpty() && !trackers_list->toPlainText().endsWith("\n"))
|
|
||||||
trackers_list->insertPlainText("\n");
|
|
||||||
int nb = 0;
|
|
||||||
while (!list_file.atEnd()) {
|
|
||||||
const QByteArray line = list_file.readLine().trimmed();
|
|
||||||
if (line.isEmpty()) continue;
|
|
||||||
BitTorrent::TrackerEntry newTracker(line);
|
|
||||||
if (!existingTrackers.contains(newTracker)) {
|
|
||||||
trackers_list->insertPlainText(line + "\n");
|
|
||||||
++nb;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
// Clean up
|
|
||||||
list_file.close();
|
|
||||||
Utils::Fs::forceRemove(path);
|
|
||||||
//To restore the cursor ...
|
|
||||||
setCursor(Qt::ArrowCursor);
|
|
||||||
uTorrentListButton->setEnabled(true);
|
|
||||||
// Display information message if necessary
|
|
||||||
if (nb == 0) {
|
|
||||||
QMessageBox::information(this, tr("No change"), tr("No additional trackers were found."), QMessageBox::Ok);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void getTrackerError(const QString &, const QString &error) {
|
|
||||||
//To restore the cursor ...
|
|
||||||
setCursor(Qt::ArrowCursor);
|
|
||||||
uTorrentListButton->setEnabled(true);
|
|
||||||
QMessageBox::warning(this, tr("Download error"), tr("The trackers list could not be downloaded, reason: %1").arg(error), QMessageBox::Ok);
|
|
||||||
}
|
|
||||||
|
|
||||||
public:
|
|
||||||
|
|
||||||
static QStringList askForTrackers(BitTorrent::TorrentHandle *const torrent) {
|
|
||||||
QStringList trackers;
|
|
||||||
TrackersAdditionDlg dlg(torrent);
|
|
||||||
if (dlg.exec() == QDialog::Accepted) {
|
|
||||||
return dlg.newTrackers();
|
|
||||||
}
|
|
||||||
return trackers;
|
|
||||||
}
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
Loading…
x
Reference in New Issue
Block a user