File indexing completed on 2024-05-12 05:01:56
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 ¶ms) 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 }