From 1f2020d1690e3c2691c23adaee147c22ccc1eaa8 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 12 Sep 2014 10:13:33 -0700 Subject: [PATCH] some url handling repairs, move existing error reply handlers to new format --- interface/src/Application.cpp | 66 ++++--------------- interface/src/Application.h | 3 +- interface/src/ModelUploader.cpp | 4 +- interface/src/ModelUploader.h | 2 +- interface/src/ui/ChatMessageArea.cpp | 4 +- libraries/networking/src/AddressManager.cpp | 14 +++- libraries/networking/src/AddressManager.h | 3 +- .../networking/src/UserActivityLogger.cpp | 4 +- libraries/networking/src/UserActivityLogger.h | 2 +- 9 files changed, 37 insertions(+), 65 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 350f0fe1b9..13a94ebebf 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -358,9 +358,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : Particle::setVoxelEditPacketSender(&_voxelEditSender); Particle::setParticleEditPacketSender(&_particleEditSender); - // when -url in command line, teleport to location - urlGoTo(argc, constArgv); - // For now we're going to set the PPS for outbound packets to be super high, this is // probably not the right long term solution. But for now, we're going to do this to // allow you to move a particle around in your hand @@ -405,13 +402,15 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : connect(_window, &MainWindow::windowGeometryChanged, _runningScriptsWidget, &RunningScriptsWidget::setBoundary); + + AddressManager& addressManager = AddressManager::getInstance(); // connect to the domainChangeRequired signal on AddressManager - connect(&AddressManager::getInstance(), &AddressManager::possibleDomainChangeRequired, + connect(&addressManager, &AddressManager::possibleDomainChangeRequired, this, &Application::changeDomainHostname); - //When -url in command line, teleport to location - urlGoTo(argc, constArgv); + // when -url in command line, teleport to location + addressManager.handleUrl(QUrl(getCmdOption(argc, constArgv, "-url"))); // call the OAuthWebviewHandler static getter so that its instance lives in our thread OAuthWebViewHandler::getInstance(); @@ -1066,10 +1065,6 @@ void Application::keyPressEvent(QKeyEvent* event) { case Qt::Key_Equal: _myAvatar->resetSize(); break; - - case Qt::Key_At: -// Menu::getInstance()->goTo(); - break; default: event->ignore(); break; @@ -1323,7 +1318,7 @@ void Application::dropEvent(QDropEvent *event) { SnapshotMetaData* snapshotData = Snapshot::parseSnapshotData(snapshotPath); if (snapshotData) { if (!snapshotData->getDomain().isEmpty()) { -// Menu::getInstance()->goToDomain(snapshotData->getDomain()); + changeDomainHostname(snapshotData->getDomain()); } _myAvatar->setPosition(snapshotData->getLocation()); @@ -3797,14 +3792,6 @@ ScriptEngine* Application::loadScript(const QString& scriptFilename, bool isUser scriptEngine->registerGlobalObject("Overlays", &_overlays); - QScriptValue windowValue = scriptEngine->registerGlobalObject("Window", WindowScriptingInterface::getInstance()); -// scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter, -// LocationScriptingInterface::locationSetter, windowValue); -// -// // register `location` on the global object. -// scriptEngine->registerGetterSetter("location", LocationScriptingInterface::locationGetter, -// LocationScriptingInterface::locationSetter); - scriptEngine->registerGlobalObject("Menu", MenuScriptingInterface::getInstance()); scriptEngine->registerGlobalObject("Settings", SettingsScriptingInterface::getInstance()); scriptEngine->registerGlobalObject("AudioDevice", AudioDeviceScriptingInterface::getInstance()); @@ -3932,6 +3919,13 @@ void Application::uploadAttachment() { uploadModel(ATTACHMENT_MODEL); } +void Application::openUrl(const QUrl& url) { + if (!AddressManager::getInstance().handleUrl(url)) { + // address manager did not handle - ask QDesktopServices to handle + QDesktopServices::openUrl(url); + } +} + void Application::domainSettingsReceived(const QJsonObject& domainSettingsObject) { // from the domain-handler, figure out the satoshi cost per voxel and per meter cubed @@ -4120,37 +4114,3 @@ void Application::takeSnapshot() { } _snapshotShareDialog->show(); } - -void Application::urlGoTo(int argc, const char * constArgv[]) { - //Gets the url (hifi://domain/destination/orientation) - QString customUrl = getCmdOption(argc, constArgv, "-url"); - if(customUrl.startsWith(HIFI_URL_SCHEME + "//")) { - QStringList urlParts = customUrl.remove(0, HIFI_URL_SCHEME.length() + 2).split('/', QString::SkipEmptyParts); - if (urlParts.count() == 1) { - // location coordinates or place name - QString domain = urlParts[0]; -// Menu::goToDomain(domain); - } else if (urlParts.count() > 1) { - // if url has 2 or more parts, the first one is domain name - QString domain = urlParts[0]; - - // second part is either a destination coordinate or - // a place name - QString destination = urlParts[1]; - - // any third part is an avatar orientation. - QString orientation = urlParts.count() > 2 ? urlParts[2] : QString(); - -// Menu::goToDomain(domain); - - // goto either @user, #place, or x-xx,y-yy,z-zz - // style co-ordinate. -// Menu::goTo(destination); - - if (!orientation.isEmpty()) { - // location orientation -// Menu::goToOrientation(orientation); - } - } - } -} diff --git a/interface/src/Application.h b/interface/src/Application.h index ef08cf4ec5..0c50aca4b9 100644 --- a/interface/src/Application.h +++ b/interface/src/Application.h @@ -152,7 +152,6 @@ public: void initializeGL(); void paintGL(); void resizeGL(int width, int height); - void urlGoTo(int argc, const char * constArgv[]); void keyPressEvent(QKeyEvent* event); void keyReleaseEvent(QKeyEvent* event); @@ -352,6 +351,8 @@ public slots: void uploadHead(); void uploadSkeleton(); void uploadAttachment(); + + void openUrl(const QUrl& url); void bumpSettings() { ++_numChangedSettings; } diff --git a/interface/src/ModelUploader.cpp b/interface/src/ModelUploader.cpp index 12a4b145cc..d120f74991 100644 --- a/interface/src/ModelUploader.cpp +++ b/interface/src/ModelUploader.cpp @@ -381,11 +381,11 @@ void ModelUploader::uploadSuccess(const QJsonObject& jsonResponse) { checkS3(); } -void ModelUploader::uploadFailed(QNetworkReply::NetworkError errorCode, const QString& errorString) { +void ModelUploader::uploadFailed(QNetworkReply& errorReply) { if (_progressDialog) { _progressDialog->reject(); } - qDebug() << "Model upload failed (" << errorCode << "): " << errorString; + qDebug() << "Model upload failed (" << errorReply.error() << "): " << errorReply.errorString(); QMessageBox::warning(NULL, QString("ModelUploader::uploadFailed()"), QString("There was a problem with your upload, please try again later."), diff --git a/interface/src/ModelUploader.h b/interface/src/ModelUploader.h index 2596120751..a1c7a27393 100644 --- a/interface/src/ModelUploader.h +++ b/interface/src/ModelUploader.h @@ -43,7 +43,7 @@ private slots: void checkJSON(const QJsonObject& jsonResponse); void uploadUpdate(qint64 bytesSent, qint64 bytesTotal); void uploadSuccess(const QJsonObject& jsonResponse); - void uploadFailed(QNetworkReply::NetworkError errorCode, const QString& errorString); + void uploadFailed(QNetworkReply& errorReply); void checkS3(); void processCheck(); diff --git a/interface/src/ui/ChatMessageArea.cpp b/interface/src/ui/ChatMessageArea.cpp index ab93c7abe9..1dc38e9c94 100644 --- a/interface/src/ui/ChatMessageArea.cpp +++ b/interface/src/ui/ChatMessageArea.cpp @@ -19,8 +19,8 @@ ChatMessageArea::ChatMessageArea(bool useFixedHeight) : QTextBrowser(), _useFixe connect(document()->documentLayout(), &QAbstractTextDocumentLayout::documentSizeChanged, this, &ChatMessageArea::updateLayout); -// connect(this, &QTextBrowser::anchorClicked, -// Menu::getInstance(), &Menu::openUrl); + + connect(this, &QTextBrowser::anchorClicked, Application::getInstance(), &Application::openUrl); } void ChatMessageArea::setHtml(const QString& html) { diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 5e3c7f22be..591a7a3ef6 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -49,6 +49,16 @@ const JSONCallbackParameters& AddressManager::apiCallbackParameters() { return callbackParams; } +bool AddressManager::handleUrl(const QUrl& lookupUrl) { + if (lookupUrl.scheme() == HIFI_URL_SCHEME) { + // we've verified that this is a valid hifi URL - hand it off to handleLookupString + handleLookupString(lookupUrl.toString()); + return true; + } + + return false; +} + void AddressManager::handleLookupString(const QString& lookupString) { // there are 4 possible lookup strings @@ -113,8 +123,8 @@ void AddressManager::handleAPIResponse(const QJsonObject &jsonObject) { } } -void AddressManager::handleAPIError(QNetworkReply::NetworkError error, const QString& message) { - qDebug() << "AddressManager API error -" << error << "-" << message; +void AddressManager::handleAPIError(QNetworkReply& errorReply) { + qDebug() << "AddressManager API error -" << errorReply.error() << "-" << errorReply.errorString(); } const QString GET_PLACE = "/api/v1/places/%1"; diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index f1960b73f7..8ccffe39fa 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -31,11 +31,12 @@ public: static QString pathForPositionAndOrientation(const glm::vec3& position, bool hasOrientation = false, const glm::quat& orientation = EMPTY_QUAT); + bool handleUrl(const QUrl& lookupUrl); void handleLookupString(const QString& lookupString); void attemptPlaceNameLookup(const QString& lookupString); public slots: void handleAPIResponse(const QJsonObject& jsonObject); - void handleAPIError(QNetworkReply::NetworkError error, const QString& message); + void handleAPIError(QNetworkReply& errorReply); signals: void lookupResultIsOffline(); void possibleDomainChangeRequired(const QString& newHostname); diff --git a/libraries/networking/src/UserActivityLogger.cpp b/libraries/networking/src/UserActivityLogger.cpp index e2d3434867..549f02ae3c 100644 --- a/libraries/networking/src/UserActivityLogger.cpp +++ b/libraries/networking/src/UserActivityLogger.cpp @@ -73,8 +73,8 @@ void UserActivityLogger::requestFinished(const QJsonObject& object) { // qDebug() << object; } -void UserActivityLogger::requestError(QNetworkReply::NetworkError error,const QString& string) { - qDebug() << error << ": " << string; +void UserActivityLogger::requestError(QNetworkReply& errorReply) { + qDebug() << errorReply.error() << "-" << errorReply.errorString(); } void UserActivityLogger::launch(QString applicationVersion) { diff --git a/libraries/networking/src/UserActivityLogger.h b/libraries/networking/src/UserActivityLogger.h index 7e8abe9fb2..1bd966d632 100644 --- a/libraries/networking/src/UserActivityLogger.h +++ b/libraries/networking/src/UserActivityLogger.h @@ -40,7 +40,7 @@ public slots: private slots: void requestFinished(const QJsonObject& object); - void requestError(QNetworkReply::NetworkError error,const QString& string); + void requestError(QNetworkReply& errorReply); private: UserActivityLogger();