diff --git a/interface/src/Application.cpp b/interface/src/Application.cpp index 6988585889..7adde0e406 100644 --- a/interface/src/Application.cpp +++ b/interface/src/Application.cpp @@ -154,7 +154,6 @@ #include "scripting/Audio.h" #include "networking/CloseEventSender.h" #include "scripting/TestScriptingInterface.h" -#include "scripting/AccountScriptingInterface.h" #include "scripting/AssetMappingsScriptingInterface.h" #include "scripting/ClipboardScriptingInterface.h" #include "scripting/DesktopScriptingInterface.h" @@ -2372,7 +2371,7 @@ void Application::initializeUi() { surfaceContext->setContextProperty("SoundCache", DependencyManager::get().data()); surfaceContext->setContextProperty("InputConfiguration", DependencyManager::get().data()); - surfaceContext->setContextProperty("Account", AccountScriptingInterface::getInstance()); + surfaceContext->setContextProperty("Account", GlobalServicesScriptingInterface::getInstance()); surfaceContext->setContextProperty("DialogsManager", _dialogsManagerScriptingInterface); surfaceContext->setContextProperty("GlobalServices", GlobalServicesScriptingInterface::getInstance()); surfaceContext->setContextProperty("FaceTracker", DependencyManager::get().data()); @@ -5739,7 +5738,7 @@ void Application::registerScriptEngineWithApplicationServices(ScriptEnginePointe scriptEngine->registerGlobalObject("ModelCache", DependencyManager::get().data()); scriptEngine->registerGlobalObject("SoundCache", DependencyManager::get().data()); - scriptEngine->registerGlobalObject("Account", AccountScriptingInterface::getInstance()); + scriptEngine->registerGlobalObject("Account", GlobalServicesScriptingInterface::getInstance()); scriptEngine->registerGlobalObject("DialogsManager", _dialogsManagerScriptingInterface); scriptEngine->registerGlobalObject("GlobalServices", GlobalServicesScriptingInterface::getInstance()); diff --git a/interface/src/scripting/AccountScriptingInterface.cpp b/interface/src/scripting/AccountScriptingInterface.cpp index 068cccdc50..fd54198b3c 100644 --- a/interface/src/scripting/AccountScriptingInterface.cpp +++ b/interface/src/scripting/AccountScriptingInterface.cpp @@ -12,47 +12,25 @@ #include "AccountManager.h" #include "AccountScriptingInterface.h" +#include "GlobalServicesScriptingInterface.h" AccountScriptingInterface* AccountScriptingInterface::getInstance() { static AccountScriptingInterface sharedInstance; - auto accountManager = DependencyManager::get(); - QObject::connect(accountManager.data(), &AccountManager::profileChanged, - &sharedInstance, &AccountScriptingInterface::usernameChanged); - QObject::connect(accountManager.data(), &AccountManager::usernameChanged, - &sharedInstance, &AccountScriptingInterface::onUsernameChanged); return &sharedInstance; } bool AccountScriptingInterface::isLoggedIn() { - auto accountManager = DependencyManager::get(); - return accountManager->isLoggedIn(); -} - -bool AccountScriptingInterface::checkAndSignalForAccessToken() { - auto accountManager = DependencyManager::get(); - return accountManager->checkAndSignalForAccessToken(); + return GlobalServicesScriptingInterface::getInstance()->isLoggedIn(); } void AccountScriptingInterface::logOut() { - auto accountManager = DependencyManager::get(); - return accountManager->logout(); + GlobalServicesScriptingInterface::getInstance()->logOut(); } -AccountScriptingInterface::AccountScriptingInterface(QObject *parent): QObject(parent) { - m_loggedIn = isLoggedIn(); - emit loggedInChanged(m_loggedIn); -} - -void AccountScriptingInterface::onUsernameChanged(QString username) { - m_loggedIn = (username != QString()); - emit loggedInChanged(m_loggedIn); +bool AccountScriptingInterface::loggedIn() const { + return GlobalServicesScriptingInterface::getInstance()->loggedIn(); } QString AccountScriptingInterface::getUsername() { - auto accountManager = DependencyManager::get(); - if (accountManager->isLoggedIn()) { - return accountManager->getAccountInfo().getUsername(); - } else { - return "Unknown user"; - } + return GlobalServicesScriptingInterface::getInstance()->getUsername(); } diff --git a/interface/src/scripting/AccountScriptingInterface.h b/interface/src/scripting/AccountScriptingInterface.h index 4ff250e926..10d33ffa36 100644 --- a/interface/src/scripting/AccountScriptingInterface.h +++ b/interface/src/scripting/AccountScriptingInterface.h @@ -17,18 +17,12 @@ class AccountScriptingInterface : public QObject { Q_OBJECT - Q_PROPERTY(QString username READ getUsername NOTIFY usernameChanged) - Q_PROPERTY(bool loggedIn READ loggedIn NOTIFY loggedInChanged) - /**jsdoc * @namespace Account * @property username {String} username if user is logged in, otherwise it returns "Unknown user" */ - -public: - - Q_PROPERTY(QUrl metaverseServerURL READ getMetaverseServerURL) - QUrl getMetaverseServerURL() { return DependencyManager::get()->getMetaverseServerURL(); } + Q_PROPERTY(QString username READ getUsername) + Q_PROPERTY(bool loggedIn READ loggedIn) signals: @@ -56,21 +50,11 @@ public slots: * @return {bool} true when user is logged into the High Fidelity metaverse. */ bool isLoggedIn(); - bool checkAndSignalForAccessToken(); void logOut(); public: - AccountScriptingInterface(QObject* parent = nullptr); - bool loggedIn() const { - return m_loggedIn; - } - -private slots: - void onUsernameChanged(QString username); - -private: - bool m_loggedIn { false }; - + AccountScriptingInterface(QObject* parent = nullptr) {} + bool loggedIn() const; }; #endif // hifi_AccountScriptingInterface_h diff --git a/interface/src/scripting/GlobalServicesScriptingInterface.cpp b/interface/src/scripting/GlobalServicesScriptingInterface.cpp index f4a5ffb39c..305bfa3e79 100644 --- a/interface/src/scripting/GlobalServicesScriptingInterface.cpp +++ b/interface/src/scripting/GlobalServicesScriptingInterface.cpp @@ -18,7 +18,7 @@ GlobalServicesScriptingInterface::GlobalServicesScriptingInterface() { auto accountManager = DependencyManager::get(); - connect(accountManager.data(), &AccountManager::usernameChanged, this, &GlobalServicesScriptingInterface::myUsernameChanged); + connect(accountManager.data(), &AccountManager::usernameChanged, this, &GlobalServicesScriptingInterface::onUsernameChanged); connect(accountManager.data(), &AccountManager::logoutComplete, this, &GlobalServicesScriptingInterface::loggedOut); connect(accountManager.data(), &AccountManager::loginComplete, this, &GlobalServicesScriptingInterface::connected); @@ -31,11 +31,14 @@ GlobalServicesScriptingInterface::GlobalServicesScriptingInterface() { auto discoverabilityManager = DependencyManager::get(); connect(discoverabilityManager.data(), &DiscoverabilityManager::discoverabilityModeChanged, this, &GlobalServicesScriptingInterface::discoverabilityModeChanged); + + _loggedIn = isLoggedIn(); + emit loggedInChanged(_loggedIn); } GlobalServicesScriptingInterface::~GlobalServicesScriptingInterface() { auto accountManager = DependencyManager::get(); - disconnect(accountManager.data(), &AccountManager::usernameChanged, this, &GlobalServicesScriptingInterface::myUsernameChanged); + disconnect(accountManager.data(), &AccountManager::usernameChanged, this, &GlobalServicesScriptingInterface::onUsernameChanged); disconnect(accountManager.data(), &AccountManager::logoutComplete, this, &GlobalServicesScriptingInterface::loggedOut); disconnect(accountManager.data(), &AccountManager::loginComplete, this, &GlobalServicesScriptingInterface::connected); } @@ -45,8 +48,28 @@ GlobalServicesScriptingInterface* GlobalServicesScriptingInterface::getInstance( return &sharedInstance; } -const QString& GlobalServicesScriptingInterface::getUsername() const { - return DependencyManager::get()->getAccountInfo().getUsername(); +const QString GlobalServicesScriptingInterface::getUsername() const { + auto accountManager = DependencyManager::get(); + if (accountManager->isLoggedIn()) { + return accountManager->getAccountInfo().getUsername(); + } else { + return "Unknown user"; + } +} + +bool GlobalServicesScriptingInterface::isLoggedIn() { + auto accountManager = DependencyManager::get(); + return accountManager->isLoggedIn(); +} + +bool GlobalServicesScriptingInterface::checkAndSignalForAccessToken() { + auto accountManager = DependencyManager::get(); + return accountManager->checkAndSignalForAccessToken(); +} + +void GlobalServicesScriptingInterface::logOut() { + auto accountManager = DependencyManager::get(); + return accountManager->logout(); } void GlobalServicesScriptingInterface::loggedOut() { @@ -77,6 +100,12 @@ void GlobalServicesScriptingInterface::discoverabilityModeChanged(Discoverabilit emit findableByChanged(DiscoverabilityManager::findableByString(discoverabilityMode)); } +void GlobalServicesScriptingInterface::onUsernameChanged(const QString& username) { + _loggedIn = (username != QString()); + emit myUsernameChanged(username); + emit loggedInChanged(_loggedIn); +} + DownloadInfoResult::DownloadInfoResult() : downloading(QList()), pending(0.0f) diff --git a/interface/src/scripting/GlobalServicesScriptingInterface.h b/interface/src/scripting/GlobalServicesScriptingInterface.h index 63294fc656..93d35e9ce8 100644 --- a/interface/src/scripting/GlobalServicesScriptingInterface.h +++ b/interface/src/scripting/GlobalServicesScriptingInterface.h @@ -35,17 +35,25 @@ void DownloadInfoResultFromScriptValue(const QScriptValue& object, DownloadInfoR class GlobalServicesScriptingInterface : public QObject { Q_OBJECT - Q_PROPERTY(QString username READ getUsername) + Q_PROPERTY(QString username READ getUsername NOTIFY myUsernameChanged) + Q_PROPERTY(bool loggedIn READ loggedIn NOTIFY loggedInChanged) Q_PROPERTY(QString findableBy READ getFindableBy WRITE setFindableBy NOTIFY findableByChanged) + Q_PROPERTY(QUrl metaverseServerURL READ getMetaverseServerURL) public: static GlobalServicesScriptingInterface* getInstance(); - const QString& getUsername() const; + const QString getUsername() const; + bool loggedIn() const { return _loggedIn; } + QUrl getMetaverseServerURL() { return DependencyManager::get()->getMetaverseServerURL(); } public slots: DownloadInfoResult getDownloadInfo(); void updateDownloadInfo(); + + bool isLoggedIn(); + bool checkAndSignalForAccessToken(); + void logOut(); private slots: void loggedOut(); @@ -55,18 +63,22 @@ private slots: void setFindableBy(const QString& discoverabilityMode); void discoverabilityModeChanged(Discoverability::Mode discoverabilityMode); + void onUsernameChanged(const QString& username); + signals: void connected(); void disconnected(const QString& reason); void myUsernameChanged(const QString& username); void downloadInfoChanged(DownloadInfoResult info); void findableByChanged(const QString& discoverabilityMode); + void loggedInChanged(bool loggedIn); private: GlobalServicesScriptingInterface(); ~GlobalServicesScriptingInterface(); bool _downloading; + bool _loggedIn{ false }; }; #endif // hifi_GlobalServicesScriptingInterface_h diff --git a/interface/src/ui/overlays/Web3DOverlay.cpp b/interface/src/ui/overlays/Web3DOverlay.cpp index ca3eb322f6..a5da5e99b6 100644 --- a/interface/src/ui/overlays/Web3DOverlay.cpp +++ b/interface/src/ui/overlays/Web3DOverlay.cpp @@ -36,7 +36,6 @@ #include #include #include -#include "scripting/AccountScriptingInterface.h" #include "scripting/HMDScriptingInterface.h" #include "scripting/AssetMappingsScriptingInterface.h" #include "scripting/MenuScriptingInterface.h" @@ -193,7 +192,7 @@ void Web3DOverlay::setupQmlSurface() { _webSurface->getSurfaceContext()->setContextProperty("offscreenFlags", flags); _webSurface->getSurfaceContext()->setContextProperty("AddressManager", DependencyManager::get().data()); - _webSurface->getSurfaceContext()->setContextProperty("Account", AccountScriptingInterface::getInstance()); + _webSurface->getSurfaceContext()->setContextProperty("Account", GlobalServicesScriptingInterface::getInstance()); // in Qt 5.10.0 there is already an "Audio" object in the QML context // though I failed to find it (from QtMultimedia??). So.. let it be "AudioScriptingInterface"