@@ -417,39 +417,36 @@ std::shared_ptr<SyncUser> SyncManager::get_current_user() const
417417 return cur_user_ident ? get_user_for_identity (*cur_user_ident) : nullptr ;
418418}
419419
420- void SyncManager::log_out_user (const std::string& user_id )
420+ void SyncManager::log_out_user (const SyncUser& user )
421421{
422422 util::CheckedLockGuard lock (m_user_mutex);
423423
424424 // Move this user to the end of the vector
425- if (m_users.size () > 1 ) {
426- auto it = std::find_if (m_users.begin (), m_users.end (), [user_id](const auto & user) {
427- return user->identity () == user_id;
428- });
425+ auto user_pos = std::partition (m_users.begin (), m_users.end (), [&](auto & u) {
426+ return u.get () != &user;
427+ });
429428
430- if (it != m_users.end ())
431- std::rotate (it, it + 1 , m_users. end ()) ;
432- }
429+ auto active_user = std::find_if ( m_users.begin (), user_pos, []( auto & u) {
430+ return u-> state () == SyncUser::State::LoggedIn ;
431+ });
433432
434433 util::CheckedLockGuard fs_lock (m_file_system_mutex);
435- bool was_active = ( m_current_user && m_current_user-> identity () == user_id) ||
436- (m_metadata_manager && m_metadata_manager->get_current_user_identity () == user_id );
434+ bool was_active = m_current_user. get () == &user ||
435+ (m_metadata_manager && m_metadata_manager->get_current_user_identity () == user. identity () );
437436 if (!was_active)
438437 return ;
439438
440439 // Set the current active user to the next logged in user, or null if none
441- for (auto & user : m_users) {
442- if (user->state () == SyncUser::State::LoggedIn) {
443- if (m_metadata_manager)
444- m_metadata_manager->set_current_user_identity (user->identity ());
445- m_current_user = user;
446- return ;
447- }
440+ if (active_user != user_pos) {
441+ m_current_user = *active_user;
442+ if (m_metadata_manager)
443+ m_metadata_manager->set_current_user_identity ((*active_user)->identity ());
444+ }
445+ else {
446+ m_current_user = nullptr ;
447+ if (m_metadata_manager)
448+ m_metadata_manager->set_current_user_identity (" " );
448449 }
449-
450- if (m_metadata_manager)
451- m_metadata_manager->set_current_user_identity (" " );
452- m_current_user = nullptr ;
453450}
454451
455452void SyncManager::set_current_user (const std::string& user_id)
0 commit comments