diff --git a/Telegram/SourceFiles/main/main_session.cpp b/Telegram/SourceFiles/main/main_session.cpp index 4f9873ea05..fcb1b1064e 100644 --- a/Telegram/SourceFiles/main/main_session.cpp +++ b/Telegram/SourceFiles/main/main_session.cpp @@ -157,6 +157,7 @@ Session::Session( // Can be called only right before ~Session. void Session::finishLogout() { + updates().updateOnline(); unlockTerms(); data().clear(); data().clearLocalStorage(); diff --git a/Telegram/SourceFiles/window/window_controller.cpp b/Telegram/SourceFiles/window/window_controller.cpp index a9da6ff2aa..41eaf073b2 100644 --- a/Telegram/SourceFiles/window/window_controller.cpp +++ b/Telegram/SourceFiles/window/window_controller.cpp @@ -51,9 +51,26 @@ Controller::~Controller() { } void Controller::showAccount(not_null account) { + const auto prevSessionUniqueId = (_account && _account->sessionExists()) + ? _account->session().uniqueId() + : 0; _accountLifetime.destroy(); _account = account; + const auto updateOnlineOfPrevSesssion = crl::guard(_account, [=] { + if (!prevSessionUniqueId) { + return; + } + for (auto &[index, account] : _account->domain().accounts()) { + if (const auto anotherSession = account->maybeSession()) { + if (anotherSession->uniqueId() == prevSessionUniqueId) { + anotherSession->updates().updateOnline(); + return; + } + } + } + }); + _account->sessionValue( ) | rpl::start_with_next([=](Main::Session *session) { const auto was = base::take(_sessionController); @@ -84,6 +101,8 @@ void Controller::showAccount(not_null account) { setupIntro(); _widget.updateGlobalMenu(); } + + crl::on_main(updateOnlineOfPrevSesssion); }, _accountLifetime); }