userstatusconnector.h 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. /*
  2. * Copyright (C) by Felix Weilbach <felix.weilbach@nextcloud.com>
  3. *
  4. * This program is free software; you can redistribute it and/or modify
  5. * it under the terms of the GNU General Public License as published by
  6. * the Free Software Foundation; either version 2 of the License, or
  7. * (at your option) any later version.
  8. *
  9. * This program is distributed in the hope that it will be useful, but
  10. * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
  11. * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License
  12. * for more details.
  13. */
  14. #pragma once
  15. #include "common/result.h"
  16. #include "owncloudlib.h"
  17. #include <QObject>
  18. #include <QString>
  19. #include <QMetaType>
  20. #include <QUrl>
  21. #include <QDateTime>
  22. #include <QtGlobal>
  23. #include <QVariant>
  24. #include <vector>
  25. namespace OCC {
  26. enum class OWNCLOUDSYNC_EXPORT ClearAtType {
  27. Period,
  28. EndOf,
  29. Timestamp
  30. };
  31. // TODO: If we can use C++17 make it a std::variant
  32. struct OWNCLOUDSYNC_EXPORT ClearAt
  33. {
  34. ClearAtType _type = ClearAtType::Period;
  35. quint64 _timestamp = 0ULL;
  36. int _period = 0;
  37. QString _endof;
  38. };
  39. class OWNCLOUDSYNC_EXPORT UserStatus
  40. {
  41. Q_GADGET
  42. Q_PROPERTY(QString id MEMBER _id)
  43. Q_PROPERTY(QString message MEMBER _message)
  44. Q_PROPERTY(QString icon MEMBER _icon)
  45. Q_PROPERTY(OnlineStatus state MEMBER _state)
  46. public:
  47. enum class OnlineStatus : quint8 {
  48. Online,
  49. DoNotDisturb,
  50. Away,
  51. Offline,
  52. Invisible
  53. };
  54. Q_ENUM(OnlineStatus);
  55. UserStatus();
  56. UserStatus(const QString &id, const QString &message, const QString &icon,
  57. OnlineStatus state, bool messagePredefined, const Optional<ClearAt> &clearAt = {});
  58. Q_REQUIRED_RESULT QString id() const;
  59. Q_REQUIRED_RESULT QString message() const;
  60. Q_REQUIRED_RESULT QString icon() const;
  61. Q_REQUIRED_RESULT OnlineStatus state() const;
  62. Q_REQUIRED_RESULT Optional<ClearAt> clearAt() const;
  63. [[nodiscard]] QString clearAtDisplayString() const;
  64. void setId(const QString &id);
  65. void setMessage(const QString &message);
  66. void setState(OnlineStatus state);
  67. void setIcon(const QString &icon);
  68. void setMessagePredefined(bool value);
  69. void setClearAt(const Optional<ClearAt> &dateTime);
  70. Q_REQUIRED_RESULT bool messagePredefined() const;
  71. Q_REQUIRED_RESULT QUrl stateIcon() const;
  72. private:
  73. QString _id;
  74. QString _message;
  75. QString _icon;
  76. OnlineStatus _state = OnlineStatus::Online;
  77. bool _messagePredefined = false;
  78. Optional<ClearAt> _clearAt;
  79. };
  80. class OWNCLOUDSYNC_EXPORT UserStatusConnector : public QObject
  81. {
  82. Q_OBJECT
  83. public:
  84. enum class Error {
  85. CouldNotFetchUserStatus,
  86. CouldNotFetchPredefinedUserStatuses,
  87. UserStatusNotSupported,
  88. EmojisNotSupported,
  89. CouldNotSetUserStatus,
  90. CouldNotClearMessage
  91. };
  92. Q_ENUM(Error)
  93. explicit UserStatusConnector(QObject *parent = nullptr);
  94. ~UserStatusConnector() override;
  95. virtual void fetchUserStatus() = 0;
  96. virtual void fetchPredefinedStatuses() = 0;
  97. virtual void setUserStatus(const UserStatus &userStatus) = 0;
  98. virtual void clearMessage() = 0;
  99. [[nodiscard]] virtual UserStatus userStatus() const = 0;
  100. signals:
  101. void userStatusFetched(const OCC::UserStatus &userStatus);
  102. void predefinedStatusesFetched(const QVector<OCC::UserStatus> &statuses);
  103. void userStatusSet();
  104. void serverUserStatusChanged();
  105. void messageCleared();
  106. void error(OCC::UserStatusConnector::Error error);
  107. };
  108. }
  109. Q_DECLARE_METATYPE(OCC::UserStatusConnector *)
  110. Q_DECLARE_METATYPE(OCC::UserStatus)