File indexing completed on 2024-05-05 17:00:21

0001 /*
0002    SPDX-FileCopyrightText: 2017-2024 Laurent Montel <montel@kde.org>
0003 
0004    SPDX-License-Identifier: LGPL-2.0-or-later
0005 */
0006 
0007 #pragma once
0008 
0009 #include "channelgroupbasejob.h"
0010 #include "channels/channelhistoryjob.h"
0011 #include "commands/runcommandjob.h"
0012 #include "createchannelteaminfo.h"
0013 #include "custom/customuserstatuscreatejob.h"
0014 #include "custom/customuserstatusupdatejob.h"
0015 #include "invite/findorcreateinvitejob.h"
0016 #include "librocketchatrestapi-qt_export.h"
0017 #include "rooms/adminroomsjob.h"
0018 #include "rooms/roomscleanhistoryjob.h"
0019 #include "users/registeruserjob.h"
0020 #include "users/setavatarjob.h"
0021 #include "users/setstatusjob.h"
0022 #include "users/userbasejob.h"
0023 #include "users/usersautocompletejob.h"
0024 #include "users/userssetpreferencesjob.h"
0025 #include "users/usersupdateownbasicinfojob.h"
0026 #include <QObject>
0027 #include <QSslError>
0028 #include <QUrl>
0029 
0030 class QNetworkAccessManager;
0031 class QNetworkReply;
0032 class QNetworkCookieJar;
0033 namespace RocketChatRestApi
0034 {
0035 class RestApiAbstractJob;
0036 class DownloadFileJob;
0037 class AbstractLogger;
0038 class LIBROCKETCHATRESTAPI_QT_EXPORT Connection : public QObject
0039 {
0040     Q_OBJECT
0041 public:
0042     explicit Connection(QObject *parent = nullptr);
0043     ~Connection() override;
0044 
0045     void setRestApiLogger(RocketChatRestApi::AbstractLogger *logger);
0046 
0047     [[nodiscard]] QString userId() const;
0048     [[nodiscard]] QString authToken() const;
0049     void setUserId(const QString &userId);
0050     void setAuthToken(const QString &authToken);
0051 
0052     // Assign/get server url
0053     [[nodiscard]] QString serverUrl() const;
0054     void setServerUrl(const QString &serverUrl);
0055 
0056     void setUserName(const QString &userName);
0057     void setPassword(const QString &password);
0058 
0059     void initializeRestApiJob(RocketChatRestApi::RestApiAbstractJob *job);
0060 
0061     void login();
0062     void logout();
0063     void getAvatar(const RocketChatRestApi::UserBaseJob::UserInfo &info);
0064 
0065     void serverInfo(bool useDeprecatedVersion);
0066     void getPrivateSettings();
0067     void getOwnInfo();
0068     void starMessage(const QString &messageId, bool starred);
0069     RocketChatRestApi::DownloadFileJob *
0070     downloadFile(const QUrl &url, const QUrl &localFileUrl, const QByteArray &mimeType = "text/plain", bool requiredAuthentication = true);
0071     void changeChannelTopic(const QString &roomId, const QString &topic);
0072     void changeGroupsTopic(const QString &roomId, const QString &topic);
0073     void changeChannelAnnouncement(const QString &roomId, const QString &announcement);
0074     void changeGroupsAnnouncement(const QString &roomId, const QString &announcement);
0075     void postMessage(const QString &roomId, const QString &text);
0076     void deleteMessage(const QString &roomId, const QString &messageId);
0077     void createChannels(const RocketChatRestApi::CreateChannelTeamInfo &info);
0078     void createGroups(const RocketChatRestApi::CreateChannelTeamInfo &info);
0079     void leaveChannel(const QString &roomId);
0080     void leaveGroups(const QString &roomId);
0081     void updateMessage(const QString &roomId, const QString &messageId, const QString &text);
0082     void reactOnMessage(const QString &messageId, const QString &emoji, bool shouldReact);
0083     void closeChannel(const QString &roomId, const QString &type);
0084     void createDirectMessage(const QStringList &userName);
0085     void historyChannel(const QString &roomId, const QString &type);
0086     void changeChannelDescription(const QString &roomId, const QString &description);
0087     void changeGroupsDescription(const QString &roomId, const QString &description);
0088     void archiveChannel(const QString &roomId, bool archive);
0089     void archiveGroups(const QString &roomId, bool archive);
0090     void filesInRoom(const QString &roomId, const QString &type, int offset = 0, int count = 50);
0091     void addUserInChannel(const QString &roomId, const QString &userId);
0092 
0093     void searchMessages(const QString &roomId, const QString &pattern, bool useRegularExpression = false);
0094     void markRoomAsRead(const QString &roomId);
0095     void getRooms();
0096     void markAsFavorite(const QString &roomId, bool favorite);
0097     void addUserInGroup(const QString &roomId, const QString &userId);
0098     void disableNotifications(const QString &roomId, bool value);
0099     void hideUnreadStatus(const QString &roomId, bool value);
0100     void desktopNotifications(const QString &roomId, const QString &value);
0101     void emailNotifications(const QString &roomId, const QString &value);
0102     void mobilePushNotifications(const QString &roomId, const QString &value);
0103     void unreadAlert(const QString &roomId, const QString &value);
0104     void setAvatar(const UserBaseJob::UserInfo &info, const RocketChatRestApi::SetAvatarJob::SetAvatarInfo &avatarInfo);
0105     void markRoomAsUnRead(const QString &roomId);
0106     void markMessageAsUnReadFrom(const QString &messageId);
0107     void forgotPassword(const QString &email);
0108     void userInfo(const QString &identifier, bool userName = false);
0109     void ignoreUser(const QString &roomId, const QString &userId, bool ignore);
0110     void userPresence(const QString &userId);
0111     void reportMessage(const QString &messageId, const QString &message);
0112     void setGroupType(const QString &roomId, bool isPrivate);
0113     void setChannelType(const QString &roomId, bool isPrivate);
0114     void getGroupRoles(const QString &roomId);
0115     void getChannelRoles(const QString &roomId);
0116     void getUsernameSuggestion();
0117     void listAllPermissions();
0118     void fetchMyKeys();
0119     void setJoinCodeChannel(const QString &roomId, const QString &joinCode);
0120     void muteGroupMentions(const QString &roomId, bool value);
0121 
0122     void channelInfo(const QString &roomId);
0123 
0124     void syncThreadMessages(const QString &threadMessageId, const QString &timestamp);
0125     void changeChannelName(const QString &roomId, const QString &newName);
0126     void changeGroupName(const QString &roomId, const QString &newName);
0127     void groupInfo(const QString &roomId);
0128     void channelGetAllUserMentions(const QString &roomId, int offset = 0, int count = 50);
0129     void openDirectMessage(const QString &userId);
0130     void channelKick(const QString &roomId, const QString &userId);
0131     void groupKick(const QString &roomId, const QString &userId);
0132     void groupAddModerator(const QString &roomId, const QString &userId);
0133     void groupRemoveModerator(const QString &roomId, const QString &userId);
0134     void groupAddLeader(const QString &roomId, const QString &userId);
0135     void groupRemoveLeader(const QString &roomId, const QString &userId);
0136     void groupAddOwner(const QString &roomId, const QString &userId);
0137     void groupRemoveOwner(const QString &roomId, const QString &userId);
0138     void channelAddModerator(const QString &roomId, const QString &userId);
0139     void channelRemoveModerator(const QString &roomId, const QString &userId);
0140     void channelAddOwner(const QString &roomId, const QString &userId);
0141     void channelRemoveOwner(const QString &roomId, const QString &userId);
0142     void channelDelete(const QString &roomId);
0143     void groupDelete(const QString &roomId);
0144     void membersInRoom(const QString &roomId, const QString &type, int offset = 0, int count = 50);
0145     void changeChannelReadOnly(const QString &roomId, bool b);
0146     void changeGroupsReadOnly(const QString &roomId, bool b);
0147     void channelAddLeader(const QString &roomId, const QString &userId);
0148     void channelRemoveLeader(const QString &roomId, const QString &userId);
0149     void changeGroupsEncrypted(const QString &roomId, bool b);
0150     void pinMessage(const QString &messageId, bool pinned);
0151     void desktopDurationNotifications(const QString &roomId, int value);
0152     void desktopSoundNotifications(const QString &roomId, const QString &value);
0153     void followMessage(const QString &messageId);
0154     void unFollowMessage(const QString &messageId);
0155     void createDiscussion(const QString &parentRoomId,
0156                           const QString &discussionName,
0157                           const QString &replyMessage,
0158                           const QString &parentMessageId,
0159                           const QStringList &users);
0160     void getDiscussions(const QString &roomId, int offset = 0, int count = 50);
0161     void getThreadsList(const QString &roomId, bool onlyUnread, int offset = 0, int count = 50);
0162     void getThreadMessages(const QString &threadMessageId);
0163     void sendMessage(const QString &roomId, const QString &text, const QString &messageId = QString(), const QString &threadMessageId = QString());
0164     void getPinnedMessages(const QString &roomId, int offset = 0, int count = 50);
0165     void autoTranslateSaveLanguageSettings(const QString &roomId, const QString &language);
0166     void autoTranslateSaveAutoTranslateSettings(const QString &roomId, bool autoTranslate);
0167     void setUserStatus(const QString &userId, SetStatusJob::StatusType status, const QString &message = QString());
0168     void usersPresence();
0169     void getStarredMessages(const QString &roomId, int offset = 0, int count = 50);
0170     void getSnippetedMessages(const QString &roomId, int offset = 0, int count = 50);
0171     void customUserStatus();
0172     void usersAutocomplete(const UsersAutocompleteJob::UsersAutocompleterInfo &info);
0173     void findOrCreateInvite(const QString &roomId, int maxUses, int numberOfDays);
0174     void getMessage(const QString &messageId, const QString &roomId);
0175     void getCommand(const QString &commandName);
0176     void runCommand(const RunCommandJob::RunCommandInfo &runCommandInfo);
0177     void sendUserEmailCode(const QString &identifier);
0178     void deleteOwnAccount(const QString &password);
0179     void registerNewUser(const RocketChatRestApi::RegisterUserJob::RegisterUserInfo &userInfo);
0180     void enable2FaEmailJob(bool enable);
0181     void updateOwnBasicInfo(const RocketChatRestApi::UsersUpdateOwnBasicInfoJob::UpdateOwnBasicInfo &info);
0182     void cleanChannelHistory(const RocketChatRestApi::RoomsCleanHistoryJob::CleanHistoryInfo &info);
0183     void getRoomsAdmin(const RocketChatRestApi::AdminRoomsJob::AdminRoomsJobInfo &info);
0184     void getChannelsCounter(const QString &roomId);
0185     void setUserPreferences(const RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo &info);
0186     void removeOtherTokens();
0187     void createCustomUserStatus(const CustomUserStatusCreateJob::StatusCreateInfo &statusCreateInfo);
0188     void deleteCustomUserStatus(const QString &customUserStatusId);
0189     void updateCustomUserStatus(const CustomUserStatusUpdateJob::StatusUpdateInfo &statusUpdateInfo);
0190     void resetAvatar(const UserBaseJob::UserInfo &info);
0191     void statistics(bool refresh);
0192     void searchRooms(const QString &pattern);
0193     void getMentionedMessages(const QString &roomId, int offset = 0, int count = 50);
0194     void hideMentionStatus(const QString &roomId, bool value);
0195     void historyChannel(const RocketChatRestApi::ChannelHistoryJob::ChannelHistoryInfo &info);
0196 
0197 Q_SIGNALS:
0198     void avatar(const UserBaseJob::UserInfo &info, const QUrl &url);
0199     void redownloadAvatar();
0200     void loginDone(const QString &authToken, const QString &userId);
0201     void downloadFileDone(const QUrl &url, const QUrl &localFileUrl);
0202     void serverInfoDone(const QString &version);
0203     void serverInfoFailed(bool useDeprecatedVersion);
0204     void getOwnInfoDone(const QJsonObject &data);
0205     void privateInfoDone(const QJsonObject &data);
0206     void channelFilesDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0207     void channelMembersDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0208     void syncThreadMessagesDone(const QJsonObject &obj, const QString &threadMessageId);
0209     void searchMessageDone(const QJsonObject &obj);
0210     void getRoomsDone(const QJsonObject &obj);
0211     void userInfoDone(const QJsonObject &obj);
0212     void channelRolesDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0213     void getUsernameSuggestionDone(const QString &username);
0214     void getPresenceDone(const QString &presence);
0215     void permissionListAllDone(const QJsonObject &obj);
0216     void getCommandsDone(const QJsonObject &obj);
0217     void fetchMyKeysDone();
0218     void setJoinCodeDone();
0219     void channelGetAllUserMentionsDone(const QJsonObject &obj, const QString &roomId);
0220     void channelKickUserDone(const QJsonObject &obj);
0221     void groupKickUserDone(const QJsonObject &obj);
0222     void addModeratorDone();
0223     void removeModeratorDone();
0224     void addLeaderDone();
0225     void removeLeaderDone();
0226     void addOwnerDone();
0227     void channelRemoveOwnerDone();
0228     void groupRemoveOwnerDone();
0229     void deletechannelDone();
0230     void deleteGroupsDone();
0231     void pinMessageDone();
0232     void ignoreUserDone(const QJsonObject &obj, const QString &roomId);
0233     void groupRolesDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0234     void followMessageDone();
0235     void unFollowMessageDone();
0236     void startDiscussionDone();
0237     void getDiscussionsDone(const QJsonObject &obj, const QString &roomId);
0238     void getThreadsDone(const QJsonObject &obj, const QString &roomId, bool onlyUnread);
0239     void getThreadMessagesDone(const QJsonObject &obj, const QString &threadMessageId);
0240     void getPinnedMessagesDone(const QJsonObject &obj, const QString &roomId);
0241     void getStarredMessagesDone(const QJsonObject &obj, const QString &roomId);
0242     void getSnippetedMessagesDone(const QJsonObject &obj, const QString &roomId);
0243     void getMentionedMessagesDone(const QJsonObject &obj, const QString &roomId);
0244     void roomsAdminDone(const QJsonObject &obj);
0245     void translateSavesettingsDone();
0246     void setStatusDone();
0247     void usersPresenceDone(const QJsonObject &obj);
0248     void customUserStatusDone(const QJsonObject &);
0249 
0250     void usersAutocompleteDone(const QJsonObject &obj);
0251 
0252     void failed(const QString &str);
0253     void networkSessionFailedError();
0254     void findOrCreateInviteDone(const RocketChatRestApi::FindOrCreateInviteJob::InviteUsersInfo &info);
0255 
0256     void getMessageDone(const QJsonObject &obj, const QString &messageId, const QString &roomId);
0257     void runCommandDone();
0258     void sendEmailCodeDone();
0259     void deleteOwnAccountDone();
0260     void registerUserDone();
0261     void enableEmailDone();
0262     void disableEmailDone();
0263     void updateOwnBasicInfoDone();
0264     void cleanHistoryDone();
0265     void channelGetCountersDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0266     void markAsReadDone(const QString &roomId);
0267     void usersSetPreferencesDone(const QJsonObject &replyObject);
0268     void removeOtherTokensDone();
0269     void createUserStatusDone();
0270     void userStatusDeletedDone();
0271     void customUserUpdateDone();
0272     void postMessageDone(const QJsonObject &replyObject);
0273     void resetAvatarDone();
0274     void statisticDone(const QJsonObject &replyObject);
0275     void updateMessageFailed(const QString &str);
0276 
0277 private:
0278     Q_DISABLE_COPY(Connection)
0279     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void initializeCookies();
0280     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotResult(QNetworkReply *reply);
0281     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotSslErrors(QNetworkReply *reply, const QList<QSslError> &error);
0282     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotLogout();
0283     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotLogin(const QString &authToken, const QString &userId);
0284     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotAddJoinCodeToChannel(const QString &channelId, const QString &password);
0285 
0286     QNetworkAccessManager *const mNetworkAccessManager;
0287     QNetworkCookieJar *const mCookieJar;
0288     RestApiMethod *const mRestApiMethod;
0289     RocketChatRestApi::AbstractLogger *mRuqolaLogger = nullptr;
0290     QString mUserId;
0291     QString mAuthToken;
0292     QString mUserName;
0293     QString mPassword;
0294     bool mSessionFailed = false;
0295 };
0296 }