mirror of
https://github.com/overte-org/overte.git
synced 2025-06-16 12:40:07 +02:00
Merge pull request #4140 from birarda/master
fix for path override in address bar
This commit is contained in:
commit
9ebd47d98c
4 changed files with 78 additions and 31 deletions
|
@ -158,7 +158,8 @@ void AccountManager::setAuthURL(const QUrl& authURL) {
|
||||||
void AccountManager::authenticatedRequest(const QString& path, QNetworkAccessManager::Operation operation,
|
void AccountManager::authenticatedRequest(const QString& path, QNetworkAccessManager::Operation operation,
|
||||||
const JSONCallbackParameters& callbackParams,
|
const JSONCallbackParameters& callbackParams,
|
||||||
const QByteArray& dataByteArray,
|
const QByteArray& dataByteArray,
|
||||||
QHttpMultiPart* dataMultiPart) {
|
QHttpMultiPart* dataMultiPart,
|
||||||
|
const QVariantMap& propertyMap) {
|
||||||
|
|
||||||
QMetaObject::invokeMethod(this, "invokedRequest",
|
QMetaObject::invokeMethod(this, "invokedRequest",
|
||||||
Q_ARG(const QString&, path),
|
Q_ARG(const QString&, path),
|
||||||
|
@ -166,13 +167,15 @@ void AccountManager::authenticatedRequest(const QString& path, QNetworkAccessMan
|
||||||
Q_ARG(QNetworkAccessManager::Operation, operation),
|
Q_ARG(QNetworkAccessManager::Operation, operation),
|
||||||
Q_ARG(const JSONCallbackParameters&, callbackParams),
|
Q_ARG(const JSONCallbackParameters&, callbackParams),
|
||||||
Q_ARG(const QByteArray&, dataByteArray),
|
Q_ARG(const QByteArray&, dataByteArray),
|
||||||
Q_ARG(QHttpMultiPart*, dataMultiPart));
|
Q_ARG(QHttpMultiPart*, dataMultiPart),
|
||||||
|
Q_ARG(QVariantMap, propertyMap));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::unauthenticatedRequest(const QString& path, QNetworkAccessManager::Operation operation,
|
void AccountManager::unauthenticatedRequest(const QString& path, QNetworkAccessManager::Operation operation,
|
||||||
const JSONCallbackParameters& callbackParams,
|
const JSONCallbackParameters& callbackParams,
|
||||||
const QByteArray& dataByteArray,
|
const QByteArray& dataByteArray,
|
||||||
QHttpMultiPart* dataMultiPart) {
|
QHttpMultiPart* dataMultiPart,
|
||||||
|
const QVariantMap& propertyMap) {
|
||||||
|
|
||||||
QMetaObject::invokeMethod(this, "invokedRequest",
|
QMetaObject::invokeMethod(this, "invokedRequest",
|
||||||
Q_ARG(const QString&, path),
|
Q_ARG(const QString&, path),
|
||||||
|
@ -180,14 +183,16 @@ void AccountManager::unauthenticatedRequest(const QString& path, QNetworkAccessM
|
||||||
Q_ARG(QNetworkAccessManager::Operation, operation),
|
Q_ARG(QNetworkAccessManager::Operation, operation),
|
||||||
Q_ARG(const JSONCallbackParameters&, callbackParams),
|
Q_ARG(const JSONCallbackParameters&, callbackParams),
|
||||||
Q_ARG(const QByteArray&, dataByteArray),
|
Q_ARG(const QByteArray&, dataByteArray),
|
||||||
Q_ARG(QHttpMultiPart*, dataMultiPart));
|
Q_ARG(QHttpMultiPart*, dataMultiPart),
|
||||||
|
Q_ARG(QVariantMap, propertyMap));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AccountManager::invokedRequest(const QString& path,
|
void AccountManager::invokedRequest(const QString& path,
|
||||||
bool requiresAuthentication,
|
bool requiresAuthentication,
|
||||||
QNetworkAccessManager::Operation operation,
|
QNetworkAccessManager::Operation operation,
|
||||||
const JSONCallbackParameters& callbackParams,
|
const JSONCallbackParameters& callbackParams,
|
||||||
const QByteArray& dataByteArray, QHttpMultiPart* dataMultiPart) {
|
const QByteArray& dataByteArray, QHttpMultiPart* dataMultiPart,
|
||||||
|
const QVariantMap& propertyMap) {
|
||||||
|
|
||||||
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
QNetworkAccessManager& networkAccessManager = NetworkAccessManager::getInstance();
|
||||||
|
|
||||||
|
@ -235,7 +240,9 @@ void AccountManager::invokedRequest(const QString& path,
|
||||||
} else {
|
} else {
|
||||||
networkReply = networkAccessManager.put(networkRequest, dataMultiPart);
|
networkReply = networkAccessManager.put(networkRequest, dataMultiPart);
|
||||||
}
|
}
|
||||||
dataMultiPart->setParent(networkReply);
|
|
||||||
|
// make sure dataMultiPart is destroyed when the reply is
|
||||||
|
connect(networkReply, &QNetworkReply::destroyed, dataMultiPart, &QHttpMultiPart::deleteLater);
|
||||||
} else {
|
} else {
|
||||||
networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
networkRequest.setHeader(QNetworkRequest::ContentTypeHeader, "application/json");
|
||||||
if (operation == QNetworkAccessManager::PostOperation) {
|
if (operation == QNetworkAccessManager::PostOperation) {
|
||||||
|
@ -255,6 +262,14 @@ void AccountManager::invokedRequest(const QString& path,
|
||||||
}
|
}
|
||||||
|
|
||||||
if (networkReply) {
|
if (networkReply) {
|
||||||
|
if (!propertyMap.isEmpty()) {
|
||||||
|
// we have properties to set on the reply so the user can check them after
|
||||||
|
foreach(const QString& propertyKey, propertyMap.keys()) {
|
||||||
|
networkReply->setProperty(qPrintable(propertyKey), propertyMap.value(propertyKey));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (!callbackParams.isEmpty()) {
|
if (!callbackParams.isEmpty()) {
|
||||||
// if we have information for a callback, insert the callbackParams into our local map
|
// if we have information for a callback, insert the callbackParams into our local map
|
||||||
_pendingCallbackMap.insert(networkReply, callbackParams);
|
_pendingCallbackMap.insert(networkReply, callbackParams);
|
||||||
|
|
|
@ -48,13 +48,15 @@ public:
|
||||||
QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation,
|
QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation,
|
||||||
const JSONCallbackParameters& callbackParams = JSONCallbackParameters(),
|
const JSONCallbackParameters& callbackParams = JSONCallbackParameters(),
|
||||||
const QByteArray& dataByteArray = QByteArray(),
|
const QByteArray& dataByteArray = QByteArray(),
|
||||||
QHttpMultiPart* dataMultiPart = NULL);
|
QHttpMultiPart* dataMultiPart = NULL,
|
||||||
|
const QVariantMap& propertyMap = QVariantMap());
|
||||||
|
|
||||||
void unauthenticatedRequest(const QString& path,
|
void unauthenticatedRequest(const QString& path,
|
||||||
QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation,
|
QNetworkAccessManager::Operation operation = QNetworkAccessManager::GetOperation,
|
||||||
const JSONCallbackParameters& callbackParams = JSONCallbackParameters(),
|
const JSONCallbackParameters& callbackParams = JSONCallbackParameters(),
|
||||||
const QByteArray& dataByteArray = QByteArray(),
|
const QByteArray& dataByteArray = QByteArray(),
|
||||||
QHttpMultiPart* dataMultiPart = NULL);
|
QHttpMultiPart* dataMultiPart = NULL,
|
||||||
|
const QVariantMap& propertyMap = QVariantMap()) ;
|
||||||
|
|
||||||
const QUrl& getAuthURL() const { return _authURL; }
|
const QUrl& getAuthURL() const { return _authURL; }
|
||||||
void setAuthURL(const QUrl& authURL);
|
void setAuthURL(const QUrl& authURL);
|
||||||
|
@ -109,7 +111,8 @@ private:
|
||||||
QNetworkAccessManager::Operation operation,
|
QNetworkAccessManager::Operation operation,
|
||||||
const JSONCallbackParameters& callbackParams,
|
const JSONCallbackParameters& callbackParams,
|
||||||
const QByteArray& dataByteArray,
|
const QByteArray& dataByteArray,
|
||||||
QHttpMultiPart* dataMultiPart);
|
QHttpMultiPart* dataMultiPart,
|
||||||
|
const QVariantMap& propertyMap);
|
||||||
|
|
||||||
QUrl _authURL;
|
QUrl _authURL;
|
||||||
QMap<QNetworkReply*, JSONCallbackParameters> _pendingCallbackMap;
|
QMap<QNetworkReply*, JSONCallbackParameters> _pendingCallbackMap;
|
||||||
|
|
|
@ -119,14 +119,16 @@ bool AddressManager::handleUrl(const QUrl& lookupUrl) {
|
||||||
if (!handleUsername(lookupUrl.authority())) {
|
if (!handleUsername(lookupUrl.authority())) {
|
||||||
// we're assuming this is either a network address or global place name
|
// we're assuming this is either a network address or global place name
|
||||||
// check if it is a network address first
|
// check if it is a network address first
|
||||||
if (!handleNetworkAddress(lookupUrl.host()
|
if (handleNetworkAddress(lookupUrl.host()
|
||||||
+ (lookupUrl.port() == -1 ? "" : ":" + QString::number(lookupUrl.port())))) {
|
+ (lookupUrl.port() == -1 ? "" : ":" + QString::number(lookupUrl.port())))) {
|
||||||
|
// we may have a path that defines a relative viewpoint - if so we should jump to that now
|
||||||
|
handleRelativeViewpoint(lookupUrl.path());
|
||||||
|
} else {
|
||||||
// wasn't an address - lookup the place name
|
// wasn't an address - lookup the place name
|
||||||
attemptPlaceNameLookup(lookupUrl.host());
|
// we may have a path that defines a relative viewpoint - pass that through the lookup so we can go to it after
|
||||||
|
attemptPlaceNameLookup(lookupUrl.host(), lookupUrl.path());
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
// we may have a path that defines a relative viewpoint - if so we should jump to that now
|
|
||||||
handleRelativeViewpoint(lookupUrl.path());
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -164,12 +166,14 @@ 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();
|
||||||
|
|
||||||
goToAddressFromObject(dataObject.toVariantMap());
|
goToAddressFromObject(dataObject.toVariantMap(), requestReply);
|
||||||
|
|
||||||
emit lookupResultsFinished();
|
emit lookupResultsFinished();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AddressManager::goToAddressFromObject(const QVariantMap& dataObject) {
|
const char OVERRIDE_PATH_KEY[] = "override_path";
|
||||||
|
|
||||||
|
void AddressManager::goToAddressFromObject(const QVariantMap& dataObject, const QNetworkReply& reply) {
|
||||||
|
|
||||||
const QString DATA_OBJECT_PLACE_KEY = "place";
|
const QString DATA_OBJECT_PLACE_KEY = "place";
|
||||||
const QString DATA_OBJECT_USER_LOCATION_KEY = "location";
|
const QString DATA_OBJECT_USER_LOCATION_KEY = "location";
|
||||||
|
@ -203,6 +207,8 @@ void AddressManager::goToAddressFromObject(const QVariantMap& dataObject) {
|
||||||
if (domainObject.contains(DOMAIN_NETWORK_ADDRESS_KEY)) {
|
if (domainObject.contains(DOMAIN_NETWORK_ADDRESS_KEY)) {
|
||||||
QString domainHostname = domainObject[DOMAIN_NETWORK_ADDRESS_KEY].toString();
|
QString domainHostname = domainObject[DOMAIN_NETWORK_ADDRESS_KEY].toString();
|
||||||
|
|
||||||
|
qDebug() << "Possible domain change required to connect to" << domainHostname
|
||||||
|
<< "on" << DEFAULT_DOMAIN_SERVER_PORT;
|
||||||
emit possibleDomainChangeRequired(domainHostname, DEFAULT_DOMAIN_SERVER_PORT);
|
emit possibleDomainChangeRequired(domainHostname, DEFAULT_DOMAIN_SERVER_PORT);
|
||||||
} else {
|
} else {
|
||||||
QString iceServerAddress = domainObject[DOMAIN_ICE_SERVER_ADDRESS_KEY].toString();
|
QString iceServerAddress = domainObject[DOMAIN_ICE_SERVER_ADDRESS_KEY].toString();
|
||||||
|
@ -211,6 +217,9 @@ void AddressManager::goToAddressFromObject(const QVariantMap& dataObject) {
|
||||||
QString domainIDString = domainObject[DOMAIN_ID_KEY].toString();
|
QString domainIDString = domainObject[DOMAIN_ID_KEY].toString();
|
||||||
QUuid domainID(domainIDString);
|
QUuid domainID(domainIDString);
|
||||||
|
|
||||||
|
qDebug() << "Possible domain change required to connect to domain with ID" << domainID
|
||||||
|
<< "via ice-server at" << iceServerAddress;
|
||||||
|
|
||||||
emit possibleDomainChangeRequiredViaICEForID(iceServerAddress, domainID);
|
emit possibleDomainChangeRequiredViaICEForID(iceServerAddress, domainID);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -223,18 +232,29 @@ void AddressManager::goToAddressFromObject(const QVariantMap& dataObject) {
|
||||||
QString newRootPlaceName = rootMap[PLACE_NAME_KEY].toString();
|
QString newRootPlaceName = rootMap[PLACE_NAME_KEY].toString();
|
||||||
setRootPlaceName(newRootPlaceName);
|
setRootPlaceName(newRootPlaceName);
|
||||||
|
|
||||||
// take the path that came back
|
// check if we had a path to override the path returned
|
||||||
const QString PLACE_PATH_KEY = "path";
|
QString overridePath = reply.property(OVERRIDE_PATH_KEY).toString();
|
||||||
QString returnedPath = locationMap[PLACE_PATH_KEY].toString();
|
|
||||||
|
|
||||||
bool shouldFaceViewpoint = locationMap.contains(LOCATION_API_ONLINE_KEY);
|
if (!overridePath.isEmpty()) {
|
||||||
|
if (!handleRelativeViewpoint(overridePath)){
|
||||||
if (!returnedPath.isEmpty()) {
|
qDebug() << "User entered path could not be handled as a viewpoint - " << overridePath;
|
||||||
// try to parse this returned path as a viewpoint, that's the only thing it could be for now
|
}
|
||||||
if (!handleRelativeViewpoint(returnedPath, shouldFaceViewpoint)) {
|
} else {
|
||||||
qDebug() << "Received a location path that was could not be handled as a viewpoint -" << returnedPath;
|
// take the path that came back
|
||||||
|
const QString PLACE_PATH_KEY = "path";
|
||||||
|
QString returnedPath = locationMap[PLACE_PATH_KEY].toString();
|
||||||
|
|
||||||
|
bool shouldFaceViewpoint = locationMap.contains(LOCATION_API_ONLINE_KEY);
|
||||||
|
|
||||||
|
if (!returnedPath.isEmpty()) {
|
||||||
|
// try to parse this returned path as a viewpoint, that's the only thing it could be for now
|
||||||
|
if (!handleRelativeViewpoint(returnedPath, shouldFaceViewpoint)) {
|
||||||
|
qDebug() << "Received a location path that was could not be handled as a viewpoint -" << returnedPath;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
qDebug() << "Received an address manager API response with no domain key. Cannot parse.";
|
qDebug() << "Received an address manager API response with no domain key. Cannot parse.";
|
||||||
qDebug() << locationMap;
|
qDebug() << locationMap;
|
||||||
|
@ -260,12 +280,21 @@ void AddressManager::handleAPIError(QNetworkReply& errorReply) {
|
||||||
|
|
||||||
const QString GET_PLACE = "/api/v1/places/%1";
|
const QString GET_PLACE = "/api/v1/places/%1";
|
||||||
|
|
||||||
void AddressManager::attemptPlaceNameLookup(const QString& lookupString) {
|
void AddressManager::attemptPlaceNameLookup(const QString& lookupString, const QString& overridePath) {
|
||||||
// assume this is a place name and see if we can get any info on it
|
// assume this is a place name and see if we can get any info on it
|
||||||
QString placeName = QUrl::toPercentEncoding(lookupString);
|
QString placeName = QUrl::toPercentEncoding(lookupString);
|
||||||
|
|
||||||
|
QVariantMap requestParams;
|
||||||
|
if (!overridePath.isEmpty()) {
|
||||||
|
requestParams.insert(OVERRIDE_PATH_KEY, overridePath);
|
||||||
|
}
|
||||||
|
|
||||||
AccountManager::getInstance().unauthenticatedRequest(GET_PLACE.arg(placeName),
|
AccountManager::getInstance().unauthenticatedRequest(GET_PLACE.arg(placeName),
|
||||||
QNetworkAccessManager::GetOperation,
|
QNetworkAccessManager::GetOperation,
|
||||||
apiCallbackParameters());
|
apiCallbackParameters(),
|
||||||
|
QByteArray(),
|
||||||
|
NULL,
|
||||||
|
requestParams);
|
||||||
}
|
}
|
||||||
|
|
||||||
bool AddressManager::handleNetworkAddress(const QString& lookupString) {
|
bool AddressManager::handleNetworkAddress(const QString& lookupString) {
|
||||||
|
|
|
@ -47,7 +47,7 @@ public:
|
||||||
const QString& getRootPlaceName() const { return _rootPlaceName; }
|
const QString& getRootPlaceName() const { return _rootPlaceName; }
|
||||||
void setRootPlaceName(const QString& rootPlaceName);
|
void setRootPlaceName(const QString& rootPlaceName);
|
||||||
|
|
||||||
void attemptPlaceNameLookup(const QString& lookupString);
|
void attemptPlaceNameLookup(const QString& lookupString, const QString& overridePath = QString());
|
||||||
|
|
||||||
void setPositionGetter(PositionGetter positionGetter) { _positionGetter = positionGetter; }
|
void setPositionGetter(PositionGetter positionGetter) { _positionGetter = positionGetter; }
|
||||||
void setOrientationGetter(OrientationGetter orientationGetter) { _orientationGetter = orientationGetter; }
|
void setOrientationGetter(OrientationGetter orientationGetter) { _orientationGetter = orientationGetter; }
|
||||||
|
@ -57,7 +57,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 goToAddressFromObject(const QVariantMap& addressMap);
|
void goToAddressFromObject(const QVariantMap& addressMap, const QNetworkReply& reply);
|
||||||
|
|
||||||
void storeCurrentAddress();
|
void storeCurrentAddress();
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue