Add description for emoji

This commit is contained in:
Gary Wang
2022-12-06 19:10:49 +08:00
committed by Tobias Fella
parent 507bd44bbf
commit e8824edfd4
9 changed files with 3669 additions and 3638 deletions

View File

@@ -102,6 +102,9 @@ QVariant CompletionModel::data(const QModelIndex &index, int role) const
if (role == ReplacedText) {
return m_filterModel->data(filterIndex, CustomEmojiModel::ReplacedTextRole);
}
if (role == Subtitle) {
return m_filterModel->data(filterIndex, EmojiModel::DescriptionRole);
}
}
return {};
@@ -149,7 +152,7 @@ void CompletionModel::updateCompletion()
m_filterModel->setSourceModel(m_emojiModel);
m_autoCompletionType = Emoji;
m_filterModel->setFilterRole(CustomEmojiModel::Name);
m_filterModel->setSecondaryFilterRole(-1);
m_filterModel->setSecondaryFilterRole(EmojiModel::DescriptionRole);
m_filterModel->setFullText(m_fullText);
m_filterModel->setFilterText(m_text);
m_filterModel->invalidate();

View File

@@ -25,6 +25,17 @@ bool CompletionProxyModel::filterAcceptsRow(int sourceRow, const QModelIndex &so
#endif
}
bool CompletionProxyModel::lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const
{
if (m_secondaryFilterRole == -1)
return QSortFilterProxyModel::lessThan(source_left, source_right);
bool left_primary = sourceModel()->data(source_left, filterRole()).toString().startsWith(m_filterText, Qt::CaseInsensitive);
bool right_primary = sourceModel()->data(source_right, filterRole()).toString().startsWith(m_filterText, Qt::CaseInsensitive);
if (left_primary != right_primary)
return left_primary;
return QSortFilterProxyModel::lessThan(source_left, source_right);
}
int CompletionProxyModel::secondaryFilterRole() const
{
return m_secondaryFilterRole;

View File

@@ -13,6 +13,7 @@ class CompletionProxyModel : public QSortFilterProxyModel
public:
bool filterAcceptsRow(int sourceRow, const QModelIndex &sourceParent) const override;
bool lessThan(const QModelIndex &source_left, const QModelIndex &source_right) const override;
int secondaryFilterRole() const;
void setSecondaryFilterRole(int role);

View File

@@ -29,6 +29,7 @@ public:
MxcUrl = 50,
DisplayRole = 51,
ReplacedTextRole = 52,
DescriptionRole = 53, // also invalid, reserved
};
Q_ENUM(Roles);

View File

@@ -48,6 +48,8 @@ QVariant EmojiModel::data(const QModelIndex &index, int role) const
return QStringLiteral("invalid");
case DisplayRole:
return QStringLiteral("%2 :%1:").arg(emoji.shortName, emoji.unicode);
case DescriptionRole:
return emoji.description;
}
}
return {};

View File

@@ -14,6 +14,12 @@ struct Emoji {
, isCustom(isCustom)
{
}
Emoji(QString u, QString s, QString d)
: unicode(std::move(std::move(u)))
, shortName(std::move(std::move(s)))
, description(std::move(std::move(d)))
{
}
Emoji() = default;
friend QDataStream &operator<<(QDataStream &arch, const Emoji &object)
@@ -33,11 +39,13 @@ struct Emoji {
QString unicode;
QString shortName;
QString description;
bool isCustom = false;
Q_GADGET
Q_PROPERTY(QString unicode MEMBER unicode)
Q_PROPERTY(QString shortName MEMBER shortName)
Q_PROPERTY(QString description MEMBER description)
Q_PROPERTY(bool isCustom MEMBER isCustom)
};
@@ -64,6 +72,7 @@ public:
InvalidRole = 50,
DisplayRole = 51,
ReplacedTextRole = 52,
DescriptionRole = 53,
};
Q_ENUM(RoleNames);

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@@ -79,6 +79,7 @@ for line in response.text.split("\n"):
x = re.search(".*E[0-9]+.[0-9] ", parts[1])
description = parts[1].removeprefix(x.group())
shortcode = description
if "flag:" in description:
description = "Flag of " + description.split(": ")[1]
@@ -87,12 +88,15 @@ for line in response.text.split("\n"):
is_skin_tone = "skin tone" in description
if not is_skin_tone and escaped_sequence in emoji_unicode_shortname_map:
description = emoji_unicode_shortname_map[escaped_sequence]
if escaped_sequence in emoji_unicode_shortname_map:
shortcode = emoji_unicode_shortname_map[escaped_sequence]
emoji_args = 'QString::fromUtf8("{0}"), QStringLiteral("{1}"), QStringLiteral("{2}")'.format(escaped_sequence, shortcode, description)
emoji_qvariant = 'QVariant::fromValue(Emoji{' + emoji_args + '})'
if is_skin_tone:
tones_file.write("{\"" + description.split(":")[0] + "\", QVariant::fromValue(Emoji{QString::fromUtf8(\"" + escaped_sequence + "\"), QStringLiteral(\"" + description + "\")})},\n")
tones_file.write("{\"" + description.split(":")[0] + "\", " + emoji_qvariant + "},\n")
continue
file.write("_emojis[" + group + "].append(QVariant::fromValue(Emoji{QString::fromUtf8(\"" + escaped_sequence + "\"), QStringLiteral(\"" + description + "\")}));\n")
file.write("_emojis[" + group + "].append(" + emoji_qvariant + ");\n")
file.close()
tones_file.close()