From 1af83bb4cc734563156c1afe4b37b760ec4d63e8 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Fri, 14 Apr 2023 19:14:28 +0200 Subject: [PATCH] Optimize alphabetical sorting a bit fixes #1272 --- src/UserSettingsPage.cpp | 2 +- src/timeline/RoomlistModel.cpp | 17 ++++++++--------- 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();