Revise tag related implementations

Fix #12690.
This commit is contained in:
Chocobo1
2021-04-02 13:45:50 +08:00
parent ab6141edb7
commit fdc186c92f
20 changed files with 257 additions and 50 deletions

View File

@@ -58,6 +58,19 @@ namespace
return isLeftValid ? -1 : 1;
}
int customCompare(const TagSet &left, const TagSet &right, const Utils::Compare::NaturalCompare<Qt::CaseInsensitive> &compare)
{
for (auto leftIter = left.cbegin(), rightIter = right.cbegin();
(leftIter != left.cend()) && (rightIter != right.cend());
++leftIter, ++rightIter)
{
const int result = compare(*leftIter, *rightIter);
if (result != 0)
return result;
}
return threeWayCompare(left.size(), right.size());
}
template <typename T>
int customCompare(const T left, const T right)
{
@@ -140,10 +153,12 @@ int TransferListSortModel::compare(const QModelIndex &left, const QModelIndex &r
case TransferListModel::TR_CATEGORY:
case TransferListModel::TR_NAME:
case TransferListModel::TR_SAVE_PATH:
case TransferListModel::TR_TAGS:
case TransferListModel::TR_TRACKER:
return m_naturalCompare(leftValue.toString(), rightValue.toString());
case TransferListModel::TR_TAGS:
return customCompare(leftValue.value<TagSet>(), rightValue.value<TagSet>(), m_naturalCompare);
case TransferListModel::TR_AMOUNT_DOWNLOADED:
case TransferListModel::TR_AMOUNT_DOWNLOADED_SESSION:
case TransferListModel::TR_AMOUNT_LEFT: