void User::slotRefresh()
{
+ slotRefreshUserStatus();
+
if (checkPushNotificationsAreReady()) {
// we are relying on WebSocket push notifications - ignore refresh attempts from UI
_timeSinceLastCheck[_account.data()].invalidate();
slotRefreshActivities();
}
slotRefreshNotifications();
- _account.data()->fetchUserStatus();
timer.start();
}
}
_activityModel->slotRefreshActivity();
}
+void User::slotRefreshUserStatus() {
+ // TODO: check for _account->account()->capabilities().userStatus()
+ if (_account.data() && _account.data()->isConnected()) {
+ _account.data()->fetchUserStatus();
+ }
+}
+
void User::slotRefreshNotifications()
{
// start a server notification handler if no notification requests
void slotRefreshNotifications();
void slotRefreshActivities();
void slotRefresh();
+ void slotRefreshUserStatus();
void slotRefreshImmediately();
void setNotificationRefreshInterval(std::chrono::milliseconds interval);
void slotRebuildNavigationAppList();
namespace OCC {
+Q_LOGGING_CATEGORY(lcUserStatus, "nextcloud.gui.userstatus", QtInfoMsg)
+
UserStatus::UserStatus(QObject *parent)
: QObject(parent)
, _message("")
_job->start();
}
-void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json)
+void UserStatus::slotFetchUserStatusFinished(const QJsonDocument &json, const int statusCode)
{
- const auto retrievedData = json.object().value("ocs").toObject().value("data").toObject();
+ const QJsonObject defaultValues
+ {
+ {"icon", ""},
+ {"message", ""},
+ {"status", "online"}
+ };
+
+ if (statusCode != 200) {
+ 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();
#ifndef USERSTATUS_H
#define USERSTATUS_H
-#include <QObject>
#include <QPointer>
-#include <QVariant>
-#include <QMetaEnum>
#include "accountfwd.h"
namespace OCC {
+
class JsonApiJob;
class UserStatus : public QObject
QUrl icon() const;
private slots:
- void slotFetchUserStatusFinished(const QJsonDocument &json);
+ void slotFetchUserStatusFinished(const QJsonDocument &json, const int statusCode);
signals:
void fetchUserStatusFinished();
return _capabilities["dav"].toMap()["chunking"].toByteArray() >= "1.0";
}
+bool Capabilities::userStatus() const
+{
+ return _capabilities.contains("notifications") && _capabilities["notifications"].toMap().contains("user-status");
+}
+
PushNotificationTypes Capabilities::availablePushNotifications() const
{
if (!_capabilities.contains("notify_push")) {
bool sharePublicLinkMultiple() const;
bool shareResharing() const;
bool chunkingNg() const;
+ bool userStatus() const;
/// Returns which kind of push notfications are available
PushNotificationTypes availablePushNotifications() const;