Fix crash on quit in idle state.

This commit is contained in:
John Preston 2021-05-18 14:16:04 +04:00
parent 9144f4ea7b
commit f7454a4284
3 changed files with 18 additions and 7 deletions

View File

@ -867,7 +867,11 @@ void Updates::updateOnline() {
} }
bool Updates::isIdle() const { bool Updates::isIdle() const {
return _isIdle; return _isIdle.current();
}
rpl::producer<bool> Updates::isIdleValue() const {
return _isIdle.value();
} }
void Updates::updateOnline(bool gotOtherOffline) { void Updates::updateOnline(bool gotOtherOffline) {
@ -881,7 +885,7 @@ void Updates::updateOnline(bool gotOtherOffline) {
const auto idle = crl::now() - Core::App().lastNonIdleTime(); const auto idle = crl::now() - Core::App().lastNonIdleTime();
if (idle >= config.offlineIdleTimeout) { if (idle >= config.offlineIdleTimeout) {
isOnline = false; isOnline = false;
if (!_isIdle) { if (!isIdle()) {
_isIdle = true; _isIdle = true;
_idleFinishTimer.callOnce(900); _idleFinishTimer.callOnce(900);
} }
@ -932,10 +936,9 @@ void Updates::updateOnline(bool gotOtherOffline) {
void Updates::checkIdleFinish() { void Updates::checkIdleFinish() {
if (crl::now() - Core::App().lastNonIdleTime() if (crl::now() - Core::App().lastNonIdleTime()
< _session->serverConfig().offlineIdleTimeout) { < _session->serverConfig().offlineIdleTimeout) {
updateOnline();
_idleFinishTimer.cancel(); _idleFinishTimer.cancel();
_isIdle = false; _isIdle = false;
updateOnline();
App::wnd()->checkHistoryActivation();
} else { } else {
_idleFinishTimer.callOnce(900); _idleFinishTimer.callOnce(900);
} }

View File

@ -40,6 +40,7 @@ public:
void updateOnline(); void updateOnline();
[[nodiscard]] bool isIdle() const; [[nodiscard]] bool isIdle() const;
[[nodiscard]] rpl::producer<bool> isIdleValue() const;
void checkIdleFinish(); void checkIdleFinish();
bool lastWasOnline() const; bool lastWasOnline() const;
crl::time lastSetOnline() const; crl::time lastSetOnline() const;
@ -185,7 +186,7 @@ private:
base::Timer _idleFinishTimer; base::Timer _idleFinishTimer;
crl::time _lastSetOnline = 0; crl::time _lastSetOnline = 0;
bool _lastWasOnline = false; bool _lastWasOnline = false;
bool _isIdle = false; rpl::variable<bool> _isIdle = false;
rpl::lifetime _lifetime; rpl::lifetime _lifetime;

View File

@ -82,7 +82,7 @@ void Controller::showAccount(not_null<Main::Account*> account) {
_sessionController->filtersMenuChanged( _sessionController->filtersMenuChanged(
) | rpl::start_with_next([=] { ) | rpl::start_with_next([=] {
sideBarChanged(); sideBarChanged();
}, session->lifetime()); }, _sessionController->lifetime());
} }
if (session && session->settings().dialogsFiltersEnabled()) { if (session && session->settings().dialogsFiltersEnabled()) {
_sessionController->toggleFiltersMenu(true); _sessionController->toggleFiltersMenu(true);
@ -93,11 +93,18 @@ void Controller::showAccount(not_null<Main::Account*> account) {
if (session) { if (session) {
setupMain(); setupMain();
session->updates().isIdleValue(
) | rpl::filter([=](bool idle) {
return !idle;
}) | rpl::start_with_next([=] {
widget()->checkHistoryActivation();
}, _sessionController->lifetime());
session->termsLockValue( session->termsLockValue(
) | rpl::start_with_next([=] { ) | rpl::start_with_next([=] {
checkLockByTerms(); checkLockByTerms();
_widget.updateGlobalMenu(); _widget.updateGlobalMenu();
}, _lifetime); }, _sessionController->lifetime());
} else { } else {
setupIntro(); setupIntro();
_widget.updateGlobalMenu(); _widget.updateGlobalMenu();