From bc7530eaa12c519766c13cf97295d688812a312d Mon Sep 17 00:00:00 2001 From: Joshua Goins Date: Thu, 19 Oct 2023 17:21:18 -0400 Subject: [PATCH] Store last used emojis in the state config file Instead of crumming up the main settings file with the last used emojis, they now live in the state (where they belong.) --- src/models/emojimodel.cpp | 35 +++++++++++++++++++++++++++-------- src/models/emojimodel.h | 21 ++++++++++++--------- 2 files changed, 39 insertions(+), 17 deletions(-) diff --git a/src/models/emojimodel.cpp b/src/models/emojimodel.cpp index 15d60f598..b46ce9d85 100644 --- a/src/models/emojimodel.cpp +++ b/src/models/emojimodel.cpp @@ -14,6 +14,8 @@ EmojiModel::EmojiModel(QObject *parent) : QAbstractListModel(parent) + , m_config(KSharedConfig::openStateConfig()) + , m_configGroup(KConfigGroup(m_config, QStringLiteral("Editor"))) { if (_emojis.isEmpty()) { #include "emojis.h" @@ -61,9 +63,9 @@ QHash EmojiModel::roleNames() const return {{ShortNameRole, "shortName"}, {UnicodeRole, "unicode"}}; } -QVariantList EmojiModel::history() const +QStringList EmojiModel::lastUsedEmojis() const { - return m_settings.value(QStringLiteral("Editor/emojis"), QVariantList()).toList(); + return m_configGroup.readEntry(QStringLiteral("lastUsedEmojis"), QStringList()); } QVariantList EmojiModel::filterModel(const QString &filter, bool limit) @@ -93,19 +95,21 @@ QVariantList EmojiModel::filterModelNoCustom(const QString &filter, bool limit) void EmojiModel::emojiUsed(const QVariant &modelData) { - QVariantList list = history(); + auto list = lastUsedEmojis(); + const auto emoji = modelData.value(); auto it = list.begin(); while (it != list.end()) { - if ((*it).value().unicode == modelData.value().unicode) { + if (*it == emoji.shortName) { it = list.erase(it); } else { it++; } } - list.push_front(modelData); - m_settings.setValue(QStringLiteral("Editor/emojis"), list); + list.push_front(emoji.shortName); + + m_configGroup.writeEntry(QStringLiteral("lastUsedEmojis"), list); Q_EMIT historyChanged(); } @@ -113,11 +117,11 @@ void EmojiModel::emojiUsed(const QVariant &modelData) QVariantList EmojiModel::emojis(Category category) const { if (category == History) { - return history(); + return emojiHistory(); } if (category == HistoryNoCustom) { QVariantList list; - for (const auto &e : history()) { + for (const auto &e : emojiHistory()) { auto emoji = qvariant_cast(e); if (!emoji.isCustom) { list.append(e); @@ -217,4 +221,19 @@ QVariantList EmojiModel::categoriesWithCustom() const return cats; } +QVariantList EmojiModel::emojiHistory() const +{ + QVariantList list; + for (const auto &historicEmoji : lastUsedEmojis()) { + for (const auto &emojiCategory : _emojis) { + for (const auto &emoji : emojiCategory) { + if (qvariant_cast(emoji).shortName == historicEmoji) { + list.append(emoji); + } + } + } + } + return list; +} + #include "moc_emojimodel.cpp" diff --git a/src/models/emojimodel.h b/src/models/emojimodel.h index 4403d9033..0249e1a40 100644 --- a/src/models/emojimodel.h +++ b/src/models/emojimodel.h @@ -3,10 +3,11 @@ #pragma once +#include +#include #include #include #include -#include struct Emoji { Emoji(QString unicode, QString shortname, bool isCustom = false) @@ -63,11 +64,6 @@ class EmojiModel : public QAbstractListModel QML_ELEMENT QML_SINGLETON - /** - * @brief Return a list of recently used emojis. - */ - Q_PROPERTY(QVariantList history READ history NOTIFY historyChanged) - /** * @brief Return a list of emoji categories. * @@ -177,7 +173,11 @@ public: */ Q_INVOKABLE QVariantList tones(const QString &baseEmoji) const; - Q_INVOKABLE QVariantList history() const; + /** + * @brief Return a list of the last used emoji shortnames + */ + QStringList lastUsedEmojis() const; + QVariantList categories() const; QVariantList categoriesWithCustom() const; @@ -190,7 +190,10 @@ public Q_SLOTS: private: static QHash _emojis; - // TODO: Port away from QSettings - QSettings m_settings; + /// Returns QVariants containing the last used Emojis + QVariantList emojiHistory() const; + + KSharedConfig::Ptr m_config; + KConfigGroup m_configGroup; EmojiModel(QObject *parent = nullptr); };