diff --git a/interface/src/scripting/LocationScriptingInterface.cpp b/interface/src/scripting/LocationScriptingInterface.cpp index 047b76dab6..5ead0100e2 100644 --- a/interface/src/scripting/LocationScriptingInterface.cpp +++ b/interface/src/scripting/LocationScriptingInterface.cpp @@ -9,9 +9,7 @@ // See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html // -#include - -#include "NodeList.h" +#include #include "LocationScriptingInterface.h" @@ -20,36 +18,23 @@ LocationScriptingInterface* LocationScriptingInterface::getInstance() { return &sharedInstance; } -bool LocationScriptingInterface::isConnected() { - return NodeList::getInstance()->getDomainHandler().isConnected(); -} - -QString LocationScriptingInterface::getHref() { - return getProtocol() + "//" + getHostname() + getPathname(); -} - -QString LocationScriptingInterface::getPathname() { - return AddressManager::getInstance().currentPath(); -} - -QString LocationScriptingInterface::getHostname() { - return NodeList::getInstance()->getDomainHandler().getHostname(); -} - -QString LocationScriptingInterface::getDomainID() const { - const QUuid& domainID = NodeList::getInstance()->getDomainHandler().getUUID(); - return domainID.isNull() ? "" : uuidStringWithoutCurlyBraces(domainID); -} - -void LocationScriptingInterface::assign(const QString& url) { - QMetaObject::invokeMethod(&AddressManager::getInstance(), "handleLookupString", Q_ARG(const QString&, url)); -} - QScriptValue LocationScriptingInterface::locationGetter(QScriptContext* context, QScriptEngine* engine) { - return engine->newQObject(getInstance()); + return engine->newQObject(&AddressManager::getInstance()); } QScriptValue LocationScriptingInterface::locationSetter(QScriptContext* context, QScriptEngine* engine) { - LocationScriptingInterface::getInstance()->assign(context->argument(0).toString()); + const QVariant& argumentVariant = context->argument(0).toVariant(); + + + if (argumentVariant.canConvert(QMetaType::QVariantMap)) { + // this argument is a variant map, so we'll assume it's an address map + QMetaObject::invokeMethod(&AddressManager::getInstance(), "goToAddressFromObject", + Q_ARG(const QVariantMap&, argumentVariant.toMap())); + } else { + // just try and convert the argument to a string, should be a hifi:// address + QMetaObject::invokeMethod(&AddressManager::getInstance(), "handleLookupString", + Q_ARG(const QString&, argumentVariant.toString())); + } + return QScriptValue::UndefinedValue; } diff --git a/interface/src/scripting/LocationScriptingInterface.h b/interface/src/scripting/LocationScriptingInterface.h index a8081c0687..18390aa1b3 100644 --- a/interface/src/scripting/LocationScriptingInterface.h +++ b/interface/src/scripting/LocationScriptingInterface.h @@ -12,41 +12,17 @@ #ifndef hifi_LocationScriptingInterface_h #define hifi_LocationScriptingInterface_h -#include -#include -#include -#include -#include - -#include - -#include "Application.h" +#include class LocationScriptingInterface : public QObject { Q_OBJECT - Q_PROPERTY(bool isConnected READ isConnected) - Q_PROPERTY(QString href READ getHref) - Q_PROPERTY(QString protocol READ getProtocol) - Q_PROPERTY(QString hostname READ getHostname) - Q_PROPERTY(QString pathname READ getPathname) - Q_PROPERTY(QString domainID READ getDomainID) - LocationScriptingInterface() { }; public: static LocationScriptingInterface* getInstance(); - bool isConnected(); - QString getHref(); - QString getProtocol() { return HIFI_URL_SCHEME; }; - QString getPathname(); - QString getHostname(); - QString getDomainID() const; - static QScriptValue locationGetter(QScriptContext* context, QScriptEngine* engine); static QScriptValue locationSetter(QScriptContext* context, QScriptEngine* engine); - -public slots: - void assign(const QString& url); - +private: + LocationScriptingInterface() {}; }; #endif // hifi_LocationScriptingInterface_h diff --git a/libraries/networking/src/AddressManager.cpp b/libraries/networking/src/AddressManager.cpp index 2ebee985b1..1201a8973f 100644 --- a/libraries/networking/src/AddressManager.cpp +++ b/libraries/networking/src/AddressManager.cpp @@ -16,6 +16,8 @@ #include +#include "NodeList.h" + #include "AddressManager.h" AddressManager& AddressManager::getInstance() { @@ -31,7 +33,11 @@ AddressManager::AddressManager() : } -const QUrl AddressManager::currentAddress() { +bool AddressManager::isConnected() { + return NodeList::getInstance()->getDomainHandler().isConnected(); +} + +const QUrl AddressManager::currentAddress() const { QUrl hifiURL; hifiURL.setScheme(HIFI_URL_SCHEME); @@ -139,12 +145,12 @@ void AddressManager::handleAPIResponse(QNetworkReply& requestReply) { QJsonObject responseObject = QJsonDocument::fromJson(requestReply.readAll()).object(); QJsonObject dataObject = responseObject["data"].toObject(); - goToAddress(dataObject.toVariantMap()); + goToAddressFromObject(dataObject.toVariantMap()); emit lookupResultsFinished(); } -void AddressManager::goToAddress(const QVariantMap& addressMap) { +void AddressManager::goToAddressFromObject(const QVariantMap& addressMap) { const QString ADDRESS_API_DOMAIN_KEY = "domain"; const QString ADDRESS_API_ONLINE_KEY = "online"; @@ -185,6 +191,8 @@ void AddressManager::goToAddress(const QVariantMap& addressMap) { returnedPath = domainObject[LOCATION_PATH_KEY].toString(); } else if (domainObject.contains(LOCATION_KEY)) { returnedPath = domainObject[LOCATION_KEY].toMap()[LOCATION_PATH_KEY].toString(); + } else if (addressMap.contains(LOCATION_PATH_KEY)) { + returnedPath = addressMap[LOCATION_PATH_KEY].toString(); } bool shouldFaceViewpoint = addressMap.contains(ADDRESS_API_ONLINE_KEY); diff --git a/libraries/networking/src/AddressManager.h b/libraries/networking/src/AddressManager.h index 0539e536ca..8a25464223 100644 --- a/libraries/networking/src/AddressManager.h +++ b/libraries/networking/src/AddressManager.h @@ -26,10 +26,18 @@ typedef glm::quat (*OrientationGetter)(); class AddressManager : public QObject { Q_OBJECT + Q_PROPERTY(bool isConnected READ isConnected) + Q_PROPERTY(QUrl href READ currentAddress) + Q_PROPERTY(QString protocol READ getProtocol) + Q_PROPERTY(QString hostname READ getCurrentDomain) + Q_PROPERTY(QString pathname READ currentPath) public: static AddressManager& getInstance(); - const QUrl currentAddress(); + bool isConnected(); + const QString& getProtocol() { return HIFI_URL_SCHEME; }; + + const QUrl currentAddress() const; const QString currentPath(bool withOrientation = true) const; const QString& getCurrentDomain() const { return _currentDomain; } @@ -42,7 +50,7 @@ public: public slots: void handleLookupString(const QString& lookupString); void goToUser(const QString& username); - void goToAddress(const QVariantMap& addressMap); + void goToAddressFromObject(const QVariantMap& addressMap); signals: void lookupResultsFinished();