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);
|