|
|
@@ -30,16 +30,37 @@ Q_LOGGING_CATEGORY(lcUserStatus, "nextcloud.gui.userstatus", QtInfoMsg)
|
|
|
|
|
|
UserStatus::UserStatus(QObject *parent)
|
|
|
: QObject(parent)
|
|
|
- , _message("")
|
|
|
{
|
|
|
}
|
|
|
|
|
|
UserStatus::Status UserStatus::stringToEnum(const QString &status) const
|
|
|
{
|
|
|
+ // it needs to match the Status enum
|
|
|
+ const QHash<QString, Status> preDefinedStatus{{"online", Status::Online},
|
|
|
+ {"dnd", Status::DoNotDisturb}, //DoNotDisturb
|
|
|
+ {"away", Status::Away},
|
|
|
+ {"offline", Status::Offline},
|
|
|
+ {"invisible", Status::Invisible}};
|
|
|
+
|
|
|
// api should return invisible, dnd,... toLower() it is to make sure
|
|
|
// it matches _preDefinedStatus, otherwise the default is online (0)
|
|
|
- const auto statusEnum = _preDefinedStatus.value(status.isEmpty()? "online" : status.toLower(), 0);
|
|
|
- return static_cast<Status>(statusEnum);
|
|
|
+ const auto statusKey = status.isEmpty() ? QStringLiteral("online") : status.toLower();
|
|
|
+ return preDefinedStatus.value(statusKey, Status::Online);
|
|
|
+}
|
|
|
+
|
|
|
+QString UserStatus::enumToString(Status status) const
|
|
|
+{
|
|
|
+ switch (status) {
|
|
|
+ case Status::Away:
|
|
|
+ return tr("Away");
|
|
|
+ case Status::DoNotDisturb:
|
|
|
+ return tr("Do not disturb");
|
|
|
+ case Status::Invisible:
|
|
|
+ case Status::Offline:
|
|
|
+ return tr("Offline");
|
|
|
+ default:
|
|
|
+ return tr("Online");
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
void UserStatus::fetchUserStatus(AccountPtr account)
|
|
|
@@ -53,10 +74,9 @@ void UserStatus::fetchUserStatus(AccountPtr account)
|
|
|
_job->start();
|
|
|
}
|
|
|
|
|
|
-void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, const int statusCode)
|
|
|
+void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, int statusCode)
|
|
|
{
|
|
|
- const QJsonObject defaultValues
|
|
|
- {
|
|
|
+ const QJsonObject defaultValues {
|
|
|
{"icon", ""},
|
|
|
{"message", ""},
|
|
|
{"status", "online"}
|
|
|
@@ -66,19 +86,13 @@ void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, const in
|
|
|
qCInfo(lcUserStatus) << "Slot fetch UserStatus finished with status code" << statusCode;
|
|
|
qCInfo(lcUserStatus) << "Using then default values as if user has not set any status" << defaultValues;
|
|
|
}
|
|
|
+
|
|
|
const auto retrievedData = json.object().value("ocs").toObject().value("data").toObject(defaultValues);
|
|
|
const auto emoji = retrievedData.value("icon").toString();
|
|
|
const auto message = retrievedData.value("message").toString();
|
|
|
- auto statusString = retrievedData.value("status").toString();
|
|
|
- _status = stringToEnum(statusString);
|
|
|
|
|
|
- // to display it to the user like 'Invisible' instead of 'invisible'
|
|
|
- statusString.replace(0, 1, statusString.at(0).toUpper());
|
|
|
-
|
|
|
- const auto visibleStatusText = message.isEmpty()
|
|
|
- ? _status == DoNotDisturb? tr("Do not disturb")
|
|
|
- : tr(qPrintable(statusString))
|
|
|
- : message;
|
|
|
+ _status = stringToEnum(retrievedData.value("status").toString());
|
|
|
+ const auto visibleStatusText = message.isEmpty() ? enumToString(_status) : message;
|
|
|
|
|
|
_message = QString("%1 %2").arg(emoji, visibleStatusText);
|
|
|
emit fetchUserStatusFinished();
|
|
|
@@ -91,20 +105,18 @@ UserStatus::Status UserStatus::status() const
|
|
|
|
|
|
QString UserStatus::message() const
|
|
|
{
|
|
|
- return _message;
|
|
|
+ return _message.trimmed();
|
|
|
}
|
|
|
|
|
|
QUrl UserStatus::icon() const
|
|
|
{
|
|
|
switch (_status) {
|
|
|
- case Online:
|
|
|
- return Theme::instance()->statusOnlineImageSource();
|
|
|
- case Away:
|
|
|
+ case Status::Away:
|
|
|
return Theme::instance()->statusAwayImageSource();
|
|
|
- case DoNotDisturb:
|
|
|
+ case Status::DoNotDisturb:
|
|
|
return Theme::instance()->statusDoNotDisturbImageSource();
|
|
|
- case Invisible:
|
|
|
- case Offline:
|
|
|
+ case Status::Invisible:
|
|
|
+ case Status::Offline:
|
|
|
return Theme::instance()->statusInvisibleImageSource();
|
|
|
default:
|
|
|
return Theme::instance()->statusOnlineImageSource();
|