File indexing completed on 2024-04-28 16:51:48

0001 /*
0002     SPDX-FileCopyrightText: 2022 Weng Xuetian <wegnxt@gmail.com>
0003 
0004     SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "emojidict.h"
0008 #include "emojicategory.h"
0009 #include <KLocalizedString>
0010 #include <QFile>
0011 #include <QJsonArray>
0012 #include <QJsonObject>
0013 
0014 QString Emoji::categoryName() const
0015 {
0016     const auto &names = getCategoryNames();
0017     if (category <= 0 || category > names.size()) {
0018         return QString();
0019     }
0020     // off by 1 because 0 is unknown.
0021     return names[category - 1];
0022 }
0023 
0024 void EmojiDict::load(const QString &path)
0025 {
0026     QFile file(path);
0027     if (!file.open(QIODevice::ReadOnly)) {
0028         return;
0029     }
0030     auto buffer = file.readAll();
0031     buffer = qUncompress(buffer);
0032     QDataStream stream(&buffer, QIODevice::ReadOnly);
0033     // We use a fixed version to keep it binary compatible.
0034     // Also we do not use advanced data type so it does not matter.
0035     stream.setVersion(QDataStream::Qt_5_15);
0036     // Explicitly set endianess to ensure it's not relevant to architecture.
0037     stream.setByteOrder(QDataStream::LittleEndian);
0038     QList<Emoji> emojis;
0039     stream >> emojis;
0040     for (const auto &emoji : emojis) {
0041         if (auto iter = m_processedEmojis.find(emoji.content); iter != m_processedEmojis.end()) {
0042             // Overwrite with new data.
0043             m_emojis[iter.value()] = emoji;
0044         } else {
0045             m_processedEmojis[emoji.content] = m_emojis.size();
0046             m_emojis.append(emoji);
0047         }
0048     }
0049 }