Optimize alphabetical sorting a bit

fixes #1272
This commit is contained in:
Nicolas Werner 2023-04-14 19:14:28 +02:00
parent 4b2bf9680c
commit 1af83bb4cc
No known key found for this signature in database
GPG key ID: C8D75E610773F2D9
2 changed files with 9 additions and 10 deletions

View file

@ -1023,7 +1023,7 @@ UserSettingsModel::data(const QModelIndex &index, int role) const
case SortByImportance: case SortByImportance:
return tr("Sort rooms by unreads"); return tr("Sort rooms by unreads");
case SortByAlphabet: case SortByAlphabet:
return tr("Sort rooms by alphabetical order instead of last message time"); return tr("Sort rooms alphabetically");
case ButtonsInTimeline: case ButtonsInTimeline:
return tr("Show buttons in timeline"); return tr("Show buttons in timeline");
case TimelineMaxWidth: case TimelineMaxWidth:

View file

@ -889,20 +889,19 @@ FilteredRoomlistModel::lessThan(const QModelIndex &left, const QModelIndex &righ
// Now sort by recency or room name // Now sort by recency or room name
// Zero if empty, otherwise the time that the event occured // Zero if empty, otherwise the time that the event occured
if (!this->sortByAlphabet) { if (this->sortByAlphabet) {
QString a_order = sourceModel()->data(left_idx, RoomlistModel::RoomName).toString();
QString b_order = sourceModel()->data(right_idx, RoomlistModel::RoomName).toString();
auto comp = a_order.compare(b_order, Qt::CaseInsensitive);
if (comp != 0)
return comp < 0;
} else {
uint64_t a_order = sourceModel()->data(left_idx, RoomlistModel::Timestamp).toULongLong(); uint64_t a_order = sourceModel()->data(left_idx, RoomlistModel::Timestamp).toULongLong();
uint64_t b_order = sourceModel()->data(right_idx, RoomlistModel::Timestamp).toULongLong(); uint64_t b_order = sourceModel()->data(right_idx, RoomlistModel::Timestamp).toULongLong();
if (a_order != b_order) if (a_order != b_order)
return a_order > b_order; return a_order > b_order;
} else {
QString a_order =
sourceModel()->data(left_idx, RoomlistModel::RoomName).toString().toLower();
QString b_order =
sourceModel()->data(right_idx, RoomlistModel::RoomName).toString().toLower();
if (a_order != b_order)
return a_order < b_order;
} }
return left.row() < right.row(); return left.row() < right.row();