-
Notifications
You must be signed in to change notification settings - Fork 665
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Owncloud client wizard setup page doesn't handle back button presses. #3
Conversation
…e of the initial wizard, continued, and then hit the back button on the Install page, the protocol was included in the URL.
containing the protocol when the back button is used. Instead of moving to two separate URL fields, a slot was created and connected to the textChanged signal of the OCUrl LineEdit. This slot simply ensures the protocol is not present.
@@ -147,6 +150,11 @@ void OwncloudSetupPage::slotSecureConChanged( int state ) | |||
} | |||
} | |||
|
|||
void OwncloudSetupPage::handleNewOcUrl(QString ocUrl) | |||
{ | |||
_ui.leUrl->setText(ocUrl.remove(QRegExp(".*://"))); |
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Please always use const QString& in the method signature. Parse into a QUrl and use .toString(QUrl::RemoveScheme) instead of writing custom code.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Danimo, thanks for the feedback! QUrl::RemoveScheme leaves the slashes in there. If you don't like the regex, how would you like me to get rid of those?
Thanks for the patch, I've added a few comments for your consideration. |
…ing(QUrl::RemoveScheme). QUrl::RemoveScheme doesn't remove the slashes, so extra code was thrown in to ensure they were removed if they were present.
I pushed out another commit including the requested changes, Danimo; it requires code to check for the slashes. Please let me know if you desire more changes. |
Owncloud client wizard setup page doesn't handle back button presses.
The Qt HTTP thread calls authenticationRequired (indirectly) using a BlockingQueuedConnection. So when we call invalidateToken from slot connected to this signal and end up calling QNAM::clearAccessCache which waits on the thread for 5 seconds Backtraces: Qt HTTP thread: #0 0x00007ffff20c707f in pthread_cond_wait@@GLIBC_2.3.2 () #1 0x00007ffff43f0c0b in QWaitConditionPrivate::wait #2 QWaitCondition::wait #3 0x00007ffff43ea06b in QSemaphore::acquire #4 0x00007ffff45dcf6f in QMetaObject::activate [...] #9 0x00007ffff45dd607 in QMetaObject::activate #10 0x00007ffff4edbaf7 in QHttpNetworkReply::authenticationRequired #11 0x00007ffff4e0b2b4 in QHttpNetworkConnectionPrivate::handleAuthenticateChallenge #12 0x00007ffff4e10753 in QHttpNetworkConnectionChannel::handleStatus #13 0x00007ffff4e11cc9 in QHttpNetworkConnectionChannel::allDone #14 0x00007ffff4e14605 in QHttpProtocolHandler::_q_receiveReply Main Thread: #0 0x00007ffff20c7428 in pthread_cond_timedwait@@GLIBC_2.3.2 () #1 0x00007ffff43f0b56 in QWaitConditionPrivate::wait_relative (time=5000, this=0x136c580) #2 QWaitConditionPrivate::wait (time=5000, this=0x136c580) #3 QWaitCondition::wait (this=this@entry=0x136c788, mutex=mutex@entry=0x136c760, time=time@entry=5000) #4 0x00007ffff43efa6e in QThread::wait (this=<optimized out>, time=time@entry=5000) #5 0x00007ffff4e1edd3 in QNetworkAccessManagerPrivate::clearCache #6 0x00007ffff7b6fb03 in OCC::HttpCredentials::invalidateToken() #7 0x000000000057adb4 in OCC::AccountState::slotInvalidCredentials() #8 0x000000000057ac76 in OCC::AccountState::slotConnectionValidatorResult(OCC::ConnectionValidator::Status, QStringList const&) () #9 0x00000000005ab45c in OCC::AccountState::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) #10 0x00007ffff45dcd30 in QMetaObject::activate #11 0x00007ffff7b78671 in OCC::ConnectionValidator::connectionResult(OCC::ConnectionValidator::Status, QStringList) () #12 0x00007ffff7ae2514 in OCC::ConnectionValidator::reportResult(OCC::ConnectionValidator::Status) () #13 0x00007ffff7ae39b7 in OCC::ConnectionValidator::slotAuthFailed(QNetworkReply*) () #14 0x00007ffff7b784a9 in OCC::ConnectionValidator::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () #15 0x00007ffff45dcd30 in QMetaObject::activate #16 0x00007ffff7b766dc in OCC::AbstractNetworkJob::networkError(QNetworkReply*) #17 0x00007ffff7af9f6e in OCC::AbstractNetworkJob::slotFinished() #18 0x00007ffff7b7654d in OCC::AbstractNetworkJob::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () #20 0x00007ffff45dd607 in QMetaObject::activate #21 0x00007ffff4edd143 in QNetworkReply::finished #22 0x00007ffff4e3fec7 in QNetworkReplyHttpImplPrivate::finished #23 0x00007ffff4e41818 in QNetworkReplyHttpImpl::close #24 0x00007ffff7b7047b in OCC::HttpCredentials::slotAuthentication(QNetworkReply*, QAuthenticator*) () #25 0x00007ffff7b79092 in OCC::HttpCredentials::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () #27 0x00007ffff45dd607 in QMetaObject::activate #28 0x00007ffff4e1d6fb in QNetworkAccessManager::authenticationRequired #29 0x00007ffff4e1ea07 in QNetworkAccessManagerPrivate::authenticationRequired #30 0x00007ffff4e3c784 in QNetworkReplyHttpImplPrivate::httpAuthenticationRequired Another case of Main Thread: #5 0x00007ffff4e1edd3 in QNetworkAccessManagerPrivate::clearCache #6 0x00007ffff7b6fb03 in OCC::HttpCredentials::invalidateToken() #7 0x000000000057b1e4 in OCC::AccountState::slotInvalidCredentials() () #8 0x00000000005abb8a in OCC::AccountState::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () #9 0x00007ffff45dcd30 in QMetaObject::activate #10 0x00007ffff7b76ed5 in OCC::Account::invalidCredentials() () #11 0x00007ffff7ad55f5 in OCC::Account::handleInvalidCredentials() #12 0x00007ffff7afa69a in OCC::AbstractNetworkJob::slotFinished() #13 0x00007ffff7b7654d in OCC::AbstractNetworkJob::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () #15 0x00007ffff45dd607 in QMetaObject::activate #16 0x00007ffff4edd143 in QNetworkReply::finished #17 0x00007ffff4e3fec7 in QNetworkReplyHttpImplPrivate::finished #18 0x00007ffff4e41818 in QNetworkReplyHttpImpl::close #19 0x00007ffff7b7047b in OCC::HttpCredentials::slotAuthentication(QNetworkReply*, QAuthenticator*) () #20 0x00007ffff7b79092 in OCC::HttpCredentials::qt_static_metacall(QObject*, QMetaObject::Call, int, void**) () #22 0x00007ffff45dd607 in QMetaObject::activate #23 0x00007ffff4e1d6fb in QNetworkAccessManager::authenticationRequired
This patch fixes the inclusion of the protocol in the wizard's Setup Page's URL if the user revisits it via the back button on a subsequent page.
Here's the use case: User enters ownCloud address into URL on setup page, along with authentication. User hits Next, but the Install page can't connect since the wrong address was entered. The user hits the Back button to fix it, and now the URL on the setup page includes the protocol (http:// or https://). If the protocol is left, another protocol string is prepended when the user hits Next again, and so on.