From 6575d23072a26e3bfd0a2105aaa04c190238a983 Mon Sep 17 00:00:00 2001 From: Srevin Saju Date: Sat, 1 May 2021 13:30:24 +0300 Subject: [PATCH] feat: trigger completion of commands on the input of backlash / char --- src/CMakeLists.txt | 1 + src/chatdocumenthandler.cpp | 10 +++++++++- src/chatdocumenthandler.h | 1 + src/main.cpp | 6 ++++++ 4 files changed, 17 insertions(+), 1 deletion(-) diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 088203e7e..047dd6124 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -29,6 +29,7 @@ add_executable(neochat login.cpp stickerevent.cpp chatboxhelper.cpp + commandmodel.cpp ../res.qrc ) diff --git a/src/chatdocumenthandler.cpp b/src/chatdocumenthandler.cpp index 994ad82e7..764dafc2e 100644 --- a/src/chatdocumenthandler.cpp +++ b/src/chatdocumenthandler.cpp @@ -149,7 +149,7 @@ QVariantMap ChatDocumentHandler::getAutocompletionInfo() }; } - if (autoCompletePrefix.startsWith("@") || autoCompletePrefix.startsWith(":")) { + if (autoCompletePrefix.startsWith("@") || autoCompletePrefix.startsWith(":") || autoCompletePrefix.startsWith("/")) { m_autoCompleteBeginPosition = textBeforeCursor.lastIndexOf(" ") + 1; // 1 == space if (autoCompletePrefix.startsWith("@")) { @@ -159,6 +159,14 @@ QVariantMap ChatDocumentHandler::getAutocompletionInfo() {"type", AutoCompletionType::User}, }; } + + if (autoCompletePrefix.startsWith("/")) { + return QVariantMap{ + {"keyword", autoCompletePrefix}, + {"type", AutoCompletionType::Command}, + }; + } + return QVariantMap{ {"keyword", autoCompletePrefix}, {"type", AutoCompletionType::Emoji}, diff --git a/src/chatdocumenthandler.h b/src/chatdocumenthandler.h index e014f61d9..215f96570 100644 --- a/src/chatdocumenthandler.h +++ b/src/chatdocumenthandler.h @@ -27,6 +27,7 @@ public: enum AutoCompletionType { User, Emoji, + Command, None, Ignore, }; diff --git a/src/main.cpp b/src/main.cpp index 9777804d6..f46c0803e 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -27,6 +27,7 @@ #include "chatboxhelper.h" #include "chatdocumenthandler.h" #include "clipboard.h" +#include "commandmodel.h" #include "controller.h" #include "csapi/joining.h" #include "csapi/leaving.h" @@ -148,6 +149,11 @@ int main(int argc, char *argv[]) Q_UNUSED(engine2); return new EmojiModel(); }); + qmlRegisterSingletonType("org.kde.neochat", 1, 0, "CommandModel", [](QQmlEngine *engine2, QJSEngine *scriptEngine) -> QObject * { + Q_UNUSED(scriptEngine); + Q_UNUSED(engine2); + return new CommandModel(); + }); qmlRegisterType("org.kde.neochat", 1, 0, "SortFilterRoomListModel"); qmlRegisterType("org.kde.neochat", 1, 0, "DevicesModel"); qmlRegisterUncreatableType("org.kde.neochat", 1, 0, "RoomMessageEvent", "ENUM");