mirror of https://github.com/Nheko-Reborn/nheko
parent
0cc1c6eddc
commit
485babba14
@ -0,0 +1,222 @@ |
|||||||
|
// SPDX-FileCopyrightText: 2021 Nheko Contributors
|
||||||
|
// SPDX-FileCopyrightText: 2022 Nheko Contributors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#include "CommandCompleter.h" |
||||||
|
|
||||||
|
#include "CompletionModelRoles.h" |
||||||
|
|
||||||
|
CommandCompleter::CommandCompleter(QObject *parent) |
||||||
|
: QAbstractListModel(parent) |
||||||
|
{ |
||||||
|
} |
||||||
|
|
||||||
|
QHash<int, QByteArray> |
||||||
|
CommandCompleter::roleNames() const |
||||||
|
{ |
||||||
|
return { |
||||||
|
{CompletionModel::CompletionRole, "completionRole"}, |
||||||
|
{CompletionModel::SearchRole, "searchRole"}, |
||||||
|
{CompletionModel::SearchRole2, "searchRole2"}, |
||||||
|
{Roles::Name, "name"}, |
||||||
|
{Roles::Description, "description"}, |
||||||
|
}; |
||||||
|
} |
||||||
|
|
||||||
|
QVariant |
||||||
|
CommandCompleter::data(const QModelIndex &index, int role) const |
||||||
|
{ |
||||||
|
if (hasIndex(index.row(), index.column(), index.parent())) { |
||||||
|
switch (role) { |
||||||
|
case CompletionModel::CompletionRole: |
||||||
|
// append space where applicable in a completion
|
||||||
|
switch (index.row()) { |
||||||
|
case Me: |
||||||
|
return QString("/me "); |
||||||
|
case React: |
||||||
|
return QString("/react "); |
||||||
|
case Join: |
||||||
|
return QString("/join "); |
||||||
|
case Knock: |
||||||
|
return QString("/knock "); |
||||||
|
case Part: |
||||||
|
return QString("/part "); |
||||||
|
case Leave: |
||||||
|
return QString("/leave "); |
||||||
|
case Invite: |
||||||
|
return QString("/invite @"); |
||||||
|
case Kick: |
||||||
|
return QString("/kick @"); |
||||||
|
case Ban: |
||||||
|
return QString("/ban @"); |
||||||
|
case Unban: |
||||||
|
return QString("/unban @"); |
||||||
|
case Redact: |
||||||
|
return QString("/redact "); |
||||||
|
case Roomnick: |
||||||
|
return QString("/roomnick "); |
||||||
|
case Shrug: |
||||||
|
return QString("/shrug"); |
||||||
|
case Fliptable: |
||||||
|
return QString("/fliptable"); |
||||||
|
case Unfliptable: |
||||||
|
return QString("/unfliptable"); |
||||||
|
case Sovietflip: |
||||||
|
return QString("/sovietflip"); |
||||||
|
case ClearTimeline: |
||||||
|
return QString("/clear-timeline"); |
||||||
|
case ResetState: |
||||||
|
return QString("/reset-state"); |
||||||
|
case RotateMegolmSession: |
||||||
|
return QString("/rotate-megolm-session"); |
||||||
|
case Md: |
||||||
|
return QString("/md "); |
||||||
|
case Plain: |
||||||
|
return QString("/plain "); |
||||||
|
case Rainbow: |
||||||
|
return QString("/rainbow "); |
||||||
|
case RainbowMe: |
||||||
|
return QString("/rainbowme "); |
||||||
|
case Notice: |
||||||
|
return QString("/notice "); |
||||||
|
case RainbowNotice: |
||||||
|
return QString("/rainbownotice "); |
||||||
|
case Goto: |
||||||
|
return QString("/goto "); |
||||||
|
case ConvertToDm: |
||||||
|
return QString("/converttodm"); |
||||||
|
case ConvertToRoom: |
||||||
|
return QString("/converttoroom"); |
||||||
|
default: |
||||||
|
return {}; |
||||||
|
} |
||||||
|
case CompletionModel::SearchRole: |
||||||
|
case Qt::DisplayRole: |
||||||
|
case Roles::Name: |
||||||
|
switch (index.row()) { |
||||||
|
case Me: |
||||||
|
return tr("/me <message>"); |
||||||
|
case React: |
||||||
|
return tr("/react <text>"); |
||||||
|
case Join: |
||||||
|
return tr("/join (!roomid|#alias) [reason]"); |
||||||
|
case Knock: |
||||||
|
return tr("/knock (!roomid|#alias) [reason]"); |
||||||
|
case Part: |
||||||
|
return tr("/part [reason]"); |
||||||
|
case Leave: |
||||||
|
return tr("/leave [reason]"); |
||||||
|
case Invite: |
||||||
|
return tr("/invite @userid [reason]"); |
||||||
|
case Kick: |
||||||
|
return tr("/kick @userid [reason]"); |
||||||
|
case Ban: |
||||||
|
return tr("/ban @userid [reason]"); |
||||||
|
case Unban: |
||||||
|
return tr("/unban @userid [reason]"); |
||||||
|
case Redact: |
||||||
|
return tr("/redact ($eventid|@userid)"); |
||||||
|
case Roomnick: |
||||||
|
return tr("/roomnick <displayname>"); |
||||||
|
case Shrug: |
||||||
|
return tr("/shrug [message]"); |
||||||
|
case Fliptable: |
||||||
|
return tr("/fliptable"); |
||||||
|
case Unfliptable: |
||||||
|
return tr("/unfliptable"); |
||||||
|
case Sovietflip: |
||||||
|
return tr("/sovietflip"); |
||||||
|
case ClearTimeline: |
||||||
|
return tr("/clear-timeline"); |
||||||
|
case ResetState: |
||||||
|
return tr("/reset-state"); |
||||||
|
case RotateMegolmSession: |
||||||
|
return tr("/rotate-megolm-session"); |
||||||
|
case Md: |
||||||
|
return tr("/md [message]"); |
||||||
|
case Plain: |
||||||
|
return tr("/plain [message]"); |
||||||
|
case Rainbow: |
||||||
|
return tr("/rainbow [message]"); |
||||||
|
case RainbowMe: |
||||||
|
return tr("/rainbowme [message]"); |
||||||
|
case Notice: |
||||||
|
return tr("/notice [message]"); |
||||||
|
case RainbowNotice: |
||||||
|
return tr("/rainbownotice [message]"); |
||||||
|
case Goto: |
||||||
|
return tr("/goto ($eventid|message index|matrix:r/room/e/event)"); |
||||||
|
case ConvertToDm: |
||||||
|
return tr("/converttodm"); |
||||||
|
case ConvertToRoom: |
||||||
|
return tr("/converttoroom"); |
||||||
|
default: |
||||||
|
return {}; |
||||||
|
} |
||||||
|
case CompletionModel::SearchRole2: |
||||||
|
case Roles::Description: |
||||||
|
switch (index.row()) { |
||||||
|
case Me: |
||||||
|
return tr("Send a message expressing an action."); |
||||||
|
case React: |
||||||
|
return tr("Send <text> as a reaction when you’re replying to a message."); |
||||||
|
case Join: |
||||||
|
return tr("Join a room. Reason is optional."); |
||||||
|
case Knock: |
||||||
|
return tr("Ask to join a room. Reason is optional."); |
||||||
|
case Part: |
||||||
|
return tr("Leave a room. Reason is optional."); |
||||||
|
case Leave: |
||||||
|
return tr("Leave a room. Reason is optional."); |
||||||
|
case Invite: |
||||||
|
return tr("Invite a user into the current room. Reason is optional."); |
||||||
|
case Kick: |
||||||
|
return tr("Kick a user from the current room. Reason is optional."); |
||||||
|
case Ban: |
||||||
|
return tr("Ban a user from the current room. Reason is optional."); |
||||||
|
case Unban: |
||||||
|
return tr("Unban a user in the current room. Reason is optional."); |
||||||
|
case Redact: |
||||||
|
return tr("Redact an event or all locally cached messages of a user."); |
||||||
|
case Roomnick: |
||||||
|
return tr("Change your displayname in this room."); |
||||||
|
case Shrug: |
||||||
|
return tr("¯\\_(ツ)_/¯ with an optional message."); |
||||||
|
case Fliptable: |
||||||
|
return tr("(╯°□°)╯︵ ┻━┻"); |
||||||
|
case Unfliptable: |
||||||
|
return tr("┯━┯╭( º _ º╭)"); |
||||||
|
case Sovietflip: |
||||||
|
return tr("ノ┬─┬ノ ︵ ( \\o°o)\\"); |
||||||
|
case ClearTimeline: |
||||||
|
return tr("Clear the currently cached messages in this room."); |
||||||
|
case ResetState: |
||||||
|
return tr("Refetch the state in this room."); |
||||||
|
case RotateMegolmSession: |
||||||
|
return tr("Rotate the current symmetric encryption key."); |
||||||
|
case Md: |
||||||
|
return tr("Send a markdown formatted message (ignoring the global setting)."); |
||||||
|
case Plain: |
||||||
|
return tr("Send an unformatted message (ignoring the global setting)."); |
||||||
|
case Rainbow: |
||||||
|
return tr("Send a message in rainbow colors."); |
||||||
|
case RainbowMe: |
||||||
|
return tr("Send /me in rainbow colors."); |
||||||
|
case Notice: |
||||||
|
return tr("Send a bot message."); |
||||||
|
case RainbowNotice: |
||||||
|
return tr("Send a bot message in rainbow colors."); |
||||||
|
case Goto: |
||||||
|
return tr("Go to this event or link."); |
||||||
|
case ConvertToDm: |
||||||
|
return tr("Convert this room to a direct chat."); |
||||||
|
case ConvertToRoom: |
||||||
|
return tr("Convert this direct chat into a room."); |
||||||
|
default: |
||||||
|
return {}; |
||||||
|
} |
||||||
|
} |
||||||
|
} |
||||||
|
return {}; |
||||||
|
} |
@ -0,0 +1,61 @@ |
|||||||
|
// SPDX-FileCopyrightText: 2021 Nheko Contributors
|
||||||
|
// SPDX-FileCopyrightText: 2022 Nheko Contributors
|
||||||
|
//
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
|
#pragma once |
||||||
|
|
||||||
|
#include <QAbstractListModel> |
||||||
|
#include <QString> |
||||||
|
|
||||||
|
class CommandCompleter final : public QAbstractListModel |
||||||
|
{ |
||||||
|
public: |
||||||
|
enum Roles |
||||||
|
{ |
||||||
|
Name = Qt::UserRole, |
||||||
|
Description, |
||||||
|
}; |
||||||
|
|
||||||
|
enum Commands |
||||||
|
{ |
||||||
|
Me, |
||||||
|
React, |
||||||
|
Join, |
||||||
|
Knock, |
||||||
|
Part, |
||||||
|
Leave, |
||||||
|
Invite, |
||||||
|
Kick, |
||||||
|
Ban, |
||||||
|
Unban, |
||||||
|
Redact, |
||||||
|
Roomnick, |
||||||
|
Shrug, |
||||||
|
Fliptable, |
||||||
|
Unfliptable, |
||||||
|
Sovietflip, |
||||||
|
ClearTimeline, |
||||||
|
ResetState, |
||||||
|
RotateMegolmSession, |
||||||
|
Md, |
||||||
|
Plain, |
||||||
|
Rainbow, |
||||||
|
RainbowMe, |
||||||
|
Notice, |
||||||
|
RainbowNotice, |
||||||
|
Goto, |
||||||
|
ConvertToDm, |
||||||
|
ConvertToRoom, |
||||||
|
COUNT, |
||||||
|
}; |
||||||
|
|
||||||
|
CommandCompleter(QObject *parent = nullptr); |
||||||
|
QHash<int, QByteArray> roleNames() const override; |
||||||
|
int rowCount(const QModelIndex &parent = QModelIndex()) const override |
||||||
|
{ |
||||||
|
(void)parent; |
||||||
|
return (int)Commands::COUNT; |
||||||
|
} |
||||||
|
QVariant data(const QModelIndex &index, int role) const override; |
||||||
|
}; |
Loading…
Reference in new issue