mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-12-12 05:44:14 +03:00
Make use of std algorithms
This commit is contained in:
parent
40eb8a1f4a
commit
6d29a3af60
10 changed files with 67 additions and 61 deletions
|
@ -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;
|
||||
}
|
||||
}
|
||||
|
|
|
@ -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()
|
||||
|
|
|
@ -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…
Reference in a new issue