File indexing completed on 2023-11-26 08:17:56
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 "libruqolacore_export.h" 0010 #include "roles/roleinfo.h" 0011 #include <QDateTime> 0012 #include <QDebug> 0013 #include <QString> 0014 class LIBRUQOLACORE_EXPORT User 0015 { 0016 Q_GADGET 0017 public: 0018 enum class PresenceStatus { 0019 PresenceOnline, 0020 PresenceBusy, 0021 PresenceAway, 0022 PresenceOffline, 0023 Unknown, 0024 }; 0025 Q_ENUM(PresenceStatus) 0026 0027 struct LIBRUQOLACORE_EXPORT UserEmailsInfo { 0028 QString email; 0029 bool verified = false; 0030 [[nodiscard]] bool operator==(const UserEmailsInfo &other) const 0031 { 0032 return (email == other.email) && (verified == other.verified); 0033 } 0034 0035 [[nodiscard]] bool isValid() const 0036 { 0037 return !email.isEmpty(); 0038 } 0039 }; 0040 0041 User(); 0042 ~User(); 0043 0044 [[nodiscard]] QString name() const; 0045 void setName(const QString &name); 0046 0047 [[nodiscard]] QString userId() const; 0048 void setUserId(const QString &userId); 0049 0050 [[nodiscard]] User::PresenceStatus status() const; 0051 void setStatus(User::PresenceStatus status); 0052 0053 void parseUser(const QJsonObject &json); 0054 [[nodiscard]] QString iconFromStatus() const; 0055 0056 [[nodiscard]] bool operator==(const User &other) const; 0057 [[nodiscard]] bool operator!=(const User &other) const; 0058 0059 [[nodiscard]] QString userName() const; 0060 void setUserName(const QString &userName); 0061 0062 [[nodiscard]] bool isValid() const; 0063 0064 [[nodiscard]] double utcOffset() const; 0065 void setUtcOffset(double utcOffset); 0066 0067 [[nodiscard]] QString statusText() const; 0068 void setStatusText(const QString &statusText); 0069 0070 void parseUserRestApi(const QJsonObject &object, const QVector<RoleInfo> &roleInfo); 0071 0072 [[nodiscard]] static QVector<User> parseUsersList(const QJsonObject &object, const QVector<RoleInfo> &roleInfo); 0073 void parseUser(const QVariantList &list); 0074 0075 [[nodiscard]] QStringList roles() const; 0076 void setRoles(const QStringList &roles, const QVector<RoleInfo> &roleInfo); 0077 0078 [[nodiscard]] QDateTime createdAt() const; 0079 void setCreatedAt(const QDateTime &createdAt); 0080 0081 [[nodiscard]] QDateTime lastLogin() const; 0082 void setLastLogin(const QDateTime &lastLogin); 0083 0084 [[nodiscard]] UserEmailsInfo userEmailsInfo() const; 0085 void setUserEmailsInfo(const UserEmailsInfo &userEmailsInfo); 0086 0087 [[nodiscard]] QStringList i18nRoles() const; 0088 0089 [[nodiscard]] bool active() const; 0090 void setActive(bool newActive); 0091 0092 [[nodiscard]] QString generateStatusStr() const; 0093 0094 [[nodiscard]] bool requirePasswordChange() const; 0095 void setRequirePasswordChange(bool newRequirePasswordChange); 0096 0097 [[nodiscard]] static QString roleI18n(const QString &roleStr, const QVector<RoleInfo> &roleInfo); 0098 0099 [[nodiscard]] QString bio() const; 0100 void setBio(const QString &newBio); 0101 0102 static QJsonObject serialize(const User &user); 0103 static User deserialize(const QJsonObject &o); 0104 0105 private: 0106 UserEmailsInfo mUserEmailsInfo; 0107 QDateTime mCreatedAt; 0108 QDateTime mLastLogin; 0109 0110 PresenceStatus mStatus = PresenceStatus::PresenceOffline; 0111 QString mUserId; 0112 QString mName; 0113 QString mUserName; 0114 QString mStatusText; 0115 QString mBio; 0116 QStringList mRoles; 0117 QStringList mI18nRoles; 0118 double mUtcOffset = 0.0; 0119 bool mActive = true; 0120 bool mRequirePasswordChange = false; 0121 }; 0122 Q_DECLARE_METATYPE(User) 0123 Q_DECLARE_TYPEINFO(User, Q_MOVABLE_TYPE); 0124 LIBRUQOLACORE_EXPORT QDebug operator<<(QDebug d, const User &t); 0125 LIBRUQOLACORE_EXPORT QDebug operator<<(QDebug d, const User::UserEmailsInfo &t);