diff --git a/domain-server/resources/web/favicon.ico b/domain-server/resources/web/favicon.ico
new file mode 100644
index 0000000000..becc1b8e8b
Binary files /dev/null and b/domain-server/resources/web/favicon.ico differ
diff --git a/domain-server/resources/web/js/shared.js b/domain-server/resources/web/js/shared.js
new file mode 100644
index 0000000000..4e2392f0bb
--- /dev/null
+++ b/domain-server/resources/web/js/shared.js
@@ -0,0 +1,321 @@
+Settings = {
+ showAdvanced: false,
+ METAVERSE_URL: 'https://staging.highfidelity.com',
+ ADVANCED_CLASS: 'advanced-setting',
+ DEPRECATED_CLASS: 'deprecated-setting',
+ TRIGGER_CHANGE_CLASS: 'trigger-change',
+ DATA_ROW_CLASS: 'value-row',
+ DATA_COL_CLASS: 'value-col',
+ DATA_CATEGORY_CLASS: 'value-category',
+ ADD_ROW_BUTTON_CLASS: 'add-row',
+ ADD_ROW_SPAN_CLASSES: 'glyphicon glyphicon-plus add-row',
+ DEL_ROW_BUTTON_CLASS: 'del-row',
+ DEL_ROW_SPAN_CLASSES: 'glyphicon glyphicon-remove del-row',
+ ADD_CATEGORY_BUTTON_CLASS: 'add-category',
+ ADD_CATEGORY_SPAN_CLASSES: 'glyphicon glyphicon-plus add-category',
+ TOGGLE_CATEGORY_COLUMN_CLASS: 'toggle-category',
+ TOGGLE_CATEGORY_SPAN_CLASS: 'toggle-category-icon',
+ TOGGLE_CATEGORY_SPAN_CLASSES: 'glyphicon toggle-category-icon',
+ TOGGLE_CATEGORY_EXPANDED_CLASS: 'glyphicon-triangle-bottom',
+ TOGGLE_CATEGORY_CONTRACTED_CLASS: 'glyphicon-triangle-right',
+ DEL_CATEGORY_BUTTON_CLASS: 'del-category',
+ DEL_CATEGORY_SPAN_CLASSES: 'glyphicon glyphicon-remove del-category',
+ MOVE_UP_BUTTON_CLASS: 'move-up',
+ MOVE_UP_SPAN_CLASSES: 'glyphicon glyphicon-chevron-up move-up',
+ MOVE_DOWN_BUTTON_CLASS: 'move-down',
+ MOVE_DOWN_SPAN_CLASSES: 'glyphicon glyphicon-chevron-down move-down',
+ TABLE_BUTTONS_CLASS: 'buttons',
+ ADD_DEL_BUTTONS_CLASS: 'add-del-buttons',
+ ADD_DEL_BUTTONS_CLASSES: 'buttons add-del-buttons',
+ REORDER_BUTTONS_CLASS: 'reorder-buttons',
+ REORDER_BUTTONS_CLASSES: 'buttons reorder-buttons',
+ NEW_ROW_CLASS: 'new-row',
+ CONNECT_ACCOUNT_BTN_ID: 'connect-account-btn',
+ DISCONNECT_ACCOUNT_BTN_ID: 'disconnect-account-btn',
+ CREATE_DOMAIN_ID_BTN_ID: 'create-domain-btn',
+ CHOOSE_DOMAIN_ID_BTN_ID: 'choose-domain-btn',
+ GET_TEMPORARY_NAME_BTN_ID: 'get-temp-name-btn',
+ DOMAIN_ID_SELECTOR: '[name="metaverse.id"]',
+ ACCESS_TOKEN_SELECTOR: '[name="metaverse.access_token"]',
+ PLACES_TABLE_ID: 'places-table',
+ ADD_PLACE_BTN_ID: 'add-place-btn',
+ FORM_ID: 'settings-form',
+ INVALID_ROW_CLASS: 'invalid-input',
+ DATA_ROW_INDEX: 'data-row-index'
+};
+
+Strings = {
+ LOADING_SETTINGS_ERROR: "There was a problem loading the domain settings.\nPlease refresh the page to try again.",
+
+ CHOOSE_DOMAIN_BUTTON: "Choose from my domains",
+ CREATE_DOMAIN_BUTTON: "Create new domain ID",
+ CREATE_DOMAIN_SUCCESS_JUST_CONNECTED: "We connnected your High Fidelity account and created a new domain ID for this machine.",
+ CREATE_DOMAIN_SUCCESS: "We created a new domain ID for this machine.",
+
+ // When a place modification fails, they will be brought back to the previous
+ // dialog with new path still set, allowing them to retry immediately, and without
+ // having to type the new path in again.
+ EDIT_PLACE_TITLE: "Modify Viewpoint or Path",
+ EDIT_PLACE_ERROR: "Failed to update place path. Please try again.",
+ EDIT_PLACE_CONFIRM_BUTTON: "Save",
+ EDIT_PLACE_CONFIRM_BUTTON_PENDING: "Saving...",
+ EDIT_PLACE_CANCEL_BUTTON: "Cancel",
+
+ REMOVE_PLACE_TITLE: "Are you sure you want to remove {{place}} ?",
+ REMOVE_PLACE_ERROR: "Failed to remove place. Please try again.",
+ REMOVE_PLACE_DELETE_BUTTON: "Delete",
+ REMOVE_PLACE_DELETE_BUTTON_PENDING: "Deleting...",
+ REMOVE_PLACE_CANCEL_BUTTON: "Cancel",
+
+ ADD_PLACE_TITLE: "Choose a place",
+ ADD_PLACE_MESSAGE: "Choose the High Fidelity place to point at this domain server.",
+ ADD_PLACE_CONFIRM_BUTTON: "Choose place",
+ ADD_PLACE_CONFIRM_BUTTON_PENDING: "Saving...",
+ ADD_PLACE_CANCEL_BUTTON: "Cancel",
+ ADD_PLACE_UNKNOWN_ERROR: "There was an error adding this place name.",
+
+ ADD_PLACE_NO_PLACES_MESSAGE: "
');
+
+ var currentDomainIDType = getCurrentDomainIDType();
+ if (currentDomainIDType === DOMAIN_ID_TYPE_TEMP) {
+ var warning = "
";
+ warning += "If you choose a place name it will replace your current temporary place name.";
+ warning += "
";
+ modal_body.append(warning);
+ }
+
+ // setup a select box for the returned places
+ modal_body.append($("
Places "));
+ place_select = $("
");
+ _.each(data.data.places, function(place) {
+ places_by_id[place.id] = place;
+ place_select.append("
" + place.name + " ");
+ })
+ modal_body.append(place_select);
+ modal_body.append($("
This place name already points to a place or path. Saving this would overwrite the previous settings associated with it.
"));
+
+ if (forcePathTo === undefined || forcePathTo === null) {
+ var path = "
";
+ path += "Path ";
+ path += " ";
+ path += "
";
+ modal_body.append($(path));
+ }
+
+ var place_select = modal_body.find("#place-name-select")
+ place_select.change(function(ev) {
+ var warning = modal_body.find("#place-name-warning");
+ var place = places_by_id[$(this).val()];
+ console.log(warning, place, $(this).val());
+ if (place === undefined || place.pointee === null) {
+ warning.hide();
+ } else {
+ warning.show();
+ }
+ });
+ place_select.trigger('change');
+
+ modal_buttons["success"] = {
+ label: Strings.ADD_PLACE_CONFIRM_BUTTON,
+ className: 'add-place-confirm-button btn btn-primary',
+ callback: function() {
+ var placeID = $('#place-name-select').val()
+ // set the place ID on the form
+ $(Settings.place_ID_SELECTOR).val(placeID).change();
+
+ if (forcePathTo === undefined || forcePathTo === null) {
+ var placePath = $('#place-path-input').val();
+ } else {
+ var placePath = forcePathTo;
+ }
+
+ $('.add-place-confirm-button').attr('disabled', 'disabled');
+ $('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON_PENDING);
+ $('.add-place-cancel-button').attr('disabled', 'disabled');
+
+ function finalizeSaveDomainID(domainID) {
+ var jsonSettings = {
+ metaverse: {
+ id: domainID
+ }
+ }
+ var dialog = showLoadingDialog("Waiting for Domain Server to restart...");
+ $.ajax('/settings.json', {
+ data: JSON.stringify(jsonSettings),
+ contentType: 'application/json',
+ type: 'POST'
+ }).done(function(data) {
+ if (data.status == "success") {
+ waitForDomainServerBackUp(function() {
+ dialog.modal('hide');
+ if (onSuccessfullyAdded) {
+ onSuccessfullyAdded(places_by_id[placeID].name, domainID);
+ }
+ });
+ } else {
+ bootbox.alert("Failed to add place");
+ }
+ }).fail(function() {
+ bootbox.alert("Failed to add place");
+ });
+ }
+
+ function finishSettingUpPlace(domainID) {
+ sendUpdatePlaceRequest(
+ placeID,
+ placePath,
+ domainID,
+ false,
+ function(data) {
+ $(Settings.DOMAIN_ID_SELECTOR).val(domainID).change();
+ dialog.modal('hide')
+ if (domainID) {
+ finalizeSaveDomainID(domainID);
+ } else {
+ if (onSuccessfullyAdded) {
+ onSuccessfullyAdded(places_by_id[placeID].name);
+ }
+ }
+ },
+ function(data) {
+ $('.add-place-confirm-button').removeAttr('disabled');
+ $('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON);
+ $('.add-place-cancel-button').removeAttr('disabled');
+ bootbox.alert(Strings.ADD_PLACE_UNKNOWN_ERROR);
+ }
+ );
+ }
+
+ if (currentDomainIDType === DOMAIN_ID_TYPE_FULL) {
+ finishSettingUpPlace();
+ } else {
+ sendCreateDomainRequest(function(domainID) {
+ console.log("Created domain", domainID);
+ finishSettingUpPlace(domainID);
+ }, function() {
+ $('.add-place-confirm-button').removeAttr('disabled');
+ $('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON);
+ $('.add-place-cancel-button').removeAttr('disabled');
+ bootbox.alert(Strings.ADD_PLACE_UNKNOWN_ERROR);
+ bootbox.alert("FAIL");
+ });
+ }
+
+
+ return false;
+ }
+ }
+ } else {
+ modal_buttons["success"] = {
+ label: Strings.ADD_PLACE_NO_PLACES_BUTTON,
+ callback: function() {
+ window.open(Settings.METAVERSE_URL + "/user/places", '_blank');
+ }
+ }
+ modal_body = Strings.ADD_PLACE_NO_PLACES_MESSAGE;
+ }
+
+ dialog = bootbox.dialog({
+ title: Strings.ADD_PLACE_TITLE,
+ message: modal_body,
+ closeButton: false,
+ buttons: modal_buttons
+ });
+ } else {
+ bootbox.alert(Strings.ADD_PLACE_UNABLE_TO_LOAD_ERROR);
+ }
+ },
+ error: function() {
+ bootbox.alert(Strings.ADD_PLACE_UNABLE_TO_LOAD_ERROR);
+ },
+ complete: function() {
+ loadingDialog.modal('hide');
+ }
+ });
+
+ } else {
+ bootbox.alert({
+ message: "You must have an access token to query your High Fidelity places.
" +
+ "Please follow the instructions on the settings page to add an access token.",
+ title: "Access token required"
+ })
+ }
+}
diff --git a/domain-server/resources/web/settings/index.shtml b/domain-server/resources/web/settings/index.shtml
index d4c716f6f2..d5b0b1f96a 100644
--- a/domain-server/resources/web/settings/index.shtml
+++ b/domain-server/resources/web/settings/index.shtml
@@ -87,6 +87,7 @@
+
diff --git a/domain-server/resources/web/settings/js/settings.js b/domain-server/resources/web/settings/js/settings.js
index 8de48fa666..ac8ee40481 100644
--- a/domain-server/resources/web/settings/js/settings.js
+++ b/domain-server/resources/web/settings/js/settings.js
@@ -1,86 +1,3 @@
-var Settings = {
- showAdvanced: false,
- METAVERSE_URL: 'https://staging.highfidelity.com',
- ADVANCED_CLASS: 'advanced-setting',
- DEPRECATED_CLASS: 'deprecated-setting',
- TRIGGER_CHANGE_CLASS: 'trigger-change',
- DATA_ROW_CLASS: 'value-row',
- DATA_COL_CLASS: 'value-col',
- DATA_CATEGORY_CLASS: 'value-category',
- ADD_ROW_BUTTON_CLASS: 'add-row',
- ADD_ROW_SPAN_CLASSES: 'glyphicon glyphicon-plus add-row',
- DEL_ROW_BUTTON_CLASS: 'del-row',
- DEL_ROW_SPAN_CLASSES: 'glyphicon glyphicon-remove del-row',
- ADD_CATEGORY_BUTTON_CLASS: 'add-category',
- ADD_CATEGORY_SPAN_CLASSES: 'glyphicon glyphicon-plus add-category',
- TOGGLE_CATEGORY_COLUMN_CLASS: 'toggle-category',
- TOGGLE_CATEGORY_SPAN_CLASS: 'toggle-category-icon',
- TOGGLE_CATEGORY_SPAN_CLASSES: 'glyphicon toggle-category-icon',
- TOGGLE_CATEGORY_EXPANDED_CLASS: 'glyphicon-triangle-bottom',
- TOGGLE_CATEGORY_CONTRACTED_CLASS: 'glyphicon-triangle-right',
- DEL_CATEGORY_BUTTON_CLASS: 'del-category',
- DEL_CATEGORY_SPAN_CLASSES: 'glyphicon glyphicon-remove del-category',
- MOVE_UP_BUTTON_CLASS: 'move-up',
- MOVE_UP_SPAN_CLASSES: 'glyphicon glyphicon-chevron-up move-up',
- MOVE_DOWN_BUTTON_CLASS: 'move-down',
- MOVE_DOWN_SPAN_CLASSES: 'glyphicon glyphicon-chevron-down move-down',
- TABLE_BUTTONS_CLASS: 'buttons',
- ADD_DEL_BUTTONS_CLASS: 'add-del-buttons',
- ADD_DEL_BUTTONS_CLASSES: 'buttons add-del-buttons',
- REORDER_BUTTONS_CLASS: 'reorder-buttons',
- REORDER_BUTTONS_CLASSES: 'buttons reorder-buttons',
- NEW_ROW_CLASS: 'new-row',
- CONNECT_ACCOUNT_BTN_ID: 'connect-account-btn',
- DISCONNECT_ACCOUNT_BTN_ID: 'disconnect-account-btn',
- CREATE_DOMAIN_ID_BTN_ID: 'create-domain-btn',
- CHOOSE_DOMAIN_ID_BTN_ID: 'choose-domain-btn',
- GET_TEMPORARY_NAME_BTN_ID: 'get-temp-name-btn',
- DOMAIN_ID_SELECTOR: '[name="metaverse.id"]',
- ACCESS_TOKEN_SELECTOR: '[name="metaverse.access_token"]',
- PLACES_TABLE_ID: 'places-table',
- ADD_PLACE_BTN_ID: 'add-place-btn',
- FORM_ID: 'settings-form',
- INVALID_ROW_CLASS: 'invalid-input',
- DATA_ROW_INDEX: 'data-row-index'
-};
-
-var Strings = {
- LOADING_SETTINGS_ERROR: "There was a problem loading the domain settings.\nPlease refresh the page to try again.",
-
- CHOOSE_DOMAIN_BUTTON: "Choose from my domains",
- CREATE_DOMAIN_BUTTON: "Create new domain ID",
- CREATE_DOMAIN_SUCCESS_JUST_CONNECTED: "We connnected your High Fidelity account and created a new domain ID for this machine.",
- CREATE_DOMAIN_SUCCESS: "We created a new domain ID for this machine.",
-
- // When a place modification fails, they will be brought back to the previous
- // dialog with new path still set, allowing them to retry immediately, and without
- // having to type the new path in again.
- EDIT_PLACE_TITLE: "Modify Viewpoint or Path",
- EDIT_PLACE_ERROR: "Failed to update place path. Please try again.",
- EDIT_PLACE_CONFIRM_BUTTON: "Save",
- EDIT_PLACE_CONFIRM_BUTTON_PENDING: "Saving...",
- EDIT_PLACE_CANCEL_BUTTON: "Cancel",
-
- REMOVE_PLACE_TITLE: "Are you sure you want to remove
{{place}} ?",
- REMOVE_PLACE_ERROR: "Failed to remove place. Please try again.",
- REMOVE_PLACE_DELETE_BUTTON: "Delete",
- REMOVE_PLACE_DELETE_BUTTON_PENDING: "Deleting...",
- REMOVE_PLACE_CANCEL_BUTTON: "Cancel",
-
- ADD_PLACE_TITLE: "Choose a place",
- ADD_PLACE_MESSAGE: "Choose the High Fidelity place to point at this domain server.",
- ADD_PLACE_CONFIRM_BUTTON: "Choose place",
- ADD_PLACE_CONFIRM_BUTTON_PENDING: "Saving...",
- ADD_PLACE_CANCEL_BUTTON: "Cancel",
- ADD_PLACE_UNKNOWN_ERROR: "There was an error adding this place name.",
-
- ADD_PLACE_NO_PLACES_MESSAGE: "
You do not have any places in your High Fidelity account."
- + " Go to your places page to create a new one. Once your place is created re-open this dialog to select it.
",
- ADD_PLACE_NO_PLACES_BUTTON: "Create new place",
- ADD_PLACE_UNABLE_TO_LOAD_ERROR: "We were unable to load your place names. Please try again later.",
- ADD_PLACE_LOADING_DIALOG: "Loading your places...",
-};
-
var DomainInfo = null;
var viewHelpers = {
@@ -631,10 +548,10 @@ function showDomainCreationAlert(justConnected) {
//function createDomainID()
-function createNewDomainID(description, justConnected) {
+function createNewDomainID(label, justConnected) {
// get the JSON object ready that we'll use to create a new domain
var domainJSON = {
- "label": description
+ "label": label
//"access_token": $(Settings.ACCESS_TOKEN_SELECTOR).val()
}
@@ -736,19 +653,19 @@ function setupDomainLabelSetting() {
}
var html = "
"
- html += "Specify a label for your domain";
+ html += "
Specify a label for your domain Edit ";
html += "
";
html += "
";
- var link = $("
Edit ");
+ html = $(html);
- link.click(function(ev) {
+ html.find('a').click(function(ev) {
ev.preventDefault();
- var label = "temp";
- var modal_body = "
";
+ var label = DomainInfo.label === null ? "" : DomainInfo.label;
+ var modal_body = "
";
@@ -769,7 +686,7 @@ function setupDomainLabelSetting() {
className: 'edit-label-save-btn btn btn-primary',
callback: function() {
var data = {
- description: $('#domain-label-input').val()
+ label: $('#domain-label-input').val()
};
$('.edit-label-cancel-btn').attr('disabled', 'disabled');
@@ -792,9 +709,7 @@ function setupDomainLabelSetting() {
if (data.status === "fail") {
for (var key in data.data) {
var errorMsg = data.data[key];
- console.log(key, errorMsg);
var errorEl = $('.error-message[data-property="' + key + '"');
- console.log(errorEl);
errorEl.html(errorMsg);
errorEl.show();
}
@@ -814,8 +729,6 @@ function setupDomainLabelSetting() {
});
});
- html = $(html).append(link);
-
var spinner = createDomainSpinner();
var errorEl = createDomainLoadingError("Error loading label.");
@@ -824,7 +737,6 @@ function setupDomainLabelSetting() {
$('div#label .panel-body').append(errorEl);
$('div#label .panel-body').append(html);
- console.log($('div#label .panel-body'));
}
function setupDomainNetworkingSettings() {
@@ -1004,7 +916,9 @@ function setupPlacesTable() {
var temporaryPlaceButton = dynamicButton(Settings.GET_TEMPORARY_NAME_BTN_ID, 'Get a temporary place name');
$('#' + Settings.PLACES_TABLE_ID).after(temporaryPlaceButton);
}
-
+ if (accessTokenIsSet()) {
+ appendAddButtonToPlacesTable();
+ }
}
function placeTableRow(name, path, isTemporary, placeID) {
@@ -1076,7 +990,7 @@ function placeTableRowForPlaceObject(place) {
return placeTableRow(place.name, placePathOrIndex, false, place.id);
}
-function getDomainFromAPI(callback) {
+function getDomainFromAPI2(callback) {
// we only need to do this if we have a current domain ID
var domainID = Settings.data.values.metaverse.id;
if (domainID.length > 0) {
@@ -1086,6 +1000,20 @@ function getDomainFromAPI(callback) {
}
}
+function getDomainFromAPI(callback) {
+ var domainID = Settings.data.values.metaverse.id;
+ $.ajax({
+ url: "/api/domains/" + domainID,
+ dataType: 'json',
+ success: function(data) {
+ callback(data);
+ },
+ error: function() {
+ callback(data);
+ }
+ });
+}
+
function reloadDomainInfo() {
$('#' + Settings.PLACES_TABLE_ID + " tbody tr").not('.headers').remove();
@@ -1113,15 +1041,7 @@ function reloadDomainInfo() {
$('#' + Settings.PLACES_TABLE_ID + " tbody").append(placeTableRow(data.domain.name, '/', true));
}
- var row = $("
");
-
- row.find(".place-add").click(function(ev) {
- chooseFromHighFidelityPlaces(Settings.initialValues.metaverse.access_token, null, function() {
- reloadDomainInfo();
- });
- });
-
- var label = data.domain.description;
+ var label = data.domain.label;
label = label === null ? '' : label;
$('#network-label').val(label);
var autoNetworkingSetting = Settings.data.values.metaverse.automatic_networking;
@@ -1133,7 +1053,8 @@ function reloadDomainInfo() {
$('#network-address-port input').val(address);
}
- $('#' + Settings.PLACES_TABLE_ID + " tbody").append(row);
+ appendAddButtonToPlacesTable();
+
} else {
DomainInfo = null;
$('.domain-loading-error').show();
@@ -1165,7 +1086,7 @@ function sendCreateDomainRequest(onSuccess, onError) {
$.ajax({
url: '/api/domains',
type: 'POST',
- data: { label: "TEST" },
+ data: { label: "" },
success: function(data) {
//if (data.status === 'success') {
onSuccess(data.domain_id);
@@ -1177,26 +1098,6 @@ function sendCreateDomainRequest(onSuccess, onError) {
});
}
-function sendUpdatePlaceRequest(id, path, domainID, clearDomainID, onSuccess, onError) {
- var data = {
- place_id: id,
- path: path
- };
- if (domainID) {
- data.domain_id = domainID;
- }
- if (clearDomainID) {
- data.domain_id = null;
- }
- $.ajax({
- url: '/api/places',
- type: 'PUT',
- data: data,
- success: onSuccess,
- error: onError
- });
-}
-
function editHighFidelityPlace(placeID, name, path) {
var dialog;
@@ -1257,167 +1158,22 @@ function editHighFidelityPlace(placeID, name, path) {
})
}
-function showLoadingDialog() {
- var message = '
';
- message += ' ' + Strings.ADD_PLACE_LOADING_DIALOG;
- message += '
';
-
- return bootbox.dialog({
- message: message,
- closeButton: false
- });
-}
-
-function chooseFromHighFidelityPlaces(accessToken, forcePathTo, onSuccessfullyAdded) {
- if (accessToken) {
-
- var loadingDialog = showLoadingDialog();
-
- $.ajax("/api/places", {
- dataType: 'json',
- jsonp: false,
- success: function(data) {
- if (data.status == 'success') {
- var modal_buttons = {
- cancel: {
- label: Strings.ADD_PLACE_CANCEL_BUTTON,
- className: 'add-place-cancel-button btn-default'
- }
- };
-
- var dialog;
- var modal_body;
-
- if (data.data.places.length) {
- var places_by_id = {};
-
- // setup a select box for the returned places
- modal_body = $('
');
- modal_body.append($("
Places "));
- place_select = $("
");
- _.each(data.data.places, function(place) {
- places_by_id[place.id] = place;
- place_select.append("
" + place.name + " ");
- })
- modal_body.append(place_select);
- modal_body.append($("
This place name already points to a place or path. Saving this would overwrite the previous settings associated with it.
"));
-
- if (forcePathTo === undefined || forcePathTo === null) {
- var path = "
";
- path += "Path ";
- path += " ";
- path += "
";
- modal_body.append($(path));
- }
-
- console.log(modal_body, modal_body.find("#place-name-select"));
- var place_select = modal_body.find("#place-name-select")
- place_select.change(function(ev) {
- var warning = modal_body.find("#place-name-warning");
- var place = places_by_id[$(this).val()];
- console.log(warning, place, $(this).val());
- if (place === undefined || place.pointee === null) {
- warning.hide();
- } else {
- warning.show();
- }
- });
- place_select.trigger('change');
-
- modal_buttons["success"] = {
- label: Strings.ADD_PLACE_CONFIRM_BUTTON,
- className: 'add-place-confirm-button btn btn-primary',
- callback: function() {
- var placeID = $('#place-name-select').val()
- // set the place ID on the form
- $(Settings.place_ID_SELECTOR).val(placeID).change();
-
- if (forcePathTo === undefined || forcePathTo === null) {
- var placePath = $('#place-path-input').val();
- } else {
- var placePath = forcePathTo;
- }
-
- $('.add-place-confirm-button').attr('disabled', 'disabled');
- $('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON_PENDING);
- $('.add-place-cancel-button').attr('disabled', 'disabled');
-
- function finishSettingUpPlace(domainID) {
- sendUpdatePlaceRequest(
- placeID,
- placePath,
- domainID,
- false,
- function(data) {
- $(Settings.DOMAIN_ID_SELECTOR).val(domainID).change();
- dialog.modal('hide')
- if (onSuccessfullyAdded) {
- onSuccessfullyAdded(places_by_id[placeID].name);
- }
- saveSettings();
- },
- function(data) {
- $('.add-place-confirm-button').removeAttr('disabled');
- $('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON);
- $('.add-place-cancel-button').removeAttr('disabled');
- bootbox.alert(Strings.ADD_PLACE_UNKNOWN_ERROR);
- }
- );
- }
-
- if (domainIDIsSet()) {
- finishSettingUpPlace();
- } else {
- sendCreateDomainRequest(function(domainID) {
- finishSettingUpPlace(domainID);
- }, function() {
- $('.add-place-confirm-button').removeAttr('disabled');
- $('.add-place-confirm-button').html(Strings.ADD_PLACE_CONFIRM_BUTTON);
- $('.add-place-cancel-button').removeAttr('disabled');
- bootbox.alert(Strings.ADD_PLACE_UNKNOWN_ERROR);
- bootbox.alert("FAIL");
- });
- }
-
-
- return false;
- }
- }
- } else {
- modal_buttons["success"] = {
- label: Strings.ADD_PLACE_NO_PLACES_BUTTON,
- callback: function() {
- window.open(Settings.METAVERSE_URL + "/user/places", '_blank');
- }
- }
- modal_body = Strings.ADD_PLACE_NO_PLACES_MESSAGE;
- }
-
- dialog = bootbox.dialog({
- title: Strings.ADD_PLACE_TITLE,
- message: modal_body,
- closeButton: false,
- buttons: modal_buttons
- });
- } else {
- bootbox.alert(Strings.ADD_PLACE_UNABLE_TO_LOAD_ERROR);
+function appendAddButtonToPlacesTable() {
+ var addRow = $("
");
+ addRow.find(".place-add").click(function(ev) {
+ ev.preventDefault();
+ chooseFromHighFidelityPlaces(Settings.initialValues.metaverse.access_token, null, function(placeName, newDomainID) {
+ if (newDomainID) {
+ Settings.data.values.metaverse.id = newDomainID;
+ var domainIDEl = $("[data-keypath='metaverse.id']");
+ domainIDEl.val(newDomainID);
+ Settings.initialValues.metaverse.id = newDomainID;
+ badgeSidebarForDifferences(domainIDEl);
}
- },
- error: function() {
- bootbox.alert(Strings.ADD_PLACE_UNABLE_TO_LOAD_ERROR);
- },
- complete: function() {
- loadingDialog.modal('hide');
- }
+ reloadDomainInfo();
+ });
});
-
- } else {
- bootbox.alert({
- message: "You must have an access token to query your High Fidelity places.
" +
- "Please follow the instructions on the settings page to add an access token.",
- title: "Access token required"
- })
- }
+ $('#' + Settings.PLACES_TABLE_ID + " tbody").append(addRow);
}
function chooseFromHighFidelityDomains(clickedButton) {
@@ -1449,8 +1205,8 @@ function chooseFromHighFidelityDomains(clickedButton) {
_.each(data.data.domains, function(domain){
var domainString = "";
- if (domain.description) {
- domainString += '"' + domain.description+ '" - ';
+ if (domain.label) {
+ domainString += '"' + domain.label+ '" - ';
}
domainString += domain.id;
@@ -1544,6 +1300,24 @@ function createTemporaryDomain() {
});
}
+function waitForDomainServerBackUp(callback) {
+ function checkForDomainUp() {
+ $.ajax('', {
+ success: function() {
+ console.log("Domain is back up");
+ callback();
+ },
+ error: function() {
+ setTimeout(checkForDomainUp, 50);
+ console.log("Fail");
+ }
+ });
+ }
+
+ setTimeout(checkForDomainUp, 10);
+
+}
+
function reloadSettings(callback) {
$.getJSON('/settings.json', function(data){
_.extend(data, viewHelpers)
@@ -1723,6 +1497,7 @@ function saveSettings() {
if (canPost) {
if (formJSON["security"]) {
var username = formJSON["security"]["http_username"];
+
var password = formJSON["security"]["http_password"];
if ((password == sha256_digest("")) && (username == undefined || (username && username.length != 0))) {
diff --git a/domain-server/src/DomainServer.cpp b/domain-server/src/DomainServer.cpp
index aac921c90a..b32e0873d9 100644
--- a/domain-server/src/DomainServer.cpp
+++ b/domain-server/src/DomainServer.cpp
@@ -1754,6 +1754,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
const QString URI_RESTART = "/restart";
const QString URI_API_PLACES = "/api/places";
const QString URI_API_DOMAINS = "/api/domains";
+ const QString URI_API_DOMAINS_ID = "/api/domains/";
const QString UUID_REGEX_STRING = "[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}";
@@ -1923,6 +1924,35 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
url.setQuery("access_token=" + accessTokenVariant->toString());
+ qDebug() << "Sending request to " << url;
+
+ QNetworkRequest req(url);
+ req.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);
+ QNetworkReply* reply = NetworkAccessManager::getInstance().get(req);
+
+ connect(reply, &QNetworkReply::finished, this, [reply, connection]() {
+ if (reply->error() != QNetworkReply::NoError) {
+ qDebug() << reply << reply->errorString() << reply->readAll();
+ connection->respond(HTTPConnection::StatusCode500, reply->readAll());
+ return;
+ }
+
+ static const char* CONTENT_TYPE_JSON { "application/json" };
+ connection->respond(HTTPConnection::StatusCode200, reply->readAll());
+ });
+ return true;
+
+ } else if (url.path().startsWith(URI_API_DOMAINS_ID)) {
+ auto id = url.path().mid(URI_API_DOMAINS_ID.length());
+ QUrl url { BASE_METAVERSE_URL + "/api/v1/domains/" + id };
+
+ auto accessTokenVariant = valueForKeyPath(_settingsManager.getSettingsMap(), ACCESS_TOKEN_KEY_PATH);
+ if (accessTokenVariant && accessTokenVariant->isValid()) {
+ url.setQuery("access_token=" + accessTokenVariant->toString());
+ }
+
+ qDebug() << "Sending request to " << url;
+
QNetworkRequest req(url);
req.setHeader(QNetworkRequest::UserAgentHeader, HIGH_FIDELITY_USER_AGENT);
QNetworkReply* reply = NetworkAccessManager::getInstance().get(req);
@@ -2084,7 +2114,7 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
QJsonObject root {
{"access_token", accessTokenVariant->toString()},
{"domain",
- QJsonObject({ { "description", it.value() } })
+ QJsonObject({ { "label", it.value() } })
}
};
QJsonDocument doc { root };
@@ -2162,9 +2192,9 @@ bool DomainServer::handleHTTPRequest(HTTPConnection* connection, const QUrl& url
domainObj["network_port"] = port.isEmpty() ? QJsonValue::Null : QJsonValue(port);
}
- it = params.find("description");
+ it = params.find("label");
if (it != params.end()) {
- domainObj["description"] = it.value();
+ domainObj["label"] = it.value();
}