summary refs log tree commit diff
path: root/src
diff options
context:
space:
mode:
authorNicolas Werner <nicolas.werner@hotmail.de>2021-12-13 00:43:05 +0100
committerNicolas Werner <nicolas.werner@hotmail.de>2021-12-13 00:43:05 +0100
commitdae032172d9280facec9538e38fefc3231205cc8 (patch)
treea0069d2443696e53021117a8346b843969f89448 /src
parentVertically align message input (diff)
downloadnheko-dae032172d9280facec9538e38fefc3231205cc8.tar.xz
Add recently used reactions
fixes #435
Diffstat (limited to 'src')
-rw-r--r--src/UserSettingsPage.cpp11
-rw-r--r--src/UserSettingsPage.h6
-rw-r--r--src/timeline/InputBar.cpp8
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);