File indexing completed on 2024-05-12 16:25:36

0001 /*
0002    SPDX-FileCopyrightText: 2020-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #include "command.h"
0008 #include "ruqola_commands_debug.h"
0009 #include <KLocalizedString>
0010 #include <QJsonArray>
0011 #include <QJsonObject>
0012 
0013 Command::Command() = default;
0014 
0015 QString Command::params() const
0016 {
0017     return mParams;
0018 }
0019 
0020 void Command::setParams(const QString &params)
0021 {
0022     mParams = params;
0023     convertParamsI18n();
0024 }
0025 
0026 QString Command::commandName() const
0027 {
0028     return mCommandName;
0029 }
0030 
0031 void Command::setCommandName(const QString &commandName)
0032 {
0033     mCommandName = commandName;
0034 }
0035 
0036 QString Command::description() const
0037 {
0038     return mDescription;
0039 }
0040 
0041 void Command::setDescription(const QString &description)
0042 {
0043     mDescription = description;
0044     convertDescriptionI18n();
0045 }
0046 
0047 void Command::convertParamsI18n()
0048 {
0049     if (mParams.isEmpty()) {
0050         return;
0051     }
0052     if (mParams == QLatin1String("Slash_Status_Params")) {
0053         mTranslatedParams = i18n("Status message");
0054     } else if (mParams == QLatin1String("Slash_Topic_Params")) {
0055         mTranslatedParams = i18n("Topic message");
0056     } else if (mParams == QLatin1String("your_message")) {
0057         mTranslatedParams = i18n("your message");
0058     } else if (mParams == QLatin1String("your_message_optional")) {
0059         mTranslatedParams = i18n("your message (optional)");
0060     } else {
0061         mTranslatedParams = mParams;
0062     }
0063 }
0064 
0065 QString Command::translatedParams() const
0066 {
0067     return mTranslatedParams;
0068 }
0069 
0070 void Command::convertDescriptionI18n()
0071 {
0072     if (mDescription.isEmpty()) {
0073         return;
0074     } else if (mDescription == QLatin1String("Archive")) {
0075         mTranslatedDescription = i18n("Archive");
0076     } else if (mDescription == QLatin1String("Slash_Gimme_Description")) {
0077         mTranslatedDescription = i18n("Displays ༼ つ ◕_◕ ༽つ before your message");
0078     } else if (mDescription == QLatin1String("Slash_LennyFace_Description")) {
0079         mTranslatedDescription = i18n("Displays ( ͡° ͜ʖ ͡°) after your message");
0080     } else if (mDescription == QLatin1String("Slash_Shrug_Description")) {
0081         mTranslatedDescription = i18n("Displays ¯\\_(ツ)_/¯ after your message");
0082     } else if (mDescription == QLatin1String("Slash_Tableflip_Description")) {
0083         mTranslatedDescription = i18n("Displays (╯°□°)╯︵ ┻━┻");
0084     } else if (mDescription == QLatin1String("Slash_TableUnflip_Description")) {
0085         mTranslatedDescription = i18n("Displays ┬─┬<feff> ノ( ゜-゜ノ)");
0086     } else if (mDescription == QLatin1String("Create_A_New_Channel")) {
0087         mTranslatedDescription = i18n("Create a New Channel");
0088     } else if (mDescription == QLatin1String("Show_the_keyboard_shortcut_list")) {
0089         mTranslatedDescription = i18n("Show the keyboard shortcut list");
0090     } else if (mDescription == QLatin1String("Hide_room")) {
0091         mTranslatedDescription = i18n("Hide Room");
0092     } else if (mDescription == QLatin1String("Invite_user_to_join_channel")) {
0093         mTranslatedDescription = i18n("Invite one user to join this channel");
0094     } else if (mDescription == QLatin1String("Invite_user_to_join_channel_all_to")) {
0095         mTranslatedDescription = i18n("Invite all users from this channel to join [#channel]");
0096     } else if (mDescription == QLatin1String("Invite_user_to_join_channel_all_from")) {
0097         mTranslatedDescription = i18n("Invite all users from [#channel] to join this channel");
0098     } else if (mDescription == QLatin1String("Join_the_given_channel")) {
0099         mTranslatedDescription = i18n("Join the given channel");
0100     } else if (mDescription == QLatin1String("Remove_someone_from_room")) {
0101         mTranslatedDescription = i18n("Remove someone from the room");
0102     } else if (mDescription == QLatin1String("Leave_the_current_channel")) {
0103         mTranslatedDescription = i18n("Leave the current channel");
0104     } else if (mDescription == QLatin1String("Displays_action_text")) {
0105         mTranslatedDescription = i18n("Displays action text");
0106     } else if (mDescription == QLatin1String("Direct_message_someone")) {
0107         mTranslatedDescription = i18n("Direct message someone");
0108     } else if (mDescription == QLatin1String("Mute_someone_in_room")) {
0109         mTranslatedDescription = i18n("Mute someone in the room");
0110     } else if (mDescription == QLatin1String("Unmute_someone_in_room")) {
0111         mTranslatedDescription = i18n("Unmute someone in the room");
0112     } else if (mDescription == QLatin1String("Slash_Status_Description")) {
0113         mTranslatedDescription = i18n("Set your status message");
0114     } else if (mDescription == QLatin1String("Slash_Topic_Description")) {
0115         mTranslatedDescription = i18n("Set topic");
0116     } else if (mDescription == QLatin1String("Unarchive")) {
0117         mTranslatedDescription = i18n("Unarchive");
0118     } else {
0119         mTranslatedDescription = mDescription;
0120     }
0121 }
0122 
0123 bool Command::clientOnly() const
0124 {
0125     return mClientOnly;
0126 }
0127 
0128 void Command::setClientOnly(bool clientOnly)
0129 {
0130     mClientOnly = clientOnly;
0131 }
0132 
0133 void Command::parseCommand(const QJsonObject &obj)
0134 {
0135     // qDebug() << "Command::parseCommand " << obj;
0136     mProvidesPreview = obj.value(QStringLiteral("providesPreview")).toBool();
0137     mClientOnly = obj.value(QStringLiteral("clientOnly")).toBool();
0138     // Add "/" for completion.
0139     mCommandName = QLatin1Char('/') + obj.value(QStringLiteral("command")).toString();
0140     setDescription(obj.value(QStringLiteral("description")).toString());
0141     setParams(obj.value(QStringLiteral("params")).toString());
0142 
0143     const QJsonValue permissionValue = obj.value(QStringLiteral("permission"));
0144     if (!permissionValue.isUndefined()) {
0145         if (permissionValue.isString()) {
0146             mPermissions.append(permissionValue.toString());
0147         } else if (permissionValue.isArray()) {
0148             const QJsonArray permissionArray = permissionValue.toArray();
0149             for (int i = 0, total = permissionArray.size(); i < total; ++i) {
0150                 mPermissions.append(permissionArray.at(i).toString());
0151             }
0152         } else {
0153             qCWarning(RUQOLA_COMMANDS_LOG) << " Invalid permission type " << obj;
0154         }
0155     }
0156 }
0157 
0158 bool Command::operator==(const Command &other) const
0159 {
0160     return mParams == other.params() && mCommandName == other.commandName() && mDescription == other.description() && mClientOnly == other.clientOnly()
0161         && mProvidesPreview == other.providesPreview() && mPermissions == other.permissions();
0162 }
0163 
0164 bool Command::isValid() const
0165 {
0166     return !mCommandName.isEmpty();
0167 }
0168 
0169 bool Command::providesPreview() const
0170 {
0171     return mProvidesPreview;
0172 }
0173 
0174 void Command::setProvidesPreview(bool providesPreview)
0175 {
0176     mProvidesPreview = providesPreview;
0177 }
0178 
0179 QStringList Command::permissions() const
0180 {
0181     return mPermissions;
0182 }
0183 
0184 void Command::setPermissions(const QStringList &permissions)
0185 {
0186     mPermissions = permissions;
0187 }
0188 
0189 QString Command::translatedDescription() const
0190 {
0191     return mTranslatedDescription;
0192 }
0193 
0194 QDebug operator<<(QDebug d, const Command &t)
0195 {
0196     d.space() << "mParams:" << t.params();
0197     d.space() << "mCommandName:" << t.commandName();
0198     d.space() << "mDescription:" << t.description();
0199     d.space() << "mClientOnly:" << t.clientOnly();
0200     d.space() << "mProvidesPreview:" << t.providesPreview();
0201     d.space() << "mPermissions:" << t.permissions();
0202     return d;
0203 }