use DependencyManager for AddressManager

This commit is contained in:
Stephen Birarda 2014-12-15 14:54:20 -08:00
parent 78a61cd48b
commit 1b48cf7f5a
10 changed files with 58 additions and 50 deletions

View file

@ -304,17 +304,17 @@ Application::Application(int& argc, char** argv, QElapsedTimer &startup_time) :
// once the event loop has started, check and signal for an access token
QMetaObject::invokeMethod(&accountManager, "checkAndSignalForAccessToken", Qt::QueuedConnection);
AddressManager& addressManager = AddressManager::getInstance();
AddressManager* addressManager = DependencyManager::get<AddressManager>();
// use our MyAvatar position and quat for address manager path
addressManager.setPositionGetter(getPositionForPath);
addressManager.setOrientationGetter(getOrientationForPath);
addressManager->setPositionGetter(getPositionForPath);
addressManager->setOrientationGetter(getOrientationForPath);
// handle domain change signals from AddressManager
connect(&addressManager, &AddressManager::possibleDomainChangeRequiredToHostname,
connect(addressManager, &AddressManager::possibleDomainChangeRequiredToHostname,
this, &Application::changeDomainHostname);
connect(&addressManager, &AddressManager::possibleDomainChangeRequiredViaICEForID,
connect(addressManager, &AddressManager::possibleDomainChangeRequiredViaICEForID,
&domainHandler, &DomainHandler::setIceServerHostnameAndID);
_settings = new QSettings(this);
@ -841,7 +841,7 @@ bool Application::event(QEvent* event) {
QFileOpenEvent* fileEvent = static_cast<QFileOpenEvent*>(event);
if (!fileEvent->url().isEmpty()) {
AddressManager::getInstance().handleLookupString(fileEvent->url().toString());
DependencyManager::get<AddressManager>()->handleLookupString(fileEvent->url().toString());
}
return false;
@ -1953,22 +1953,13 @@ void Application::init() {
// when --url in command line, teleport to location
const QString HIFI_URL_COMMAND_LINE_KEY = "--url";
int urlIndex = arguments().indexOf(HIFI_URL_COMMAND_LINE_KEY);
QString addressLookupString;
if (urlIndex != -1) {
AddressManager::getInstance().handleLookupString(arguments().value(urlIndex + 1));
} else {
// check if we have a URL in settings to load to jump back to
// we load this separate from the other settings so we don't double lookup a URL
QSettings* interfaceSettings = lockSettings();
QVariant addressVariant = interfaceSettings->value(SETTINGS_ADDRESS_KEY);
QString addressString = addressVariant.isNull()
? DEFAULT_HIFI_ADDRESS : addressVariant.toUrl().toString();
unlockSettings();
AddressManager::getInstance().handleLookupString(addressString);
addressLookupString = arguments().value(urlIndex + 1);
}
DependencyManager::get<AddressManager>()->loadSettings(addressLookupString);
qDebug() << "Loaded settings";
#ifdef __APPLE__
@ -3615,7 +3606,7 @@ void Application::updateWindowTitle(){
QString connectionStatus = nodeList->getDomainHandler().isConnected() ? "" : " (NOT CONNECTED) ";
QString username = AccountManager::getInstance().getAccountInfo().getUsername();
QString title = QString() + (!username.isEmpty() ? username + " @ " : QString())
+ AddressManager::getInstance().getCurrentDomain() + connectionStatus + buildVersion;
+ DependencyManager::get<AddressManager>()->getCurrentDomain() + connectionStatus + buildVersion;
AccountManager& accountManager = AccountManager::getInstance();
if (accountManager.getAccountInfo().hasBalance()) {
@ -3646,7 +3637,7 @@ void Application::updateLocationInServer() {
QJsonObject locationObject;
QString pathString = AddressManager::getInstance().currentPath();
QString pathString = DependencyManager::get<AddressManager>()->currentPath();
const QString LOCATION_KEY_IN_ROOT = "location";
const QString PATH_KEY_IN_LOCATION = "path";
@ -4189,7 +4180,7 @@ void Application::uploadAttachment() {
void Application::openUrl(const QUrl& url) {
if (!url.isEmpty()) {
if (url.scheme() == HIFI_URL_SCHEME) {
AddressManager::getInstance().handleLookupString(url.toString());
DependencyManager::get<AddressManager>()->handleLookupString(url.toString());
} else {
// address manager did not handle - ask QDesktopServices to handle
QDesktopServices::openUrl(url);

View file

@ -155,9 +155,9 @@ Menu::Menu() :
connect(&accountManager, &AccountManager::logoutComplete, this, &Menu::toggleLoginMenuItem);
// connect to signal of account manager so we can tell user when the user/place they looked at is offline
AddressManager& addressManager = AddressManager::getInstance();
connect(&addressManager, &AddressManager::lookupResultIsOffline, this, &Menu::displayAddressOfflineMessage);
connect(&addressManager, &AddressManager::lookupResultIsNotFound, this, &Menu::displayAddressNotFoundMessage);
AddressManager* addressManager = DependencyManager::get<AddressManager>();
connect(addressManager, &AddressManager::lookupResultIsOffline, this, &Menu::displayAddressOfflineMessage);
connect(addressManager, &AddressManager::lookupResultIsNotFound, this, &Menu::displayAddressNotFoundMessage);
addDisabledActionAndSeparator(fileMenu, "Scripts");
addActionToQMenuAndActionHash(fileMenu, MenuOption::LoadScript, Qt::CTRL | Qt::Key_O, appInstance, SLOT(loadDialog()));
@ -763,8 +763,6 @@ void Menu::saveSettings(QSettings* settings) {
scanMenuBar(&saveAction, settings);
Application::getInstance()->getAvatar()->saveData(settings);
settings->setValue(SETTINGS_ADDRESS_KEY, AddressManager::getInstance().currentAddress());
if (lockedSettings) {
Application::getInstance()->unlockSettings();
@ -1198,7 +1196,7 @@ void Menu::displayNameLocationResponse(const QString& errorString) {
void Menu::toggleLocationList() {
if (!_userLocationsDialog) {
JavascriptObjectMap locationObjectMap;
locationObjectMap.insert("InterfaceLocation", &AddressManager::getInstance());
locationObjectMap.insert("InterfaceLocation", DependencyManager::get<AddressManager>());
_userLocationsDialog = DataWebDialog::dialogForPath("/user/locations", locationObjectMap);
}
@ -1242,7 +1240,7 @@ void Menu::nameLocation() {
if (!_newLocationDialog) {
JavascriptObjectMap locationObjectMap;
locationObjectMap.insert("InterfaceLocation", &AddressManager::getInstance());
locationObjectMap.insert("InterfaceLocation", DependencyManager::get<AddressManager>());
_newLocationDialog = DataWebDialog::dialogForPath("/user/locations/new", locationObjectMap);
}

View file

@ -51,8 +51,6 @@ const float ADJUST_LOD_MAX_SIZE_SCALE = DEFAULT_OCTREE_SIZE_SCALE;
const float MINIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER = 0.1f;
const float MAXIMUM_AVATAR_LOD_DISTANCE_MULTIPLIER = 15.0f;
const QString SETTINGS_ADDRESS_KEY = "address";
enum FrustumDrawMode {
FRUSTUM_DRAW_MODE_ALL,
FRUSTUM_DRAW_MODE_VECTORS,

View file

@ -102,7 +102,7 @@ MyAvatar::MyAvatar() :
_skeletonModel.buildRagdoll();
// connect to AddressManager signal for location jumps
connect(&AddressManager::getInstance(), &AddressManager::locationChangeRequired, this, &MyAvatar::goToLocation);
connect(DependencyManager::get<AddressManager>(), &AddressManager::locationChangeRequired, this, &MyAvatar::goToLocation);
}
MyAvatar::~MyAvatar() {

View file

@ -19,7 +19,7 @@ LocationScriptingInterface* LocationScriptingInterface::getInstance() {
}
QScriptValue LocationScriptingInterface::locationGetter(QScriptContext* context, QScriptEngine* engine) {
return engine->newQObject(&AddressManager::getInstance());
return engine->newQObject(DependencyManager::get<AddressManager>());
}
QScriptValue LocationScriptingInterface::locationSetter(QScriptContext* context, QScriptEngine* engine) {
@ -28,11 +28,11 @@ QScriptValue LocationScriptingInterface::locationSetter(QScriptContext* context,
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",
QMetaObject::invokeMethod(DependencyManager::get<AddressManager>(), "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",
QMetaObject::invokeMethod(DependencyManager::get<AddressManager>(), "handleLookupString",
Q_ARG(const QString&, argumentVariant.toString()));
}

View file

@ -121,8 +121,8 @@ void AddressBarDialog::showEvent(QShowEvent* event) {
void AddressBarDialog::accept() {
if (!_addressLineEdit->text().isEmpty()) {
_goButton->setIcon(QIcon(Application::resourcesPath() + ADDRESSBAR_GO_BUTTON_ACTIVE_ICON));
AddressManager& addressManager = AddressManager::getInstance();
connect(&addressManager, &AddressManager::lookupResultsFinished, this, &QDialog::hide);
addressManager.handleLookupString(_addressLineEdit->text());
AddressManager* addressManager = DependencyManager::get<AddressManager>();
connect(addressManager, &AddressManager::lookupResultsFinished, this, &QDialog::hide);
addressManager->handleLookupString(_addressLineEdit->text());
}
}

View file

@ -171,7 +171,7 @@ bool ChatWindow::eventFilter(QObject* sender, QEvent* event) {
} else if (event->type() == QEvent::MouseButtonRelease) {
QVariant userVar = sender->property("user");
if (userVar.isValid()) {
AddressManager::getInstance().goToUser(userVar.toString());
DependencyManager::get<AddressManager>()->goToUser(userVar.toString());
return true;
}
}

View file

@ -36,7 +36,7 @@ bool DataWebPage::acceptNavigationRequest(QWebFrame* frame, const QNetworkReques
return true;
} else {
// this is a hifi URL - have the AddressManager handle it
QMetaObject::invokeMethod(&AddressManager::getInstance(), "handleLookupString",
QMetaObject::invokeMethod(DependencyManager::get<AddressManager>(), "handleLookupString",
Qt::AutoConnection, Q_ARG(const QString&, request.url().toString()));
return false;
}

View file

@ -21,11 +21,6 @@
#include "AddressManager.h"
AddressManager& AddressManager::getInstance() {
static AddressManager sharedInstance;
return sharedInstance;
}
AddressManager::AddressManager() :
_currentDomain(),
_positionGetter(NULL),
@ -48,6 +43,27 @@ const QUrl AddressManager::currentAddress() const {
return hifiURL;
}
const QString ADDRESS_MANAGER_SETTINGS_GROUP = "AddressManager";
const QString SETTINGS_CURRENT_ADDRESS_KEY = "address";
void AddressManager::loadSettings(const QString& lookupString) {
if (lookupString.isEmpty()) {
QSettings settings;
settings.beginGroup(ADDRESS_MANAGER_SETTINGS_GROUP);
handleLookupString(settings.value(SETTINGS_CURRENT_ADDRESS_KEY).toString());
} else {
handleLookupString(lookupString);
}
}
void AddressManager::storeCurrentAddress() {
QSettings settings;
settings.beginGroup(ADDRESS_MANAGER_SETTINGS_GROUP);
settings.setValue(SETTINGS_CURRENT_ADDRESS_KEY, currentAddress());
settings.endGroup();
}
const QString AddressManager::currentPath(bool withOrientation) const {
if (_positionGetter) {

View file

@ -17,6 +17,8 @@
#include <glm/glm.hpp>
#include <glm/gtc/quaternion.hpp>
#include <DependencyManager.h>
#include "AccountManager.h"
const QString HIFI_URL_SCHEME = "hifi";
@ -25,7 +27,7 @@ const QString DEFAULT_HIFI_ADDRESS = "hifi://sandbox";
typedef const glm::vec3& (*PositionGetter)();
typedef glm::quat (*OrientationGetter)();
class AddressManager : public QObject {
class AddressManager : public QObject, public DependencyManager::Dependency {
Q_OBJECT
Q_PROPERTY(bool isConnected READ isConnected)
Q_PROPERTY(QUrl href READ currentAddress)
@ -34,8 +36,6 @@ class AddressManager : public QObject {
Q_PROPERTY(QString pathname READ currentPath)
Q_PROPERTY(QString domainID READ getDomainID)
public:
static AddressManager& getInstance();
bool isConnected();
const QString& getProtocol() { return HIFI_URL_SCHEME; };
@ -50,6 +50,10 @@ public:
void setPositionGetter(PositionGetter positionGetter) { _positionGetter = positionGetter; }
void setOrientationGetter(OrientationGetter orientationGetter) { _orientationGetter = orientationGetter; }
void loadSettings(const QString& lookupString = QString());
friend class DependencyManager;
public slots:
void handleLookupString(const QString& lookupString);
void goToUser(const QString& username);
@ -64,12 +68,13 @@ signals:
void locationChangeRequired(const glm::vec3& newPosition,
bool hasOrientationChange, const glm::quat& newOrientation,
bool shouldFaceLocation);
protected:
AddressManager();
private slots:
void handleAPIResponse(QNetworkReply& requestReply);
void handleAPIError(QNetworkReply& errorReply);
void storeCurrentAddress();
private:
AddressManager();
void setDomainHostnameAndName(const QString& hostname, const QString& domainName = QString());
const JSONCallbackParameters& apiCallbackParameters();