#19505 - Add domain & orientation parsing to hifi:// protocol handler

This commit is contained in:
stojce 2014-02-13 22:44:10 +01:00
parent e5072bc00f
commit ab4164a6df
3 changed files with 65 additions and 8 deletions

View file

@ -687,8 +687,25 @@ bool Application::event(QEvent* event) {
if (event->type() == QEvent::FileOpen) { if (event->type() == QEvent::FileOpen) {
QFileOpenEvent* fileEvent = static_cast<QFileOpenEvent*>(event); QFileOpenEvent* fileEvent = static_cast<QFileOpenEvent*>(event);
if (!fileEvent->url().isEmpty() && fileEvent->url().toLocalFile().startsWith(CUSTOM_URL_SCHEME)) { if (!fileEvent->url().isEmpty() && fileEvent->url().toLocalFile().startsWith(CUSTOM_URL_SCHEME)) {
QString destination = fileEvent->url().toLocalFile().remove(QRegExp(CUSTOM_URL_SCHEME + "|/")); QString destination = fileEvent->url().toLocalFile().remove(CUSTOM_URL_SCHEME);
Menu::getInstance()->goToDestination(destination); QStringList urlParts = destination.split('/', QString::SkipEmptyParts);
if (urlParts.count() > 1) {
// if url has 2 or more parts, the first one is domain name
Menu::getInstance()->goToDomain(urlParts[0]);
// location coordinates
Menu::getInstance()->goToDestination(urlParts[1]);
if (urlParts.count() > 2) {
// location orientation
Menu::getInstance()->goToOrientation(urlParts[2]);
}
} else if (urlParts.count() == 1) {
// location coordinates
Menu::getInstance()->goToDestination(urlParts[0]);
}
} }
return false; return false;

View file

@ -889,6 +889,17 @@ void Menu::editPreferences() {
sendFakeEnterEvent(); sendFakeEnterEvent();
} }
void Menu::goToDomain(const QString newDomain) {
if (NodeList::getInstance()->getDomainHostname() != newDomain) {
// send a node kill request, indicating to other clients that they should play the "disappeared" effect
Application::getInstance()->getAvatar()->sendKillAvatar();
// give our nodeList the new domain-server hostname
NodeList::getInstance()->setDomainHostname(newDomain);
}
}
void Menu::goToDomain() { void Menu::goToDomain() {
QString currentDomainHostname = NodeList::getInstance()->getDomainHostname(); QString currentDomainHostname = NodeList::getInstance()->getDomainHostname();
@ -914,16 +925,43 @@ void Menu::goToDomain() {
newHostname = domainDialog.textValue(); newHostname = domainDialog.textValue();
} }
// send a node kill request, indicating to other clients that they should play the "disappeared" effect goToDomain(newHostname);
Application::getInstance()->getAvatar()->sendKillAvatar();
// give our nodeList the new domain-server hostname
NodeList::getInstance()->setDomainHostname(domainDialog.textValue());
} }
sendFakeEnterEvent(); sendFakeEnterEvent();
} }
void Menu::goToOrientation(QString orientation) {
if (orientation.isEmpty()) {
return;
}
QStringList orientationItems = orientation.split(QRegExp("_|,"), QString::SkipEmptyParts);
const int NUMBER_OF_ORIENTATION_ITEMS = 4;
const int W_ITEM = 0;
const int X_ITEM = 1;
const int Y_ITEM = 2;
const int Z_ITEM = 3;
if (orientationItems.size() == NUMBER_OF_ORIENTATION_ITEMS) {
double w = replaceLastOccurrence('-', '.', orientationItems[W_ITEM].trimmed()).toDouble();
double x = replaceLastOccurrence('-', '.', orientationItems[X_ITEM].trimmed()).toDouble();
double y = replaceLastOccurrence('-', '.', orientationItems[Y_ITEM].trimmed()).toDouble();
double z = replaceLastOccurrence('-', '.', orientationItems[Z_ITEM].trimmed()).toDouble();
glm::quat newAvatarOrientation(w, x, y, z);
MyAvatar* myAvatar = Application::getInstance()->getAvatar();
glm::quat avatarOrientation = myAvatar->getOrientation();
if (newAvatarOrientation != avatarOrientation) {
myAvatar->setOrientation(newAvatarOrientation);
}
}
}
bool Menu::goToDestination(QString destination) { bool Menu::goToDestination(QString destination) {
QStringList coordinateItems = destination.split(QRegExp("_|,"), QString::SkipEmptyParts); QStringList coordinateItems = destination.split(QRegExp("_|,"), QString::SkipEmptyParts);

View file

@ -85,6 +85,8 @@ public:
QAction::MenuRole role = QAction::NoRole); QAction::MenuRole role = QAction::NoRole);
virtual void removeAction(QMenu* menu, const QString& actionName); virtual void removeAction(QMenu* menu, const QString& actionName);
bool goToDestination(QString destination); bool goToDestination(QString destination);
void goToOrientation(QString orientation);
void goToDomain(const QString newDomain);
public slots: public slots:
void bandwidthDetails(); void bandwidthDetails();