mirror of
https://github.com/d47081/qBittorrent.git
synced 2025-02-02 09:55:55 +00:00
Merge pull request #10255 from Chocobo1/algorithm
Make use of std algorithms and C++14 features
This commit is contained in:
commit
6f0a66ce26
@ -225,7 +225,7 @@ namespace
|
||||
template <typename T>
|
||||
std::function<T (const T&)> clampValue(const T lower, const T upper)
|
||||
{
|
||||
// TODO: change return type to `auto` when using C++14
|
||||
// TODO: change return type to `auto` when using C++17
|
||||
return [lower, upper](const T value) -> T
|
||||
{
|
||||
if (value < lower)
|
||||
@ -3460,18 +3460,18 @@ void Session::handleTorrentTrackerWarning(TorrentHandle *const torrent, const QS
|
||||
|
||||
bool Session::hasPerTorrentRatioLimit() const
|
||||
{
|
||||
for (TorrentHandle *const torrent : asConst(m_torrents))
|
||||
if (torrent->ratioLimit() >= 0) return true;
|
||||
|
||||
return false;
|
||||
return std::any_of(m_torrents.cbegin(), m_torrents.cend(), [](const TorrentHandle *torrent)
|
||||
{
|
||||
return (torrent->ratioLimit() >= 0);
|
||||
});
|
||||
}
|
||||
|
||||
bool Session::hasPerTorrentSeedingTimeLimit() const
|
||||
{
|
||||
for (TorrentHandle *const torrent : asConst(m_torrents))
|
||||
if (torrent->seedingTimeLimit() >= 0) return true;
|
||||
|
||||
return false;
|
||||
return std::any_of(m_torrents.cbegin(), m_torrents.cend(), [](const TorrentHandle *torrent)
|
||||
{
|
||||
return (torrent->seedingTimeLimit() >= 0);
|
||||
});
|
||||
}
|
||||
|
||||
void Session::initResumeFolder()
|
||||
|
@ -841,11 +841,10 @@ bool TorrentHandle::hasError() const
|
||||
bool TorrentHandle::hasFilteredPieces() const
|
||||
{
|
||||
const std::vector<int> pp = m_nativeHandle.piece_priorities();
|
||||
|
||||
for (const int priority : pp)
|
||||
if (priority == 0) return true;
|
||||
|
||||
return false;
|
||||
return std::any_of(pp.cbegin(), pp.cend(), [](const int priority)
|
||||
{
|
||||
return (priority == 0);
|
||||
});
|
||||
}
|
||||
|
||||
int TorrentHandle::queuePosition() const
|
||||
|
@ -30,6 +30,8 @@
|
||||
|
||||
#include "requestparser.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QRegularExpression>
|
||||
#include <QStringList>
|
||||
@ -242,12 +244,10 @@ bool RequestParser::parsePostMessage(const QByteArray &data)
|
||||
const QByteArray endDelimiter = QByteArray("--") + delimiter + QByteArray("--") + CRLF;
|
||||
multipart.push_back(viewWithoutEndingWith(multipart.takeLast(), endDelimiter));
|
||||
|
||||
for (const auto &part : multipart) {
|
||||
if (!parseFormData(part))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return std::all_of(multipart.cbegin(), multipart.cend(), [this](const QByteArray &part)
|
||||
{
|
||||
return this->parseFormData(part);
|
||||
});
|
||||
}
|
||||
|
||||
qWarning() << Q_FUNC_INFO << "unknown content type:" << contentType;
|
||||
|
@ -50,22 +50,16 @@ namespace
|
||||
|
||||
QList<QSslCipher> safeCipherList()
|
||||
{
|
||||
const QStringList badCiphers = {"idea", "rc4"};
|
||||
const QList<QSslCipher> allCiphers = QSslSocket::supportedCiphers();
|
||||
const QStringList badCiphers {"idea", "rc4"};
|
||||
const QList<QSslCipher> allCiphers {QSslSocket::supportedCiphers()};
|
||||
QList<QSslCipher> safeCiphers;
|
||||
for (const QSslCipher &cipher : allCiphers) {
|
||||
bool isSafe = true;
|
||||
for (const QString &badCipher : badCiphers) {
|
||||
if (cipher.name().contains(badCipher, Qt::CaseInsensitive)) {
|
||||
isSafe = false;
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
if (isSafe)
|
||||
safeCiphers += cipher;
|
||||
}
|
||||
|
||||
std::copy_if(allCiphers.cbegin(), allCiphers.cend(), std::back_inserter(safeCiphers), [&badCiphers](const QSslCipher &cipher)
|
||||
{
|
||||
return std::none_of(badCiphers.cbegin(), badCiphers.cend(), [&cipher](const QString &badCipher)
|
||||
{
|
||||
return cipher.name().contains(badCipher, Qt::CaseInsensitive);
|
||||
});
|
||||
});
|
||||
return safeCiphers;
|
||||
}
|
||||
}
|
||||
|
@ -38,7 +38,7 @@ class IndexInterval
|
||||
public:
|
||||
using IndexType = Index;
|
||||
|
||||
IndexInterval(IndexType first, IndexType last) // add constexpr when using C++14
|
||||
IndexInterval(IndexType first, IndexType last) // add constexpr when using C++17
|
||||
: m_first {first}
|
||||
, m_last {last}
|
||||
{
|
||||
|
@ -29,6 +29,8 @@
|
||||
|
||||
#include "rss_autodownloadrule.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QDebug>
|
||||
#include <QDir>
|
||||
#include <QHash>
|
||||
@ -237,13 +239,11 @@ bool AutoDownloadRule::matchesMustContainExpression(const QString &articleTitle)
|
||||
|
||||
// Each expression is either a regex, or a set of wildcards separated by whitespace.
|
||||
// Accept if any complete expression matches.
|
||||
for (const QString &expression : asConst(m_dataPtr->mustContain)) {
|
||||
return std::any_of(m_dataPtr->mustContain.cbegin(), m_dataPtr->mustContain.cend(), [this, &articleTitle](const QString &expression)
|
||||
{
|
||||
// A regex of the form "expr|" will always match, so do the same for wildcards
|
||||
if (matchesExpression(articleTitle, expression))
|
||||
return true;
|
||||
}
|
||||
|
||||
return false;
|
||||
return matchesExpression(articleTitle, expression);
|
||||
});
|
||||
}
|
||||
|
||||
bool AutoDownloadRule::matchesMustNotContainExpression(const QString &articleTitle) const
|
||||
@ -253,13 +253,11 @@ bool AutoDownloadRule::matchesMustNotContainExpression(const QString &articleTit
|
||||
|
||||
// Each expression is either a regex, or a set of wildcards separated by whitespace.
|
||||
// Reject if any complete expression matches.
|
||||
for (const QString &expression : asConst(m_dataPtr->mustNotContain)) {
|
||||
return std::none_of(m_dataPtr->mustNotContain.cbegin(), m_dataPtr->mustNotContain.cend(), [this, &articleTitle](const QString &expression)
|
||||
{
|
||||
// A regex of the form "expr|" will always match, so do the same for wildcards
|
||||
if (matchesExpression(articleTitle, expression))
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
return matchesExpression(articleTitle, expression);
|
||||
});
|
||||
}
|
||||
|
||||
bool AutoDownloadRule::matchesEpisodeFilterExpression(const QString &articleTitle) const
|
||||
|
@ -30,6 +30,8 @@
|
||||
|
||||
#include "rss_folder.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QJsonObject>
|
||||
#include <QJsonValue>
|
||||
|
||||
@ -69,10 +71,11 @@ QList<Article *> Folder::articles() const
|
||||
|
||||
int Folder::unreadCount() const
|
||||
{
|
||||
int count = 0;
|
||||
for (Item *item : asConst(items()))
|
||||
count += item->unreadCount();
|
||||
return count;
|
||||
const auto itemList = items();
|
||||
return std::accumulate(itemList.cbegin(), itemList.cend(), 0, [](const int acc, const Item *item)
|
||||
{
|
||||
return (acc + item->unreadCount());
|
||||
});
|
||||
}
|
||||
|
||||
void Folder::markAsRead()
|
||||
|
@ -48,7 +48,7 @@ public:
|
||||
return m_value;
|
||||
}
|
||||
|
||||
TriStateBool &operator=(const TriStateBool &other) = default; // add constexpr when using C++14
|
||||
TriStateBool &operator=(const TriStateBool &other) = default; // add constexpr when using C++17
|
||||
|
||||
constexpr bool operator==(const TriStateBool &other) const
|
||||
{
|
||||
|
@ -28,6 +28,8 @@
|
||||
|
||||
#include "statsdialog.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include "base/bittorrent/cachestatus.h"
|
||||
#include "base/bittorrent/session.h"
|
||||
#include "base/bittorrent/sessionstatus.h"
|
||||
@ -89,9 +91,11 @@ void StatsDialog::update()
|
||||
// to complete before it receives or sends any more data on the socket. It's a metric of how disk bound you are.
|
||||
|
||||
// num_peers is not reliable (adds up peers, which didn't even overcome tcp handshake)
|
||||
quint32 peers = 0;
|
||||
for (BitTorrent::TorrentHandle *const torrent : asConst(BitTorrent::Session::instance()->torrents()))
|
||||
peers += torrent->peersCount();
|
||||
const auto torrents = BitTorrent::Session::instance()->torrents();
|
||||
const quint32 peers = std::accumulate(torrents.cbegin(), torrents.cend(), 0, [](const quint32 acc, const BitTorrent::TorrentHandle *torrent)
|
||||
{
|
||||
return (acc + torrent->peersCount());
|
||||
});
|
||||
|
||||
m_ui->labelWriteStarve->setText(QString("%1%")
|
||||
.arg(((ss.diskWriteQueue > 0) && (peers > 0))
|
||||
|
@ -28,6 +28,8 @@
|
||||
|
||||
#include "torrentcontentmodel.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QDir>
|
||||
#include <QFileIconProvider>
|
||||
#include <QFileInfo>
|
||||
@ -275,10 +277,10 @@ QVector<int> TorrentContentModel::getFilePriorities() const
|
||||
|
||||
bool TorrentContentModel::allFiltered() const
|
||||
{
|
||||
for (const TorrentContentModelFile *fileItem : asConst(m_filesIndex))
|
||||
if (fileItem->priority() != BitTorrent::FilePriority::Ignored)
|
||||
return false;
|
||||
return true;
|
||||
return std::all_of(m_filesIndex.cbegin(), m_filesIndex.cend(), [](const TorrentContentModelFile *fileItem)
|
||||
{
|
||||
return (fileItem->priority() == BitTorrent::FilePriority::Ignored);
|
||||
});
|
||||
}
|
||||
|
||||
int TorrentContentModel::columnCount(const QModelIndex &parent) const
|
||||
|
@ -86,9 +86,10 @@ TorrentContentModelItem *TorrentContentModelFolder::child(int row) const
|
||||
|
||||
TorrentContentModelFolder *TorrentContentModelFolder::childFolderWithName(const QString &name) const
|
||||
{
|
||||
for (TorrentContentModelItem *child : asConst(m_childItems))
|
||||
for (TorrentContentModelItem *child : asConst(m_childItems)) {
|
||||
if ((child->itemType() == FolderType) && (child->name() == name))
|
||||
return static_cast<TorrentContentModelFolder *>(child);
|
||||
}
|
||||
return nullptr;
|
||||
}
|
||||
|
||||
|
@ -28,6 +28,8 @@
|
||||
|
||||
#include "synccontroller.h"
|
||||
|
||||
#include <algorithm>
|
||||
|
||||
#include <QJsonObject>
|
||||
#include <QThread>
|
||||
#include <QTimer>
|
||||
@ -133,9 +135,12 @@ namespace
|
||||
map[KEY_TRANSFER_TOTAL_BUFFERS_SIZE] = cacheStatus.totalUsedBuffers * 16 * 1024;
|
||||
|
||||
// num_peers is not reliable (adds up peers, which didn't even overcome tcp handshake)
|
||||
quint32 peers = 0;
|
||||
for (BitTorrent::TorrentHandle *const torrent : asConst(BitTorrent::Session::instance()->torrents()))
|
||||
peers += torrent->peersCount();
|
||||
const auto torrents = BitTorrent::Session::instance()->torrents();
|
||||
const quint32 peers = std::accumulate(torrents.cbegin(), torrents.cend(), 0, [](const quint32 acc, const BitTorrent::TorrentHandle *torrent)
|
||||
{
|
||||
return (acc + torrent->peersCount());
|
||||
});
|
||||
|
||||
map[KEY_TRANSFER_WRITE_CACHE_OVERLOAD] = ((sessionStatus.diskWriteQueue > 0) && (peers > 0)) ? Utils::String::fromDouble((100. * sessionStatus.diskWriteQueue) / peers, 2) : "0";
|
||||
map[KEY_TRANSFER_READ_CACHE_OVERLOAD] = ((sessionStatus.diskReadQueue > 0) && (peers > 0)) ? Utils::String::fromDouble((100. * sessionStatus.diskReadQueue) / peers, 2) : "0";
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user