]> dgit.raspbian.org Git - nextcloud-desktop.git/commitdiff
ActivityListModel now keeps track of the account connection state
authorMatthieu Gallien <matthieu.gallien@nextcloud.com>
Tue, 11 Oct 2022 20:16:11 +0000 (22:16 +0200)
committerMatthieu Gallien <matthieu_gallien@yahoo.fr>
Wed, 28 Jun 2023 09:21:50 +0000 (11:21 +0200)
Signed-off-by: Matthieu Gallien <matthieu.gallien@nextcloud.com>
src/gui/tray/activitylistmodel.cpp
src/gui/tray/activitylistmodel.h

index 6dddc66124c038a4f4c5ed3716e72107a1f12a97..4ff5595a807b96ac5cb91ffccdf887fa6e24851a 100644 (file)
@@ -48,6 +48,11 @@ ActivityListModel::ActivityListModel(AccountState *accountState,
     : QAbstractListModel(parent)
     , _accountState(accountState)
 {
+    if (_accountState) {
+        connect(_accountState, &AccountState::stateChanged,
+                this, &ActivityListModel::accountStateChanged);
+        _accountStateWasConnected = false;
+    }
 }
 
 QHash<int, QByteArray> ActivityListModel::roleNames() const
@@ -90,8 +95,17 @@ QHash<int, QByteArray> ActivityListModel::roleNames() const
 
 void ActivityListModel::setAccountState(AccountState *state)
 {
+    if (_accountState == state) {
+        return;
+    }
+
     _accountState = state;
     Q_EMIT accountStateChanged();
+    if (_accountState) {
+        connect(_accountState, &AccountState::stateChanged,
+                this, &ActivityListModel::accountStateHasChanged);
+        _accountStateWasConnected = false;
+    }
 }
 
 void ActivityListModel::setCurrentItem(const int currentItem)
@@ -558,6 +572,25 @@ void ActivityListModel::addEntriesToActivityList(const ActivityList &activityLis
     setHasSyncConflicts(conflictsFound);
 }
 
+void ActivityListModel::accountStateHasChanged()
+{
+    if (!_accountState) {
+        return;
+    }
+
+    if (_accountStateWasConnected == _accountState->isConnected()) {
+        return;
+    }
+
+    if (!_accountState->isConnected()) {
+        _durationSinceDisconnection.start();
+    } else {
+        _durationSinceDisconnection.invalidate();
+    }
+
+    _accountStateWasConnected = _accountState->isConnected();
+}
+
 void ActivityListModel::addErrorToActivityList(const Activity &activity, const ErrorType type)
 {
     qCDebug(lcActivity) << "Error successfully added to the notification list: " << type << activity._message << activity._subject << activity._syncResultStatus << activity._syncFileItemStatus;
index ba75bb5c6165286044df9b71528c96cd3ca7a907..6c88901ff30b852bc9f8bd5a56260cf9fdcc7794 100644 (file)
@@ -163,6 +163,7 @@ protected slots:
 
 private slots:
     void addEntriesToActivityList(const OCC::ActivityList &activityList);
+    void accountStateHasChanged();
 
 private:
     static QVariantList convertLinksToMenuEntries(const Activity &activity);
@@ -209,6 +210,10 @@ private:
 
     bool _hasSyncConflicts = false;
 
+    bool _accountStateWasConnected = false;
+
+    QElapsedTimer _durationSinceDisconnection;
+
     static constexpr quint32 MaxActionButtons = 3;
 };
 }