diff --git a/src/gui/tray/activitylistmodel.cpp b/src/gui/tray/activitylistmodel.cpp index 6dddc66124..4ff5595a80 100644 --- a/src/gui/tray/activitylistmodel.cpp +++ b/src/gui/tray/activitylistmodel.cpp @@ -48,6 +48,11 @@ ActivityListModel::ActivityListModel(AccountState *accountState, : QAbstractListModel(parent) , _accountState(accountState) { + if (_accountState) { + connect(_accountState, &AccountState::stateChanged, + this, &ActivityListModel::accountStateChanged); + _accountStateWasConnected = false; + } } QHash ActivityListModel::roleNames() const @@ -90,8 +95,17 @@ QHash 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; diff --git a/src/gui/tray/activitylistmodel.h b/src/gui/tray/activitylistmodel.h index ba75bb5c61..6c88901ff3 100644 --- a/src/gui/tray/activitylistmodel.h +++ b/src/gui/tray/activitylistmodel.h @@ -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; }; }