mirror of
https://github.com/overte-org/overte.git
synced 2025-06-23 02:00:13 +02:00
handle location set/get in AddressManager, handle set to address map
This commit is contained in:
parent
b90db2856b
commit
27f7cdb2d4
4 changed files with 39 additions and 62 deletions
|
@ -9,9 +9,7 @@
|
||||||
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
// See the accompanying file LICENSE or http://www.apache.org/licenses/LICENSE-2.0.html
|
||||||
//
|
//
|
||||||
|
|
||||||
#include <glm/glm.hpp>
|
#include <AddressManager.h>
|
||||||
|
|
||||||
#include "NodeList.h"
|
|
||||||
|
|
||||||
#include "LocationScriptingInterface.h"
|
#include "LocationScriptingInterface.h"
|
||||||
|
|
||||||
|
@ -20,36 +18,23 @@ LocationScriptingInterface* LocationScriptingInterface::getInstance() {
|
||||||
return &sharedInstance;
|
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) {
|
QScriptValue LocationScriptingInterface::locationGetter(QScriptContext* context, QScriptEngine* engine) {
|
||||||
return engine->newQObject(getInstance());
|
return engine->newQObject(&AddressManager::getInstance());
|
||||||
}
|
}
|
||||||
|
|
||||||
QScriptValue LocationScriptingInterface::locationSetter(QScriptContext* context, QScriptEngine* engine) {
|
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;
|
return QScriptValue::UndefinedValue;
|
||||||
}
|
}
|
||||||
|
|
|
@ -12,41 +12,17 @@
|
||||||
#ifndef hifi_LocationScriptingInterface_h
|
#ifndef hifi_LocationScriptingInterface_h
|
||||||
#define hifi_LocationScriptingInterface_h
|
#define hifi_LocationScriptingInterface_h
|
||||||
|
|
||||||
#include <QObject>
|
#include <qscriptengine.h>
|
||||||
#include <QScriptContext>
|
|
||||||
#include <QScriptEngine>
|
|
||||||
#include <QScriptValue>
|
|
||||||
#include <QString>
|
|
||||||
|
|
||||||
#include <AddressManager.h>
|
|
||||||
|
|
||||||
#include "Application.h"
|
|
||||||
|
|
||||||
class LocationScriptingInterface : public QObject {
|
class LocationScriptingInterface : public QObject {
|
||||||
Q_OBJECT
|
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:
|
public:
|
||||||
static LocationScriptingInterface* getInstance();
|
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 locationGetter(QScriptContext* context, QScriptEngine* engine);
|
||||||
static QScriptValue locationSetter(QScriptContext* context, QScriptEngine* engine);
|
static QScriptValue locationSetter(QScriptContext* context, QScriptEngine* engine);
|
||||||
|
private:
|
||||||
public slots:
|
LocationScriptingInterface() {};
|
||||||
void assign(const QString& url);
|
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_LocationScriptingInterface_h
|
#endif // hifi_LocationScriptingInterface_h
|
||||||
|
|
|
@ -16,6 +16,8 @@
|
||||||
|
|
||||||
#include <GLMHelpers.h>
|
#include <GLMHelpers.h>
|
||||||
|
|
||||||
|
#include "NodeList.h"
|
||||||
|
|
||||||
#include "AddressManager.h"
|
#include "AddressManager.h"
|
||||||
|
|
||||||
AddressManager& AddressManager::getInstance() {
|
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;
|
QUrl hifiURL;
|
||||||
|
|
||||||
hifiURL.setScheme(HIFI_URL_SCHEME);
|
hifiURL.setScheme(HIFI_URL_SCHEME);
|
||||||
|
@ -139,12 +145,12 @@ void AddressManager::handleAPIResponse(QNetworkReply& requestReply) {
|
||||||
QJsonObject responseObject = QJsonDocument::fromJson(requestReply.readAll()).object();
|
QJsonObject responseObject = QJsonDocument::fromJson(requestReply.readAll()).object();
|
||||||
QJsonObject dataObject = responseObject["data"].toObject();
|
QJsonObject dataObject = responseObject["data"].toObject();
|
||||||
|
|
||||||
goToAddress(dataObject.toVariantMap());
|
goToAddressFromObject(dataObject.toVariantMap());
|
||||||
|
|
||||||
emit lookupResultsFinished();
|
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_DOMAIN_KEY = "domain";
|
||||||
const QString ADDRESS_API_ONLINE_KEY = "online";
|
const QString ADDRESS_API_ONLINE_KEY = "online";
|
||||||
|
|
||||||
|
@ -185,6 +191,8 @@ void AddressManager::goToAddress(const QVariantMap& addressMap) {
|
||||||
returnedPath = domainObject[LOCATION_PATH_KEY].toString();
|
returnedPath = domainObject[LOCATION_PATH_KEY].toString();
|
||||||
} else if (domainObject.contains(LOCATION_KEY)) {
|
} else if (domainObject.contains(LOCATION_KEY)) {
|
||||||
returnedPath = domainObject[LOCATION_KEY].toMap()[LOCATION_PATH_KEY].toString();
|
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);
|
bool shouldFaceViewpoint = addressMap.contains(ADDRESS_API_ONLINE_KEY);
|
||||||
|
|
|
@ -26,10 +26,18 @@ typedef glm::quat (*OrientationGetter)();
|
||||||
|
|
||||||
class AddressManager : public QObject {
|
class AddressManager : public QObject {
|
||||||
Q_OBJECT
|
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:
|
public:
|
||||||
static AddressManager& getInstance();
|
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 currentPath(bool withOrientation = true) const;
|
||||||
|
|
||||||
const QString& getCurrentDomain() const { return _currentDomain; }
|
const QString& getCurrentDomain() const { return _currentDomain; }
|
||||||
|
@ -42,7 +50,7 @@ public:
|
||||||
public slots:
|
public slots:
|
||||||
void handleLookupString(const QString& lookupString);
|
void handleLookupString(const QString& lookupString);
|
||||||
void goToUser(const QString& username);
|
void goToUser(const QString& username);
|
||||||
void goToAddress(const QVariantMap& addressMap);
|
void goToAddressFromObject(const QVariantMap& addressMap);
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void lookupResultsFinished();
|
void lookupResultsFinished();
|
||||||
|
|
Loading…
Reference in a new issue