mirror of
https://github.com/HifiExperiments/overte.git
synced 2025-05-29 03:24:47 +02:00
Merge pull request #14024 from wayne-chen/toggle404Redirect
Toggle going to 404 redirect domain
This commit is contained in:
commit
c5ff72bd20
9 changed files with 76 additions and 37 deletions
|
@ -3500,13 +3500,14 @@ bool Application::isServerlessMode() const {
|
||||||
}
|
}
|
||||||
|
|
||||||
void Application::setIsInterstitialMode(bool interstitialMode) {
|
void Application::setIsInterstitialMode(bool interstitialMode) {
|
||||||
Settings settings;
|
bool enableInterstitial = DependencyManager::get<NodeList>()->getDomainHandler().getInterstitialModeEnabled();
|
||||||
bool enableInterstitial = settings.value("enableIntersitialMode", false).toBool();
|
if (enableInterstitial) {
|
||||||
if (_interstitialMode != interstitialMode && enableInterstitial) {
|
if (_interstitialMode != interstitialMode) {
|
||||||
_interstitialMode = interstitialMode;
|
_interstitialMode = interstitialMode;
|
||||||
|
|
||||||
DependencyManager::get<AudioClient>()->setAudioPaused(_interstitialMode);
|
DependencyManager::get<AudioClient>()->setAudioPaused(_interstitialMode);
|
||||||
DependencyManager::get<AvatarManager>()->setMyAvatarDataPacketsPaused(_interstitialMode);
|
DependencyManager::get<AvatarManager>()->setMyAvatarDataPacketsPaused(_interstitialMode);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -432,7 +432,7 @@ public slots:
|
||||||
|
|
||||||
void setIsServerlessMode(bool serverlessDomain);
|
void setIsServerlessMode(bool serverlessDomain);
|
||||||
void loadServerlessDomain(QUrl domainURL, bool errorDomain = false);
|
void loadServerlessDomain(QUrl domainURL, bool errorDomain = false);
|
||||||
void setIsInterstitialMode(bool interstialMode);
|
void setIsInterstitialMode(bool interstitialMode);
|
||||||
|
|
||||||
void updateVerboseLogging();
|
void updateVerboseLogging();
|
||||||
|
|
||||||
|
|
|
@ -41,9 +41,15 @@ void ConnectionMonitor::init() {
|
||||||
}
|
}
|
||||||
|
|
||||||
connect(&_timer, &QTimer::timeout, this, [this]() {
|
connect(&_timer, &QTimer::timeout, this, [this]() {
|
||||||
qDebug() << "ConnectionMonitor: Redirecting to 404 error domain";
|
|
||||||
// set in a timeout error
|
// set in a timeout error
|
||||||
emit setRedirectErrorState(REDIRECT_HIFI_ADDRESS, 5);
|
bool enableInterstitial = DependencyManager::get<NodeList>()->getDomainHandler().getInterstitialModeEnabled();
|
||||||
|
if (enableInterstitial) {
|
||||||
|
qDebug() << "ConnectionMonitor: Redirecting to 404 error domain";
|
||||||
|
emit setRedirectErrorState(REDIRECT_HIFI_ADDRESS, "", 5);
|
||||||
|
} else {
|
||||||
|
qDebug() << "ConnectionMonitor: Showing connection failure window";
|
||||||
|
DependencyManager::get<DialogsManager>()->setDomainConnectionFailureVisibility(true);
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -53,4 +59,8 @@ void ConnectionMonitor::startTimer() {
|
||||||
|
|
||||||
void ConnectionMonitor::stopTimer() {
|
void ConnectionMonitor::stopTimer() {
|
||||||
_timer.stop();
|
_timer.stop();
|
||||||
|
bool enableInterstitial = DependencyManager::get<NodeList>()->getDomainHandler().getInterstitialModeEnabled();
|
||||||
|
if (!enableInterstitial) {
|
||||||
|
DependencyManager::get<DialogsManager>()->setDomainConnectionFailureVisibility(false);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -24,7 +24,7 @@ public:
|
||||||
void init();
|
void init();
|
||||||
|
|
||||||
signals:
|
signals:
|
||||||
void setRedirectErrorState(QUrl errorURL, int reasonCode);
|
void setRedirectErrorState(QUrl errorURL, QString reasonMessage = "", int reasonCode = -1, const QString& extraInfo = "");
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void startTimer();
|
void startTimer();
|
||||||
|
@ -34,4 +34,4 @@ private:
|
||||||
QTimer _timer;
|
QTimer _timer;
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif // hifi_ConnectionMonitor_h
|
#endif // hifi_ConnectionMonitor_h
|
||||||
|
|
|
@ -180,6 +180,14 @@ void WindowScriptingInterface::setPreviousBrowseAssetLocation(const QString& loc
|
||||||
Setting::Handle<QVariant>(LAST_BROWSE_ASSETS_LOCATION_SETTING).set(location);
|
Setting::Handle<QVariant>(LAST_BROWSE_ASSETS_LOCATION_SETTING).set(location);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool WindowScriptingInterface::getInterstitialModeEnabled() const {
|
||||||
|
return DependencyManager::get<NodeList>()->getDomainHandler().getInterstitialModeEnabled();
|
||||||
|
}
|
||||||
|
|
||||||
|
void WindowScriptingInterface::setInterstitialModeEnabled(bool enableInterstitialMode) {
|
||||||
|
DependencyManager::get<NodeList>()->getDomainHandler().setInterstitialModeEnabled(enableInterstitialMode);
|
||||||
|
}
|
||||||
|
|
||||||
bool WindowScriptingInterface::isPointOnDesktopWindow(QVariant point) {
|
bool WindowScriptingInterface::isPointOnDesktopWindow(QVariant point) {
|
||||||
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
auto offscreenUi = DependencyManager::get<OffscreenUi>();
|
||||||
return offscreenUi->isPointOnDesktopWindow(point);
|
return offscreenUi->isPointOnDesktopWindow(point);
|
||||||
|
|
|
@ -49,6 +49,7 @@ class WindowScriptingInterface : public QObject, public Dependency {
|
||||||
Q_PROPERTY(int innerHeight READ getInnerHeight)
|
Q_PROPERTY(int innerHeight READ getInnerHeight)
|
||||||
Q_PROPERTY(int x READ getX)
|
Q_PROPERTY(int x READ getX)
|
||||||
Q_PROPERTY(int y READ getY)
|
Q_PROPERTY(int y READ getY)
|
||||||
|
Q_PROPERTY(bool interstitialModeEnabled READ getInterstitialModeEnabled WRITE setInterstitialModeEnabled)
|
||||||
|
|
||||||
public:
|
public:
|
||||||
WindowScriptingInterface();
|
WindowScriptingInterface();
|
||||||
|
@ -758,6 +759,9 @@ private:
|
||||||
QString getPreviousBrowseAssetLocation() const;
|
QString getPreviousBrowseAssetLocation() const;
|
||||||
void setPreviousBrowseAssetLocation(const QString& location);
|
void setPreviousBrowseAssetLocation(const QString& location);
|
||||||
|
|
||||||
|
bool getInterstitialModeEnabled() const;
|
||||||
|
void setInterstitialModeEnabled(bool enableInterstitialMode);
|
||||||
|
|
||||||
void ensureReticleVisible() const;
|
void ensureReticleVisible() const;
|
||||||
|
|
||||||
int createMessageBox(QString title, QString text, int buttons, int defaultButton);
|
int createMessageBox(QString title, QString text, int buttons, int defaultButton);
|
||||||
|
|
|
@ -140,8 +140,7 @@ public:
|
||||||
* </table>
|
* </table>
|
||||||
* @typedef {number} location.LookupTrigger
|
* @typedef {number} location.LookupTrigger
|
||||||
*/
|
*/
|
||||||
enum LookupTrigger
|
enum LookupTrigger {
|
||||||
{
|
|
||||||
UserInput,
|
UserInput,
|
||||||
Back,
|
Back,
|
||||||
Forward,
|
Forward,
|
||||||
|
@ -207,9 +206,8 @@ public slots:
|
||||||
// functions and signals that should be exposed are moved to a scripting interface class.
|
// functions and signals that should be exposed are moved to a scripting interface class.
|
||||||
//
|
//
|
||||||
// we currently expect this to be called from NodeList once handleLookupString has been called with a path
|
// we currently expect this to be called from NodeList once handleLookupString has been called with a path
|
||||||
bool goToViewpointForPath(const QString& viewpointString, const QString& pathString) {
|
bool goToViewpointForPath(const QString& viewpointString, const QString& pathString)
|
||||||
return handleViewpoint(viewpointString, false, DomainPathResponse, false, pathString);
|
{ return handleViewpoint(viewpointString, false, DomainPathResponse, false, pathString); }
|
||||||
}
|
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* Go back to the previous location in your navigation history, if there is one.
|
* Go back to the previous location in your navigation history, if there is one.
|
||||||
|
@ -231,8 +229,7 @@ public slots:
|
||||||
* location history is correctly maintained.
|
* location history is correctly maintained.
|
||||||
*/
|
*/
|
||||||
void goToLocalSandbox(QString path = "", LookupTrigger trigger = LookupTrigger::StartupFromSettings) {
|
void goToLocalSandbox(QString path = "", LookupTrigger trigger = LookupTrigger::StartupFromSettings) {
|
||||||
handleUrl(SANDBOX_HIFI_ADDRESS + path, trigger);
|
handleUrl(SANDBOX_HIFI_ADDRESS + path, trigger); }
|
||||||
}
|
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
* Go to the default "welcome" metaverse address.
|
* Go to the default "welcome" metaverse address.
|
||||||
|
@ -364,8 +361,7 @@ signals:
|
||||||
* location.locationChangeRequired.connect(onLocationChangeRequired);
|
* location.locationChangeRequired.connect(onLocationChangeRequired);
|
||||||
*/
|
*/
|
||||||
void locationChangeRequired(const glm::vec3& newPosition,
|
void locationChangeRequired(const glm::vec3& newPosition,
|
||||||
bool hasOrientationChange,
|
bool hasOrientationChange, const glm::quat& newOrientation,
|
||||||
const glm::quat& newOrientation,
|
|
||||||
bool shouldFaceLocation);
|
bool shouldFaceLocation);
|
||||||
|
|
||||||
/**jsdoc
|
/**jsdoc
|
||||||
|
@ -448,11 +444,8 @@ private:
|
||||||
|
|
||||||
bool handleNetworkAddress(const QString& lookupString, LookupTrigger trigger, bool& hostChanged);
|
bool handleNetworkAddress(const QString& lookupString, LookupTrigger trigger, bool& hostChanged);
|
||||||
void handlePath(const QString& path, LookupTrigger trigger, bool wasPathOnly = false);
|
void handlePath(const QString& path, LookupTrigger trigger, bool wasPathOnly = false);
|
||||||
bool handleViewpoint(const QString& viewpointString,
|
bool handleViewpoint(const QString& viewpointString, bool shouldFace, LookupTrigger trigger,
|
||||||
bool shouldFace,
|
bool definitelyPathOnly = false, const QString& pathString = QString());
|
||||||
LookupTrigger trigger,
|
|
||||||
bool definitelyPathOnly = false,
|
|
||||||
const QString& pathString = QString());
|
|
||||||
bool handleUsername(const QString& lookupString);
|
bool handleUsername(const QString& lookupString);
|
||||||
bool handleDomainID(const QString& host);
|
bool handleDomainID(const QString& host);
|
||||||
|
|
||||||
|
|
|
@ -15,6 +15,10 @@
|
||||||
|
|
||||||
#include <PathUtils.h>
|
#include <PathUtils.h>
|
||||||
|
|
||||||
|
#include <shared/QtHelpers.h>
|
||||||
|
|
||||||
|
#include <QThread>
|
||||||
|
|
||||||
#include <QtCore/QJsonDocument>
|
#include <QtCore/QJsonDocument>
|
||||||
#include <QtCore/QDataStream>
|
#include <QtCore/QDataStream>
|
||||||
|
|
||||||
|
@ -134,6 +138,18 @@ void DomainHandler::hardReset() {
|
||||||
_pendingPath.clear();
|
_pendingPath.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool DomainHandler::getInterstitialModeEnabled() const {
|
||||||
|
return _interstitialModeSettingLock.resultWithReadLock<bool>([&] {
|
||||||
|
return _enableInterstitialMode.get();
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
void DomainHandler::setInterstitialModeEnabled(bool enableInterstitialMode) {
|
||||||
|
_interstitialModeSettingLock.withWriteLock([&] {
|
||||||
|
_enableInterstitialMode.set(enableInterstitialMode);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
void DomainHandler::setErrorDomainURL(const QUrl& url) {
|
void DomainHandler::setErrorDomainURL(const QUrl& url) {
|
||||||
_errorDomainURL = url;
|
_errorDomainURL = url;
|
||||||
return;
|
return;
|
||||||
|
@ -340,11 +356,15 @@ void DomainHandler::loadedErrorDomain(std::map<QString, QString> namedPaths) {
|
||||||
DependencyManager::get<AddressManager>()->goToViewpointForPath(viewpoint, QString());
|
DependencyManager::get<AddressManager>()->goToViewpointForPath(viewpoint, QString());
|
||||||
}
|
}
|
||||||
|
|
||||||
void DomainHandler::setRedirectErrorState(QUrl errorUrl, int reasonCode) {
|
void DomainHandler::setRedirectErrorState(QUrl errorUrl, QString reasonMessage, int reasonCode, const QString& extraInfo) {
|
||||||
_errorDomainURL = errorUrl;
|
|
||||||
_lastDomainConnectionError = reasonCode;
|
_lastDomainConnectionError = reasonCode;
|
||||||
_isInErrorState = true;
|
if (getInterstitialModeEnabled()) {
|
||||||
emit redirectToErrorDomainURL(_errorDomainURL);
|
_errorDomainURL = errorUrl;
|
||||||
|
_isInErrorState = true;
|
||||||
|
emit redirectToErrorDomainURL(_errorDomainURL);
|
||||||
|
} else {
|
||||||
|
emit domainConnectionRefused(reasonMessage, reasonCode, extraInfo);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void DomainHandler::requestDomainSettings() {
|
void DomainHandler::requestDomainSettings() {
|
||||||
|
@ -485,13 +505,9 @@ void DomainHandler::processDomainServerConnectionDeniedPacket(QSharedPointer<Rec
|
||||||
#if defined(Q_OS_ANDROID)
|
#if defined(Q_OS_ANDROID)
|
||||||
emit domainConnectionRefused(reasonMessage, (int)reasonCode, extraInfo);
|
emit domainConnectionRefused(reasonMessage, (int)reasonCode, extraInfo);
|
||||||
#else
|
#else
|
||||||
if (reasonCode == ConnectionRefusedReason::ProtocolMismatch || reasonCode == ConnectionRefusedReason::NotAuthorized) {
|
|
||||||
// ingest the error - this is a "hard" connection refusal.
|
// ingest the error - this is a "hard" connection refusal.
|
||||||
setRedirectErrorState(_errorDomainURL, (int)reasonCode);
|
setRedirectErrorState(_errorDomainURL, reasonMessage, (int)reasonCode, extraInfo);
|
||||||
} else {
|
|
||||||
emit domainConnectionRefused(reasonMessage, (int)reasonCode, extraInfo);
|
|
||||||
}
|
|
||||||
_lastDomainConnectionError = (int)reasonCode;
|
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -19,6 +19,9 @@
|
||||||
#include <QtCore/QUrl>
|
#include <QtCore/QUrl>
|
||||||
#include <QtNetwork/QHostInfo>
|
#include <QtNetwork/QHostInfo>
|
||||||
|
|
||||||
|
#include <shared/ReadWriteLockable.h>
|
||||||
|
#include <SettingHandle.h>
|
||||||
|
|
||||||
#include "HifiSockAddr.h"
|
#include "HifiSockAddr.h"
|
||||||
#include "NetworkPeer.h"
|
#include "NetworkPeer.h"
|
||||||
#include "NLPacket.h"
|
#include "NLPacket.h"
|
||||||
|
@ -83,6 +86,8 @@ public:
|
||||||
bool isConnected() const { return _isConnected; }
|
bool isConnected() const { return _isConnected; }
|
||||||
void setIsConnected(bool isConnected);
|
void setIsConnected(bool isConnected);
|
||||||
bool isServerless() const { return _domainURL.scheme() != URL_SCHEME_HIFI; }
|
bool isServerless() const { return _domainURL.scheme() != URL_SCHEME_HIFI; }
|
||||||
|
bool getInterstitialModeEnabled() const;
|
||||||
|
void setInterstitialModeEnabled(bool enableInterstitialMode);
|
||||||
|
|
||||||
void connectedToServerless(std::map<QString, QString> namedPaths);
|
void connectedToServerless(std::map<QString, QString> namedPaths);
|
||||||
|
|
||||||
|
@ -171,7 +176,7 @@ public slots:
|
||||||
void processDomainServerConnectionDeniedPacket(QSharedPointer<ReceivedMessage> message);
|
void processDomainServerConnectionDeniedPacket(QSharedPointer<ReceivedMessage> message);
|
||||||
|
|
||||||
// sets domain handler in error state.
|
// sets domain handler in error state.
|
||||||
void setRedirectErrorState(QUrl errorUrl, int reasonCode);
|
void setRedirectErrorState(QUrl errorUrl, QString reasonMessage = "", int reason = -1, const QString& extraInfo = "");
|
||||||
|
|
||||||
bool isInErrorState() { return _isInErrorState; }
|
bool isInErrorState() { return _isInErrorState; }
|
||||||
|
|
||||||
|
@ -224,6 +229,8 @@ private:
|
||||||
QJsonObject _settingsObject;
|
QJsonObject _settingsObject;
|
||||||
QString _pendingPath;
|
QString _pendingPath;
|
||||||
QTimer _settingsTimer;
|
QTimer _settingsTimer;
|
||||||
|
mutable ReadWriteLockable _interstitialModeSettingLock;
|
||||||
|
Setting::Handle<bool> _enableInterstitialMode{ "enableInterstitialMode", false };
|
||||||
|
|
||||||
QSet<QString> _domainConnectionRefusals;
|
QSet<QString> _domainConnectionRefusals;
|
||||||
bool _hasCheckedForAccessToken { false };
|
bool _hasCheckedForAccessToken { false };
|
||||||
|
|
Loading…
Reference in a new issue