diff --git a/src/gui/addnewtorrentdialog.cpp b/src/gui/addnewtorrentdialog.cpp index 2311584a8..1afafa26a 100644 --- a/src/gui/addnewtorrentdialog.cpp +++ b/src/gui/addnewtorrentdialog.cpp @@ -28,22 +28,6 @@ * 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 #include #include @@ -51,6 +35,24 @@ #include #include +#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) : QDialog(parent) , ui(new Ui::AddNewTorrentDialog) diff --git a/src/gui/properties/peeraddition.cpp b/src/gui/properties/peeraddition.cpp new file mode 100644 index 000000000..491c7418b --- /dev/null +++ b/src/gui/properties/peeraddition.cpp @@ -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 +#include + +#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(); +} diff --git a/src/gui/properties/peeraddition.h b/src/gui/properties/peeraddition.h index c415268c5..fd5ae4e05 100644 --- a/src/gui/properties/peeraddition.h +++ b/src/gui/properties/peeraddition.h @@ -32,64 +32,29 @@ #define PEERADDITION_H #include -#include -#include - -#include "core/bittorrent/peerinfo.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 public: - PeerAdditionDlg(QWidget *parent=0) - : QDialog(parent) - { - setupUi(this); - connect(buttonBox, SIGNAL(rejected()), this, SLOT(reject())); - connect(buttonBox, SIGNAL(accepted()), this, SLOT(validateInput())); - } + PeerAdditionDlg(QWidget *parent = 0); - ~PeerAdditionDlg() - { - } - - 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; - } + QHostAddress getAddress() const; + ushort getPort() const; + static BitTorrent::PeerAddress askForPeerAddress(); protected slots: - void validateInput() { - if (getAddress().isNull()) - QMessageBox::warning(this, tr("Invalid IP"), tr("The IP you provided is invalid."), QMessageBox::Ok); - else - accept(); - } + void validateInput(); }; #endif // PEERADDITION_H diff --git a/src/gui/properties/peerlistwidget.cpp b/src/gui/properties/peerlistwidget.cpp index e45102634..00af5f701 100644 --- a/src/gui/properties/peerlistwidget.cpp +++ b/src/gui/properties/peerlistwidget.cpp @@ -28,26 +28,27 @@ * 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 #include #include #include #include #include +#include + +#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): QTreeView(parent), m_properties(parent), m_displayFlags(false) diff --git a/src/gui/properties/properties.pri b/src/gui/properties/properties.pri index 3072ee0d0..347d70242 100644 --- a/src/gui/properties/properties.pri +++ b/src/gui/properties/properties.pri @@ -17,8 +17,11 @@ HEADERS += $$PWD/propertieswidget.h \ $$PWD/proptabbar.h SOURCES += $$PWD/propertieswidget.cpp \ + $$PWD/proplistdelegate.cpp \ $$PWD/peerlistwidget.cpp \ $$PWD/trackerlist.cpp \ $$PWD/proptabbar.cpp \ $$PWD/downloadedpiecesbar.cpp \ + $$PWD/peeraddition.cpp \ + $$PWD/trackersadditiondlg.cpp \ $$PWD/pieceavailabilitybar.cpp diff --git a/src/gui/properties/propertieswidget.cpp b/src/gui/properties/propertieswidget.cpp index 71fb90a07..e7223d353 100644 --- a/src/gui/properties/propertieswidget.cpp +++ b/src/gui/properties/propertieswidget.cpp @@ -42,9 +42,11 @@ #include #include -#include "propertieswidget.h" -#include "transferlistwidget.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 "torrentcontentfiltermodel.h" #include "torrentcontentmodel.h" @@ -53,13 +55,12 @@ #include "mainwindow.h" #include "downloadedpiecesbar.h" #include "pieceavailabilitybar.h" -#include "core/preferences.h" #include "proptabbar.h" #include "guiiconprovider.h" #include "lineedit.h" -#include "core/utils/fs.h" -#include "core/utils/string.h" +#include "transferlistwidget.h" #include "autoexpandabledialog.h" +#include "propertieswidget.h" PropertiesWidget::PropertiesWidget(QWidget *parent, MainWindow* main_window, TransferListWidget *transferList): QWidget(parent), transferList(transferList), main_window(main_window), m_torrent(0) { diff --git a/src/gui/properties/proplistdelegate.cpp b/src/gui/properties/proplistdelegate.cpp new file mode 100644 index 000000000..26f16c3c3 --- /dev/null +++ b/src/gui/properties/proplistdelegate.cpp @@ -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 +#include +#include +#include +#include +#include +#include +#include + +#ifdef Q_OS_WIN +#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) +#include +#else +#include +#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(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(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); +} diff --git a/src/gui/properties/proplistdelegate.h b/src/gui/properties/proplistdelegate.h index d46c2cccf..10cab6f71 100644 --- a/src/gui/properties/proplistdelegate.h +++ b/src/gui/properties/proplistdelegate.h @@ -1,5 +1,5 @@ /* - * Bittorrent Client using Qt4 and libtorrent. + * Bittorrent Client using Qt and libtorrent. * Copyright (C) 2006 Christophe Dumez * * This program is free software; you can redistribute it and/or @@ -32,168 +32,42 @@ #define PROPLISTDELEGATE_H #include -#include -#include -#include -#include -#include -#include -#include -#include -#include "core/utils/misc.h" -#include "core/utils/string.h" -#include "propertieswidget.h" -#ifdef Q_OS_WIN -#if (QT_VERSION < QT_VERSION_CHECK(5, 0, 0)) -#include -#else -#include -#endif -#endif +class QPainter; +class QModelIndex; +class QStyleOptionViewItem; +class QAbstractItemModel; +class PropertiesWidget; // Defines for properties list columns -enum PropColumn {NAME, PCSIZE, PROGRESS, PRIORITY}; +enum PropColumn +{ + NAME, + PCSIZE, + PROGRESS, + PRIORITY +}; -class PropListDelegate: public QItemDelegate { - Q_OBJECT - -private: - PropertiesWidget *properties; - -signals: - void filteredFilesChanged() const; +class PropListDelegate : public QItemDelegate +{ + Q_OBJECT 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 { - 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(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; - } + void paint(QPainter *painter, const QStyleOptionViewItem &option, const QModelIndex &index) const; + void setEditorData(QWidget *editor, const QModelIndex &index) const; + QWidget *createEditor(QWidget *parent, const QStyleOptionViewItem &/* option */, const QModelIndex &index) const; public slots: - void setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const { - QComboBox *combobox = static_cast(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 setModelData(QWidget *editor, QAbstractItemModel *model, const QModelIndex &index) const; + void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const; - void updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { - qDebug("UpdateEditor Geometry called"); - editor->setGeometry(option.rect); - } +signals: + void filteredFilesChanged() const; +private: + PropertiesWidget *m_properties; }; #endif diff --git a/src/gui/properties/trackerlist.cpp b/src/gui/properties/trackerlist.cpp index 2e83754ee..479e21996 100644 --- a/src/gui/properties/trackerlist.cpp +++ b/src/gui/properties/trackerlist.cpp @@ -36,17 +36,19 @@ #include #include #include -#include "trackerlist.h" -#include "propertieswidget.h" -#include "trackersadditiondlg.h" -#include "guiiconprovider.h" +#include + #include "core/bittorrent/session.h" #include "core/bittorrent/torrenthandle.h" #include "core/bittorrent/peerinfo.h" #include "core/bittorrent/trackerentry.h" #include "core/preferences.h" #include "core/utils/misc.h" +#include "propertieswidget.h" +#include "trackersadditiondlg.h" +#include "guiiconprovider.h" #include "autoexpandabledialog.h" +#include "trackerlist.h" TrackerList::TrackerList(PropertiesWidget *properties): QTreeWidget(), properties(properties) { // Graphical settings diff --git a/src/gui/properties/trackersadditiondlg.cpp b/src/gui/properties/trackersadditiondlg.cpp new file mode 100644 index 000000000..e04a53839 --- /dev/null +++ b/src/gui/properties/trackersadditiondlg.cpp @@ -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 +#include +#include +#include + +#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 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; +} diff --git a/src/gui/properties/trackersadditiondlg.h b/src/gui/properties/trackersadditiondlg.h index 378566c17..2b335d27c 100644 --- a/src/gui/properties/trackersadditiondlg.h +++ b/src/gui/properties/trackersadditiondlg.h @@ -1,5 +1,5 @@ /* - * Bittorrent Client using Qt4 and libtorrent. + * Bittorrent Client using Qt and libtorrent. * Copyright (C) 2006 Christophe Dumez * * This program is free software; you can redistribute it and/or @@ -32,110 +32,33 @@ #define TRACKERSADDITION_H #include -#include -#include -#include -#include -#include "guiiconprovider.h" -#include "core/utils/misc.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{ - Q_OBJECT +class QString; +class QStringList; -private: - BitTorrent::TorrentHandle *const m_torrent; +namespace BitTorrent +{ + class TorrentHandle; +} + +class TrackersAdditionDlg : public QDialog, private Ui::TrackersAdditionDlg +{ + Q_OBJECT public: - TrackersAdditionDlg(BitTorrent::TorrentHandle *const torrent, QWidget *parent = 0): QDialog(parent), m_torrent(torrent) { - setupUi(this); - // Icons - uTorrentListButton->setIcon(GuiIconProvider::instance()->getIcon("download")); - } + TrackersAdditionDlg(BitTorrent::TorrentHandle *const torrent, QWidget *parent = 0); - ~TrackersAdditionDlg() {} - - QStringList newTrackers() const { - return trackers_list->toPlainText().trimmed().split("\n"); - } + QStringList newTrackers() const; + static QStringList askForTrackers(BitTorrent::TorrentHandle *const torrent); public slots: - void 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 on_uTorrentListButton_clicked(); + void parseUTorrentList(const QString &, const QString &path); + void getTrackerError(const QString &, const QString &error); - void 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 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; - } +private: + BitTorrent::TorrentHandle *const m_torrent; }; #endif