Optimize alphabetical sorting a bit

fixes #1272
pull/1424/head
Nicolas Werner 2 years ago
parent 4b2bf9680c
commit 1af83bb4cc
No known key found for this signature in database
GPG Key ID: C8D75E610773F2D9
  1. 2
      src/UserSettingsPage.cpp
  2. 17
      src/timeline/RoomlistModel.cpp

@ -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:

@ -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();

Loading…
Cancel
Save