mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-01-23 21:14:33 +00:00
Merge pull request #4670 from glassez/rsscookies
Implement application wide cookies management dialog. Closes #4638
This commit is contained in:
commit
484cd2f1ce
@ -75,6 +75,9 @@ namespace
|
|||||||
Preferences::instance()->setNetworkCookies(cookies);
|
Preferences::instance()->setNetworkCookies(cookies);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
using QNetworkCookieJar::allCookies;
|
||||||
|
using QNetworkCookieJar::setAllCookies;
|
||||||
|
|
||||||
#ifndef QBT_USES_QT5
|
#ifndef QBT_USES_QT5
|
||||||
virtual bool deleteCookie(const QNetworkCookie &cookie)
|
virtual bool deleteCookie(const QNetworkCookie &cookie)
|
||||||
{
|
{
|
||||||
@ -188,6 +191,16 @@ bool DownloadManager::setCookiesFromUrl(const QList<QNetworkCookie> &cookieList,
|
|||||||
return m_networkManager.cookieJar()->setCookiesFromUrl(cookieList, url);
|
return m_networkManager.cookieJar()->setCookiesFromUrl(cookieList, url);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QList<QNetworkCookie> DownloadManager::allCookies() const
|
||||||
|
{
|
||||||
|
return static_cast<NetworkCookieJar *>(m_networkManager.cookieJar())->allCookies();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DownloadManager::setAllCookies(const QList<QNetworkCookie> &cookieList)
|
||||||
|
{
|
||||||
|
static_cast<NetworkCookieJar *>(m_networkManager.cookieJar())->setAllCookies(cookieList);
|
||||||
|
}
|
||||||
|
|
||||||
bool DownloadManager::deleteCookie(const QNetworkCookie &cookie)
|
bool DownloadManager::deleteCookie(const QNetworkCookie &cookie)
|
||||||
{
|
{
|
||||||
return static_cast<NetworkCookieJar *>(m_networkManager.cookieJar())->deleteCookie(cookie);
|
return static_cast<NetworkCookieJar *>(m_networkManager.cookieJar())->deleteCookie(cookie);
|
||||||
|
@ -54,6 +54,8 @@ namespace Net
|
|||||||
DownloadHandler *downloadUrl(const QString &url, bool saveToFile = false, qint64 limit = 0, bool handleRedirectToMagnet = false, const QString &userAgent = "");
|
DownloadHandler *downloadUrl(const QString &url, bool saveToFile = false, qint64 limit = 0, bool handleRedirectToMagnet = false, const QString &userAgent = "");
|
||||||
QList<QNetworkCookie> cookiesForUrl(const QUrl &url) const;
|
QList<QNetworkCookie> cookiesForUrl(const QUrl &url) const;
|
||||||
bool setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url);
|
bool setCookiesFromUrl(const QList<QNetworkCookie> &cookieList, const QUrl &url);
|
||||||
|
QList<QNetworkCookie> allCookies() const;
|
||||||
|
void setAllCookies(const QList<QNetworkCookie> &cookieList);
|
||||||
bool deleteCookie(const QNetworkCookie &cookie);
|
bool deleteCookie(const QNetworkCookie &cookie);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
|
89
src/gui/cookiesdialog.cpp
Normal file
89
src/gui/cookiesdialog.cpp
Normal file
@ -0,0 +1,89 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
|
* Copyright (C) 2016 Vladimir Golovnev <glassez@yandex.ru>
|
||||||
|
*
|
||||||
|
* 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 "cookiesdialog.h"
|
||||||
|
|
||||||
|
#include "base/settingsstorage.h"
|
||||||
|
#include "base/net/downloadmanager.h"
|
||||||
|
#include "guiiconprovider.h"
|
||||||
|
#include "cookiesmodel.h"
|
||||||
|
#include "ui_cookiesdialog.h"
|
||||||
|
|
||||||
|
#define SETTINGS_KEY(name) "CookiesDialog/" name
|
||||||
|
const QString KEY_GEOMETRY = SETTINGS_KEY("Geometry");
|
||||||
|
const QString KEY_COOKIESVIEWSTATE = SETTINGS_KEY("CookiesViewState");
|
||||||
|
|
||||||
|
CookiesDialog::CookiesDialog(QWidget *parent)
|
||||||
|
: QDialog(parent)
|
||||||
|
, m_ui(new Ui::CookiesDialog)
|
||||||
|
, m_cookiesModel(new CookiesModel(Net::DownloadManager::instance()->allCookies(), this))
|
||||||
|
{
|
||||||
|
m_ui->setupUi(this);
|
||||||
|
|
||||||
|
setWindowIcon(GuiIconProvider::instance()->getIcon("preferences-web-browser-cookies"));
|
||||||
|
m_ui->buttonAdd->setIcon(GuiIconProvider::instance()->getIcon("list-add"));
|
||||||
|
m_ui->buttonDelete->setIcon(GuiIconProvider::instance()->getIcon("list-remove"));
|
||||||
|
|
||||||
|
m_ui->treeView->setModel(m_cookiesModel);
|
||||||
|
if (m_cookiesModel->rowCount() > 0)
|
||||||
|
m_ui->treeView->selectionModel()->setCurrentIndex(
|
||||||
|
m_cookiesModel->index(0, 0),
|
||||||
|
QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
|
||||||
|
|
||||||
|
restoreGeometry(SettingsStorage::instance()->loadValue(KEY_GEOMETRY).toByteArray());
|
||||||
|
m_ui->treeView->header()->restoreState(
|
||||||
|
SettingsStorage::instance()->loadValue(KEY_COOKIESVIEWSTATE).toByteArray());
|
||||||
|
}
|
||||||
|
|
||||||
|
CookiesDialog::~CookiesDialog()
|
||||||
|
{
|
||||||
|
SettingsStorage::instance()->storeValue(KEY_GEOMETRY, saveGeometry());
|
||||||
|
SettingsStorage::instance()->storeValue(
|
||||||
|
KEY_COOKIESVIEWSTATE, m_ui->treeView->header()->saveState());
|
||||||
|
delete m_ui;
|
||||||
|
}
|
||||||
|
|
||||||
|
void CookiesDialog::accept()
|
||||||
|
{
|
||||||
|
Net::DownloadManager::instance()->setAllCookies(m_cookiesModel->cookies());
|
||||||
|
QDialog::accept();
|
||||||
|
}
|
||||||
|
|
||||||
|
void CookiesDialog::onButtonAddClicked()
|
||||||
|
{
|
||||||
|
int row = m_ui->treeView->selectionModel()->currentIndex().row() + 1;
|
||||||
|
|
||||||
|
m_cookiesModel->insertRow(row);
|
||||||
|
m_ui->treeView->selectionModel()->setCurrentIndex(
|
||||||
|
m_cookiesModel->index(row, 0), QItemSelectionModel::ClearAndSelect | QItemSelectionModel::Rows);
|
||||||
|
}
|
||||||
|
|
||||||
|
void CookiesDialog::onButtonDeleteClicked()
|
||||||
|
{
|
||||||
|
m_cookiesModel->removeRow(m_ui->treeView->selectionModel()->currentIndex().row());
|
||||||
|
}
|
@ -1,6 +1,6 @@
|
|||||||
/*
|
/*
|
||||||
* Bittorrent Client using Qt4 and libtorrent.
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
* Copyright (C) 2010 Christophe Dumez
|
* Copyright (C) 2016 Vladimir Golovnev <glassez@yandex.ru>
|
||||||
*
|
*
|
||||||
* This program is free software; you can redistribute it and/or
|
* This program is free software; you can redistribute it and/or
|
||||||
* modify it under the terms of the GNU General Public License
|
* modify it under the terms of the GNU General Public License
|
||||||
@ -24,39 +24,38 @@
|
|||||||
* modify file(s), you may extend this exception to your version of the file(s),
|
* 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
|
* but you are not obligated to do so. If you do not wish to do so, delete this
|
||||||
* exception statement from your version.
|
* exception statement from your version.
|
||||||
*
|
|
||||||
* Contact : chris@qbittorrent.org arnaud@qbittorrent.org
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef COOKIESDLG_H
|
#ifndef COOKIESDIALOG_H
|
||||||
#define COOKIESDLG_H
|
#define COOKIESDIALOG_H
|
||||||
|
|
||||||
#include <QDialog>
|
#include <QDialog>
|
||||||
#include <QList>
|
|
||||||
|
|
||||||
class QNetworkCookie;
|
namespace Ui
|
||||||
class QUrl;
|
{
|
||||||
|
class CookiesDialog;
|
||||||
namespace Ui {
|
|
||||||
class CookiesDlg;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
class CookiesDlg : public QDialog
|
class CookiesModel;
|
||||||
|
|
||||||
|
class CookiesDialog : public QDialog
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
explicit CookiesDlg(const QUrl &url, QWidget *parent = 0);
|
explicit CookiesDialog(QWidget *parent = 0);
|
||||||
~CookiesDlg();
|
~CookiesDialog();
|
||||||
QList<QNetworkCookie> getCookies() const;
|
|
||||||
static bool askForCookies(QWidget *parent, const QUrl &url, QList<QNetworkCookie> &out);
|
|
||||||
|
|
||||||
protected slots:
|
public slots:
|
||||||
void on_add_btn_clicked();
|
void accept() override;
|
||||||
void on_del_btn_clicked();
|
|
||||||
|
private slots:
|
||||||
|
void onButtonAddClicked();
|
||||||
|
void onButtonDeleteClicked();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::CookiesDlg *ui;
|
Ui::CookiesDialog *m_ui;
|
||||||
|
CookiesModel *m_cookiesModel;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // COOKIESDLG_H
|
#endif // COOKIESDIALOG_H
|
179
src/gui/cookiesdialog.ui
Normal file
179
src/gui/cookiesdialog.ui
Normal file
@ -0,0 +1,179 @@
|
|||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>CookiesDialog</class>
|
||||||
|
<widget class="QDialog" name="CookiesDialog">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>618</width>
|
||||||
|
<height>369</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Manage Cookies</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QTreeView" name="treeView"/>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_2">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="buttonAdd">
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeType">
|
||||||
|
<enum>QSizePolicy::Fixed</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>5</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QToolButton" name="buttonDelete">
|
||||||
|
<property name="text">
|
||||||
|
<string notr="true"/>
|
||||||
|
</property>
|
||||||
|
<property name="iconSize">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>20</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<spacer name="verticalSpacer_3">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>20</width>
|
||||||
|
<height>40</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QDialogButtonBox" name="buttonBox">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Horizontal</enum>
|
||||||
|
</property>
|
||||||
|
<property name="standardButtons">
|
||||||
|
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<resources/>
|
||||||
|
<connections>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>accepted()</signal>
|
||||||
|
<receiver>CookiesDialog</receiver>
|
||||||
|
<slot>accept()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>257</x>
|
||||||
|
<y>406</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>157</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonBox</sender>
|
||||||
|
<signal>rejected()</signal>
|
||||||
|
<receiver>CookiesDialog</receiver>
|
||||||
|
<slot>reject()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>325</x>
|
||||||
|
<y>406</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>286</x>
|
||||||
|
<y>274</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonAdd</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>CookiesDialog</receiver>
|
||||||
|
<slot>onButtonAddClicked()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>484</x>
|
||||||
|
<y>174</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>486</x>
|
||||||
|
<y>93</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
<connection>
|
||||||
|
<sender>buttonDelete</sender>
|
||||||
|
<signal>clicked()</signal>
|
||||||
|
<receiver>CookiesDialog</receiver>
|
||||||
|
<slot>onButtonDeleteClicked()</slot>
|
||||||
|
<hints>
|
||||||
|
<hint type="sourcelabel">
|
||||||
|
<x>483</x>
|
||||||
|
<y>226</y>
|
||||||
|
</hint>
|
||||||
|
<hint type="destinationlabel">
|
||||||
|
<x>485</x>
|
||||||
|
<y>296</y>
|
||||||
|
</hint>
|
||||||
|
</hints>
|
||||||
|
</connection>
|
||||||
|
</connections>
|
||||||
|
<slots>
|
||||||
|
<slot>onButtonAddClicked()</slot>
|
||||||
|
<slot>onButtonDeleteClicked()</slot>
|
||||||
|
</slots>
|
||||||
|
</ui>
|
178
src/gui/cookiesmodel.cpp
Normal file
178
src/gui/cookiesmodel.cpp
Normal file
@ -0,0 +1,178 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
|
* Copyright (C) 2016 Vladimir Golovnev <glassez@yandex.ru>
|
||||||
|
*
|
||||||
|
* 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 <QDateTime>
|
||||||
|
#include "cookiesmodel.h"
|
||||||
|
|
||||||
|
CookiesModel::CookiesModel(const QList<QNetworkCookie> &cookies, QObject *parent)
|
||||||
|
: QAbstractItemModel(parent)
|
||||||
|
, m_cookies(cookies)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
QList<QNetworkCookie> CookiesModel::cookies() const
|
||||||
|
{
|
||||||
|
return m_cookies;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant CookiesModel::headerData(int section, Qt::Orientation orientation, int role) const
|
||||||
|
{
|
||||||
|
if ((role == Qt::DisplayRole) && (orientation == Qt::Horizontal)) {
|
||||||
|
switch (section)
|
||||||
|
{
|
||||||
|
case COL_DOMAIN:
|
||||||
|
return tr("Domain");
|
||||||
|
case COL_PATH:
|
||||||
|
return tr("Path");
|
||||||
|
case COL_NAME:
|
||||||
|
return tr("Name");
|
||||||
|
case COL_VALUE:
|
||||||
|
return tr("Value");
|
||||||
|
case COL_EXPDATE:
|
||||||
|
return tr("Expiration Date");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex CookiesModel::index(int row, int column, const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
if (parent.isValid() // no items with valid parent
|
||||||
|
|| (row < 0) || (row >= m_cookies.size())
|
||||||
|
|| (column < 0) || (column >= NB_COLUMNS))
|
||||||
|
return QModelIndex();
|
||||||
|
|
||||||
|
return createIndex(row, column, &m_cookies[row]);
|
||||||
|
}
|
||||||
|
|
||||||
|
QModelIndex CookiesModel::parent(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(index);
|
||||||
|
return QModelIndex();
|
||||||
|
}
|
||||||
|
|
||||||
|
int CookiesModel::rowCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
if (parent.isValid()) return 0;
|
||||||
|
|
||||||
|
return m_cookies.size();
|
||||||
|
}
|
||||||
|
|
||||||
|
int CookiesModel::columnCount(const QModelIndex &parent) const
|
||||||
|
{
|
||||||
|
Q_UNUSED(parent);
|
||||||
|
return NB_COLUMNS;
|
||||||
|
}
|
||||||
|
|
||||||
|
QVariant CookiesModel::data(const QModelIndex &index, int role) const
|
||||||
|
{
|
||||||
|
if (!index.isValid() || (index.row() >= m_cookies.size())
|
||||||
|
|| ((role != Qt::DisplayRole) && (role != Qt::EditRole)))
|
||||||
|
return QVariant();
|
||||||
|
|
||||||
|
switch (index.column()) {
|
||||||
|
case COL_DOMAIN:
|
||||||
|
return m_cookies[index.row()].domain();
|
||||||
|
case COL_PATH:
|
||||||
|
return m_cookies[index.row()].path();
|
||||||
|
case COL_NAME:
|
||||||
|
return QString::fromLatin1(m_cookies[index.row()].name());
|
||||||
|
case COL_VALUE:
|
||||||
|
return QString::fromLatin1(m_cookies[index.row()].value());
|
||||||
|
case COL_EXPDATE:
|
||||||
|
return m_cookies[index.row()].expirationDate();
|
||||||
|
}
|
||||||
|
|
||||||
|
return QVariant();
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CookiesModel::setData(const QModelIndex &index, const QVariant &value, int role)
|
||||||
|
{
|
||||||
|
if (role != Qt::EditRole) return false;
|
||||||
|
|
||||||
|
switch (index.column()) {
|
||||||
|
case COL_DOMAIN:
|
||||||
|
m_cookies[index.row()].setDomain(value.toString());
|
||||||
|
break;
|
||||||
|
case COL_PATH:
|
||||||
|
m_cookies[index.row()].setPath(value.toString());
|
||||||
|
break;
|
||||||
|
case COL_NAME:
|
||||||
|
m_cookies[index.row()].setName(value.toString().toLatin1());
|
||||||
|
break;
|
||||||
|
case COL_VALUE:
|
||||||
|
m_cookies[index.row()].setValue(value.toString().toLatin1());
|
||||||
|
break;
|
||||||
|
case COL_EXPDATE:
|
||||||
|
m_cookies[index.row()].setExpirationDate(value.toDateTime());
|
||||||
|
break;
|
||||||
|
default:
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
|
emit dataChanged(index, index);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CookiesModel::insertRows(int row, int count, const QModelIndex &parent)
|
||||||
|
{
|
||||||
|
if ((row < 0) || (row > m_cookies.size())) return false;
|
||||||
|
|
||||||
|
QNetworkCookie newCookie;
|
||||||
|
newCookie.setExpirationDate(QDateTime::currentDateTime().addYears(99));
|
||||||
|
|
||||||
|
beginInsertRows(parent, row, row + count - 1);
|
||||||
|
while (count-- > 0)
|
||||||
|
m_cookies.insert(row, newCookie);
|
||||||
|
endInsertRows();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool CookiesModel::removeRows(int row, int count, const QModelIndex &parent)
|
||||||
|
{
|
||||||
|
if ((m_cookies.size() == 0)
|
||||||
|
|| (row >= m_cookies.size())
|
||||||
|
|| ((row + count) > m_cookies.size()))
|
||||||
|
return false;
|
||||||
|
|
||||||
|
beginRemoveRows(parent, row, row + count - 1);
|
||||||
|
while (count-- > 0)
|
||||||
|
m_cookies.removeAt(row);
|
||||||
|
endRemoveRows();
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Qt::ItemFlags CookiesModel::flags(const QModelIndex &index) const
|
||||||
|
{
|
||||||
|
if (!index.isValid()) return 0;
|
||||||
|
|
||||||
|
return Qt::ItemIsEditable | QAbstractItemModel::flags(index);
|
||||||
|
}
|
74
src/gui/cookiesmodel.h
Normal file
74
src/gui/cookiesmodel.h
Normal file
@ -0,0 +1,74 @@
|
|||||||
|
/*
|
||||||
|
* Bittorrent Client using Qt and libtorrent.
|
||||||
|
* Copyright (C) 2016 Vladimir Golovnev <glassez@yandex.ru>
|
||||||
|
*
|
||||||
|
* 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 COOKIESMODEL_H
|
||||||
|
#define COOKIESMODEL_H
|
||||||
|
|
||||||
|
#include <QAbstractItemModel>
|
||||||
|
#include <QList>
|
||||||
|
#include <QNetworkCookie>
|
||||||
|
|
||||||
|
class CookiesModel : public QAbstractItemModel
|
||||||
|
{
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
enum Column
|
||||||
|
{
|
||||||
|
COL_DOMAIN,
|
||||||
|
COL_PATH,
|
||||||
|
COL_NAME,
|
||||||
|
COL_VALUE,
|
||||||
|
COL_EXPDATE,
|
||||||
|
|
||||||
|
NB_COLUMNS
|
||||||
|
};
|
||||||
|
|
||||||
|
explicit CookiesModel(const QList<QNetworkCookie> &cookies, QObject *parent = 0);
|
||||||
|
|
||||||
|
QList<QNetworkCookie> cookies() const;
|
||||||
|
|
||||||
|
QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override;
|
||||||
|
QModelIndex index(int row, int column, const QModelIndex &parent = QModelIndex()) const override;
|
||||||
|
QModelIndex parent(const QModelIndex &index) const override;
|
||||||
|
|
||||||
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
|
int columnCount(const QModelIndex &parent = QModelIndex()) const override;
|
||||||
|
|
||||||
|
Qt::ItemFlags flags(const QModelIndex &index) const override;
|
||||||
|
QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override;
|
||||||
|
|
||||||
|
bool setData(const QModelIndex &index, const QVariant &value, int role) override;
|
||||||
|
bool insertRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
|
||||||
|
bool removeRows(int row, int count, const QModelIndex &parent = QModelIndex()) override;
|
||||||
|
|
||||||
|
private:
|
||||||
|
mutable QList<QNetworkCookie> m_cookies;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif // COOKIESMODEL_H
|
@ -48,7 +48,9 @@ HEADERS += \
|
|||||||
$$PWD/search/pluginselectdlg.h \
|
$$PWD/search/pluginselectdlg.h \
|
||||||
$$PWD/search/pluginsourcedlg.h \
|
$$PWD/search/pluginsourcedlg.h \
|
||||||
$$PWD/search/searchlistdelegate.h \
|
$$PWD/search/searchlistdelegate.h \
|
||||||
$$PWD/search/searchsortmodel.h
|
$$PWD/search/searchsortmodel.h \
|
||||||
|
$$PWD/cookiesmodel.h \
|
||||||
|
$$PWD/cookiesdialog.h
|
||||||
|
|
||||||
SOURCES += \
|
SOURCES += \
|
||||||
$$PWD/mainwindow.cpp \
|
$$PWD/mainwindow.cpp \
|
||||||
@ -87,7 +89,9 @@ SOURCES += \
|
|||||||
$$PWD/search/pluginselectdlg.cpp \
|
$$PWD/search/pluginselectdlg.cpp \
|
||||||
$$PWD/search/pluginsourcedlg.cpp \
|
$$PWD/search/pluginsourcedlg.cpp \
|
||||||
$$PWD/search/searchlistdelegate.cpp \
|
$$PWD/search/searchlistdelegate.cpp \
|
||||||
$$PWD/search/searchsortmodel.cpp
|
$$PWD/search/searchsortmodel.cpp \
|
||||||
|
$$PWD/cookiesmodel.cpp \
|
||||||
|
$$PWD/cookiesdialog.cpp
|
||||||
|
|
||||||
win32|macx {
|
win32|macx {
|
||||||
HEADERS += $$PWD/programupdater.h
|
HEADERS += $$PWD/programupdater.h
|
||||||
@ -114,6 +118,7 @@ FORMS += \
|
|||||||
$$PWD/search/searchwidget.ui \
|
$$PWD/search/searchwidget.ui \
|
||||||
$$PWD/search/pluginselectdlg.ui \
|
$$PWD/search/pluginselectdlg.ui \
|
||||||
$$PWD/search/pluginsourcedlg.ui \
|
$$PWD/search/pluginsourcedlg.ui \
|
||||||
$$PWD/search/searchtab.ui
|
$$PWD/search/searchtab.ui \
|
||||||
|
$$PWD/cookiesdialog.ui
|
||||||
|
|
||||||
RESOURCES += $$PWD/about.qrc
|
RESOURCES += $$PWD/about.qrc
|
||||||
|
File diff suppressed because it is too large
Load Diff
@ -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
|
||||||
@ -28,14 +28,19 @@
|
|||||||
* Contact : chris@qbittorrent.org
|
* Contact : chris@qbittorrent.org
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#ifndef GUI_H
|
#ifndef MAINWINDOW_H
|
||||||
#define GUI_H
|
#define MAINWINDOW_H
|
||||||
|
|
||||||
#include <QProcess>
|
#include <QMainWindow>
|
||||||
#include <QSystemTrayIcon>
|
#include <QSystemTrayIcon>
|
||||||
#include <QPointer>
|
#include <QPointer>
|
||||||
#include "ui_mainwindow.h"
|
|
||||||
#include "statsdialog.h"
|
class QCloseEvent;
|
||||||
|
class QFileSystemWatcher;
|
||||||
|
class QShortcut;
|
||||||
|
class QSplitter;
|
||||||
|
class QTabWidget;
|
||||||
|
class QTimer;
|
||||||
|
|
||||||
class downloadFromURL;
|
class downloadFromURL;
|
||||||
class SearchWidget;
|
class SearchWidget;
|
||||||
@ -52,34 +57,30 @@ class downloadFromURL;
|
|||||||
class LineEdit;
|
class LineEdit;
|
||||||
class ExecutionLog;
|
class ExecutionLog;
|
||||||
class PowerManagement;
|
class PowerManagement;
|
||||||
|
class StatsDialog;
|
||||||
QT_BEGIN_NAMESPACE
|
|
||||||
class QCloseEvent;
|
|
||||||
class QFileSystemWatcher;
|
|
||||||
class QShortcut;
|
|
||||||
class QSplitter;
|
|
||||||
class QTabWidget;
|
|
||||||
class QTimer;
|
|
||||||
QT_END_NAMESPACE
|
|
||||||
|
|
||||||
namespace BitTorrent
|
namespace BitTorrent
|
||||||
{
|
{
|
||||||
class TorrentHandle;
|
class TorrentHandle;
|
||||||
}
|
}
|
||||||
|
|
||||||
class MainWindow: public QMainWindow, private Ui::MainWindow
|
namespace Ui
|
||||||
|
{
|
||||||
|
class MainWindow;
|
||||||
|
}
|
||||||
|
|
||||||
|
class MainWindow : public QMainWindow
|
||||||
{
|
{
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
// Construct / Destruct
|
|
||||||
explicit MainWindow(QWidget *parent = 0);
|
explicit MainWindow(QWidget *parent = 0);
|
||||||
~MainWindow();
|
~MainWindow() override;
|
||||||
// Methods
|
|
||||||
QWidget* getCurrentTabWidget() const;
|
QWidget* currentTabWidget() const;
|
||||||
TransferListWidget* getTransferList() const { return transferList; }
|
TransferListWidget* transferListWidget() const;
|
||||||
QMenu* getTrayIconMenu();
|
PropertiesWidget *propertiesWidget() const;
|
||||||
PropertiesWidget *getProperties() const { return properties; }
|
QMenu* trayIconMenu();
|
||||||
|
|
||||||
// ExecutionLog properties
|
// ExecutionLog properties
|
||||||
bool isExecutionLogEnabled() const;
|
bool isExecutionLogEnabled() const;
|
||||||
@ -87,32 +88,22 @@ public:
|
|||||||
int executionLogMsgTypes() const;
|
int executionLogMsgTypes() const;
|
||||||
void setExecutionLogMsgTypes(const int value);
|
void setExecutionLogMsgTypes(const int value);
|
||||||
|
|
||||||
public slots:
|
|
||||||
void trackerAuthenticationRequired(BitTorrent::TorrentHandle *const torrent);
|
|
||||||
void setTabText(int index, QString text) const;
|
|
||||||
void showNotificationBaloon(QString title, QString msg) const;
|
|
||||||
void downloadFromURLList(const QStringList& urls);
|
|
||||||
void updateAltSpeedsBtn(bool alternative);
|
|
||||||
void updateNbTorrents();
|
|
||||||
void activate();
|
void activate();
|
||||||
void cleanup();
|
void cleanup();
|
||||||
|
|
||||||
protected slots:
|
void showNotificationBaloon(QString title, QString msg) const;
|
||||||
// GUI related slots
|
|
||||||
|
private slots:
|
||||||
void toggleVisibility(QSystemTrayIcon::ActivationReason e = QSystemTrayIcon::Trigger);
|
void toggleVisibility(QSystemTrayIcon::ActivationReason e = QSystemTrayIcon::Trigger);
|
||||||
void on_actionAbout_triggered();
|
|
||||||
void on_actionStatistics_triggered();
|
|
||||||
void on_actionCreate_torrent_triggered();
|
|
||||||
void balloonClicked();
|
void balloonClicked();
|
||||||
void writeSettings();
|
void writeSettings();
|
||||||
void readSettings();
|
void readSettings();
|
||||||
void on_actionExit_triggered();
|
|
||||||
void createTrayIcon();
|
void createTrayIcon();
|
||||||
void fullDiskError(BitTorrent::TorrentHandle *const torrent, QString msg) const;
|
void fullDiskError(BitTorrent::TorrentHandle *const torrent, QString msg) const;
|
||||||
void handleDownloadFromUrlFailure(QString, QString) const;
|
void handleDownloadFromUrlFailure(QString, QString) const;
|
||||||
void createSystrayDelayed();
|
void createSystrayDelayed();
|
||||||
void tab_changed(int);
|
void tabChanged(int newTab);
|
||||||
void on_actionLock_qBittorrent_triggered();
|
|
||||||
void defineUILockPassword();
|
void defineUILockPassword();
|
||||||
void clearUILockPassword();
|
void clearUILockPassword();
|
||||||
bool unlockUI();
|
bool unlockUI();
|
||||||
@ -125,110 +116,56 @@ protected slots:
|
|||||||
void displayTransferTab() const;
|
void displayTransferTab() const;
|
||||||
void displaySearchTab() const;
|
void displaySearchTab() const;
|
||||||
void displayRSSTab() const;
|
void displayRSSTab() const;
|
||||||
// Torrent actions
|
|
||||||
void on_actionSet_global_upload_limit_triggered();
|
|
||||||
void on_actionSet_global_download_limit_triggered();
|
|
||||||
void on_actionDocumentation_triggered() const;
|
|
||||||
void on_actionOpen_triggered();
|
|
||||||
void updateGUI();
|
void updateGUI();
|
||||||
void loadPreferences(bool configure_session = true);
|
void loadPreferences(bool configureSession = true);
|
||||||
void addUnauthenticatedTracker(const QPair<BitTorrent::TorrentHandle*, QString> &tracker);
|
void addUnauthenticatedTracker(const QPair<BitTorrent::TorrentHandle*, QString> &tracker);
|
||||||
void addTorrentFailed(const QString &error) const;
|
void addTorrentFailed(const QString &error) const;
|
||||||
void finishedTorrent(BitTorrent::TorrentHandle *const torrent) const;
|
void finishedTorrent(BitTorrent::TorrentHandle *const torrent) const;
|
||||||
void askRecursiveTorrentDownloadConfirmation(BitTorrent::TorrentHandle *const torrent);
|
void askRecursiveTorrentDownloadConfirmation(BitTorrent::TorrentHandle *const torrent);
|
||||||
// Options slots
|
|
||||||
void on_actionOptions_triggered();
|
|
||||||
void optionsSaved();
|
void optionsSaved();
|
||||||
// HTTP slots
|
|
||||||
void on_actionDownload_from_URL_triggered();
|
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
||||||
void handleUpdateCheckFinished(bool update_available, QString new_version, bool invokedByUser);
|
void handleUpdateCheckFinished(bool updateAvailable, QString newVersion, bool invokedByUser);
|
||||||
#endif
|
#endif
|
||||||
void updateRSSTabLabel(int count);
|
void updateRSSTabLabel(int count);
|
||||||
|
|
||||||
protected:
|
|
||||||
void dropEvent(QDropEvent *event);
|
|
||||||
void dragEnterEvent(QDragEnterEvent *event);
|
|
||||||
void closeEvent(QCloseEvent *);
|
|
||||||
void showEvent(QShowEvent *);
|
|
||||||
bool event(QEvent * event);
|
|
||||||
void displayRSSTab(bool enable);
|
|
||||||
void displaySearchTab(bool enable);
|
|
||||||
|
|
||||||
private:
|
|
||||||
QIcon getSystrayIcon() const;
|
|
||||||
#ifdef Q_OS_WIN
|
#ifdef Q_OS_WIN
|
||||||
bool addPythonPathToEnv();
|
|
||||||
void installPython();
|
|
||||||
|
|
||||||
private slots:
|
|
||||||
void pythonDownloadSuccess(const QString &url, const QString &filePath);
|
void pythonDownloadSuccess(const QString &url, const QString &filePath);
|
||||||
void pythonDownloadFailure(const QString &url, const QString &error);
|
void pythonDownloadFailure(const QString &url, const QString &error);
|
||||||
#endif
|
#endif
|
||||||
void addToolbarContextMenu();
|
void addToolbarContextMenu();
|
||||||
|
void manageCookies();
|
||||||
|
|
||||||
private:
|
void trackerAuthenticationRequired(BitTorrent::TorrentHandle *const torrent);
|
||||||
QFileSystemWatcher *executable_watcher;
|
void downloadFromURLList(const QStringList &urlList);
|
||||||
// Bittorrent
|
void updateAltSpeedsBtn(bool alternative);
|
||||||
QList<QPair<BitTorrent::TorrentHandle*, QString>> unauthenticated_trackers; // Still needed?
|
void updateNbTorrents();
|
||||||
// GUI related
|
|
||||||
bool m_posInitialized;
|
|
||||||
QTabWidget *tabs;
|
|
||||||
StatusBar *status_bar;
|
|
||||||
QPointer<options_imp> options;
|
|
||||||
QPointer<about> aboutDlg;
|
|
||||||
QPointer<StatsDialog> statsDlg;
|
|
||||||
QPointer<TorrentCreatorDlg> createTorrentDlg;
|
|
||||||
QPointer<downloadFromURL> downloadFromURLDialog;
|
|
||||||
QPointer<QSystemTrayIcon> systrayIcon;
|
|
||||||
QPointer<QTimer> systrayCreator;
|
|
||||||
QPointer<QMenu> myTrayIconMenu;
|
|
||||||
TransferListWidget *transferList;
|
|
||||||
TransferListFiltersWidget *transferListFilters;
|
|
||||||
PropertiesWidget *properties;
|
|
||||||
bool displaySpeedInTitle;
|
|
||||||
bool force_exit;
|
|
||||||
bool ui_locked;
|
|
||||||
bool unlockDlgShowing;
|
|
||||||
LineEdit *search_filter;
|
|
||||||
QAction *searchFilterAct;
|
|
||||||
// Widgets
|
|
||||||
QAction *prioSeparator;
|
|
||||||
QAction *prioSeparatorMenu;
|
|
||||||
QSplitter *hSplitter;
|
|
||||||
QSplitter *vSplitter;
|
|
||||||
// Search
|
|
||||||
QPointer<SearchWidget> searchEngine;
|
|
||||||
// RSS
|
|
||||||
QPointer<RSSImp> rssWidget;
|
|
||||||
// Execution Log
|
|
||||||
QPointer<ExecutionLog> m_executionLog;
|
|
||||||
// Power Management
|
|
||||||
PowerManagement *m_pwr;
|
|
||||||
QTimer *preventTimer;
|
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
|
||||||
QTimer programUpdateTimer;
|
|
||||||
bool m_wasUpdateCheckEnabled;
|
|
||||||
#endif
|
|
||||||
bool has_python;
|
|
||||||
QMenu* toolbarMenu;
|
|
||||||
|
|
||||||
private slots:
|
void on_actionSearchWidget_triggered();
|
||||||
void on_actionSearch_engine_triggered();
|
void on_actionRSSReader_triggered();
|
||||||
void on_actionRSS_Reader_triggered();
|
void on_actionSpeedInTitleBar_triggered();
|
||||||
void on_actionSpeed_in_title_bar_triggered();
|
void on_actionTopToolBar_triggered();
|
||||||
void on_actionTop_tool_bar_triggered();
|
void on_actionImportTorrent_triggered();
|
||||||
void on_action_Import_Torrent_triggered();
|
void on_actionDonateMoney_triggered();
|
||||||
void on_actionDonate_money_triggered();
|
|
||||||
void on_actionExecutionLogs_triggered(bool checked);
|
void on_actionExecutionLogs_triggered(bool checked);
|
||||||
void on_actionNormalMessages_triggered(bool checked);
|
void on_actionNormalMessages_triggered(bool checked);
|
||||||
void on_actionInformationMessages_triggered(bool checked);
|
void on_actionInformationMessages_triggered(bool checked);
|
||||||
void on_actionWarningMessages_triggered(bool checked);
|
void on_actionWarningMessages_triggered(bool checked);
|
||||||
void on_actionCriticalMessages_triggered(bool checked);
|
void on_actionCriticalMessages_triggered(bool checked);
|
||||||
void on_actionAutoExit_qBittorrent_toggled(bool );
|
void on_actionAutoExit_toggled(bool);
|
||||||
void on_actionAutoSuspend_system_toggled(bool );
|
void on_actionAutoSuspend_toggled(bool);
|
||||||
void on_actionAutoHibernate_system_toggled(bool );
|
void on_actionAutoHibernate_toggled(bool);
|
||||||
void on_actionAutoShutdown_system_toggled(bool );
|
void on_actionAutoShutdown_toggled(bool);
|
||||||
|
void on_actionAbout_triggered();
|
||||||
|
void on_actionStatistics_triggered();
|
||||||
|
void on_actionCreateTorrent_triggered();
|
||||||
|
void on_actionOptions_triggered();
|
||||||
|
void on_actionSetGlobalUploadLimit_triggered();
|
||||||
|
void on_actionSetGlobalDownloadLimit_triggered();
|
||||||
|
void on_actionDocumentation_triggered() const;
|
||||||
|
void on_actionOpen_triggered();
|
||||||
|
void on_actionDownloadFromURL_triggered();
|
||||||
|
void on_actionExit_triggered();
|
||||||
|
void on_actionLock_triggered();
|
||||||
// Check for active torrents and set preventing from suspend state
|
// Check for active torrents and set preventing from suspend state
|
||||||
void checkForActiveTorrents();
|
void checkForActiveTorrents();
|
||||||
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
||||||
@ -240,6 +177,64 @@ private slots:
|
|||||||
void toolbarTextBeside();
|
void toolbarTextBeside();
|
||||||
void toolbarTextUnder();
|
void toolbarTextUnder();
|
||||||
void toolbarFollowSystem();
|
void toolbarFollowSystem();
|
||||||
|
|
||||||
|
private:
|
||||||
|
QIcon getSystrayIcon() const;
|
||||||
|
#ifdef Q_OS_WIN
|
||||||
|
bool addPythonPathToEnv();
|
||||||
|
void installPython();
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void dropEvent(QDropEvent *event) override;
|
||||||
|
void dragEnterEvent(QDragEnterEvent *event) override;
|
||||||
|
void closeEvent(QCloseEvent *) override;
|
||||||
|
void showEvent(QShowEvent *) override;
|
||||||
|
bool event(QEvent * event) override;
|
||||||
|
void displayRSSTab(bool enable);
|
||||||
|
void displaySearchTab(bool enable);
|
||||||
|
|
||||||
|
Ui::MainWindow *m_ui;
|
||||||
|
|
||||||
|
QFileSystemWatcher *m_executableWatcher;
|
||||||
|
// Bittorrent
|
||||||
|
QList<QPair<BitTorrent::TorrentHandle*, QString>> m_unauthenticatedTrackers; // Still needed?
|
||||||
|
// GUI related
|
||||||
|
bool m_posInitialized;
|
||||||
|
QTabWidget *m_tabs;
|
||||||
|
StatusBar *m_statusBar;
|
||||||
|
QPointer<options_imp> m_options;
|
||||||
|
QPointer<about> m_aboutDlg;
|
||||||
|
QPointer<StatsDialog> m_statsDlg;
|
||||||
|
QPointer<TorrentCreatorDlg> m_createTorrentDlg;
|
||||||
|
QPointer<downloadFromURL> m_downloadFromURLDialog;
|
||||||
|
QPointer<QSystemTrayIcon> m_systrayIcon;
|
||||||
|
QPointer<QTimer> m_systrayCreator;
|
||||||
|
QPointer<QMenu> m_trayIconMenu;
|
||||||
|
TransferListWidget *m_transferListWidget;
|
||||||
|
TransferListFiltersWidget *m_transferListFiltersWidget;
|
||||||
|
PropertiesWidget *m_propertiesWidget;
|
||||||
|
bool m_displaySpeedInTitle;
|
||||||
|
bool m_forceExit;
|
||||||
|
bool m_uiLocked;
|
||||||
|
bool m_unlockDlgShowing;
|
||||||
|
LineEdit *m_searchFilter;
|
||||||
|
QAction *m_searchFilterAction;
|
||||||
|
// Widgets
|
||||||
|
QAction *m_prioSeparator;
|
||||||
|
QAction *m_prioSeparatorMenu;
|
||||||
|
QSplitter *m_splitter;
|
||||||
|
QPointer<SearchWidget> m_searchWidget;
|
||||||
|
QPointer<RSSImp> m_rssWidget;
|
||||||
|
QPointer<ExecutionLog> m_executionLog;
|
||||||
|
// Power Management
|
||||||
|
PowerManagement *m_pwr;
|
||||||
|
QTimer *m_preventTimer;
|
||||||
|
#if defined(Q_OS_WIN) || defined(Q_OS_MAC)
|
||||||
|
QTimer *m_programUpdateTimer;
|
||||||
|
bool m_wasUpdateCheckEnabled;
|
||||||
|
#endif
|
||||||
|
bool m_hasPython;
|
||||||
|
QMenu *m_toolbarMenu;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif
|
#endif // MAINWINDOW_H
|
||||||
|
@ -38,7 +38,7 @@
|
|||||||
<height>21</height>
|
<height>21</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menu_Edit">
|
<widget class="QMenu" name="menuEdit">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>&Edit</string>
|
<string>&Edit</string>
|
||||||
</property>
|
</property>
|
||||||
@ -51,43 +51,44 @@
|
|||||||
<addaction name="actionDecreasePriority"/>
|
<addaction name="actionDecreasePriority"/>
|
||||||
<addaction name="actionBottomPriority"/>
|
<addaction name="actionBottomPriority"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu_Help">
|
<widget class="QMenu" name="menuHelp">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>&Help</string>
|
<string>&Help</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="actionDocumentation"/>
|
<addaction name="actionDocumentation"/>
|
||||||
<addaction name="actionCheck_for_updates"/>
|
<addaction name="actionCheckForUpdates"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionDonate_money"/>
|
<addaction name="actionDonateMoney"/>
|
||||||
<addaction name="actionAbout"/>
|
<addaction name="actionAbout"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu_Options">
|
<widget class="QMenu" name="menuOptions">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>&Tools</string>
|
<string>&Tools</string>
|
||||||
</property>
|
</property>
|
||||||
<widget class="QMenu" name="menuAuto_Shutdown_on_downloads_completion">
|
<widget class="QMenu" name="menuAutoShutdownOnDownloadsCompletion">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>On Downloads &Done</string>
|
<string>On Downloads &Done</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="actionAutoShutdown_Disabled"/>
|
<addaction name="actionAutoShutdownDisabled"/>
|
||||||
<addaction name="actionAutoExit_qBittorrent"/>
|
<addaction name="actionAutoExit"/>
|
||||||
<addaction name="actionAutoSuspend_system"/>
|
<addaction name="actionAutoSuspend"/>
|
||||||
<addaction name="actionAutoHibernate_system"/>
|
<addaction name="actionAutoHibernate"/>
|
||||||
<addaction name="actionAutoShutdown_system"/>
|
<addaction name="actionAutoShutdown"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="actionCreate_torrent"/>
|
<addaction name="actionCreateTorrent"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionManageCookies"/>
|
||||||
<addaction name="actionOptions"/>
|
<addaction name="actionOptions"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="menuAuto_Shutdown_on_downloads_completion"/>
|
<addaction name="menuAutoShutdownOnDownloadsCompletion"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QMenu" name="menu_File">
|
<widget class="QMenu" name="menuFile">
|
||||||
<property name="title">
|
<property name="title">
|
||||||
<string>&File</string>
|
<string>&File</string>
|
||||||
</property>
|
</property>
|
||||||
<addaction name="actionOpen"/>
|
<addaction name="actionOpen"/>
|
||||||
<addaction name="actionDownload_from_URL"/>
|
<addaction name="actionDownloadFromURL"/>
|
||||||
<addaction name="action_Import_Torrent"/>
|
<addaction name="actionImportTorrent"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionExit"/>
|
<addaction name="actionExit"/>
|
||||||
</widget>
|
</widget>
|
||||||
@ -106,22 +107,25 @@
|
|||||||
<addaction name="actionWarningMessages"/>
|
<addaction name="actionWarningMessages"/>
|
||||||
<addaction name="actionCriticalMessages"/>
|
<addaction name="actionCriticalMessages"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="actionTop_tool_bar"/>
|
|
||||||
<addaction name="actionSpeed_in_title_bar"/>
|
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionSearch_engine"/>
|
<addaction name="actionSearch_engine"/>
|
||||||
<addaction name="actionRSS_Reader"/>
|
<addaction name="actionRSS_Reader"/>
|
||||||
<addaction name="menuLog"/>
|
<addaction name="menuLog"/>
|
||||||
|
<addaction name="actionTopToolBar"/>
|
||||||
|
<addaction name="actionSpeedInTitleBar"/>
|
||||||
|
<addaction name="separator"/>
|
||||||
|
<addaction name="actionSearchWidget"/>
|
||||||
|
<addaction name="actionRSSReader"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionStatistics"/>
|
<addaction name="actionStatistics"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionLock_qBittorrent"/>
|
<addaction name="actionLock"/>
|
||||||
</widget>
|
</widget>
|
||||||
<addaction name="menu_File"/>
|
<addaction name="menuFile"/>
|
||||||
<addaction name="menu_Edit"/>
|
<addaction name="menuEdit"/>
|
||||||
<addaction name="menuView"/>
|
<addaction name="menuView"/>
|
||||||
<addaction name="menu_Options"/>
|
<addaction name="menuOptions"/>
|
||||||
<addaction name="menu_Help"/>
|
<addaction name="menuHelp"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QToolBar" name="toolBar">
|
<widget class="QToolBar" name="toolBar">
|
||||||
<property name="movable">
|
<property name="movable">
|
||||||
@ -142,7 +146,7 @@
|
|||||||
<attribute name="toolBarBreak">
|
<attribute name="toolBarBreak">
|
||||||
<bool>false</bool>
|
<bool>false</bool>
|
||||||
</attribute>
|
</attribute>
|
||||||
<addaction name="actionDownload_from_URL"/>
|
<addaction name="actionDownloadFromURL"/>
|
||||||
<addaction name="actionOpen"/>
|
<addaction name="actionOpen"/>
|
||||||
<addaction name="actionDelete"/>
|
<addaction name="actionDelete"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
@ -154,7 +158,7 @@
|
|||||||
<addaction name="actionBottomPriority"/>
|
<addaction name="actionBottomPriority"/>
|
||||||
<addaction name="separator"/>
|
<addaction name="separator"/>
|
||||||
<addaction name="actionOptions"/>
|
<addaction name="actionOptions"/>
|
||||||
<addaction name="actionLock_qBittorrent"/>
|
<addaction name="actionLock"/>
|
||||||
</widget>
|
</widget>
|
||||||
<widget class="QStatusBar" name="statusBar"/>
|
<widget class="QStatusBar" name="statusBar"/>
|
||||||
<action name="actionOpen">
|
<action name="actionOpen">
|
||||||
@ -195,7 +199,7 @@
|
|||||||
<string>&Delete</string>
|
<string>&Delete</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionDownload_from_URL">
|
<action name="actionDownloadFromURL">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Add Torrent &Link...</string>
|
<string>Add Torrent &Link...</string>
|
||||||
</property>
|
</property>
|
||||||
@ -203,17 +207,17 @@
|
|||||||
<string>Open URL</string>
|
<string>Open URL</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionCreate_torrent">
|
<action name="actionCreateTorrent">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Torrent &Creator</string>
|
<string>Torrent &Creator</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionSet_upload_limit">
|
<action name="actionSetUploadLimit">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Set Upload Limit...</string>
|
<string>Set Upload Limit...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionSet_download_limit">
|
<action name="actionSetDownloadLimit">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Set Download Limit...</string>
|
<string>Set Download Limit...</string>
|
||||||
</property>
|
</property>
|
||||||
@ -223,12 +227,12 @@
|
|||||||
<string>&Documentation</string>
|
<string>&Documentation</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionSet_global_download_limit">
|
<action name="actionSetGlobalDownloadLimit">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Set Global Download Limit...</string>
|
<string>Set Global Download Limit...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionSet_global_upload_limit">
|
<action name="actionSetGlobalUploadLimit">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Set Global Upload Limit...</string>
|
<string>Set Global Upload Limit...</string>
|
||||||
</property>
|
</property>
|
||||||
@ -265,7 +269,7 @@
|
|||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionUse_alternative_speed_limits">
|
<action name="actionUseAlternativeSpeedLimits">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -276,7 +280,7 @@
|
|||||||
<string>Alternative Speed Limits</string>
|
<string>Alternative Speed Limits</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionTop_tool_bar">
|
<action name="actionTopToolBar">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -287,7 +291,7 @@
|
|||||||
<string>Display Top Toolbar</string>
|
<string>Display Top Toolbar</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionSpeed_in_title_bar">
|
<action name="actionSpeedInTitleBar">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -298,7 +302,7 @@
|
|||||||
<string>Show Transfer Speed in Title Bar</string>
|
<string>Show Transfer Speed in Title Bar</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionRSS_Reader">
|
<action name="actionRSSReader">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -306,7 +310,7 @@
|
|||||||
<string>&RSS Reader</string>
|
<string>&RSS Reader</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionSearch_engine">
|
<action name="actionSearchWidget">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -314,7 +318,7 @@
|
|||||||
<string>Search &Engine</string>
|
<string>Search &Engine</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionLock_qBittorrent">
|
<action name="actionLock">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>L&ock qBittorrent</string>
|
<string>L&ock qBittorrent</string>
|
||||||
</property>
|
</property>
|
||||||
@ -325,7 +329,7 @@
|
|||||||
<string notr="true">Ctrl+L</string>
|
<string notr="true">Ctrl+L</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="action_Import_Torrent">
|
<action name="actionImportTorrent">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>&Import Existing Torrent...</string>
|
<string>&Import Existing Torrent...</string>
|
||||||
</property>
|
</property>
|
||||||
@ -333,7 +337,7 @@
|
|||||||
<string>Import Torrent...</string>
|
<string>Import Torrent...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionDonate_money">
|
<action name="actionDonateMoney">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Do&nate!</string>
|
<string>Do&nate!</string>
|
||||||
</property>
|
</property>
|
||||||
@ -341,17 +345,28 @@
|
|||||||
<string>If you like qBittorrent, please donate!</string>
|
<string>If you like qBittorrent, please donate!</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionStart_All">
|
<action name="actionStartAll">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>R&esume All</string>
|
<string>R&esume All</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionPause_All">
|
<action name="actionPauseAll">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>P&ause All</string>
|
<string>P&ause All</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionAutoExit_qBittorrent">
|
<action name="actionExecutionLogs">
|
||||||
|
<property name="checkable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<property name="text">
|
||||||
|
<string>&Log</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Execution Log</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
|
<action name="actionAutoExit">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -359,7 +374,7 @@
|
|||||||
<string>&Exit qBittorrent</string>
|
<string>&Exit qBittorrent</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionAutoSuspend_system">
|
<action name="actionAutoSuspend">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -367,7 +382,7 @@
|
|||||||
<string>&Suspend System</string>
|
<string>&Suspend System</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionAutoHibernate_system">
|
<action name="actionAutoHibernate">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -375,7 +390,7 @@
|
|||||||
<string>&Hibernate System</string>
|
<string>&Hibernate System</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionAutoShutdown_system">
|
<action name="actionAutoShutdown">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -383,7 +398,7 @@
|
|||||||
<string>S&hutdown System</string>
|
<string>S&hutdown System</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionAutoShutdown_Disabled">
|
<action name="actionAutoShutdownDisabled">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
</property>
|
</property>
|
||||||
@ -406,7 +421,7 @@
|
|||||||
<string>&Statistics</string>
|
<string>&Statistics</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionCheck_for_updates">
|
<action name="actionCheckForUpdates">
|
||||||
<property name="text">
|
<property name="text">
|
||||||
<string>Check for Updates</string>
|
<string>Check for Updates</string>
|
||||||
</property>
|
</property>
|
||||||
@ -414,6 +429,14 @@
|
|||||||
<string>Check for Program Updates</string>
|
<string>Check for Program Updates</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
|
<action name="actionManageCookies">
|
||||||
|
<property name="text">
|
||||||
|
<string>Manage Cookies...</string>
|
||||||
|
</property>
|
||||||
|
<property name="toolTip">
|
||||||
|
<string>Manage stored network cookies</string>
|
||||||
|
</property>
|
||||||
|
</action>
|
||||||
<action name="actionExecutionLogs">
|
<action name="actionExecutionLogs">
|
||||||
<property name="checkable">
|
<property name="checkable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
@ -373,7 +373,7 @@ void PropertiesWidget::reloadPreferences() {
|
|||||||
|
|
||||||
void PropertiesWidget::loadDynamicData() {
|
void PropertiesWidget::loadDynamicData() {
|
||||||
// Refresh only if the torrent handle is valid and if visible
|
// Refresh only if the torrent handle is valid and if visible
|
||||||
if (!m_torrent || (main_window->getCurrentTabWidget() != transferList) || (state != VISIBLE)) return;
|
if (!m_torrent || (main_window->currentTabWidget() != transferList) || (state != VISIBLE)) return;
|
||||||
|
|
||||||
// Transfer infos
|
// Transfer infos
|
||||||
switch(stackedProperties->currentIndex()) {
|
switch(stackedProperties->currentIndex()) {
|
||||||
|
@ -1,110 +0,0 @@
|
|||||||
/*
|
|
||||||
* Bittorrent Client using Qt4 and libtorrent.
|
|
||||||
* Copyright (C) 2010 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 arnaud@qbittorrent.org
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include "cookiesdlg.h"
|
|
||||||
#include "ui_cookiesdlg.h"
|
|
||||||
#include "guiiconprovider.h"
|
|
||||||
#include "base/net/downloadmanager.h"
|
|
||||||
|
|
||||||
#include <QNetworkCookie>
|
|
||||||
#include <QDateTime>
|
|
||||||
|
|
||||||
enum CookiesCols { COOKIE_KEY, COOKIE_VALUE};
|
|
||||||
|
|
||||||
CookiesDlg::CookiesDlg(const QUrl &url, QWidget *parent) :
|
|
||||||
QDialog(parent),
|
|
||||||
ui(new Ui::CookiesDlg)
|
|
||||||
{
|
|
||||||
ui->setupUi(this);
|
|
||||||
// Icons
|
|
||||||
ui->add_btn->setIcon(GuiIconProvider::instance()->getIcon("list-add"));
|
|
||||||
ui->del_btn->setIcon(GuiIconProvider::instance()->getIcon("list-remove"));
|
|
||||||
|
|
||||||
ui->infos_lbl->setText(tr("Common keys for cookies are: '%1', '%2'.\nYou should get this information from your Web browser preferences.").arg("uid").arg("pass"));
|
|
||||||
|
|
||||||
QList<QNetworkCookie> cookies = Net::DownloadManager::instance()->cookiesForUrl(url);
|
|
||||||
foreach (const QNetworkCookie &cookie, cookies) {
|
|
||||||
const int i = ui->cookiesTable->rowCount();
|
|
||||||
ui->cookiesTable->setRowCount(i+1);
|
|
||||||
ui->cookiesTable->setItem(i, COOKIE_KEY, new QTableWidgetItem(QString(cookie.name())));
|
|
||||||
ui->cookiesTable->setItem(i, COOKIE_VALUE, new QTableWidgetItem(QString(cookie.value())));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
CookiesDlg::~CookiesDlg()
|
|
||||||
{
|
|
||||||
delete ui;
|
|
||||||
}
|
|
||||||
|
|
||||||
void CookiesDlg::on_add_btn_clicked() {
|
|
||||||
ui->cookiesTable->setRowCount(ui->cookiesTable->rowCount()+1);
|
|
||||||
// Edit first column
|
|
||||||
ui->cookiesTable->editItem(ui->cookiesTable->item(ui->cookiesTable->rowCount()-1, COOKIE_KEY));
|
|
||||||
}
|
|
||||||
|
|
||||||
void CookiesDlg::on_del_btn_clicked() {
|
|
||||||
// Get selected cookie
|
|
||||||
QList<QTableWidgetItem*> selection = ui->cookiesTable->selectedItems();
|
|
||||||
if (!selection.isEmpty()) {
|
|
||||||
ui->cookiesTable->removeRow(selection.first()->row());
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
QList<QNetworkCookie> CookiesDlg::getCookies() const {
|
|
||||||
QList<QNetworkCookie> ret;
|
|
||||||
auto now = QDateTime::currentDateTime();
|
|
||||||
for (int i=0; i<ui->cookiesTable->rowCount(); ++i) {
|
|
||||||
QString key;
|
|
||||||
if (ui->cookiesTable->item(i, COOKIE_KEY))
|
|
||||||
key = ui->cookiesTable->item(i, COOKIE_KEY)->text().trimmed();
|
|
||||||
QString value;
|
|
||||||
if (ui->cookiesTable->item(i, COOKIE_VALUE))
|
|
||||||
value = ui->cookiesTable->item(i, COOKIE_VALUE)->text().trimmed();
|
|
||||||
if (!key.isEmpty() && !value.isEmpty()) {
|
|
||||||
QNetworkCookie cookie(key.toUtf8(), value.toUtf8());
|
|
||||||
// TODO: Delete this hack when advanced Cookie dialog will be implemented.
|
|
||||||
cookie.setExpirationDate(now.addYears(10));
|
|
||||||
qDebug("Cookie: %s", cookie.toRawForm().data());
|
|
||||||
ret << cookie;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
|
|
||||||
bool CookiesDlg::askForCookies(QWidget *parent, const QUrl &url, QList<QNetworkCookie> &out)
|
|
||||||
{
|
|
||||||
CookiesDlg dlg(url, parent);
|
|
||||||
if (dlg.exec()) {
|
|
||||||
out = dlg.getCookies();
|
|
||||||
return true;
|
|
||||||
}
|
|
||||||
|
|
||||||
return false;
|
|
||||||
}
|
|
@ -1,172 +0,0 @@
|
|||||||
<?xml version="1.0" encoding="UTF-8"?>
|
|
||||||
<ui version="4.0">
|
|
||||||
<class>CookiesDlg</class>
|
|
||||||
<widget class="QDialog" name="CookiesDlg">
|
|
||||||
<property name="geometry">
|
|
||||||
<rect>
|
|
||||||
<x>0</x>
|
|
||||||
<y>0</y>
|
|
||||||
<width>400</width>
|
|
||||||
<height>300</height>
|
|
||||||
</rect>
|
|
||||||
</property>
|
|
||||||
<property name="windowTitle">
|
|
||||||
<string>Cookies management</string>
|
|
||||||
</property>
|
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
|
||||||
<item row="0" column="0">
|
|
||||||
<widget class="QTableWidget" name="cookiesTable">
|
|
||||||
<property name="alternatingRowColors">
|
|
||||||
<bool>true</bool>
|
|
||||||
</property>
|
|
||||||
<property name="selectionMode">
|
|
||||||
<enum>QAbstractItemView::SingleSelection</enum>
|
|
||||||
</property>
|
|
||||||
<attribute name="horizontalHeaderStretchLastSection">
|
|
||||||
<bool>true</bool>
|
|
||||||
</attribute>
|
|
||||||
<attribute name="verticalHeaderVisible">
|
|
||||||
<bool>false</bool>
|
|
||||||
</attribute>
|
|
||||||
<attribute name="verticalHeaderStretchLastSection">
|
|
||||||
<bool>false</bool>
|
|
||||||
</attribute>
|
|
||||||
<column>
|
|
||||||
<property name="text">
|
|
||||||
<string extracomment="As in Key/Value pair">Key</string>
|
|
||||||
</property>
|
|
||||||
</column>
|
|
||||||
<column>
|
|
||||||
<property name="text">
|
|
||||||
<string extracomment="As in Key/Value pair">Value</string>
|
|
||||||
</property>
|
|
||||||
</column>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="0" column="1">
|
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer_2">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QToolButton" name="add_btn">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true"/>
|
|
||||||
</property>
|
|
||||||
<property name="iconSize">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeType">
|
|
||||||
<enum>QSizePolicy::Fixed</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>5</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QToolButton" name="del_btn">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true"/>
|
|
||||||
</property>
|
|
||||||
<property name="iconSize">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>20</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<spacer name="verticalSpacer_3">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>20</width>
|
|
||||||
<height>40</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="2" column="0" colspan="2">
|
|
||||||
<widget class="QDialogButtonBox" name="buttonBox">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Horizontal</enum>
|
|
||||||
</property>
|
|
||||||
<property name="standardButtons">
|
|
||||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<widget class="QLabel" name="infos_lbl">
|
|
||||||
<property name="text">
|
|
||||||
<string notr="true">TextLabel</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</widget>
|
|
||||||
<resources/>
|
|
||||||
<connections>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>accepted()</signal>
|
|
||||||
<receiver>CookiesDlg</receiver>
|
|
||||||
<slot>accept()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>248</x>
|
|
||||||
<y>254</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>157</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
<connection>
|
|
||||||
<sender>buttonBox</sender>
|
|
||||||
<signal>rejected()</signal>
|
|
||||||
<receiver>CookiesDlg</receiver>
|
|
||||||
<slot>reject()</slot>
|
|
||||||
<hints>
|
|
||||||
<hint type="sourcelabel">
|
|
||||||
<x>316</x>
|
|
||||||
<y>260</y>
|
|
||||||
</hint>
|
|
||||||
<hint type="destinationlabel">
|
|
||||||
<x>286</x>
|
|
||||||
<y>274</y>
|
|
||||||
</hint>
|
|
||||||
</hints>
|
|
||||||
</connection>
|
|
||||||
</connections>
|
|
||||||
</ui>
|
|
@ -4,17 +4,14 @@ HEADERS += $$PWD/rss_imp.h \
|
|||||||
$$PWD/rsssettingsdlg.h \
|
$$PWD/rsssettingsdlg.h \
|
||||||
$$PWD/feedlistwidget.h \
|
$$PWD/feedlistwidget.h \
|
||||||
$$PWD/automatedrssdownloader.h \
|
$$PWD/automatedrssdownloader.h \
|
||||||
$$PWD/cookiesdlg.h \
|
|
||||||
$$PWD/htmlbrowser.h
|
$$PWD/htmlbrowser.h
|
||||||
|
|
||||||
SOURCES += $$PWD/rss_imp.cpp \
|
SOURCES += $$PWD/rss_imp.cpp \
|
||||||
$$PWD/rsssettingsdlg.cpp \
|
$$PWD/rsssettingsdlg.cpp \
|
||||||
$$PWD/feedlistwidget.cpp \
|
$$PWD/feedlistwidget.cpp \
|
||||||
$$PWD/automatedrssdownloader.cpp \
|
$$PWD/automatedrssdownloader.cpp \
|
||||||
$$PWD/cookiesdlg.cpp \
|
|
||||||
$$PWD/htmlbrowser.cpp
|
$$PWD/htmlbrowser.cpp
|
||||||
|
|
||||||
FORMS += $$PWD/rss.ui \
|
FORMS += $$PWD/rss.ui \
|
||||||
$$PWD/rsssettingsdlg.ui \
|
$$PWD/rsssettingsdlg.ui \
|
||||||
$$PWD/automatedrssdownloader.ui \
|
$$PWD/automatedrssdownloader.ui
|
||||||
$$PWD/cookiesdlg.ui
|
|
||||||
|
@ -197,11 +197,6 @@
|
|||||||
<string>New folder...</string>
|
<string>New folder...</string>
|
||||||
</property>
|
</property>
|
||||||
</action>
|
</action>
|
||||||
<action name="actionManage_cookies">
|
|
||||||
<property name="text">
|
|
||||||
<string>Manage cookies...</string>
|
|
||||||
</property>
|
|
||||||
</action>
|
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
|
@ -41,7 +41,6 @@
|
|||||||
#include "feedlistwidget.h"
|
#include "feedlistwidget.h"
|
||||||
#include "base/bittorrent/session.h"
|
#include "base/bittorrent/session.h"
|
||||||
#include "base/net/downloadmanager.h"
|
#include "base/net/downloadmanager.h"
|
||||||
#include "cookiesdlg.h"
|
|
||||||
#include "base/preferences.h"
|
#include "base/preferences.h"
|
||||||
#include "rsssettingsdlg.h"
|
#include "rsssettingsdlg.h"
|
||||||
#include "base/rss/rssmanager.h"
|
#include "base/rss/rssmanager.h"
|
||||||
@ -84,8 +83,6 @@ void RSSImp::displayRSSListMenu(const QPoint& pos)
|
|||||||
myRSSListMenu.addSeparator();
|
myRSSListMenu.addSeparator();
|
||||||
if (m_feedList->isFolder(selectedItems.first()))
|
if (m_feedList->isFolder(selectedItems.first()))
|
||||||
myRSSListMenu.addAction(actionNew_folder);
|
myRSSListMenu.addAction(actionNew_folder);
|
||||||
else
|
|
||||||
myRSSListMenu.addAction(actionManage_cookies);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -138,25 +135,6 @@ void RSSImp::displayItemsListMenu(const QPoint&)
|
|||||||
myItemListMenu.exec(QCursor::pos());
|
myItemListMenu.exec(QCursor::pos());
|
||||||
}
|
}
|
||||||
|
|
||||||
void RSSImp::on_actionManage_cookies_triggered()
|
|
||||||
{
|
|
||||||
Q_ASSERT(!m_feedList->selectedItems().empty());
|
|
||||||
|
|
||||||
// TODO: Create advanced application wide Cookie dialog and use it everywhere.
|
|
||||||
QUrl feedUrl = QUrl::fromEncoded(m_feedList->getItemID(m_feedList->selectedItems().first()).toUtf8());
|
|
||||||
QList<QNetworkCookie> cookies;
|
|
||||||
if (CookiesDlg::askForCookies(this, feedUrl, cookies)) {
|
|
||||||
auto downloadManager = Net::DownloadManager::instance();
|
|
||||||
QList<QNetworkCookie> oldCookies = downloadManager->cookiesForUrl(feedUrl);
|
|
||||||
foreach (const QNetworkCookie &oldCookie, oldCookies) {
|
|
||||||
if (!cookies.contains(oldCookie))
|
|
||||||
downloadManager->deleteCookie(oldCookie);
|
|
||||||
}
|
|
||||||
|
|
||||||
downloadManager->setCookiesFromUrl(cookies, feedUrl);
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
void RSSImp::askNewFolder()
|
void RSSImp::askNewFolder()
|
||||||
{
|
{
|
||||||
QTreeWidgetItem* parent_item = 0;
|
QTreeWidgetItem* parent_item = 0;
|
||||||
@ -713,7 +691,6 @@ RSSImp::RSSImp(QWidget *parent):
|
|||||||
actionCopy_feed_URL->setIcon(GuiIconProvider::instance()->getIcon("edit-copy"));
|
actionCopy_feed_URL->setIcon(GuiIconProvider::instance()->getIcon("edit-copy"));
|
||||||
actionDelete->setIcon(GuiIconProvider::instance()->getIcon("edit-delete"));
|
actionDelete->setIcon(GuiIconProvider::instance()->getIcon("edit-delete"));
|
||||||
actionDownload_torrent->setIcon(GuiIconProvider::instance()->getIcon("download"));
|
actionDownload_torrent->setIcon(GuiIconProvider::instance()->getIcon("download"));
|
||||||
actionManage_cookies->setIcon(GuiIconProvider::instance()->getIcon("preferences-web-browser-cookies"));
|
|
||||||
actionMark_items_read->setIcon(GuiIconProvider::instance()->getIcon("mail-mark-read"));
|
actionMark_items_read->setIcon(GuiIconProvider::instance()->getIcon("mail-mark-read"));
|
||||||
actionNew_folder->setIcon(GuiIconProvider::instance()->getIcon("folder-new"));
|
actionNew_folder->setIcon(GuiIconProvider::instance()->getIcon("folder-new"));
|
||||||
actionNew_subscription->setIcon(GuiIconProvider::instance()->getIcon("list-add"));
|
actionNew_subscription->setIcon(GuiIconProvider::instance()->getIcon("list-add"));
|
||||||
|
@ -84,7 +84,6 @@ private slots:
|
|||||||
void askNewFolder();
|
void askNewFolder();
|
||||||
void saveFoldersOpenState();
|
void saveFoldersOpenState();
|
||||||
void loadFoldersOpenState();
|
void loadFoldersOpenState();
|
||||||
void on_actionManage_cookies_triggered();
|
|
||||||
void on_settingsButton_clicked();
|
void on_settingsButton_clicked();
|
||||||
void on_rssDownloaderBtn_clicked();
|
void on_rssDownloaderBtn_clicked();
|
||||||
|
|
||||||
|
@ -301,7 +301,7 @@ void SearchWidget::searchStarted()
|
|||||||
// Error | Stopped by user | Finished normally
|
// Error | Stopped by user | Finished normally
|
||||||
void SearchWidget::searchFinished(bool cancelled)
|
void SearchWidget::searchFinished(bool cancelled)
|
||||||
{
|
{
|
||||||
if (Preferences::instance()->useProgramNotification() && (m_mainWindow->getCurrentTabWidget() != this))
|
if (Preferences::instance()->useProgramNotification() && (m_mainWindow->currentTabWidget() != this))
|
||||||
m_mainWindow->showNotificationBaloon(tr("Search Engine"), tr("Search has finished"));
|
m_mainWindow->showNotificationBaloon(tr("Search Engine"), tr("Search has finished"));
|
||||||
|
|
||||||
if (m_activeSearchTab.isNull()) return; // The active tab was closed
|
if (m_activeSearchTab.isNull()) return; // The active tab was closed
|
||||||
@ -319,7 +319,7 @@ void SearchWidget::searchFinished(bool cancelled)
|
|||||||
|
|
||||||
void SearchWidget::searchFailed()
|
void SearchWidget::searchFailed()
|
||||||
{
|
{
|
||||||
if (Preferences::instance()->useProgramNotification() && (m_mainWindow->getCurrentTabWidget() != this))
|
if (Preferences::instance()->useProgramNotification() && (m_mainWindow->currentTabWidget() != this))
|
||||||
m_mainWindow->showNotificationBaloon(tr("Search Engine"), tr("Search has failed"));
|
m_mainWindow->showNotificationBaloon(tr("Search Engine"), tr("Search has failed"));
|
||||||
|
|
||||||
if (m_activeSearchTab.isNull()) return; // The active tab was closed
|
if (m_activeSearchTab.isNull()) return; // The active tab was closed
|
||||||
|
@ -311,7 +311,7 @@ void TransferListWidget::pauseVisibleTorrents()
|
|||||||
|
|
||||||
void TransferListWidget::deleteSelectedTorrents()
|
void TransferListWidget::deleteSelectedTorrents()
|
||||||
{
|
{
|
||||||
if (main_window->getCurrentTabWidget() != this) return;
|
if (main_window->currentTabWidget() != this) return;
|
||||||
|
|
||||||
const QList<BitTorrent::TorrentHandle *> torrents = getSelectedTorrents();
|
const QList<BitTorrent::TorrentHandle *> torrents = getSelectedTorrents();
|
||||||
if (torrents.empty()) return;
|
if (torrents.empty()) return;
|
||||||
@ -343,26 +343,26 @@ void TransferListWidget::deleteVisibleTorrents()
|
|||||||
void TransferListWidget::increasePrioSelectedTorrents()
|
void TransferListWidget::increasePrioSelectedTorrents()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
if (main_window->getCurrentTabWidget() == this)
|
if (main_window->currentTabWidget() == this)
|
||||||
BitTorrent::Session::instance()->increaseTorrentsPriority(extractHashes(getSelectedTorrents()));
|
BitTorrent::Session::instance()->increaseTorrentsPriority(extractHashes(getSelectedTorrents()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransferListWidget::decreasePrioSelectedTorrents()
|
void TransferListWidget::decreasePrioSelectedTorrents()
|
||||||
{
|
{
|
||||||
qDebug() << Q_FUNC_INFO;
|
qDebug() << Q_FUNC_INFO;
|
||||||
if (main_window->getCurrentTabWidget() == this)
|
if (main_window->currentTabWidget() == this)
|
||||||
BitTorrent::Session::instance()->decreaseTorrentsPriority(extractHashes(getSelectedTorrents()));
|
BitTorrent::Session::instance()->decreaseTorrentsPriority(extractHashes(getSelectedTorrents()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransferListWidget::topPrioSelectedTorrents()
|
void TransferListWidget::topPrioSelectedTorrents()
|
||||||
{
|
{
|
||||||
if (main_window->getCurrentTabWidget() == this)
|
if (main_window->currentTabWidget() == this)
|
||||||
BitTorrent::Session::instance()->topTorrentsPriority(extractHashes(getSelectedTorrents()));
|
BitTorrent::Session::instance()->topTorrentsPriority(extractHashes(getSelectedTorrents()));
|
||||||
}
|
}
|
||||||
|
|
||||||
void TransferListWidget::bottomPrioSelectedTorrents()
|
void TransferListWidget::bottomPrioSelectedTorrents()
|
||||||
{
|
{
|
||||||
if (main_window->getCurrentTabWidget() == this)
|
if (main_window->currentTabWidget() == this)
|
||||||
BitTorrent::Session::instance()->bottomTorrentsPriority(extractHashes(getSelectedTorrents()));
|
BitTorrent::Session::instance()->bottomTorrentsPriority(extractHashes(getSelectedTorrents()));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user