From 760627003f353a1552e8e94b050698b2c233bd5a Mon Sep 17 00:00:00 2001 From: wangyix Date: Wed, 11 Jun 2014 11:11:04 -0700 Subject: [PATCH 1/8] killNode() to nodeKilled() --- libraries/networking/src/ReceivedPacketProcessor.cpp | 4 ++-- libraries/networking/src/ReceivedPacketProcessor.h | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/libraries/networking/src/ReceivedPacketProcessor.cpp b/libraries/networking/src/ReceivedPacketProcessor.cpp index d556e8a059..e919017128 100644 --- a/libraries/networking/src/ReceivedPacketProcessor.cpp +++ b/libraries/networking/src/ReceivedPacketProcessor.cpp @@ -50,6 +50,6 @@ bool ReceivedPacketProcessor::process() { return isStillRunning(); // keep running till they terminate us } -void ReceivedPacketProcessor::killNode(const SharedNodePointer& node) { - _nodePacketCounts.remove(node->getUUID()); +void ReceivedPacketProcessor::nodeKilled(const SharedNodePointer& node) { + int numRemoved = _nodePacketCounts.remove(node->getUUID()); } diff --git a/libraries/networking/src/ReceivedPacketProcessor.h b/libraries/networking/src/ReceivedPacketProcessor.h index 80fe75aaa7..23303cbb55 100644 --- a/libraries/networking/src/ReceivedPacketProcessor.h +++ b/libraries/networking/src/ReceivedPacketProcessor.h @@ -42,7 +42,7 @@ public: int packetsToProcessCount() const { return _packets.size(); } public slots: - void killNode(const SharedNodePointer& node); + void nodeKilled(const SharedNodePointer& node); protected: /// Callback for processing of recieved packets. Implement this to process the incoming packets. From decd6109fbda6682d97ae23432bfe9b2ac5c4cd8 Mon Sep 17 00:00:00 2001 From: wangyix Date: Wed, 11 Jun 2014 11:57:54 -0700 Subject: [PATCH 2/8] made nodeKilled signatures match --- libraries/networking/src/ReceivedPacketProcessor.cpp | 2 +- libraries/networking/src/ReceivedPacketProcessor.h | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/libraries/networking/src/ReceivedPacketProcessor.cpp b/libraries/networking/src/ReceivedPacketProcessor.cpp index e919017128..59165b45b6 100644 --- a/libraries/networking/src/ReceivedPacketProcessor.cpp +++ b/libraries/networking/src/ReceivedPacketProcessor.cpp @@ -50,6 +50,6 @@ bool ReceivedPacketProcessor::process() { return isStillRunning(); // keep running till they terminate us } -void ReceivedPacketProcessor::nodeKilled(const SharedNodePointer& node) { +void ReceivedPacketProcessor::nodeKilled(SharedNodePointer node) { int numRemoved = _nodePacketCounts.remove(node->getUUID()); } diff --git a/libraries/networking/src/ReceivedPacketProcessor.h b/libraries/networking/src/ReceivedPacketProcessor.h index 23303cbb55..94ad2d9c41 100644 --- a/libraries/networking/src/ReceivedPacketProcessor.h +++ b/libraries/networking/src/ReceivedPacketProcessor.h @@ -42,7 +42,7 @@ public: int packetsToProcessCount() const { return _packets.size(); } public slots: - void nodeKilled(const SharedNodePointer& node); + void nodeKilled(SharedNodePointer node); protected: /// Callback for processing of recieved packets. Implement this to process the incoming packets. From 2080cc3dee753d072b005bbac3e868ab8bd0716a Mon Sep 17 00:00:00 2001 From: wangyix Date: Wed, 11 Jun 2014 11:59:15 -0700 Subject: [PATCH 3/8] removed debug variable --- libraries/networking/src/ReceivedPacketProcessor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/ReceivedPacketProcessor.cpp b/libraries/networking/src/ReceivedPacketProcessor.cpp index 59165b45b6..32fc4e26f3 100644 --- a/libraries/networking/src/ReceivedPacketProcessor.cpp +++ b/libraries/networking/src/ReceivedPacketProcessor.cpp @@ -51,5 +51,5 @@ bool ReceivedPacketProcessor::process() { } void ReceivedPacketProcessor::nodeKilled(SharedNodePointer node) { - int numRemoved = _nodePacketCounts.remove(node->getUUID()); + _nodePacketCounts.remove(node->getUUID()); } From a8c97800048043e4908743601ae95b3c92fe80d9 Mon Sep 17 00:00:00 2001 From: wangyix Date: Wed, 11 Jun 2014 12:13:27 -0700 Subject: [PATCH 4/8] updated connect() to qt5 format --- interface/src/Application.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 2b3256141e..a5cb6a0c12 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -244,7 +244,7 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer))); connect(nodeList, SIGNAL(nodeAdded(SharedNodePointer)), &_voxels, SLOT(nodeAdded(SharedNodePointer))); connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), &_voxels, SLOT(nodeKilled(SharedNodePointer))); - connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), &_octreeProcessor, SLOT(nodeKilled(SharedNodePointer))); + connect(NodeList::getInstance(), &NodeList::nodeKilled, &_octreeProcessor, &ReceivedPacketProcessor::nodeKilled); connect(nodeList, &NodeList::uuidChanged, this, &Application::updateWindowTitle); connect(nodeList, SIGNAL(uuidChanged(const QUuid&)), _myAvatar, SLOT(setSessionUUID(const QUuid&))); connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset); From 82bf6002e2c3c0aaa471b8f7f5233e645cfe5174 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Wed, 11 Jun 2014 14:57:05 -0700 Subject: [PATCH 5/8] only display the OAuthWebViewHandler when we need to ask user for authorization --- interface/src/Menu.cpp | 9 ++++++--- interface/src/Menu.h | 2 ++ interface/src/ui/OAuthWebViewHandler.cpp | 17 ++++++++++++++++- interface/src/ui/OAuthWebViewHandler.h | 1 + 4 files changed, 25 insertions(+), 4 deletions(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index f791d20588..c2b6c293b9 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -103,6 +103,7 @@ Menu::Menu() : _fastFPSAverage(ONE_SECOND_OF_FRAMES), _loginAction(NULL), _preferencesDialog(NULL), + _loginDialog(NULL), _snapshotsLocation() { Application *appInstance = Application::getInstance(); @@ -913,9 +914,11 @@ void sendFakeEnterEvent() { const float DIALOG_RATIO_OF_WINDOW = 0.30f; void Menu::loginForCurrentDomain() { - LoginDialog* loginDialog = new LoginDialog(Application::getInstance()->getWindow()); - loginDialog->show(); - loginDialog->resizeAndPosition(false); + if (!_loginDialog) { + _loginDialog = new LoginDialog(Application::getInstance()->getWindow()); + _loginDialog->show(); + _loginDialog->resizeAndPosition(false); + } } void Menu::editPreferences() { diff --git a/interface/src/Menu.h b/interface/src/Menu.h index 69015a938b..a0fafc0514 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -27,6 +27,7 @@ #include "ui/PreferencesDialog.h" #include "ui/ChatWindow.h" #include "ui/JSConsole.h" +#include "ui/LoginDialog.h" #include "ui/ScriptEditorWindow.h" const float ADJUST_LOD_DOWN_FPS = 40.0; @@ -270,6 +271,7 @@ private: QPointer _preferencesDialog; QPointer _attachmentsDialog; QPointer _animationsDialog; + QPointer _loginDialog; QAction* _chatAction; QString _snapshotsLocation; }; diff --git a/interface/src/ui/OAuthWebViewHandler.cpp b/interface/src/ui/OAuthWebViewHandler.cpp index 5415d5d9c3..5b4431bd0f 100644 --- a/interface/src/ui/OAuthWebViewHandler.cpp +++ b/interface/src/ui/OAuthWebViewHandler.cpp @@ -103,8 +103,9 @@ void OAuthWebViewHandler::displayWebviewForAuthorizationURL(const QUrl& authoriz codedAuthorizationURL.setQuery(authQuery); } + connect(_activeWebView.data(), &QWebView::urlChanged, this, &OAuthWebViewHandler::handleURLChanged); + _activeWebView->load(codedAuthorizationURL); - _activeWebView->show(); connect(_activeWebView->page()->networkAccessManager(), &QNetworkAccessManager::sslErrors, this, &OAuthWebViewHandler::handleSSLErrors); @@ -137,3 +138,17 @@ void OAuthWebViewHandler::handleLoadFinished(bool success) { void OAuthWebViewHandler::handleWebViewDestroyed(QObject* destroyedObject) { _webViewRedisplayTimer.restart(); } + +void OAuthWebViewHandler::handleURLChanged(const QUrl& url) { + // check if this is the authorization screen - if it is then we need to show the OAuthWebViewHandler + const QString ACCESS_TOKEN_URL_REGEX_STRING = "redirect_uri=[\\w:\\/\\.]+&access_token="; + QRegExp accessTokenRegex(ACCESS_TOKEN_URL_REGEX_STRING); + + if (accessTokenRegex.indexIn(url.toString()) != -1) { + _activeWebView->show(); + } else if (url.toString() == DEFAULT_NODE_AUTH_URL.toString() + "/login") { + // this is a login request - we're going to close the webview and signal the AccountManager that we need a login + _activeWebView->close(); + AccountManager::getInstance().checkAndSignalForAccessToken(); + } +} diff --git a/interface/src/ui/OAuthWebViewHandler.h b/interface/src/ui/OAuthWebViewHandler.h index 3a30705f88..8f0c01c90d 100644 --- a/interface/src/ui/OAuthWebViewHandler.h +++ b/interface/src/ui/OAuthWebViewHandler.h @@ -32,6 +32,7 @@ private slots: void handleSSLErrors(QNetworkReply* networkReply, const QList& errorList); void handleLoadFinished(bool success); void handleWebViewDestroyed(QObject* destroyedObject); + void handleURLChanged(const QUrl& url); private: QPointer _activeWebView; QElapsedTimer _webViewRedisplayTimer; From ac0b037f0f8398fc97efbe187dd50d845e3cad44 Mon Sep 17 00:00:00 2001 From: wangyix Date: Wed, 11 Jun 2014 15:25:00 -0700 Subject: [PATCH 6/8] removed connect(); put call into Application::nodeKilled OctreePacketReceiver::nodeKilled() doesn't get called when NodeList::nodeKilled() is emitted for some unknown reason --- interface/src/Application.cpp | 6 +++++- libraries/networking/src/LimitedNodeList.cpp | 1 + libraries/networking/src/ReceivedPacketProcessor.cpp | 6 +++++- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index a5cb6a0c12..7a7d7c10f8 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -244,7 +244,6 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) : connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), SLOT(nodeKilled(SharedNodePointer))); connect(nodeList, SIGNAL(nodeAdded(SharedNodePointer)), &_voxels, SLOT(nodeAdded(SharedNodePointer))); connect(nodeList, SIGNAL(nodeKilled(SharedNodePointer)), &_voxels, SLOT(nodeKilled(SharedNodePointer))); - connect(NodeList::getInstance(), &NodeList::nodeKilled, &_octreeProcessor, &ReceivedPacketProcessor::nodeKilled); connect(nodeList, &NodeList::uuidChanged, this, &Application::updateWindowTitle); connect(nodeList, SIGNAL(uuidChanged(const QUuid&)), _myAvatar, SLOT(setSessionUUID(const QUuid&))); connect(nodeList, &NodeList::limitOfSilentDomainCheckInsReached, nodeList, &NodeList::reset); @@ -3249,6 +3248,11 @@ void Application::nodeAdded(SharedNodePointer node) { } void Application::nodeKilled(SharedNodePointer node) { + + // this is here because connecting NodeList::nodeKilled to OctreePacketProcessor::nodeKilled doesn't work: + // OctreePacketProcessor::nodeKilled is not called when NodeList::nodeKilled is emitted for some reason. + _octreeProcessor.nodeKilled(node); + if (node->getType() == NodeType::VoxelServer) { QUuid nodeUUID = node->getUUID(); // see if this is the first we've heard of this node... diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index c0d7941edf..e1babb24ce 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -367,6 +367,7 @@ void LimitedNodeList::killNodeWithUUID(const QUuid& nodeUUID) { NodeHash::iterator LimitedNodeList::killNodeAtHashIterator(NodeHash::iterator& nodeItemToKill) { qDebug() << "Killed" << *nodeItemToKill.value(); emit nodeKilled(nodeItemToKill.value()); +printf("\t\t\t emitting nodeKilled: %s\n", nodeItemToKill.value()->getUUID().toString().toLatin1().data()); return _nodeHash.erase(nodeItemToKill); } diff --git a/libraries/networking/src/ReceivedPacketProcessor.cpp b/libraries/networking/src/ReceivedPacketProcessor.cpp index 32fc4e26f3..28a9397c60 100644 --- a/libraries/networking/src/ReceivedPacketProcessor.cpp +++ b/libraries/networking/src/ReceivedPacketProcessor.cpp @@ -51,5 +51,9 @@ bool ReceivedPacketProcessor::process() { } void ReceivedPacketProcessor::nodeKilled(SharedNodePointer node) { - _nodePacketCounts.remove(node->getUUID()); + lock(); + int numRemoved = _nodePacketCounts.remove(node->getUUID()); + unlock(); + qDebug() << "RPP::killNode *************************************"; + printf("\t\t RPP::killNode: %s killed %d nodes\n", node->getUUID().toString().toLatin1().data(), numRemoved); } From 0601c24b2485370a8e01a7147f9a68ff09f42a23 Mon Sep 17 00:00:00 2001 From: wangyix Date: Wed, 11 Jun 2014 15:26:22 -0700 Subject: [PATCH 7/8] removed debug prints --- libraries/networking/src/LimitedNodeList.cpp | 1 - libraries/networking/src/ReceivedPacketProcessor.cpp | 2 -- 2 files changed, 3 deletions(-) diff --git a/libraries/networking/src/LimitedNodeList.cpp b/libraries/networking/src/LimitedNodeList.cpp index e1babb24ce..c0d7941edf 100644 --- a/libraries/networking/src/LimitedNodeList.cpp +++ b/libraries/networking/src/LimitedNodeList.cpp @@ -367,7 +367,6 @@ void LimitedNodeList::killNodeWithUUID(const QUuid& nodeUUID) { NodeHash::iterator LimitedNodeList::killNodeAtHashIterator(NodeHash::iterator& nodeItemToKill) { qDebug() << "Killed" << *nodeItemToKill.value(); emit nodeKilled(nodeItemToKill.value()); -printf("\t\t\t emitting nodeKilled: %s\n", nodeItemToKill.value()->getUUID().toString().toLatin1().data()); return _nodeHash.erase(nodeItemToKill); } diff --git a/libraries/networking/src/ReceivedPacketProcessor.cpp b/libraries/networking/src/ReceivedPacketProcessor.cpp index 28a9397c60..5513376c65 100644 --- a/libraries/networking/src/ReceivedPacketProcessor.cpp +++ b/libraries/networking/src/ReceivedPacketProcessor.cpp @@ -54,6 +54,4 @@ void ReceivedPacketProcessor::nodeKilled(SharedNodePointer node) { lock(); int numRemoved = _nodePacketCounts.remove(node->getUUID()); unlock(); - qDebug() << "RPP::killNode *************************************"; - printf("\t\t RPP::killNode: %s killed %d nodes\n", node->getUUID().toString().toLatin1().data(), numRemoved); } From 7aef5edb8fcd7f9c2839101f33239eac8743556e Mon Sep 17 00:00:00 2001 From: wangyix Date: Wed, 11 Jun 2014 15:27:24 -0700 Subject: [PATCH 8/8] removed debug var --- libraries/networking/src/ReceivedPacketProcessor.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/libraries/networking/src/ReceivedPacketProcessor.cpp b/libraries/networking/src/ReceivedPacketProcessor.cpp index 5513376c65..3ef518bbc2 100644 --- a/libraries/networking/src/ReceivedPacketProcessor.cpp +++ b/libraries/networking/src/ReceivedPacketProcessor.cpp @@ -52,6 +52,6 @@ bool ReceivedPacketProcessor::process() { void ReceivedPacketProcessor::nodeKilled(SharedNodePointer node) { lock(); - int numRemoved = _nodePacketCounts.remove(node->getUUID()); + _nodePacketCounts.remove(node->getUUID()); unlock(); }