mirror of
https://github.com/qbittorrent/qBittorrent.git
synced 2024-12-21 08:09:35 +08:00
Migrate away from deprecated QVariant comparison operators
Fortunately, serializing to JSON limits the data types to a very small
subset and thus we are able to implement the comparison without much
hassle.
Fix up cba8d83b21
.
This commit is contained in:
parent
7c48ba2f19
commit
78638a15be
@ -262,21 +262,59 @@ void TorrentsController::infoAction()
|
|||||||
for (const QString &hash : hashes)
|
for (const QString &hash : hashes)
|
||||||
hashSet.insert(BitTorrent::InfoHash {hash});
|
hashSet.insert(BitTorrent::InfoHash {hash});
|
||||||
|
|
||||||
|
const TorrentFilter torrentFilter(filter, (hashes.isEmpty() ? TorrentFilter::AnyHash : hashSet), category);
|
||||||
QVariantList torrentList;
|
QVariantList torrentList;
|
||||||
TorrentFilter torrentFilter(filter, (hashes.isEmpty() ? TorrentFilter::AnyHash : hashSet), category);
|
for (const BitTorrent::TorrentHandle *torrent : asConst(BitTorrent::Session::instance()->torrents()))
|
||||||
for (BitTorrent::TorrentHandle *const torrent : asConst(BitTorrent::Session::instance()->torrents()))
|
|
||||||
{
|
{
|
||||||
if (torrentFilter.match(torrent))
|
if (torrentFilter.match(torrent))
|
||||||
torrentList.append(serialize(*torrent));
|
torrentList.append(serialize(*torrent));
|
||||||
}
|
}
|
||||||
|
|
||||||
std::sort(torrentList.begin(), torrentList.end()
|
if (torrentList.isEmpty())
|
||||||
, [sortedColumn, reverse](const QVariant &torrent1, const QVariant &torrent2)
|
|
||||||
{
|
{
|
||||||
return reverse
|
setResult(QJsonObject {});
|
||||||
? (torrent1.toMap().value(sortedColumn) > torrent2.toMap().value(sortedColumn))
|
return;
|
||||||
: (torrent1.toMap().value(sortedColumn) < torrent2.toMap().value(sortedColumn));
|
}
|
||||||
});
|
|
||||||
|
if (!sortedColumn.isEmpty())
|
||||||
|
{
|
||||||
|
if (!torrentList[0].toMap().contains(sortedColumn))
|
||||||
|
throw APIError(APIErrorType::BadParams, tr("'sort' parameter is invalid"));
|
||||||
|
|
||||||
|
const auto lessThan = [](const QVariant &left, const QVariant &right) -> bool
|
||||||
|
{
|
||||||
|
Q_ASSERT(left.type() == right.type());
|
||||||
|
|
||||||
|
switch (static_cast<QMetaType::Type>(left.type()))
|
||||||
|
{
|
||||||
|
case QMetaType::Bool:
|
||||||
|
return left.value<bool>() < right.value<bool>();
|
||||||
|
case QMetaType::Double:
|
||||||
|
return left.value<double>() < right.value<double>();
|
||||||
|
case QMetaType::Float:
|
||||||
|
return left.value<float>() < right.value<float>();
|
||||||
|
case QMetaType::Int:
|
||||||
|
return left.value<int>() < right.value<int>();
|
||||||
|
case QMetaType::LongLong:
|
||||||
|
return left.value<qlonglong>() < right.value<qlonglong>();
|
||||||
|
case QMetaType::QString:
|
||||||
|
return left.value<QString>() < right.value<QString>();
|
||||||
|
default:
|
||||||
|
qWarning("Unhandled QVariant comparison, type: %d, name: %s", left.type()
|
||||||
|
, QMetaType::typeName(left.type()));
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
return false;
|
||||||
|
};
|
||||||
|
|
||||||
|
std::sort(torrentList.begin(), torrentList.end()
|
||||||
|
, [reverse, &sortedColumn, &lessThan](const QVariant &torrent1, const QVariant &torrent2)
|
||||||
|
{
|
||||||
|
const QVariant value1 {torrent1.toMap().value(sortedColumn)};
|
||||||
|
const QVariant value2 {torrent2.toMap().value(sortedColumn)};
|
||||||
|
return reverse ? lessThan(value2, value1) : lessThan(value1, value2);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
const int size = torrentList.size();
|
const int size = torrentList.size();
|
||||||
// normalize offset
|
// normalize offset
|
||||||
|
Loading…
Reference in New Issue
Block a user