File indexing completed on 2024-05-12 05:02:56

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 setJoinCodeChannel(const QString &roomId, const QString &joinCode);
0119     void muteGroupMentions(const QString &roomId, bool value);
0120 
0121     void channelInfo(const QString &roomId);
0122 
0123     void syncThreadMessages(const QString &threadMessageId, const QString &timestamp);
0124     void changeChannelName(const QString &roomId, const QString &newName);
0125     void changeGroupName(const QString &roomId, const QString &newName);
0126     void groupInfo(const QString &roomId);
0127     void channelGetAllUserMentions(const QString &roomId, int offset = 0, int count = 50);
0128     void openDirectMessage(const QString &userId);
0129     void channelKick(const QString &roomId, const QString &userId);
0130     void groupKick(const QString &roomId, const QString &userId);
0131     void groupAddModerator(const QString &roomId, const QString &userId);
0132     void groupRemoveModerator(const QString &roomId, const QString &userId);
0133     void groupAddLeader(const QString &roomId, const QString &userId);
0134     void groupRemoveLeader(const QString &roomId, const QString &userId);
0135     void groupAddOwner(const QString &roomId, const QString &userId);
0136     void groupRemoveOwner(const QString &roomId, const QString &userId);
0137     void channelAddModerator(const QString &roomId, const QString &userId);
0138     void channelRemoveModerator(const QString &roomId, const QString &userId);
0139     void channelAddOwner(const QString &roomId, const QString &userId);
0140     void channelRemoveOwner(const QString &roomId, const QString &userId);
0141     void channelDelete(const QString &roomId);
0142     void groupDelete(const QString &roomId);
0143     void membersInRoom(const QString &roomId, const QString &type, int offset = 0, int count = 50);
0144     void changeChannelReadOnly(const QString &roomId, bool b);
0145     void changeGroupsReadOnly(const QString &roomId, bool b);
0146     void channelAddLeader(const QString &roomId, const QString &userId);
0147     void channelRemoveLeader(const QString &roomId, const QString &userId);
0148     void changeGroupsEncrypted(const QString &roomId, bool b);
0149     void pinMessage(const QString &messageId, bool pinned);
0150     void desktopDurationNotifications(const QString &roomId, int value);
0151     void desktopSoundNotifications(const QString &roomId, const QString &value);
0152     void followMessage(const QString &messageId);
0153     void unFollowMessage(const QString &messageId);
0154     void createDiscussion(const QString &parentRoomId,
0155                           const QString &discussionName,
0156                           const QString &replyMessage,
0157                           const QString &parentMessageId,
0158                           const QStringList &users);
0159     void getDiscussions(const QString &roomId, int offset = 0, int count = 50);
0160     void getThreadsList(const QString &roomId, bool onlyUnread, int offset = 0, int count = 50);
0161     void getThreadMessages(const QString &threadMessageId);
0162     void sendMessage(const QString &roomId, const QString &text, const QString &messageId = QString(), const QString &threadMessageId = QString());
0163     void getPinnedMessages(const QString &roomId, int offset = 0, int count = 50);
0164     void autoTranslateSaveLanguageSettings(const QString &roomId, const QString &language);
0165     void autoTranslateSaveAutoTranslateSettings(const QString &roomId, bool autoTranslate);
0166     void setUserStatus(const QString &userId, SetStatusJob::StatusType status, const QString &message = QString());
0167     void usersPresence();
0168     void getStarredMessages(const QString &roomId, int offset = 0, int count = 50);
0169     void getSnippetedMessages(const QString &roomId, int offset = 0, int count = 50);
0170     void customUserStatus();
0171     void usersAutocomplete(const UsersAutocompleteJob::UsersAutocompleterInfo &info);
0172     void findOrCreateInvite(const QString &roomId, int maxUses, int numberOfDays);
0173     void getMessage(const QString &messageId, const QString &roomId);
0174     void getCommand(const QString &commandName);
0175     void runCommand(const RunCommandJob::RunCommandInfo &runCommandInfo);
0176     void sendUserEmailCode(const QString &identifier);
0177     void deleteOwnAccount(const QString &password);
0178     void registerNewUser(const RocketChatRestApi::RegisterUserJob::RegisterUserInfo &userInfo);
0179     void enable2FaEmailJob(bool enable);
0180     void updateOwnBasicInfo(const RocketChatRestApi::UsersUpdateOwnBasicInfoJob::UpdateOwnBasicInfo &info);
0181     void cleanChannelHistory(const RocketChatRestApi::RoomsCleanHistoryJob::CleanHistoryInfo &info);
0182     void getRoomsAdmin(const RocketChatRestApi::AdminRoomsJob::AdminRoomsJobInfo &info);
0183     void getChannelsCounter(const QString &roomId);
0184     void setUserPreferences(const RocketChatRestApi::UsersSetPreferencesJob::UsersSetPreferencesInfo &info);
0185     void removeOtherTokens();
0186     void createCustomUserStatus(const CustomUserStatusCreateJob::StatusCreateInfo &statusCreateInfo);
0187     void deleteCustomUserStatus(const QString &customUserStatusId);
0188     void updateCustomUserStatus(const CustomUserStatusUpdateJob::StatusUpdateInfo &statusUpdateInfo);
0189     void resetAvatar(const UserBaseJob::UserInfo &info);
0190     void statistics(bool refresh);
0191     void searchRooms(const QString &pattern);
0192     void getMentionedMessages(const QString &roomId, int offset = 0, int count = 50);
0193     void hideMentionStatus(const QString &roomId, bool value);
0194     void historyChannel(const RocketChatRestApi::ChannelHistoryJob::ChannelHistoryInfo &info);
0195 
0196 Q_SIGNALS:
0197     void avatar(const UserBaseJob::UserInfo &info, const QUrl &url);
0198     void redownloadAvatar();
0199     void loginDone(const QString &authToken, const QString &userId);
0200     void downloadFileDone(const QUrl &url, const QUrl &localFileUrl);
0201     void serverInfoDone(const QString &version);
0202     void serverInfoFailed(bool useDeprecatedVersion);
0203     void getOwnInfoDone(const QJsonObject &data);
0204     void privateInfoDone(const QJsonObject &data);
0205     void channelFilesDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0206     void channelMembersDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0207     void syncThreadMessagesDone(const QJsonObject &obj, const QString &threadMessageId);
0208     void searchMessageDone(const QJsonObject &obj);
0209     void getRoomsDone(const QJsonObject &obj);
0210     void userInfoDone(const QJsonObject &obj);
0211     void channelRolesDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0212     void getUsernameSuggestionDone(const QString &username);
0213     void getPresenceDone(const QString &presence);
0214     void permissionListAllDone(const QJsonObject &obj);
0215     void getCommandsDone(const QJsonObject &obj);
0216     void setJoinCodeDone();
0217     void channelGetAllUserMentionsDone(const QJsonObject &obj, const QString &roomId);
0218     void channelKickUserDone(const QJsonObject &obj);
0219     void groupKickUserDone(const QJsonObject &obj);
0220     void addModeratorDone();
0221     void removeModeratorDone();
0222     void addLeaderDone();
0223     void removeLeaderDone();
0224     void addOwnerDone();
0225     void channelRemoveOwnerDone();
0226     void groupRemoveOwnerDone();
0227     void deletechannelDone();
0228     void deleteGroupsDone();
0229     void pinMessageDone();
0230     void ignoreUserDone(const QJsonObject &obj, const QString &roomId);
0231     void groupRolesDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0232     void followMessageDone();
0233     void unFollowMessageDone();
0234     void startDiscussionDone();
0235     void getDiscussionsDone(const QJsonObject &obj, const QString &roomId);
0236     void getThreadsDone(const QJsonObject &obj, const QString &roomId, bool onlyUnread);
0237     void getThreadMessagesDone(const QJsonObject &obj, const QString &threadMessageId);
0238     void getPinnedMessagesDone(const QJsonObject &obj, const QString &roomId);
0239     void getStarredMessagesDone(const QJsonObject &obj, const QString &roomId);
0240     void getSnippetedMessagesDone(const QJsonObject &obj, const QString &roomId);
0241     void getMentionedMessagesDone(const QJsonObject &obj, const QString &roomId);
0242     void roomsAdminDone(const QJsonObject &obj);
0243     void translateSavesettingsDone();
0244     void setStatusDone();
0245     void usersPresenceDone(const QJsonObject &obj);
0246     void customUserStatusDone(const QJsonObject &);
0247 
0248     void usersAutocompleteDone(const QJsonObject &obj);
0249 
0250     void failed(const QString &str);
0251     void networkSessionFailedError();
0252     void findOrCreateInviteDone(const RocketChatRestApi::FindOrCreateInviteJob::InviteUsersInfo &info);
0253 
0254     void getMessageDone(const QJsonObject &obj, const QString &messageId, const QString &roomId);
0255     void runCommandDone();
0256     void sendEmailCodeDone();
0257     void deleteOwnAccountDone();
0258     void registerUserDone();
0259     void enableEmailDone();
0260     void disableEmailDone();
0261     void updateOwnBasicInfoDone();
0262     void cleanHistoryDone();
0263     void channelGetCountersDone(const QJsonObject &obj, const ChannelGroupBaseJob::ChannelGroupInfo &channelInfo);
0264     void markAsReadDone(const QString &roomId);
0265     void usersSetPreferencesDone(const QJsonObject &replyObject);
0266     void removeOtherTokensDone();
0267     void createUserStatusDone();
0268     void userStatusDeletedDone();
0269     void customUserUpdateDone();
0270     void postMessageDone(const QJsonObject &replyObject);
0271     void resetAvatarDone();
0272     void statisticDone(const QJsonObject &replyObject);
0273     void updateMessageFailed(const QString &str);
0274 
0275 private:
0276     Q_DISABLE_COPY(Connection)
0277     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void initializeCookies();
0278     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotResult(QNetworkReply *reply);
0279     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotSslErrors(QNetworkReply *reply, const QList<QSslError> &error);
0280     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotLogout();
0281     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotLogin(const QString &authToken, const QString &userId);
0282     LIBROCKETCHATRESTAPI_QT_NO_EXPORT void slotAddJoinCodeToChannel(const QString &channelId, const QString &password);
0283 
0284     QNetworkAccessManager *const mNetworkAccessManager;
0285     QNetworkCookieJar *const mCookieJar;
0286     RestApiMethod *const mRestApiMethod;
0287     RocketChatRestApi::AbstractLogger *mRuqolaLogger = nullptr;
0288     QString mUserId;
0289     QString mAuthToken;
0290     QString mUserName;
0291     QString mPassword;
0292     bool mSessionFailed = false;
0293 };
0294 }