File indexing completed on 2023-11-26 08:17:52

0001 /*
0002    SPDX-FileCopyrightText: 2017-2023 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "accountroomsettings.h"
0010 #include "authenticationinfo.h"
0011 #include "bannerinfo/bannerinfos.h"
0012 #include "channelgroupbasejob.h"
0013 #include "commands/runcommandjob.h"
0014 #include "createchannelteaminfo.h"
0015 #include "custom/customuserstatuscreatejob.h"
0016 #include "custom/customuserstatusupdatejob.h"
0017 #include "customusers/customuserstatuses.h"
0018 #include "ddpapi/ddpauthenticationmanager.h"
0019 #include "inputtextmanager.h"
0020 #include "libruqolacore_export.h"
0021 #include "licenses/licensesmanager.h"
0022 #include "messages/message.h"
0023 #include "model/listmessagesmodel.h"
0024 #include "model/roommodel.h"
0025 #include "notificationinfo.h"
0026 #include "ownuser/ownuser.h"
0027 #include "ownuser/ownuserpreferences.h"
0028 #include "parsemessageurlutils.h"
0029 #include "permissions/permissionmanager.h"
0030 #include "rocketchataccountsettings.h"
0031 #include "roles/rolesmanager.h"
0032 #include "room.h"
0033 #include "rooms/roomscleanhistoryjob.h"
0034 #include "rooms/roomsexportjob.h"
0035 #include "ruqolaserverconfig.h"
0036 #include "serverconfiginfo.h"
0037 #include "users/registeruserjob.h"
0038 #include "users/userssetpreferencesjob.h"
0039 #include "users/usersupdateownbasicinfojob.h"
0040 #include "utils.h"
0041 #include <QObject>
0042 #include <QUrl>
0043 #include <TextEmoticonsCore/CustomEmoji>
0044 #include <ddpapi/ddpclient.h>
0045 class TypingNotification;
0046 class UsersModel;
0047 class RoomModel;
0048 class MessagesModel;
0049 class DDPClient;
0050 class MessageQueue;
0051 class RocketChatBackend;
0052 class RuqolaLogger;
0053 class RuqolaServerConfig;
0054 class UserCompleterModel;
0055 class UserCompleterFilterProxyModel;
0056 class StatusModel;
0057 class RocketChatCache;
0058 class EmojiManager;
0059 class OtrManager;
0060 class FilesForRoomFilterProxyModel;
0061 class FilesForRoomModel;
0062 class SearchChannelModel;
0063 class SearchChannelFilterProxyModel;
0064 class LoginMethodModel;
0065 class InputTextManager;
0066 class PluginAuthenticationInterface;
0067 class Room;
0068 class CommonMessagesModel;
0069 class CommonMessageFilterProxyModel;
0070 class ReceiveTypingNotificationManager;
0071 class EmoticonModel;
0072 class DiscussionsFilterProxyModel;
0073 class DiscussionsModel;
0074 class ThreadMessageModel;
0075 class ListMessagesModel;
0076 class ListMessagesModelFilterProxyModel;
0077 class AutotranslateLanguagesModel;
0078 class CommandsModel;
0079 class DownloadAppsLanguagesManager;
0080 class UsersForRoomModel;
0081 class MessageCache;
0082 class ManageChannels;
0083 class CustomSoundsManager;
0084 class AwayManager;
0085 class SwitchChannelHistoryModel;
0086 class UploadFileManager;
0087 class VideoConferenceManager;
0088 class VideoConferenceMessageInfoManager;
0089 class LocalDatabaseManager;
0090 class ManageLocalDatabase;
0091 
0092 namespace RocketChatRestApi
0093 {
0094 class Connection;
0095 }
0096 
0097 class LIBRUQOLACORE_EXPORT RocketChatAccount : public QObject
0098 {
0099     Q_OBJECT
0100 public:
0101     explicit RocketChatAccount(const QString &accountName = QString(), QObject *parent = nullptr);
0102     ~RocketChatAccount() override;
0103 
0104     enum ChannelTypeInfo {
0105         RoomId,
0106         RoomName,
0107     };
0108     Q_ENUM(ChannelTypeInfo)
0109 
0110     enum RoomInfoType {
0111         Announcement,
0112         Description,
0113         Name,
0114         Topic,
0115         ReadOnly,
0116         Archive,
0117         RoomType,
0118         Encrypted,
0119         Password,
0120     };
0121     Q_ENUM(RoomInfoType)
0122 
0123     enum NotificationOptionsType {
0124         DisableNotifications,
0125         HideUnreadStatus,
0126         DesktopNotifications,
0127         DesktopDurationNotifications,
0128         DesktopSoundNotifications,
0129         EmailNotifications,
0130         MobilePushNotifications,
0131         UnreadAlert,
0132         MuteGroupMentions,
0133         HideMentionStatus,
0134     };
0135 
0136     Q_ENUM(NotificationOptionsType)
0137 
0138     enum RoleType {
0139         AddOwner,
0140         AddLeader,
0141         AddModerator,
0142         RemoveOwner,
0143         RemoveLeader,
0144         RemoveModerator,
0145     };
0146     Q_ENUM(RoleType)
0147 
0148     [[nodiscard]] QList<TextEmoticonsCore::CustomEmoji> customEmojies() const;
0149 
0150     void reconnectToServer();
0151     [[nodiscard]] Room::TeamRoomInfo roomFromTeamId(const QString &teamId) const;
0152 
0153     [[nodiscard]] QString getUserCurrentMessage(const QString &roomId);
0154     void setUserCurrentMessage(const QString &message, const QString &roomId);
0155     void textEditing(const QString &roomId, bool clearNotification);
0156     void leaveRoom(const QString &identifier, Room::RoomType channelType);
0157     void hideRoom(const QString &roomId, Room::RoomType channelType);
0158     void tryLogin();
0159     void logOut();
0160     void clearAllUnreadMessages();
0161     void markRoomAsRead(const QString &roomId);
0162     void changeFavorite(const QString &roomId, bool checked);
0163     void sendMessage(const QString &roomID, const QString &message);
0164     void updateMessage(const QString &roomID, const QString &messageId, const QString &message);
0165     void replyOnThread(const QString &roomID, const QString &threadMessageId, const QString &message);
0166     void openChannel(const QString &identifier, RocketChatAccount::ChannelTypeInfo typeInfo);
0167     void joinJitsiConfCall(const QString &roomId);
0168     void createNewChannel(const RocketChatRestApi::CreateChannelTeamInfo &info);
0169     void joinRoom(const QString &roomId, const QString &joinCode = QString());
0170     void openDirectChannel(const QString &username);
0171     void setDefaultStatus(User::PresenceStatus status, const QString &messageStatus); // Move to private no ?
0172     void createJitsiConfCall(const QString &roomId);
0173     void deleteMessage(const QString &messageId, const QString &roomId);
0174     void userAutocomplete(const QString &searchText, const QString &exception);
0175     void eraseRoom(const QString &roomId, Room::RoomType channelType);
0176     void changeNotificationsSettings(const QString &roomId, RocketChatAccount::NotificationOptionsType notificationsType, const QVariant &newValue);
0177     void downloadFile(const QString &downloadFileUrl, const QUrl &localFile);
0178     void starMessage(const QString &messageId, bool starred);
0179     void pinMessage(const QString &messageId, bool pinned);
0180     [[nodiscard]] QString avatarUrl(const Utils::AvatarInfo &info);
0181     [[nodiscard]] QUrl attachmentUrlFromLocalCache(const QString &url);
0182     void loadHistory(const QString &roomID, bool initial = false, qint64 timeStamp = 0);
0183     void channelAndPrivateAutocomplete(const QString &pattern);
0184 
0185     void roomFiles(const QString &roomId, Room::RoomType channelType = Room::RoomType::Unknown);
0186     void addUserToRoom(const QString &username, const QString &roomId, Room::RoomType channelType);
0187     void changeDefaultAuthentication(int index);
0188     void messageSearch(const QString &pattern, const QString &rid, bool userRegularExpression = false);
0189     [[nodiscard]] InputTextManager *inputTextManager() const;
0190 
0191     [[nodiscard]] InputTextManager *inputThreadMessageTextManager() const;
0192 
0193     [[nodiscard]] QVector<Permission> permissions() const;
0194 
0195     void blockUser(const QString &userId, bool block);
0196     void deleteFileMessage(const QString &roomId, const QString &fileId, Room::RoomType channelType);
0197     void openDocumentation();
0198     void clearSearchModel();
0199     void reactOnMessage(const QString &messageId, const QString &emoji, bool shouldReact);
0200     void ignoreUser(const QString &rid, const QString &userId, bool ignore);
0201     void channelInfo(const QString &roomId);
0202     void groupInfo(const QString &roomId);
0203     void switchEditingMode(bool b);
0204     void setSortUnreadOnTop(bool b);
0205     void setRoomListSortOrder(OwnUserPreferences::RoomListSortOrder roomListSortOrder);
0206     void kickUser(const QString &rid, const QString &userId, Room::RoomType channelType);
0207     void changeRoles(const QString &rid, const QString &userId, Room::RoomType channelType, RocketChatAccount::RoleType roleType);
0208     void rolesInRoom(const QString &roomId, Room::RoomType channelType);
0209     void switchingToRoom(const QString &roomID);
0210     void reportMessage(const QString &messageId, const QString &message);
0211     void getThreadMessages(const QString &threadMessageId, const Message &message);
0212     void createDiscussion(const QString &parentRoomName,
0213                           const QString &discussionName,
0214                           const QString &replyMessage,
0215                           const QString &messageId,
0216                           const QStringList &users = QStringList());
0217     void threadsInRoom(const QString &roomId, bool onlyUnread);
0218     void discussionsInRoom(const QString &roomId);
0219     void followMessage(const QString &messageId, bool follow);
0220     void loadMoreFileAttachments(const QString &roomId, Room::RoomType channelType);
0221     void loadMoreDiscussions(const QString &roomId);
0222     void loadThreadMessagesHistory(const QString &roomId);
0223     void loadMoreUsersInRoom(const QString &roomId, Room::RoomType channelType);
0224 
0225     void getPinnedMessages(const QString &roomId);
0226     void getStarredMessages(const QString &roomId);
0227     void getMentionsMessages(const QString &roomId);
0228 
0229     void autoTranslateSaveLanguageSettings(const QString &roomId, const QString &language);
0230     void autoTranslateSaveAutoTranslateSettings(const QString &roomId, bool autoTranslate);
0231 
0232     [[nodiscard]] MessagesModel *messageModelForRoom(const QString &roomID);
0233     void changeShowOriginalMessage(const QString &roomId, const QString &messageId, bool showOriginal);
0234 
0235     void loadMoreListMessages(const QString &roomId);
0236     void getListMessages(const QString &roomId, ListMessagesModel::ListMessageType type);
0237 
0238     [[nodiscard]] QUrl urlForLink(const QString &link) const;
0239     void setUserStatusChanged(const QJsonArray &array);
0240 
0241     void setShowRoomAvatar(bool checked);
0242 
0243     CommonMessageFilterProxyModel *searchMessageFilterProxyModel() const;
0244     FilesForRoomFilterProxyModel *filesForRoomFilterProxyModel() const;
0245     ReceiveTypingNotificationManager *receiveTypingNotificationManager() const;
0246     UserCompleterFilterProxyModel *userCompleterFilterModelProxy() const;
0247 
0248     UsersModel *usersModel() const;
0249     MessagesModel *threadMessageModel() const;
0250     EmoticonModel *emoticonModel() const;
0251     CommandsModel *commandsModel() const;
0252     SearchChannelFilterProxyModel *searchChannelFilterProxyModel() const;
0253     AutotranslateLanguagesModel *autoTranslateLanguagesModel() const;
0254     DiscussionsFilterProxyModel *discussionsFilterProxyModel() const;
0255     SearchChannelModel *searchChannelModel() const;
0256     UserCompleterModel *userCompleterModel() const;
0257     RocketChatAccountSettings *settings() const;
0258 
0259     LocalDatabaseManager *localDatabaseManager() const;
0260 
0261     DDPClient *ddp();
0262     [[nodiscard]] RoomModel *roomModel() const;
0263     [[nodiscard]] LoginMethodModel *loginMethodModel() const;
0264     [[nodiscard]] bool editingMode() const;
0265     [[nodiscard]] bool sortUnreadOnTop() const;
0266     [[nodiscard]] OwnUserPreferences::RoomListSortOrder roomListSortOrder() const;
0267 
0268     [[nodiscard]] DDPAuthenticationManager::LoginStatus loginStatus();
0269     RocketChatRestApi::Connection *restApi();
0270 
0271     [[nodiscard]] Room *room(const QString &roomId);
0272 
0273     // Make it private in future
0274     void slotInformTypingStatus(const QString &room, bool typing);
0275 
0276     [[nodiscard]] MessageQueue *messageQueue() const;
0277 
0278     [[nodiscard]] RocketChatBackend *rocketChatBackend() const;
0279 
0280     [[nodiscard]] RuqolaLogger *ruqolaLogger() const;
0281 
0282     void parsePublicSettings(const QJsonObject &obj, bool update);
0283 
0284     [[nodiscard]] RuqolaServerConfig *ruqolaServerConfig() const;
0285 
0286     void setUserName(const QString &username);
0287     [[nodiscard]] QString userName() const;
0288 
0289     void setAccountName(const QString &accountname);
0290     [[nodiscard]] QString accountName() const;
0291 
0292     void setUserId(const QString &userID);
0293     [[nodiscard]] QString userId() const;
0294 
0295     void setPassword(const QString &password);
0296     [[nodiscard]] QString password() const;
0297 
0298     void setTwoFactorAuthenticationCode(const QString &twoFactorAuthenticationCode);
0299     [[nodiscard]] QString twoFactorAuthenticationCode() const;
0300 
0301     void setAuthToken(const QString &token);
0302     [[nodiscard]] QString authToken() const;
0303 
0304     void setServerUrl(const QString &serverUrl);
0305 
0306     void sendNotification(const QJsonArray &contents);
0307     void parseOtr(const QJsonArray &contents);
0308 
0309     void setServerVersion(const QString &version);
0310     [[nodiscard]] QString serverVersion() const;
0311 
0312     [[nodiscard]] bool needAdaptNewSubscriptionRC60() const;
0313     [[nodiscard]] EmojiManager *emojiManager() const;
0314     [[nodiscard]] QString userStatusIconFileName(const QString &id);
0315 
0316     void membersInRoom(const QString &roomId, Room::RoomType channelType);
0317     void parseUsersForRooms(const QJsonObject &obj, const RocketChatRestApi::ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0318 
0319     void insertCompleterUsers();
0320 
0321     PluginAuthenticationInterface *defaultAuthenticationInterface() const;
0322 
0323     [[nodiscard]] CommonMessagesModel *searchMessageModel() const;
0324 
0325     void updateUser(const QJsonObject &object);
0326 
0327     void removeSettings();
0328 
0329     void rolesChanged(const QJsonArray &contents);
0330 
0331     [[nodiscard]] FilesForRoomModel *filesModelForRoom() const;
0332 
0333     [[nodiscard]] DiscussionsModel *discussionsModel() const;
0334 
0335     void updateThreadMessageList(const Message &m);
0336 
0337     void initializeAccount();
0338     [[nodiscard]] bool allowEditingMessages() const;
0339     [[nodiscard]] bool isMessageEditable(const Message &message) const;
0340 
0341     [[nodiscard]] bool otrEnabled() const;
0342 
0343     [[nodiscard]] ListMessagesModel *listMessageModel() const;
0344     [[nodiscard]] ListMessagesModelFilterProxyModel *listMessagesFilterProxyModel() const;
0345     [[nodiscard]] ServerConfigInfo *serverConfigInfo() const;
0346     [[nodiscard]] QString serverUrl() const;
0347     [[nodiscard]] StatusModel *statusModel() const;
0348 
0349     void customUsersStatus();
0350 
0351     [[nodiscard]] bool jitsiEnabled() const;
0352     [[nodiscard]] bool allowMessagePinningEnabled() const;
0353     [[nodiscard]] bool allowMessageStarringEnabled() const;
0354     [[nodiscard]] bool allowMessageDeletingEnabled() const;
0355 
0356     [[nodiscard]] bool autoTranslateEnabled() const;
0357     [[nodiscard]] bool threadsEnabled() const;
0358 
0359     [[nodiscard]] bool discussionEnabled() const;
0360     [[nodiscard]] QString recordingVideoPath() const;
0361     [[nodiscard]] QString recordingImagePath() const;
0362 
0363     [[nodiscard]] User fullUserInfo(const QString &userName) const;
0364 
0365     void setAccountEnabled(bool enabled);
0366     [[nodiscard]] bool accountEnabled() const;
0367 
0368     void insertAvatarUrl(const QString &userId, const QUrl &url);
0369 
0370     [[nodiscard]] AccountRoomSettings *accountRoomSettings() const;
0371 
0372     [[nodiscard]] bool isMessageDeletable(const Message &message) const;
0373     void joinDiscussion(const QString &roomId, const QString &joinCode);
0374     void setNameChanged(const QJsonArray &array);
0375     void setOwnStatus(const User &user);
0376     [[nodiscard]] User::PresenceStatus presenceStatus() const;
0377 
0378     void getListCommands();
0379     [[nodiscard]] bool runCommand(const QString &msg, const QString &roomId, const QString &tmid = QString());
0380 
0381     void avatarChanged(const QJsonArray &contents);
0382     void markMessageAsUnReadFrom(const QString &messageId);
0383     void markRoomAsUnRead(const QString &roomId);
0384     void sendUserEmailCode();
0385     void requestNewPassword(const QString &email);
0386     [[nodiscard]] bool allowDeleteOwnAccount() const;
0387     [[nodiscard]] bool registrationFromEnabled() const;
0388     void registerNewUser(const RocketChatRestApi::RegisterUserJob::RegisterUserInfo &userInfo);
0389     void deleteOwnAccount(const QString &password);
0390 
0391     [[nodiscard]] bool allowEmailChange() const;
0392 
0393     [[nodiscard]] bool allowPasswordChange() const;
0394 
0395     [[nodiscard]] bool allowUsernameChange() const;
0396 
0397     void updateOwnBasicInfo(const RocketChatRestApi::UsersUpdateOwnBasicInfoJob::UpdateOwnBasicInfo &info);
0398     [[nodiscard]] RuqolaServerConfig::ServerConfigFeatureTypes serverConfigFeatureTypes() const;
0399     void parseOwnInfoDone(const QJsonObject &replyObject);
0400     [[nodiscard]] OwnUser ownUser() const;
0401 
0402     void cleanChannelHistory(const RocketChatRestApi::RoomsCleanHistoryJob::CleanHistoryInfo &info);
0403 
0404     [[nodiscard]] bool broadCastEnabled() const;
0405     [[nodiscard]] bool encryptionEnabled() const;
0406     [[nodiscard]] bool uploadFileEnabled() const;
0407     [[nodiscard]] bool isAdministrator() const;
0408     [[nodiscard]] bool allowProfileChange() const;
0409     [[nodiscard]] bool allowAvatarChanged() const;
0410 
0411     [[nodiscard]] bool audioRecorderEnabled() const;
0412     [[nodiscard]] bool videoRecorderEnabled() const;
0413 
0414     void enable2FaEmailJob(bool enable);
0415     void logoutFromOtherLocation();
0416     void createDirectMessages(const QStringList &usernames);
0417     void setDisplayName(const QString &displayName);
0418     [[nodiscard]] QString displayName() const;
0419 
0420     void deleteCustomUserStatus(const QJsonArray &replyArray);
0421 
0422     void updateCustomUserStatus(const QJsonArray &replyArray);
0423     [[nodiscard]] CustomUserStatuses customUserStatuses() const;
0424 
0425     void removeCustomUserStatus(const QString &customUserStatusId);
0426     void updateCustomUserStatus(const RocketChatRestApi::CustomUserStatusUpdateJob::StatusUpdateInfo &statusUpdateInfo);
0427     void createCustomUserStatus(const RocketChatRestApi::CustomUserStatusCreateJob::StatusCreateInfo &statusCreateInfo);
0428     void addMessage(const QJsonObject &replyObject, bool useRestApi = false, bool temporaryMessage = false);
0429     [[nodiscard]] QStringList highlightWords() const;
0430     void resetAvatar();
0431     void setAvatarUrl(const QString &url);
0432     void exportMessages(const RocketChatRestApi::RoomsExportJob::RoomsExportInfo &info);
0433     [[nodiscard]] bool hasPermission(const QString &permissionId) const;
0434     [[nodiscard]] QStringList permissions(const QString &permissionId) const;
0435     void setUserPreferences(const RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo &info);
0436     [[nodiscard]] QStringList ownUserPermission() const;
0437     void downloadAppsLanguages();
0438     [[nodiscard]] bool hasAutotranslateSupport() const;
0439     [[nodiscard]] OwnUserPreferences ownUserPreferences() const;
0440     [[nodiscard]] bool ldapEnabled() const;
0441     UsersForRoomModel *usersModelForRoom(const QString &roomId) const;
0442 
0443     void deleteUser(const QJsonArray &replyArray);
0444     MessageCache *messageCache() const;
0445 
0446     [[nodiscard]] bool hideRoles() const;
0447     [[nodiscard]] bool displayAvatars() const;
0448     [[nodiscard]] bool teamEnabled() const;
0449     void openPrivateGroup(const QString &identifier, ChannelTypeInfo typeInfo);
0450 
0451     void deleteEmojiCustom(const QJsonArray &replyArray);
0452     void addUpdateEmojiCustomList(const QJsonArray &replyArray);
0453     void setImageUrl(const QUrl &url);
0454     void updateAvatarCache(const Utils::AvatarInfo &info);
0455     [[nodiscard]] bool userIsOffline(const QString &name);
0456     [[nodiscard]] QString userStatusStr(const QString &name);
0457     [[nodiscard]] OtrManager *otrManager() const;
0458 
0459     // Custom Sound
0460     void deleteCustomSound(const QJsonArray &replyArray);
0461     void updateCustomSound(const QJsonArray &replyArray);
0462 
0463     // stdout info
0464     void addStdoutInfo(const QJsonArray &contents);
0465 
0466     // Roles
0467     void updateRoles(const QJsonArray &contents);
0468 
0469     // Permissions
0470     void permissionUpdated(const QJsonArray &replyArray);
0471 
0472     [[nodiscard]] const QVector<RoleInfo> &roleInfo() const;
0473 
0474     [[nodiscard]] CustomSoundsManager *customSoundManager() const;
0475 
0476     [[nodiscard]] bool attachmentIsInLocalCache(const QString &url);
0477     void privateSettingsUpdated(const QJsonArray &replyArray);
0478     void updateUserInRoom(const QJsonObject &roomData);
0479     void updateUserData(const QJsonArray &contents);
0480     [[nodiscard]] bool twoFactorAuthenticationEnabled() const;
0481     [[nodiscard]] bool twoFactorAuthenticationByEmailEnabled() const;
0482     [[nodiscard]] bool twoFactorAuthenticationByTOTPEnabled() const;
0483     void generate2FaTotp(const QJsonObject &obj);
0484     void totpVerify(const QJsonObject &obj);
0485     void totpDisabledVerify(const QJsonObject &root);
0486 
0487     [[nodiscard]] const QStringList &searchListCompletion() const;
0488     void setSearchListCompletion(const QStringList &newSearchListCompletion);
0489 
0490     void setOauthAppAdded(const QJsonObject &obj);
0491 
0492     void setOauthAppUpdated(const QJsonObject &obj);
0493 
0494     [[nodiscard]] SwitchChannelHistoryModel *switchChannelHistoryModel() const;
0495 
0496     [[nodiscard]] bool twoFactorAuthenticationEnforcePasswordFallback() const;
0497     UploadFileManager *uploadFileManager() const;
0498 
0499     [[nodiscard]] int messageMaximumAllowedSize() const;
0500     [[nodiscard]] bool messageAllowConvertLongMessagesToAttachment() const;
0501 
0502     [[nodiscard]] bool allowPasswordReset() const;
0503     [[nodiscard]] const BannerInfos &bannerInfos() const;
0504 
0505     [[nodiscard]] bool useRealName() const;
0506 
0507     [[nodiscard]] int messageViewMode() const;
0508     [[nodiscard]] bool hasLicense(const QString &name);
0509     void parseLicenses(const QJsonArray &replyArray);
0510     // Only for test
0511     void setOwnUserPreferences(const OwnUserPreferences &ownUserPreferences);
0512 
0513     [[nodiscard]] bool sortFavoriteChannels() const;
0514     void setShowFavoriteRoom(bool checked);
0515     void parseVideoConference(const QJsonArray &contents);
0516     [[nodiscard]] VideoConferenceManager *videoConferenceManager() const;
0517 
0518     [[nodiscard]] VideoConferenceMessageInfoManager *videoConferenceMessageInfoManager() const;
0519 
0520     [[nodiscard]] QUrl faviconLogoUrlFromLocalCache(const QString &url);
0521     void addMessageToDataBase(const QString &roomName, const Message &message);
0522     void deleteMessageFromDatabase(const QString &roomName, const QString &messageId);
0523     void loadAccountSettings();
0524 
0525 Q_SIGNALS:
0526     void roomRemoved(const QString &roomId);
0527     void disabledTotpValid(bool checked);
0528     void totpInvalid();
0529     void totpValid(const QStringList &code);
0530     void avatarWasChanged(const Utils::AvatarInfo &info);
0531     void accountInitialized();
0532     void connectedChanged();
0533     void accountNameChanged();
0534     void userNameChanged();
0535     void userIdChanged();
0536     void passwordChanged();
0537     void twoFactorAuthenticationCodeChanged();
0538     void serverUrlChanged();
0539     void loginStatusChanged();
0540     void socketError(QAbstractSocket::SocketError error, const QString &errorString);
0541     void logoutDone(const QString &accountname);
0542     void added(const QJsonObject &item);
0543     void changed(const QJsonObject &item);
0544     void removed(const QJsonObject &item);
0545     void notification(const NotificationInfo &info);
0546     void fileDownloaded(const QString &filePath, const QUrl &cacheImageUrl);
0547     void updateNotification(bool hasAlert, int nbUnread, const QString &accountName);
0548     void missingChannelPassword(const RocketChatRestApi::ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0549     void editingModeChanged();
0550     void jobFailed(const QString &message, const QString &accountName);
0551     void switchedRooms();
0552     void userStatusUpdated(User::PresenceStatus status, const QString &customText, const QString &accountName);
0553     void publicSettingChanged();
0554     void serverVersionChanged();
0555     void openLinkRequested(const QString &link);
0556     void selectRoomByRoomIdRequested(const QString &identifier, const QString &messageId = QString());
0557     void selectRoomByRoomNameRequested(const QString &identifier);
0558     void openTeamNameRequested(const QString &identifier);
0559     void openThreadRequested(const QString &threadMessageId, const QString &threadMessagePreview, bool threadIsFollowing, const Message &message);
0560     void raiseWindow();
0561     void registerUserSuccess();
0562     void roomNeedAttention();
0563     void ownInfoChanged();
0564     void customUserStatusChanged();
0565     void ownUserPreferencesChanged();
0566     void customStatusChanged();
0567     void permissionChanged();
0568     void displayReconnectWidget(int seconds);
0569 
0570     void customSoundRemoved(const QString &identifier);
0571     void customSoundAdded(); // TODO add argument ?
0572     void customSoundUpdated(); // TODO add argument ?
0573 
0574     void insertStdOutInfo(const QString &str);
0575     void rolesUpdated();
0576     void totpResult(const QString &secret, const QString &url);
0577 
0578     void selectChannelAndMessage(const QString &messageId,
0579                                  const QString &roomId,
0580                                  ParseMessageUrlUtils::RoomIdType roomType,
0581                                  ParseMessageUrlUtils::ChannelType channelType);
0582 
0583     void oauthAppAdded(const QJsonObject &obj);
0584     void oauthAppUpdated(const QJsonObject &obj);
0585     void needUpdateMessageView();
0586     void publicSettingLoaded(const QJsonObject &obj);
0587     void bannerInfoChanged();
0588     void privateSettingsChanged();
0589     void updateMessageFailed(const QString &str);
0590 
0591 private:
0592     Q_DISABLE_COPY(RocketChatAccount)
0593 
0594     LIBRUQOLACORE_NO_EXPORT void slotChannelFilesDone(const QJsonObject &obj, const RocketChatRestApi::ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0595     LIBRUQOLACORE_NO_EXPORT void slotChannelGroupRolesDone(const QJsonObject &obj, const RocketChatRestApi::ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0596     LIBRUQOLACORE_NO_EXPORT void slotSplotLightDone(const QJsonObject &obj);
0597     LIBRUQOLACORE_NO_EXPORT void slotChannelListDone(const QJsonObject &obj);
0598     LIBRUQOLACORE_NO_EXPORT void slotGetThreadMessagesDone(const QJsonObject &obj, const QString &threadMessageId);
0599     LIBRUQOLACORE_NO_EXPORT void slotGetDiscussionsListDone(const QJsonObject &obj, const QString &roomId);
0600     LIBRUQOLACORE_NO_EXPORT void slotGetSupportedLanguagesDone(const QJsonObject &obj);
0601     LIBRUQOLACORE_NO_EXPORT void slotUsersPresenceDone(const QJsonObject &obj);
0602     LIBRUQOLACORE_NO_EXPORT void slotReconnectToServer();
0603 
0604     LIBRUQOLACORE_NO_EXPORT void loadEmoji(const QJsonObject &obj);
0605     LIBRUQOLACORE_NO_EXPORT void slotSearchMessages(const QJsonObject &obj);
0606     LIBRUQOLACORE_NO_EXPORT void slotNeedToUpdateNotification();
0607     LIBRUQOLACORE_NO_EXPORT void loadSettings(const QString &accountFileName);
0608     LIBRUQOLACORE_NO_EXPORT void clearModels();
0609     LIBRUQOLACORE_NO_EXPORT void fillOauthModel();
0610     LIBRUQOLACORE_NO_EXPORT void initializeAuthenticationPlugins();
0611     LIBRUQOLACORE_NO_EXPORT void setDefaultAuthentication(AuthenticationManager::OauthType type);
0612     LIBRUQOLACORE_NO_EXPORT void userStatusChanged(const User &user);
0613     LIBRUQOLACORE_NO_EXPORT void openArchivedRoom(const RocketChatRestApi::ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0614     LIBRUQOLACORE_NO_EXPORT void slotChannelGetCountersDone(const QJsonObject &obj,
0615                                                             const RocketChatRestApi::ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0616 
0617     LIBRUQOLACORE_NO_EXPORT void getSupportedLanguages();
0618     LIBRUQOLACORE_NO_EXPORT void usersPresence();
0619     LIBRUQOLACORE_NO_EXPORT void listEmojiCustom();
0620 
0621     LIBRUQOLACORE_NO_EXPORT void checkInitializedRoom(const QString &roomId);
0622     LIBRUQOLACORE_NO_EXPORT void clearTypingNotification();
0623     LIBRUQOLACORE_NO_EXPORT void
0624     inputAutocomplete(const QString &pattern, const QString &exceptions, InputTextManager::CompletionForType type, bool threadDialog);
0625     LIBRUQOLACORE_NO_EXPORT void slotGetListMessagesDone(const QJsonObject &obj, const QString &roomId, ListMessagesModel::ListMessageType type);
0626     LIBRUQOLACORE_NO_EXPORT void slotUserAutoCompleterDone(const QJsonObject &obj);
0627     LIBRUQOLACORE_NO_EXPORT void slotListCommandDone(const QJsonObject &obj);
0628     LIBRUQOLACORE_NO_EXPORT void runCommand(const RocketChatRestApi::RunCommandJob::RunCommandInfo &runCommandInfo);
0629 
0630     LIBRUQOLACORE_NO_EXPORT void loginStatusChangedSlot();
0631     LIBRUQOLACORE_NO_EXPORT void slotFileLanguagedParsed();
0632     LIBRUQOLACORE_NO_EXPORT void slotRegisterUserDone();
0633     LIBRUQOLACORE_NO_EXPORT void slotRoomNeedAttention();
0634     LIBRUQOLACORE_NO_EXPORT void slotMarkAsReadDone(const QString &roomId);
0635     LIBRUQOLACORE_NO_EXPORT void slotCustomUserStatusDone(const QJsonObject &customList);
0636     LIBRUQOLACORE_NO_EXPORT void slotPostMessageDone(const QJsonObject &replyObject);
0637     LIBRUQOLACORE_NO_EXPORT void slotRoomExportDone();
0638     LIBRUQOLACORE_NO_EXPORT void slotPermissionListAllDone(const QJsonObject &replyObject);
0639     LIBRUQOLACORE_NO_EXPORT void slotUsersSetPreferencesDone(const QJsonObject &replyObject);
0640     LIBRUQOLACORE_NO_EXPORT void slotUpdateCustomUserStatus();
0641     LIBRUQOLACORE_NO_EXPORT void slotDirectoryDone(const QJsonObject &obj);
0642     LIBRUQOLACORE_NO_EXPORT void updateCustomEmojiList(bool fetchListCustom);
0643     LIBRUQOLACORE_NO_EXPORT void slotLoadRoles();
0644     LIBRUQOLACORE_NO_EXPORT void slotAwayStatusChanged(bool away);
0645     LIBRUQOLACORE_NO_EXPORT void slotJobFailed(const QString &str);
0646     LIBRUQOLACORE_NO_EXPORT void checkLicenses();
0647     LIBRUQOLACORE_NO_EXPORT void parsePublicSettings();
0648 
0649     AccountRoomSettings *const mAccountRoomSettings;
0650 
0651     PluginAuthenticationInterface *mDefaultAuthenticationInterface = nullptr;
0652 
0653     QHash<AuthenticationManager::OauthType, PluginAuthenticationInterface *> mLstPluginAuthenticationInterface;
0654     QVector<AuthenticationInfo> mLstInfos;
0655     RocketChatAccountSettings *mSettings = nullptr;
0656 
0657     EmojiManager *mEmojiManager = nullptr;
0658     TypingNotification *mTypingNotification = nullptr;
0659     UsersModel *const mUserModel;
0660     RoomModel *const mRoomModel;
0661     DDPClient *mDdp = nullptr;
0662     RocketChatRestApi::Connection *mRestApi = nullptr;
0663     MessageQueue *mMessageQueue = nullptr;
0664     RocketChatBackend *mRocketChatBackend = nullptr;
0665     RuqolaLogger *mRuqolaLogger = nullptr;
0666     RuqolaServerConfig *const mRuqolaServerConfig;
0667     UserCompleterModel *const mUserCompleterModel;
0668     UserCompleterFilterProxyModel *mUserCompleterFilterModelProxy = nullptr;
0669     StatusModel *const mStatusModel;
0670     RocketChatCache *mCache = nullptr;
0671     OtrManager *const mOtrManager;
0672     SearchChannelModel *const mSearchChannelModel;
0673     SearchChannelFilterProxyModel *mSearchChannelFilterProxyModel = nullptr;
0674     LoginMethodModel *const mLoginMethodModel;
0675     InputTextManager *const mInputTextManager;
0676 
0677     InputTextManager *const mInputThreadMessageTextManager;
0678 
0679     CommonMessagesModel *mSearchMessageModel = nullptr;
0680     CommonMessageFilterProxyModel *mSearchMessageFilterProxyModel = nullptr;
0681     ReceiveTypingNotificationManager *const mReceiveTypingNotificationManager;
0682     ServerConfigInfo *mServerConfigInfo = nullptr;
0683     FilesForRoomModel *mFilesModelForRoom = nullptr;
0684     FilesForRoomFilterProxyModel *mFilesForRoomFilterProxyModel = nullptr;
0685     DiscussionsFilterProxyModel *mDiscussionsFilterProxyModel = nullptr;
0686     DiscussionsModel *const mDiscussionsModel;
0687 
0688     EmoticonModel *mEmoticonModel = nullptr;
0689     CommandsModel *const mCommandsModel;
0690     ThreadMessageModel *mThreadMessageModel = nullptr;
0691 
0692     ListMessagesModel *mListMessageModel = nullptr;
0693     ListMessagesModelFilterProxyModel *mListMessagesFilterProxyModel = nullptr;
0694 
0695     AutotranslateLanguagesModel *const mAutoTranslateLanguagesModel;
0696     User::PresenceStatus mPresenceStatus = User::PresenceStatus::PresenceOnline;
0697     DownloadAppsLanguagesManager *const mDownloadAppsLanguagesManager;
0698     MessageCache *const mMessageCache;
0699     ManageChannels *const mManageChannels;
0700     CustomSoundsManager *const mCustomSoundManager;
0701     AwayManager *const mAwayManager;
0702     SwitchChannelHistoryModel *const mSwitchChannelHistoryModel;
0703     UploadFileManager *const mUploadFileManager;
0704     OwnUser mOwnUser;
0705     CustomUserStatuses mCustomUserStatuses;
0706     PermissionManager mPermissionManager;
0707     RolesManager mRolesManager;
0708     LicensesManager mLicensesManager;
0709     QStringList mSearchListCompletion;
0710     BannerInfos mBannerInfos;
0711     VideoConferenceManager *const mVideoConferenceManager;
0712     VideoConferenceMessageInfoManager *const mVideoConferenceMessageInfoManager;
0713     std::unique_ptr<LocalDatabaseManager> mLocalDatabaseManager;
0714     ManageLocalDatabase *const mManageLoadHistory;
0715 
0716     int mDelayReconnect = 100;
0717     bool mEditingMode = false;
0718     bool mMarkUnreadThreadsAsReadOnNextReply = false;
0719 };