mirror of
https://github.com/nextcloud/desktop.git
synced 2024-11-23 05:25:50 +03:00
HttpCredentials: Do not re-enter the event loop
https://sentry.io/owncloud/desktop-win-and-mac/issues/777907931/ mention a crash in OCC::HttpCredentialsGui::showDialog One possible explaination is that this is caused by re-entring the event loop. So don't do that.
This commit is contained in:
parent
51d2e41d8b
commit
c31d3f277f
1 changed files with 19 additions and 19 deletions
|
@ -56,9 +56,7 @@ void HttpCredentialsGui::askFromUserAsync()
|
|||
_asyncAuth->start();
|
||||
emit authorisationLinkChanged();
|
||||
} else if (type == DetermineAuthTypeJob::Basic) {
|
||||
// Show the dialog
|
||||
// We will re-enter the event loop, so better wait the next iteration
|
||||
QMetaObject::invokeMethod(this, "showDialog", Qt::QueuedConnection);
|
||||
showDialog();
|
||||
} else {
|
||||
// Shibboleth?
|
||||
qCWarning(lcHttpCredentialsGui) << "Bad http auth type:" << type;
|
||||
|
@ -73,8 +71,7 @@ void HttpCredentialsGui::asyncAuthResult(OAuth::Result r, const QString &user,
|
|||
{
|
||||
switch (r) {
|
||||
case OAuth::NotSupported:
|
||||
// We will re-enter the event loop, so better wait the next iteration
|
||||
QMetaObject::invokeMethod(this, "showDialog", Qt::QueuedConnection);
|
||||
showDialog();
|
||||
_asyncAuth.reset(nullptr);
|
||||
return;
|
||||
case OAuth::Error:
|
||||
|
@ -116,24 +113,27 @@ void HttpCredentialsGui::showDialog()
|
|||
+ QLatin1String("<br>");
|
||||
}
|
||||
|
||||
QInputDialog dialog;
|
||||
dialog.setWindowTitle(tr("Enter Password"));
|
||||
dialog.setLabelText(msg);
|
||||
dialog.setTextValue(_previousPassword);
|
||||
dialog.setTextEchoMode(QLineEdit::Password);
|
||||
if (auto *dialogLabel = dialog.findChild<QLabel *>()) {
|
||||
QInputDialog *dialog = new QInputDialog();
|
||||
dialog->setAttribute(Qt::WA_DeleteOnClose, true);
|
||||
dialog->setWindowTitle(tr("Enter Password"));
|
||||
dialog->setLabelText(msg);
|
||||
dialog->setTextValue(_previousPassword);
|
||||
dialog->setTextEchoMode(QLineEdit::Password);
|
||||
if (auto *dialogLabel = dialog->findChild<QLabel *>()) {
|
||||
dialogLabel->setOpenExternalLinks(true);
|
||||
dialogLabel->setTextFormat(Qt::RichText);
|
||||
}
|
||||
|
||||
bool ok = dialog.exec();
|
||||
if (ok) {
|
||||
_password = dialog.textValue();
|
||||
_refreshToken.clear();
|
||||
_ready = true;
|
||||
persist();
|
||||
}
|
||||
emit asked();
|
||||
dialog->open();
|
||||
connect(dialog, &QDialog::finished, this, [this, dialog](int result) {
|
||||
if (result == QDialog::Accepted) {
|
||||
_password = dialog->textValue();
|
||||
_refreshToken.clear();
|
||||
_ready = true;
|
||||
persist();
|
||||
}
|
||||
emit asked();
|
||||
});
|
||||
}
|
||||
|
||||
QString HttpCredentialsGui::requestAppPasswordText(const Account *account)
|
||||
|
|
Loading…
Reference in a new issue