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 }