diff --git a/src/gui/CMakeLists.txt b/src/gui/CMakeLists.txt index d7dfb2ca1..60d772438 100644 --- a/src/gui/CMakeLists.txt +++ b/src/gui/CMakeLists.txt @@ -38,7 +38,7 @@ categoryfilterwidget.h cookiesdialog.h cookiesmodel.h deletionconfirmationdlg.h -downloadfromurldlg.h +downloadfromurldialog.h executionlog.h fspathedit.h fspathedit_p.h @@ -87,6 +87,7 @@ categoryfilterproxymodel.cpp categoryfilterwidget.cpp cookiesdialog.cpp cookiesmodel.cpp +downloadfromurldialog.cpp executionlog.cpp fspathedit.cpp fspathedit_p.cpp @@ -141,7 +142,7 @@ cookiesdialog.ui ipsubnetwhitelistoptionsdialog.ui previewselectdialog.ui login.ui -downloadfromurldlg.ui +downloadfromurldialog.ui bandwidth_limit.ui updownratiodlg.ui confirmdeletiondlg.ui diff --git a/src/gui/downloadfromurldialog.cpp b/src/gui/downloadfromurldialog.cpp new file mode 100644 index 000000000..28f09a262 --- /dev/null +++ b/src/gui/downloadfromurldialog.cpp @@ -0,0 +1,107 @@ +/* + * 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. + */ + +#include "downloadfromurldialog.h" + +#include +#include +#include +#include +#include +#include + +#include "ui_downloadfromurldialog.h" +#include "utils.h" + +DownloadFromURLDialog::DownloadFromURLDialog(QWidget *parent) + : QDialog(parent) + , m_ui(new Ui::DownloadFromURLDialog) +{ + m_ui->setupUi(this); + setAttribute(Qt::WA_DeleteOnClose); + setModal(true); + + m_ui->buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Download")); + connect(m_ui->buttonBox, &QDialogButtonBox::accepted, this, &DownloadFromURLDialog::downloadButtonClicked); + connect(m_ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); + + m_ui->textUrls->setWordWrapMode(QTextOption::NoWrap); + + // Paste clipboard if there is an URL in it + const QStringList clipboardList = qApp->clipboard()->text().split('\n'); + + QStringList clipboardListCleaned; + for (QString str : clipboardList) { + str = str.trimmed(); + if (str.isEmpty()) continue; + + if (!clipboardListCleaned.contains(str, Qt::CaseInsensitive)) { + if (str.startsWith("http://", Qt::CaseInsensitive) + || str.startsWith("https://", Qt::CaseInsensitive) + || str.startsWith("ftp://", Qt::CaseInsensitive) + || str.startsWith("magnet:", Qt::CaseInsensitive) + || str.startsWith("bc://bt/", Qt::CaseInsensitive) + || (str.size() == 40 && !str.contains(QRegExp("[^0-9A-Fa-f]"))) + || (str.size() == 32 && !str.contains(QRegExp("[^2-7A-Za-z]")))) { + clipboardListCleaned << str; + } + } + } + if (!clipboardListCleaned.isEmpty()) + m_ui->textUrls->setText(clipboardListCleaned.join('\n')); + + Utils::Gui::resize(this); + show(); +} + +DownloadFromURLDialog::~DownloadFromURLDialog() +{ + delete m_ui; +} + +void DownloadFromURLDialog::downloadButtonClicked() +{ + const QStringList urls = m_ui->textUrls->toPlainText().split('\n'); + + QStringList uniqueURLs; + for (QString url : urls) { + url = url.trimmed(); + if (url.isEmpty()) continue; + + if (!uniqueURLs.contains(url, Qt::CaseInsensitive)) + uniqueURLs << url; + } + + if (uniqueURLs.isEmpty()) { + QMessageBox::warning(this, tr("No URL entered"), tr("Please type at least one URL.")); + return; + } + + emit urlsReadyToBeDownloaded(uniqueURLs); + accept(); +} diff --git a/src/gui/downloadfromurldialog.h b/src/gui/downloadfromurldialog.h new file mode 100644 index 000000000..94c61b360 --- /dev/null +++ b/src/gui/downloadfromurldialog.h @@ -0,0 +1,58 @@ +/* + * 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. + */ + +#ifndef DOWNLOADFROMURL_H +#define DOWNLOADFROMURL_H + +#include + +namespace Ui +{ + class DownloadFromURLDialog; +} + +class DownloadFromURLDialog : public QDialog +{ + Q_OBJECT + Q_DISABLE_COPY(DownloadFromURLDialog) + +public: + explicit DownloadFromURLDialog(QWidget *parent); + ~DownloadFromURLDialog(); + +signals: + void urlsReadyToBeDownloaded(const QStringList &torrentURLs); + +private slots: + void downloadButtonClicked(); + +private: + Ui::DownloadFromURLDialog *m_ui; +}; + +#endif diff --git a/src/gui/downloadfromurldlg.ui b/src/gui/downloadfromurldialog.ui similarity index 94% rename from src/gui/downloadfromurldlg.ui rename to src/gui/downloadfromurldialog.ui index c42528617..ebe19ec6f 100644 --- a/src/gui/downloadfromurldlg.ui +++ b/src/gui/downloadfromurldialog.ui @@ -1,7 +1,7 @@ - downloadFromURL - + DownloadFromURLDialog + 0 diff --git a/src/gui/downloadfromurldlg.h b/src/gui/downloadfromurldlg.h deleted file mode 100644 index f14547797..000000000 --- a/src/gui/downloadfromurldlg.h +++ /dev/null @@ -1,120 +0,0 @@ -/* - * Bittorrent Client using Qt4 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 - */ - -#ifndef DOWNLOADFROMURL_H -#define DOWNLOADFROMURL_H - -#include -#include -#include -#include -#include -#include -#include - -#include "ui_downloadfromurldlg.h" -#include "utils.h" - -class downloadFromURL : public QDialog, private Ui::downloadFromURL -{ - Q_OBJECT - - public: - downloadFromURL(QWidget *parent): QDialog(parent) - { - setupUi(this); - setAttribute(Qt::WA_DeleteOnClose); - setModal(true); - - buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Download")); - connect(buttonBox, &QDialogButtonBox::accepted, this, &downloadFromURL::downloadButtonClicked); - connect(buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); - - textUrls->setWordWrapMode(QTextOption::NoWrap); - - // Paste clipboard if there is an URL in it - QString clip_txt = qApp->clipboard()->text(); - QStringList clip_txt_list = clip_txt.split(QLatin1Char('\n')); - clip_txt.clear(); - QStringList clip_txt_list_cleaned; - foreach (clip_txt, clip_txt_list) { - clip_txt = clip_txt.trimmed(); - if (!clip_txt.isEmpty()) { - if (clip_txt_list_cleaned.indexOf(QRegExp(clip_txt, Qt::CaseInsensitive, QRegExp::FixedString)) < 0) { - if (clip_txt.startsWith("http://", Qt::CaseInsensitive) - || clip_txt.startsWith("https://", Qt::CaseInsensitive) - || clip_txt.startsWith("ftp://", Qt::CaseInsensitive) - || clip_txt.startsWith("magnet:", Qt::CaseInsensitive) - || clip_txt.startsWith("bc://bt/", Qt::CaseInsensitive) - || (clip_txt.size() == 40 && !clip_txt.contains(QRegExp("[^0-9A-Fa-f]"))) - || (clip_txt.size() == 32 && !clip_txt.contains(QRegExp("[^2-7A-Za-z]")))) { - clip_txt_list_cleaned << clip_txt; - } - } - } - } - if (clip_txt_list_cleaned.size() > 0) - textUrls->setText(clip_txt_list_cleaned.join("\n")); - - Utils::Gui::resize(this); - show(); - } - - ~downloadFromURL() {} - - signals: - void urlsReadyToBeDownloaded(const QStringList& torrent_urls); - - private slots: - void downloadButtonClicked() - { - QString urls = textUrls->toPlainText(); - QStringList url_list = urls.split(QLatin1Char('\n')); - QString url; - QStringList url_list_cleaned; - foreach (url, url_list) { - url = url.trimmed(); - if (!url.isEmpty()) { - if (url_list_cleaned.indexOf(QRegExp(url, Qt::CaseInsensitive, QRegExp::FixedString)) < 0) { - url_list_cleaned << url; - } - } - } - if (url_list_cleaned.isEmpty()) { - QMessageBox::warning(this, tr("No URL entered"), tr("Please type at least one URL.")); - return; - } - emit urlsReadyToBeDownloaded(url_list_cleaned); - qDebug("Emitted urlsReadytobedownloaded signal"); - accept(); - } -}; - -#endif diff --git a/src/gui/gui.pri b/src/gui/gui.pri index dd2bcdbb4..965266a70 100644 --- a/src/gui/gui.pri +++ b/src/gui/gui.pri @@ -17,7 +17,7 @@ HEADERS += \ $$PWD/cookiesdialog.h \ $$PWD/cookiesmodel.h \ $$PWD/deletionconfirmationdlg.h \ - $$PWD/downloadfromurldlg.h \ + $$PWD/downloadfromurldialog.h \ $$PWD/executionlog.h \ $$PWD/fspathedit.h \ $$PWD/fspathedit_p.h \ @@ -76,6 +76,7 @@ SOURCES += \ $$PWD/categoryfilterwidget.cpp \ $$PWD/cookiesdialog.cpp \ $$PWD/cookiesmodel.cpp \ + $$PWD/downloadfromurldialog.cpp \ $$PWD/executionlog.cpp \ $$PWD/fspathedit.cpp \ $$PWD/fspathedit_p.cpp \ @@ -140,7 +141,7 @@ FORMS += \ $$PWD/banlistoptions.ui \ $$PWD/confirmdeletiondlg.ui \ $$PWD/cookiesdialog.ui \ - $$PWD/downloadfromurldlg.ui \ + $$PWD/downloadfromurldialog.ui \ $$PWD/executionlog.ui \ $$PWD/ipsubnetwhitelistoptionsdialog.ui \ $$PWD/login.ui \ diff --git a/src/gui/mainwindow.cpp b/src/gui/mainwindow.cpp index cc367bcd1..5942ce8e9 100644 --- a/src/gui/mainwindow.cpp +++ b/src/gui/mainwindow.cpp @@ -74,7 +74,7 @@ #include "base/utils/fs.h" #include "base/utils/misc.h" #include "cookiesdialog.h" -#include "downloadfromurldlg.h" +#include "downloadfromurldialog.h" #include "executionlog.h" #include "guiiconprovider.h" #include "hidabletabwidget.h" @@ -1823,8 +1823,8 @@ void MainWindow::on_actionSearchWidget_triggered() void MainWindow::on_actionDownloadFromURL_triggered() { if (!m_downloadFromURLDialog) { - m_downloadFromURLDialog = new downloadFromURL(this); - connect(m_downloadFromURLDialog.data(), &downloadFromURL::urlsReadyToBeDownloaded, this, &MainWindow::downloadFromURLList); + m_downloadFromURLDialog = new DownloadFromURLDialog(this); + connect(m_downloadFromURLDialog.data(), &DownloadFromURLDialog::urlsReadyToBeDownloaded, this, &MainWindow::downloadFromURLList); } } diff --git a/src/gui/mainwindow.h b/src/gui/mainwindow.h index ecad73c70..a06a049d1 100644 --- a/src/gui/mainwindow.h +++ b/src/gui/mainwindow.h @@ -45,7 +45,7 @@ class QSplitter; class QTabWidget; class QTimer; -class downloadFromURL; +class DownloadFromURLDialog; class SearchWidget; class RSSWidget; class about; @@ -230,7 +230,7 @@ private: QPointer m_aboutDlg; QPointer m_statsDlg; QPointer m_createTorrentDlg; - QPointer m_downloadFromURLDialog; + QPointer m_downloadFromURLDialog; #ifndef Q_OS_MAC QPointer m_systrayIcon; QPointer m_systrayCreator;