Chocobo1
6 years ago
9 changed files with 277 additions and 1 deletions
@ -0,0 +1,112 @@
@@ -0,0 +1,112 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent. |
||||
* Copyright (C) 2019 Mike Tzou (Chocobo1) |
||||
* |
||||
* 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 "trackerentriesdialog.h" |
||||
|
||||
#include <algorithm> |
||||
|
||||
#include <QHash> |
||||
|
||||
#include "base/bittorrent/trackerentry.h" |
||||
#include "ui_trackerentriesdialog.h" |
||||
#include "utils.h" |
||||
|
||||
#define SETTINGS_KEY(name) "TrackerEntriesDialog/" name |
||||
|
||||
TrackerEntriesDialog::TrackerEntriesDialog(QWidget *parent) |
||||
: QDialog(parent) |
||||
, m_ui(new Ui::TrackerEntriesDialog) |
||||
, m_storeDialogSize(SETTINGS_KEY("Dimension")) |
||||
{ |
||||
m_ui->setupUi(this); |
||||
|
||||
connect(m_ui->buttonBox, &QDialogButtonBox::accepted, this, &QDialog::accept); |
||||
connect(m_ui->buttonBox, &QDialogButtonBox::rejected, this, &QDialog::reject); |
||||
|
||||
loadSettings(); |
||||
} |
||||
|
||||
TrackerEntriesDialog::~TrackerEntriesDialog() |
||||
{ |
||||
saveSettings(); |
||||
|
||||
delete m_ui; |
||||
} |
||||
|
||||
void TrackerEntriesDialog::setTrackers(const QVector<BitTorrent::TrackerEntry> &trackers) |
||||
{ |
||||
int maxTier = -1; |
||||
QHash<int, QString> tiers; // <tier, tracker URLs>
|
||||
|
||||
for (const BitTorrent::TrackerEntry &entry : trackers) { |
||||
tiers[entry.tier()] += (entry.url() + '\n'); |
||||
maxTier = std::max(maxTier, entry.tier()); |
||||
} |
||||
|
||||
QString text = tiers.value(0); |
||||
|
||||
for (int i = 1; i <= maxTier; ++i) |
||||
text += ('\n' + tiers.value(i)); |
||||
|
||||
m_ui->plainTextEdit->setPlainText(text); |
||||
} |
||||
|
||||
QVector<BitTorrent::TrackerEntry> TrackerEntriesDialog::trackers() const |
||||
{ |
||||
const QString plainText = m_ui->plainTextEdit->toPlainText(); |
||||
const QVector<QStringRef> lines = plainText.splitRef('\n'); |
||||
|
||||
QVector<BitTorrent::TrackerEntry> entries; |
||||
entries.reserve(lines.size()); |
||||
|
||||
int tier = 0; |
||||
for (QStringRef line : lines) { |
||||
line = line.trimmed(); |
||||
|
||||
if (line.isEmpty()) { |
||||
++tier; |
||||
continue; |
||||
} |
||||
|
||||
BitTorrent::TrackerEntry entry {line.toString()}; |
||||
entry.setTier(tier); |
||||
entries.append(entry); |
||||
} |
||||
|
||||
return entries; |
||||
} |
||||
|
||||
void TrackerEntriesDialog::saveSettings() |
||||
{ |
||||
m_storeDialogSize = size(); |
||||
} |
||||
|
||||
void TrackerEntriesDialog::loadSettings() |
||||
{ |
||||
Utils::Gui::resize(this, m_storeDialogSize); |
||||
} |
@ -0,0 +1,64 @@
@@ -0,0 +1,64 @@
|
||||
/*
|
||||
* Bittorrent Client using Qt and libtorrent. |
||||
* Copyright (C) 2019 Mike Tzou (Chocobo1) |
||||
* |
||||
* 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. |
||||
*/ |
||||
|
||||
#pragma once |
||||
|
||||
#include <QDialog> |
||||
#include <QVector> |
||||
|
||||
#include "base/settingvalue.h" |
||||
|
||||
namespace BitTorrent |
||||
{ |
||||
class TrackerEntry; |
||||
} |
||||
|
||||
namespace Ui |
||||
{ |
||||
class TrackerEntriesDialog; |
||||
} |
||||
|
||||
class TrackerEntriesDialog : public QDialog |
||||
{ |
||||
Q_OBJECT |
||||
Q_DISABLE_COPY(TrackerEntriesDialog) |
||||
|
||||
public: |
||||
explicit TrackerEntriesDialog(QWidget *parent); |
||||
~TrackerEntriesDialog() override; |
||||
|
||||
void setTrackers(const QVector<BitTorrent::TrackerEntry> &trackers); |
||||
QVector<BitTorrent::TrackerEntry> trackers() const; |
||||
|
||||
private: |
||||
void saveSettings(); |
||||
void loadSettings(); |
||||
|
||||
Ui::TrackerEntriesDialog *m_ui; |
||||
CachedSettingValue<QSize> m_storeDialogSize; |
||||
}; |
@ -0,0 +1,43 @@
@@ -0,0 +1,43 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?> |
||||
<ui version="4.0"> |
||||
<class>TrackerEntriesDialog</class> |
||||
<widget class="QDialog" name="TrackerEntriesDialog"> |
||||
<property name="geometry"> |
||||
<rect> |
||||
<x>0</x> |
||||
<y>0</y> |
||||
<width>506</width> |
||||
<height>500</height> |
||||
</rect> |
||||
</property> |
||||
<property name="windowTitle"> |
||||
<string>Edit trackers</string> |
||||
</property> |
||||
<layout class="QVBoxLayout" name="verticalLayout"> |
||||
<item> |
||||
<widget class="QLabel" name="label"> |
||||
<property name="text"> |
||||
<string>One tracker URL per line. |
||||
|
||||
- You can split the trackers into groups by inserting blank lines. |
||||
- All trackers within the same group will belong to the same tier. |
||||
- The group on top will be tier 0, the next group tier 1 and so on. |
||||
- Below will show the common subset of trackers of the selected torrents.</string> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
<item> |
||||
<widget class="QPlainTextEdit" name="plainTextEdit"/> |
||||
</item> |
||||
<item> |
||||
<widget class="QDialogButtonBox" name="buttonBox"> |
||||
<property name="standardButtons"> |
||||
<set>QDialogButtonBox::Cancel|QDialogButtonBox::Ok</set> |
||||
</property> |
||||
</widget> |
||||
</item> |
||||
</layout> |
||||
</widget> |
||||
<resources/> |
||||
<connections/> |
||||
</ui> |
Loading…
Reference in new issue