diff options
author | Nicolas Werner <nicolas.werner@hotmail.de> | 2021-12-13 00:43:05 +0100 |
---|---|---|
committer | Nicolas Werner <nicolas.werner@hotmail.de> | 2021-12-13 00:43:05 +0100 |
commit | dae032172d9280facec9538e38fefc3231205cc8 (patch) | |
tree | a0069d2443696e53021117a8346b843969f89448 /src | |
parent | Vertically align message input (diff) | |
download | nheko-dae032172d9280facec9538e38fefc3231205cc8.tar.xz |
Add recently used reactions
fixes #435
Diffstat (limited to 'src')
-rw-r--r-- | src/UserSettingsPage.cpp | 11 | ||||
-rw-r--r-- | src/UserSettingsPage.h | 6 | ||||
-rw-r--r-- | src/timeline/InputBar.cpp | 8 |
3 files changed, 25 insertions, 0 deletions
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<QString> 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 : @@ -210,6 +212,14 @@ UserSettings::setHiddenPins(QStringList hiddenTags) } void +UserSettings::setRecentReactions(QStringList recent) +{ + recentReactions_ = recent; + save(); + emit recentReactionsChanged(); +} + +void UserSettings::setCollapsedSpaces(QList<QStringList> spaces) { collapsedSpaces_ = 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<QStringList> 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<QStringList> 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<QStringList> 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); |