From dae032172d9280facec9538e38fefc3231205cc8 Mon Sep 17 00:00:00 2001 From: Nicolas Werner Date: Mon, 13 Dec 2021 00:43:05 +0100 Subject: Add recently used reactions fixes #435 --- src/UserSettingsPage.cpp | 11 +++++++++++ src/UserSettingsPage.h | 6 ++++++ src/timeline/InputBar.cpp | 8 ++++++++ 3 files changed, 25 insertions(+) (limited to 'src') diff --git a/src/UserSettingsPage.cpp b/src/UserSettingsPage.cpp index eae31b71..f8c05e38 100644 --- a/src/UserSettingsPage.cpp +++ b/src/UserSettingsPage.cpp @@ -118,6 +118,8 @@ UserSettings::load(std::optional profile) deviceId_ = settings.value(prefix + "auth/device_id", "").toString(); hiddenTags_ = settings.value(prefix + "user/hidden_tags", QStringList{}).toStringList(); hiddenPins_ = settings.value(prefix + "user/hidden_pins", QStringList{}).toStringList(); + recentReactions_ = + settings.value(prefix + "user/recent_reactions", QStringList{}).toStringList(); collapsedSpaces_.clear(); for (const auto &e : @@ -209,6 +211,14 @@ UserSettings::setHiddenPins(QStringList hiddenTags) emit hiddenPinsChanged(); } +void +UserSettings::setRecentReactions(QStringList recent) +{ + recentReactions_ = recent; + save(); + emit recentReactionsChanged(); +} + void UserSettings::setCollapsedSpaces(QList spaces) { @@ -717,6 +727,7 @@ UserSettings::save() settings.setValue(prefix + "user/online_key_backup", useOnlineKeyBackup_); settings.setValue(prefix + "user/hidden_tags", hiddenTags_); settings.setValue(prefix + "user/hidden_pins", hiddenPins_); + settings.setValue(prefix + "user/recent_reactions", recentReactions_); QVariantList v; for (const auto &e : collapsedSpaces_) diff --git a/src/UserSettingsPage.h b/src/UserSettingsPage.h index ab73414e..f338c55b 100644 --- a/src/UserSettingsPage.h +++ b/src/UserSettingsPage.h @@ -106,6 +106,8 @@ class UserSettings : public QObject Q_PROPERTY(bool useIdenticon READ useIdenticon WRITE setUseIdenticon NOTIFY useIdenticonChanged) Q_PROPERTY(QStringList hiddenPins READ hiddenPins WRITE setHiddenPins NOTIFY hiddenPinsChanged) + Q_PROPERTY(QStringList recentReactions READ recentReactions WRITE setRecentReactions NOTIFY + recentReactionsChanged) UserSettings(); @@ -174,6 +176,7 @@ public: void setDisableCertificateValidation(bool disabled); void setHiddenTags(QStringList hiddenTags); void setHiddenPins(QStringList hiddenTags); + void setRecentReactions(QStringList recent); void setUseIdenticon(bool state); void setCollapsedSpaces(QList spaces); @@ -232,6 +235,7 @@ public: bool disableCertificateValidation() const { return disableCertificateValidation_; } QStringList hiddenTags() const { return hiddenTags_; } QStringList hiddenPins() const { return hiddenPins_; } + QStringList recentReactions() const { return recentReactions_; } bool useIdenticon() const { return useIdenticon_ && JdenticonProvider::isAvailable(); } QList collapsedSpaces() const { return collapsedSpaces_; } @@ -283,6 +287,7 @@ signals: void disableCertificateValidationChanged(bool disabled); void useIdenticonChanged(bool state); void hiddenPinsChanged(); + void recentReactionsChanged(); private: // Default to system theme if QT_QPA_PLATFORMTHEME var is set. @@ -337,6 +342,7 @@ private: QString homeserver_; QStringList hiddenTags_; QStringList hiddenPins_; + QStringList recentReactions_; QList collapsedSpaces_; bool useIdenticon_; diff --git a/src/timeline/InputBar.cpp b/src/timeline/InputBar.cpp index 78416135..191160ea 100644 --- a/src/timeline/InputBar.cpp +++ b/src/timeline/InputBar.cpp @@ -829,6 +829,14 @@ InputBar::reaction(const QString &reactedEvent, const QString &reactionKey) reaction.relations.relations.push_back(rel); room->sendMessageEvent(reaction, mtx::events::EventType::Reaction); + + auto recents = UserSettings::instance()->recentReactions(); + if (recents.contains(reactionKey)) + recents.removeOne(reactionKey); + else if (recents.size() >= 6) + recents.removeLast(); + recents.push_front(reactionKey); + UserSettings::instance()->setRecentReactions(recents); // Otherwise, we have previously reacted and the reaction should be redacted } else { room->redactEvent(selfReactedEvent); -- cgit 1.5.1