diff --git a/src/accountmanager.cpp b/src/accountmanager.cpp index 61f2105d6..dc713f06d 100644 --- a/src/accountmanager.cpp +++ b/src/accountmanager.cpp @@ -83,12 +83,14 @@ AccountManager::AccountManager() if (user) { debug::Log("[AccountManager:currentUsernameChanged] User successfully updated to {}", newUsername); - // XXX: Should we set the user regardless if the username is found or not? - // I can see the logic in setting it to nullptr if the `currentUsername` value has been - // set to "" or an invalid username this->Twitch.currentUser = user; - this->Twitch.userChanged.invoke(); + } else { + debug::Log( + "[AccountManager:currentUsernameChanged] User successfully updated to anonymous"); + this->Twitch.currentUser = this->Twitch.anonymousUser; } + + this->Twitch.userChanged.invoke(); }); } @@ -124,10 +126,14 @@ void AccountManager::load() auto currentUser = this->Twitch.findUserByUsername( QString::fromStdString(this->Twitch.currentUsername.getValue())); + if (currentUser) { this->Twitch.currentUser = currentUser; - this->Twitch.userChanged.invoke(); + } else { + this->Twitch.currentUser = this->Twitch.anonymousUser; } + + this->Twitch.userChanged.invoke(); } } // namespace chatterino diff --git a/src/widgets/settingsdialog.cpp b/src/widgets/settingsdialog.cpp index da6f44fb9..efa879324 100644 --- a/src/widgets/settingsdialog.cpp +++ b/src/widgets/settingsdialog.cpp @@ -129,19 +129,29 @@ QVBoxLayout *SettingsDialog::createAccountsTab() // listview auto listWidget = new QListWidget(this); + static QString anonUsername(" - anonymous - "); + + listWidget->addItem(anonUsername); + for (const auto &userName : AccountManager::getInstance().Twitch.getUsernames()) { listWidget->addItem(userName); } // Select the currently logged in user if (listWidget->count() > 0) { - const QString ¤tUsername = - AccountManager::getInstance().Twitch.getCurrent()->getUserName(); - for (int i = 0; i < listWidget->count(); ++i) { - QString itemText = listWidget->item(i)->text(); - if (itemText.compare(currentUsername, Qt::CaseInsensitive) == 0) { - listWidget->setCurrentRow(i); - break; + auto currentUser = AccountManager::getInstance().Twitch.getCurrent(); + + if (currentUser->isAnon()) { + listWidget->setCurrentRow(0); + } else { + const QString ¤tUsername = currentUser->getUserName(); + for (int i = 0; i < listWidget->count(); ++i) { + QString itemText = listWidget->item(i)->text(); + + if (itemText.compare(currentUsername, Qt::CaseInsensitive) == 0) { + listWidget->setCurrentRow(i); + break; + } } } } @@ -149,7 +159,11 @@ QVBoxLayout *SettingsDialog::createAccountsTab() QObject::connect(listWidget, &QListWidget::clicked, this, [&, listWidget] { if (!listWidget->selectedItems().isEmpty()) { QString newUsername = listWidget->currentItem()->text(); - AccountManager::getInstance().Twitch.currentUsername = newUsername.toStdString(); + if (newUsername.compare(anonUsername, Qt::CaseInsensitive) == 0) { + AccountManager::getInstance().Twitch.currentUsername = ""; + } else { + AccountManager::getInstance().Twitch.currentUsername = newUsername.toStdString(); + } } });