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);
|
completionMenu.model = currentRoom.getUsers(completionInfo.keyword);
|
||||||
} else {
|
} else {
|
||||||
completionMenu.isCompletingEmoji = true
|
completionMenu.isCompletingEmoji = true
|
||||||
completionMenu.model = completionMenu.emojiModel.filterModel(completionInfo.keyword);
|
completionMenu.model = EmojiModel.filterModel(completionInfo.keyword);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (completionMenu.model.length === 0) {
|
if (completionMenu.model.length === 0) {
|
||||||
|
|||||||
@@ -64,7 +64,6 @@ Item {
|
|||||||
anchors.bottom: replySeparator.top
|
anchors.bottom: replySeparator.top
|
||||||
sourceComponent: EmojiPicker{
|
sourceComponent: EmojiPicker{
|
||||||
textArea: chatBar.textField
|
textArea: chatBar.textField
|
||||||
emojiModel: EmojiModel { id: emojiModel }
|
|
||||||
onChosen: addText(emoji)
|
onChosen: addText(emoji)
|
||||||
}
|
}
|
||||||
Behavior on height {
|
Behavior on height {
|
||||||
|
|||||||
@@ -23,8 +23,6 @@ Popup {
|
|||||||
property string currentDisplayText: currentItem && currentItem.displayName ? currentItem.displayName : ""
|
property string currentDisplayText: currentItem && currentItem.displayName ? currentItem.displayName : ""
|
||||||
property string currentUserId: currentItem && currentItem.id ? currentItem.id : ""
|
property string currentUserId: currentItem && currentItem.id ? currentItem.id : ""
|
||||||
|
|
||||||
//FIXME: EmojiModel should probably be a singleton
|
|
||||||
property var emojiModel: EmojiModel {}
|
|
||||||
property bool isCompletingEmoji: false
|
property bool isCompletingEmoji: false
|
||||||
property int beginPosition: 0
|
property int beginPosition: 0
|
||||||
property int endPosition: 0
|
property int endPosition: 0
|
||||||
@@ -49,7 +47,6 @@ Popup {
|
|||||||
ListView {
|
ListView {
|
||||||
id: completionListView
|
id: completionListView
|
||||||
implicitWidth: contentWidth
|
implicitWidth: contentWidth
|
||||||
model: control.model
|
|
||||||
delegate: isCompletingEmoji ? emojiDelegate : usernameDelegate
|
delegate: isCompletingEmoji ? emojiDelegate : usernameDelegate
|
||||||
|
|
||||||
keyNavigationWraps: true
|
keyNavigationWraps: true
|
||||||
@@ -99,7 +96,7 @@ Popup {
|
|||||||
Layout.preferredHeight: Kirigami.Units.gridUnit
|
Layout.preferredHeight: Kirigami.Units.gridUnit
|
||||||
Layout.preferredWidth: textMetrics.tightBoundingRect.width
|
Layout.preferredWidth: textMetrics.tightBoundingRect.width
|
||||||
font.pointSize: Kirigami.Units.gridUnit * 0.75
|
font.pointSize: Kirigami.Units.gridUnit * 0.75
|
||||||
text: emojiItem.modelData.unicode
|
text: modelData.unicode
|
||||||
horizontalAlignment: Text.AlignHCenter
|
horizontalAlignment: Text.AlignHCenter
|
||||||
verticalAlignment: Text.AlignVCenter
|
verticalAlignment: Text.AlignVCenter
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,12 +10,12 @@ import org.kde.kirigami 2.13 as Kirigami
|
|||||||
|
|
||||||
import NeoChat.Component 1.0
|
import NeoChat.Component 1.0
|
||||||
|
|
||||||
import org.kde.neochat 1.0
|
import org.kde.neochat 1.0 as NeoChat
|
||||||
|
|
||||||
ColumnLayout {
|
ColumnLayout {
|
||||||
property string emojiCategory: "history"
|
property string emojiCategory: "history"
|
||||||
property var textArea
|
property var textArea
|
||||||
property var emojiModel
|
readonly property var emojiModel: NeoChat.EmojiModel
|
||||||
|
|
||||||
signal chosen(string emoji)
|
signal chosen(string emoji)
|
||||||
|
|
||||||
|
|||||||
@@ -25,6 +25,5 @@ QQC2.Popup {
|
|||||||
|
|
||||||
contentItem: EmojiPicker {
|
contentItem: EmojiPicker {
|
||||||
onChosen: react(emoji)
|
onChosen: react(emoji)
|
||||||
emojiModel: EmojiModel {}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -22,24 +22,36 @@ QVariantList EmojiModel::filterModel(const QString &filter)
|
|||||||
auto emoji = qvariant_cast<Emoji>(e);
|
auto emoji = qvariant_cast<Emoji>(e);
|
||||||
if (emoji.shortname.startsWith(filter)) {
|
if (emoji.shortname.startsWith(filter)) {
|
||||||
result.append(e);
|
result.append(e);
|
||||||
|
if (result.length() > 10) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const QVariant &e : nature) {
|
for (const QVariant &e : nature) {
|
||||||
auto emoji = qvariant_cast<Emoji>(e);
|
auto emoji = qvariant_cast<Emoji>(e);
|
||||||
if (emoji.shortname.startsWith(filter)) {
|
if (emoji.shortname.startsWith(filter)) {
|
||||||
result.append(e);
|
result.append(e);
|
||||||
|
if (result.length() > 10) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const QVariant &e : food) {
|
for (const QVariant &e : food) {
|
||||||
auto emoji = qvariant_cast<Emoji>(e);
|
auto emoji = qvariant_cast<Emoji>(e);
|
||||||
if (emoji.shortname.startsWith(filter)) {
|
if (emoji.shortname.startsWith(filter)) {
|
||||||
result.append(e);
|
result.append(e);
|
||||||
|
if (result.length() > 10) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const QVariant &e : activity) {
|
for (const QVariant &e : activity) {
|
||||||
auto emoji = qvariant_cast<Emoji>(e);
|
auto emoji = qvariant_cast<Emoji>(e);
|
||||||
if (emoji.shortname.startsWith(filter)) {
|
if (emoji.shortname.startsWith(filter)) {
|
||||||
result.append(e);
|
result.append(e);
|
||||||
|
if (result.length() > 10) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const QVariant &e : travel) {
|
for (const QVariant &e : travel) {
|
||||||
@@ -52,18 +64,27 @@ QVariantList EmojiModel::filterModel(const QString &filter)
|
|||||||
auto emoji = qvariant_cast<Emoji>(e);
|
auto emoji = qvariant_cast<Emoji>(e);
|
||||||
if (emoji.shortname.startsWith(filter)) {
|
if (emoji.shortname.startsWith(filter)) {
|
||||||
result.append(e);
|
result.append(e);
|
||||||
|
if (result.length() > 10) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const QVariant &e : symbols) {
|
for (const QVariant &e : symbols) {
|
||||||
auto emoji = qvariant_cast<Emoji>(e);
|
auto emoji = qvariant_cast<Emoji>(e);
|
||||||
if (emoji.shortname.startsWith(filter)) {
|
if (emoji.shortname.startsWith(filter)) {
|
||||||
result.append(e);
|
result.append(e);
|
||||||
|
if (result.length() > 10) {
|
||||||
|
return result;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
for (const QVariant &e : flags) {
|
for (const QVariant &e : flags) {
|
||||||
auto emoji = qvariant_cast<Emoji>(e);
|
auto emoji = qvariant_cast<Emoji>(e);
|
||||||
if (emoji.shortname.startsWith(filter)) {
|
if (emoji.shortname.startsWith(filter)) {
|
||||||
result.append(e);
|
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<MessageFilterModel>("org.kde.neochat", 1, 0, "MessageFilterModel");
|
||||||
qmlRegisterType<PublicRoomListModel>("org.kde.neochat", 1, 0, "PublicRoomListModel");
|
qmlRegisterType<PublicRoomListModel>("org.kde.neochat", 1, 0, "PublicRoomListModel");
|
||||||
qmlRegisterType<UserDirectoryListModel>("org.kde.neochat", 1, 0, "UserDirectoryListModel");
|
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<SortFilterRoomListModel>("org.kde.neochat", 1, 0, "SortFilterRoomListModel");
|
||||||
qmlRegisterType<DevicesModel>("org.kde.neochat", 1, 0, "DevicesModel");
|
qmlRegisterType<DevicesModel>("org.kde.neochat", 1, 0, "DevicesModel");
|
||||||
qmlRegisterUncreatableType<RoomMessageEvent>("org.kde.neochat", 1, 0, "RoomMessageEvent", "ENUM");
|
qmlRegisterUncreatableType<RoomMessageEvent>("org.kde.neochat", 1, 0, "RoomMessageEvent", "ENUM");
|
||||||
|
|||||||
Reference in New Issue
Block a user