From 020385c85027e09a22333b5c1d69e45fc4dff342 Mon Sep 17 00:00:00 2001 From: Soumyadeep Ghosh Date: Wed, 4 Dec 2024 01:45:12 +0530 Subject: [PATCH] backend: allow users to sort based on last activity This MR allows an option to prefer the last activity as the most favorable parameter for sorting. --- src/models/sortfilterroomtreemodel.cpp | 14 ++++++++++++-- src/models/sortfilterroomtreemodel.h | 1 + src/settings/NeoChatGeneralPage.qml | 10 ++++++++++ 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/src/models/sortfilterroomtreemodel.cpp b/src/models/sortfilterroomtreemodel.cpp index f2de87fc6..a2bd05873 100644 --- a/src/models/sortfilterroomtreemodel.cpp +++ b/src/models/sortfilterroomtreemodel.cpp @@ -64,8 +64,17 @@ static const QVector activitySortPriorities{ RoomTreeModel::HasHighlightNotificationsRole, RoomTreeModel::ContextNotificationCountRole, RoomTreeModel::FavouriteRole, - // Finally sort by last activity time +}; + +static const QVector lastMessageSortPriorities{ + // Sort by last activity time RoomTreeModel::LastActiveTimeRole, + // Anything useful at the top, quiet rooms at the bottom + RoomTreeModel::AttentionRole, + // Organize by highlights, notifications, unread favorites, all other unread, in that order + RoomTreeModel::HasHighlightNotificationsRole, + RoomTreeModel::ContextNotificationCountRole, + RoomTreeModel::FavouriteRole, }; bool SortFilterRoomTreeModel::roleCmp(const QVariant &sortLeft, const QVariant &sortRight) const @@ -110,8 +119,9 @@ bool SortFilterRoomTreeModel::lessThan(const QModelIndex &source_left, const QMo return prioritiesCmp(alphabeticalSortPriorities, source_left, source_right); case SortFilterRoomTreeModel::Activity: return prioritiesCmp(activitySortPriorities, source_left, source_right); + case SortFilterRoomTreeModel::LastMessage: + return prioritiesCmp(lastMessageSortPriorities, source_left, source_right); } - return QSortFilterProxyModel::lessThan(source_left, source_right); } diff --git a/src/models/sortfilterroomtreemodel.h b/src/models/sortfilterroomtreemodel.h index c47195f27..3368d4af6 100644 --- a/src/models/sortfilterroomtreemodel.h +++ b/src/models/sortfilterroomtreemodel.h @@ -53,6 +53,7 @@ public: enum RoomSortOrder { Alphabetical, Activity, + LastMessage, }; Q_ENUM(RoomSortOrder) diff --git a/src/settings/NeoChatGeneralPage.qml b/src/settings/NeoChatGeneralPage.qml index 4817663a2..ee4adf671 100644 --- a/src/settings/NeoChatGeneralPage.qml +++ b/src/settings/NeoChatGeneralPage.qml @@ -110,6 +110,16 @@ FormCard.FormCardPage { NeoChatConfig.save() } } + FormCard.FormRadioDelegate { + text: i18nc("As in 'sort something based on the last message'", "Last Message Activity") + description: i18nc("@info", "Rooms with the newest activity will be shown first") + checked: NeoChatConfig.sortOrder === 2 + enabled: !NeoChatConfig.isSortOrderImmutable + onToggled: { + NeoChatConfig.sortOrder = 2 + NeoChatConfig.save() + } + } } FormCard.FormHeader { title: i18n("Timeline Events")