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);