From 6165ca658a5cca66439f9fed993402f92760ee05 Mon Sep 17 00:00:00 2001 From: Stephen Birarda Date: Fri, 21 Feb 2014 17:13:22 -0800 Subject: [PATCH] add a logout option to the menu --- interface/src/Menu.cpp | 2 ++ interface/src/Menu.h | 1 + libraries/shared/src/AccountManager.cpp | 18 +++++++++++++++++- libraries/shared/src/AccountManager.h | 2 +- 4 files changed, 21 insertions(+), 2 deletions(-) diff --git a/interface/src/Menu.cpp b/interface/src/Menu.cpp index 3d217eddd0..25a618019d 100644 --- a/interface/src/Menu.cpp +++ b/interface/src/Menu.cpp @@ -91,6 +91,8 @@ Menu::Menu() : 0, this, SLOT(loginForCurrentDomain()))); + + addActionToQMenuAndActionHash(fileMenu, MenuOption::Logout, 0, &AccountManager::getInstance(), SLOT(logout())); addDisabledActionAndSeparator(fileMenu, "Scripts"); addActionToQMenuAndActionHash(fileMenu, MenuOption::LoadScript, Qt::CTRL | Qt::Key_O, appInstance, SLOT(loadDialog())); diff --git a/interface/src/Menu.h b/interface/src/Menu.h index b63bc34160..8560e73a35 100644 --- a/interface/src/Menu.h +++ b/interface/src/Menu.h @@ -245,6 +245,7 @@ namespace MenuOption { const QString LodTools = "LOD Tools"; const QString Log = "Log"; const QString Login = "Login"; + const QString Logout = "Logout"; const QString LookAtVectors = "Look-at Vectors"; const QString MetavoxelEditor = "Metavoxel Editor..."; const QString Metavoxels = "Metavoxels"; diff --git a/libraries/shared/src/AccountManager.cpp b/libraries/shared/src/AccountManager.cpp index 418a5d8cc0..e14f7524b3 100644 --- a/libraries/shared/src/AccountManager.cpp +++ b/libraries/shared/src/AccountManager.cpp @@ -63,6 +63,21 @@ AccountManager::AccountManager() : } } +const QString DOUBLE_SLASH_SUBSTITUTE = "slashslash"; + +void AccountManager::logout() { + // a logout means we want to delete the DataServerAccountInfo we currently have for this URL, in-memory and in file + _accounts.remove(_rootURL); + + QSettings settings; + settings.beginGroup(ACCOUNTS_GROUP); + + QString keyURLString(_rootURL.toString().replace("//", DOUBLE_SLASH_SUBSTITUTE)); + settings.remove(keyURLString); + + qDebug() << "Removed account info for" << _rootURL << "from in-memory accounts and .ini file"; +} + void AccountManager::setRootURL(const QUrl& rootURL) { if (_rootURL != rootURL) { _rootURL = rootURL; @@ -255,7 +270,8 @@ void AccountManager::requestFinished() { // store this access token into the local settings QSettings localSettings; localSettings.beginGroup(ACCOUNTS_GROUP); - localSettings.setValue(rootURL.toString().replace("//", "slashslash"), QVariant::fromValue(freshAccountInfo)); + localSettings.setValue(rootURL.toString().replace("//", DOUBLE_SLASH_SUBSTITUTE), + QVariant::fromValue(freshAccountInfo)); } } else { // TODO: error handling diff --git a/libraries/shared/src/AccountManager.h b/libraries/shared/src/AccountManager.h index 32347b8e5f..8093f28bfb 100644 --- a/libraries/shared/src/AccountManager.h +++ b/libraries/shared/src/AccountManager.h @@ -34,7 +34,6 @@ public: class AccountManager : public QObject { Q_OBJECT public: - static AccountManager& getInstance(); void authenticatedRequest(const QString& path, @@ -55,6 +54,7 @@ public: public slots: void requestFinished(); void requestError(QNetworkReply::NetworkError error); + void logout(); signals: void authenticationRequired(); void receivedAccessToken(const QUrl& rootURL);