summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2023-04-14 19:14:28 +0200
committerNicolas Werner <nicolas.werner@hotmail.de>2023-04-14 19:21:40 +0200
commit1af83bb4cc734563156c1afe4b37b760ec4d63e8 (patch)
tree6e5584f967c9bf451237c9b5154e69e7a9feebc7
parent4b2bf9680cbde81ba3fd66272a3f29a7715d1bd4 (diff)
Optimize alphabetical sorting a bit
fixes #1272
-rw-r--r--src/UserSettingsPage.cpp2
-rw-r--r--src/timeline/RoomlistModel.cpp17
2 files changed, 9 insertions, 10 deletions
diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp
index e4af4b56..dd4270a8 100644
--- a/src/UserSettingsPage.cpp
+++ b/src/UserSettingsPage.cpp
@@ -1023,7 +1023,7 @@ UserSettingsModel::data(const QModelIndex &index, int role) const
case SortByImportance:
return tr("Sort rooms by unreads");
case SortByAlphabet:
- return tr("Sort rooms by alphabetical order instead of last message time");
+ return tr("Sort rooms alphabetically");
case ButtonsInTimeline:
return tr("Show buttons in timeline");
case TimelineMaxWidth:
diff --git a/src/timeline/RoomlistModel.cpp b/src/timeline/RoomlistModel.cpp
index 0801289c..909a6bf8 100644
--- a/src/timeline/RoomlistModel.cpp
+++ b/src/timeline/RoomlistModel.cpp
@@ -889,20 +889,19 @@ FilteredRoomlistModel::lessThan(const QModelIndex &left, const QModelIndex &righ
// Now sort by recency or room name
// 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 b_order = sourceModel()->data(right_idx, RoomlistModel::Timestamp).toULongLong();
if (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();