Improve performance of the emoji model
Only display up to 10 emojis when searching Related to #310 but a better solution needs to be found because we get the same problem on big room when autocompleting usernames.
This commit is contained in:
@@ -204,7 +204,7 @@ ToolBar {
|
||||
completionMenu.model = currentRoom.getUsers(completionInfo.keyword);
|
||||
} else {
|
||||
completionMenu.isCompletingEmoji = true
|
||||
completionMenu.model = completionMenu.emojiModel.filterModel(completionInfo.keyword);
|
||||
completionMenu.model = EmojiModel.filterModel(completionInfo.keyword);
|
||||
}
|
||||
|
||||
if (completionMenu.model.length === 0) {
|
||||
|
||||
@@ -64,7 +64,6 @@ Item {
|
||||
anchors.bottom: replySeparator.top
|
||||
sourceComponent: EmojiPicker{
|
||||
textArea: chatBar.textField
|
||||
emojiModel: EmojiModel { id: emojiModel }
|
||||
onChosen: addText(emoji)
|
||||
}
|
||||
Behavior on height {
|
||||
|
||||
@@ -23,8 +23,6 @@ Popup {
|
||||
property string currentDisplayText: currentItem && currentItem.displayName ? currentItem.displayName : ""
|
||||
property string currentUserId: currentItem && currentItem.id ? currentItem.id : ""
|
||||
|
||||
//FIXME: EmojiModel should probably be a singleton
|
||||
property var emojiModel: EmojiModel {}
|
||||
property bool isCompletingEmoji: false
|
||||
property int beginPosition: 0
|
||||
property int endPosition: 0
|
||||
@@ -49,7 +47,6 @@ Popup {
|
||||
ListView {
|
||||
id: completionListView
|
||||
implicitWidth: contentWidth
|
||||
model: control.model
|
||||
delegate: isCompletingEmoji ? emojiDelegate : usernameDelegate
|
||||
|
||||
keyNavigationWraps: true
|
||||
@@ -99,7 +96,7 @@ Popup {
|
||||
Layout.preferredHeight: Kirigami.Units.gridUnit
|
||||
Layout.preferredWidth: textMetrics.tightBoundingRect.width
|
||||
font.pointSize: Kirigami.Units.gridUnit * 0.75
|
||||
text: emojiItem.modelData.unicode
|
||||
text: modelData.unicode
|
||||
horizontalAlignment: Text.AlignHCenter
|
||||
verticalAlignment: Text.AlignVCenter
|
||||
}
|
||||
|
||||
@@ -10,12 +10,12 @@ import org.kde.kirigami 2.13 as Kirigami
|
||||
|
||||
import NeoChat.Component 1.0
|
||||
|
||||
import org.kde.neochat 1.0
|
||||
import org.kde.neochat 1.0 as NeoChat
|
||||
|
||||
ColumnLayout {
|
||||
property string emojiCategory: "history"
|
||||
property var textArea
|
||||
property var emojiModel
|
||||
readonly property var emojiModel: NeoChat.EmojiModel
|
||||
|
||||
signal chosen(string emoji)
|
||||
|
||||
|
||||
@@ -25,6 +25,5 @@ QQC2.Popup {
|
||||
|
||||
contentItem: EmojiPicker {
|
||||
onChosen: react(emoji)
|
||||
emojiModel: EmojiModel {}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -22,24 +22,36 @@ QVariantList EmojiModel::filterModel(const QString &filter)
|
||||
auto emoji = qvariant_cast<Emoji>(e);
|
||||
if (emoji.shortname.startsWith(filter)) {
|
||||
result.append(e);
|
||||
if (result.length() > 10) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const QVariant &e : nature) {
|
||||
auto emoji = qvariant_cast<Emoji>(e);
|
||||
if (emoji.shortname.startsWith(filter)) {
|
||||
result.append(e);
|
||||
if (result.length() > 10) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const QVariant &e : food) {
|
||||
auto emoji = qvariant_cast<Emoji>(e);
|
||||
if (emoji.shortname.startsWith(filter)) {
|
||||
result.append(e);
|
||||
if (result.length() > 10) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const QVariant &e : activity) {
|
||||
auto emoji = qvariant_cast<Emoji>(e);
|
||||
if (emoji.shortname.startsWith(filter)) {
|
||||
result.append(e);
|
||||
if (result.length() > 10) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const QVariant &e : travel) {
|
||||
@@ -52,18 +64,27 @@ QVariantList EmojiModel::filterModel(const QString &filter)
|
||||
auto emoji = qvariant_cast<Emoji>(e);
|
||||
if (emoji.shortname.startsWith(filter)) {
|
||||
result.append(e);
|
||||
if (result.length() > 10) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const QVariant &e : symbols) {
|
||||
auto emoji = qvariant_cast<Emoji>(e);
|
||||
if (emoji.shortname.startsWith(filter)) {
|
||||
result.append(e);
|
||||
if (result.length() > 10) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
for (const QVariant &e : flags) {
|
||||
auto emoji = qvariant_cast<Emoji>(e);
|
||||
if (emoji.shortname.startsWith(filter)) {
|
||||
result.append(e);
|
||||
if (result.length() > 10) {
|
||||
return result;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -126,7 +126,12 @@ int main(int argc, char *argv[])
|
||||
qmlRegisterType<MessageFilterModel>("org.kde.neochat", 1, 0, "MessageFilterModel");
|
||||
qmlRegisterType<PublicRoomListModel>("org.kde.neochat", 1, 0, "PublicRoomListModel");
|
||||
qmlRegisterType<UserDirectoryListModel>("org.kde.neochat", 1, 0, "UserDirectoryListModel");
|
||||
qmlRegisterType<EmojiModel>("org.kde.neochat", 1, 0, "EmojiModel");
|
||||
qmlRegisterSingletonType<EmojiModel>("org.kde.neochat", 1, 0, "EmojiModel", [](QQmlEngine *engine2, QJSEngine *scriptEngine) -> QObject *
|
||||
{
|
||||
Q_UNUSED(scriptEngine);
|
||||
Q_UNUSED(engine2);
|
||||
return new EmojiModel();
|
||||
});
|
||||
qmlRegisterType<SortFilterRoomListModel>("org.kde.neochat", 1, 0, "SortFilterRoomListModel");
|
||||
qmlRegisterType<DevicesModel>("org.kde.neochat", 1, 0, "DevicesModel");
|
||||
qmlRegisterUncreatableType<RoomMessageEvent>("org.kde.neochat", 1, 0, "RoomMessageEvent", "ENUM");
|
||||
|
||||
Reference in New Issue
Block a user