Display Clara model preparation progress

This commit is contained in:
David Rowe 2017-01-12 15:47:41 +13:00
parent b41f8c754d
commit 37da800a14
2 changed files with 83 additions and 6 deletions

View file

@ -14,12 +14,16 @@
// Event bridge messages. // Event bridge messages.
var CLARA_IO_DOWNLOAD = "CLARA.IO DOWNLOAD"; var CLARA_IO_DOWNLOAD = "CLARA.IO DOWNLOAD";
var CLARA_IO_STATUS = "CLARA.IO STATUS";
var CLARA_IO_CANCEL_DOWNLOAD = "CLARA.IO CANCEL DOWNLOAD";
var CLARA_IO_CANCELLED_DOWNLOAD = "CLARA.IO CANCELLED DOWNLOAD";
var GOTO_DIRECTORY = "GOTO_DIRECTORY"; var GOTO_DIRECTORY = "GOTO_DIRECTORY";
var QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS"; var QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS";
var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS"; var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS";
var WARN_USER_NO_PERMISSIONS = "WARN_USER_NO_PERMISSIONS"; var WARN_USER_NO_PERMISSIONS = "WARN_USER_NO_PERMISSIONS";
var canWriteAssets = false; var canWriteAssets = false;
var xmlHttpRequest = null;
function injectCommonCode(isDirectoryPage) { function injectCommonCode(isDirectoryPage) {
@ -154,7 +158,7 @@
var uuid = location.href.match(/\/view\/([a-z0-9\-]*)/)[1]; var uuid = location.href.match(/\/view\/([a-z0-9\-]*)/)[1];
var url = XMLHTTPREQUEST_URL.replace("{uuid}", uuid); var url = XMLHTTPREQUEST_URL.replace("{uuid}", uuid);
var xmlHttpRequest = new XMLHttpRequest(); xmlHttpRequest = new XMLHttpRequest();
var responseTextIndex = 0; var responseTextIndex = 0;
var statusMessage = ""; var statusMessage = "";
var zipFileURL = ""; var zipFileURL = "";
@ -170,6 +174,7 @@
if (data.hasOwnProperty("message") && data.message !== null) { if (data.hasOwnProperty("message") && data.message !== null) {
statusMessage = data.message; statusMessage = data.message;
console.log("Clara.io FBX: " + statusMessage); console.log("Clara.io FBX: " + statusMessage);
EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage);
} }
// Extract zip file URL. // Extract zip file URL.
@ -186,21 +191,28 @@
xmlHttpRequest.onload = function () { xmlHttpRequest.onload = function () {
var HTTP_OK = 200; var HTTP_OK = 200;
if (this.status !== HTTP_OK) { if (this.status !== HTTP_OK) {
console.log("ERROR: Clara.io FBX: Zip file request terminated with " + this.status + " " statusMessage = "Zip file request terminated with " + this.status + " " + this.statusText;
+ this.statusText); console.log("ERROR: Clara.io FBX: " + statusMessage);
EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage);
return; return;
} }
if (zipFileURL == "") { if (zipFileURL === "") {
console.log("ERROR: Clara.io FBX: Zip file URL not found"); statusMessage = "Download file URL not provided";
console.log("ERROR: Clara.io FBX: " + statusMessage);
EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage);
return; return;
} }
EventBridge.emitWebEvent(CLARA_IO_DOWNLOAD + " " + zipFileURL); EventBridge.emitWebEvent(CLARA_IO_DOWNLOAD + " " + zipFileURL);
console.log("Clara.io FBX: File download initiated for " + zipFileURL); console.log("Clara.io FBX: File download initiated for " + zipFileURL);
xmlHttpRequest = null;
} }
console.log("Clara.io FBX: Request zip file for " + uuid); console.log("Clara.io FBX: Request zip file for " + uuid);
EventBridge.emitWebEvent(CLARA_IO_STATUS + " Initiating download");
xmlHttpRequest.open("POST", url, true); xmlHttpRequest.open("POST", url, true);
xmlHttpRequest.setRequestHeader("Accept", "text/event-stream"); xmlHttpRequest.setRequestHeader("Accept", "text/event-stream");
xmlHttpRequest.send(); xmlHttpRequest.send();
@ -248,12 +260,25 @@
EventBridge.emitWebEvent(QUERY_CAN_WRITE_ASSETS); EventBridge.emitWebEvent(QUERY_CAN_WRITE_ASSETS);
} }
function cancelClaraDownload() {
if (xmlHttpRequest) {
xmlHttpRequest.abort();
xmlHttpRequest = null;
console.log("Clara.io FBX: File download cancelled");
EventBridge.emitWebEvent(CLARA_IO_CANCELLED_DOWNLOAD);
}
}
function onLoad() { function onLoad() {
EventBridge.scriptEventReceived.connect(function (message) { EventBridge.scriptEventReceived.connect(function (message) {
if (message.slice(0, CAN_WRITE_ASSETS.length) === CAN_WRITE_ASSETS) { if (message.slice(0, CAN_WRITE_ASSETS.length) === CAN_WRITE_ASSETS) {
canWriteAssets = message.slice(-4) === "true"; canWriteAssets = message.slice(-4) === "true";
} }
if (message.slice(0, CLARA_IO_CANCEL_DOWNLOAD.length) === CLARA_IO_CANCEL_DOWNLOAD) {
cancelClaraDownload();
}
}); });
var DIRECTORY = 0; var DIRECTORY = 0;

View file

@ -15,17 +15,29 @@ Script.include("../libraries/WebTablet.js");
var toolIconUrl = Script.resolvePath("../assets/images/tools/"); var toolIconUrl = Script.resolvePath("../assets/images/tools/");
var MARKETPLACE_URL = "https://metaverse.highfidelity.com/marketplace"; //var MARKETPLACE_URL = "https://metaverse.highfidelity.com/marketplace";
var MARKETPLACE_URL = "https://clara.io/library?gameCheck=true&public=true";
var MARKETPLACE_URL_INITIAL = MARKETPLACE_URL + "?"; // Append "?" to signal injected script that it's the initial page. var MARKETPLACE_URL_INITIAL = MARKETPLACE_URL + "?"; // Append "?" to signal injected script that it's the initial page.
var MARKETPLACES_URL = Script.resolvePath("../html/marketplaces.html"); var MARKETPLACES_URL = Script.resolvePath("../html/marketplaces.html");
var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js"); var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js");
// Event bridge messages. // Event bridge messages.
var CLARA_IO_DOWNLOAD = "CLARA.IO DOWNLOAD"; var CLARA_IO_DOWNLOAD = "CLARA.IO DOWNLOAD";
var CLARA_IO_STATUS = "CLARA.IO STATUS";
var CLARA_IO_CANCEL_DOWNLOAD = "CLARA.IO CANCEL DOWNLOAD";
var CLARA_IO_CANCELLED_DOWNLOAD = "CLARA.IO CANCELLED DOWNLOAD";
var GOTO_DIRECTORY = "GOTO_DIRECTORY"; var GOTO_DIRECTORY = "GOTO_DIRECTORY";
var QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS"; var QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS";
var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS"; var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS";
var WARN_USER_NO_PERMISSIONS = "WARN_USER_NO_PERMISSIONS"; var WARN_USER_NO_PERMISSIONS = "WARN_USER_NO_PERMISSIONS";
var CLARA_DOWNLOAD_TITLE = "Preparing Download";
var messageBox = null;
var isDownloadBeingCancelled = false;
var CANCEL_BUTTON = 4194304; // QMessageBox::Cancel
var NO_BUTTON = 0; // QMessageBox::NoButton
var NO_PERMISSIONS_ERROR_MESSAGE = "Cannot download model because you can't write to \nthe domain's Asset Server."; var NO_PERMISSIONS_ERROR_MESSAGE = "Cannot download model because you can't write to \nthe domain's Asset Server.";
var marketplaceWindow = new OverlayWebWindow({ var marketplaceWindow = new OverlayWebWindow({
@ -36,18 +48,58 @@ var marketplaceWindow = new OverlayWebWindow({
visible: false visible: false
}); });
marketplaceWindow.setScriptURL(MARKETPLACES_INJECT_SCRIPT_URL); marketplaceWindow.setScriptURL(MARKETPLACES_INJECT_SCRIPT_URL);
marketplaceWindow.webEventReceived.connect(function (message) { marketplaceWindow.webEventReceived.connect(function (message) {
if (message === GOTO_DIRECTORY) { if (message === GOTO_DIRECTORY) {
marketplaceWindow.setURL(MARKETPLACES_URL); marketplaceWindow.setURL(MARKETPLACES_URL);
return;
} }
if (message === QUERY_CAN_WRITE_ASSETS) { if (message === QUERY_CAN_WRITE_ASSETS) {
marketplaceWindow.emitScriptEvent(CAN_WRITE_ASSETS + " " + Entities.canWriteAssets()); marketplaceWindow.emitScriptEvent(CAN_WRITE_ASSETS + " " + Entities.canWriteAssets());
return;
} }
if (message === WARN_USER_NO_PERMISSIONS) { if (message === WARN_USER_NO_PERMISSIONS) {
Window.alert(NO_PERMISSIONS_ERROR_MESSAGE); Window.alert(NO_PERMISSIONS_ERROR_MESSAGE);
return;
}
if (message.slice(0, CLARA_IO_STATUS.length) === CLARA_IO_STATUS) {
if (isDownloadBeingCancelled) {
return;
}
var text = message.slice(CLARA_IO_STATUS.length);
if (messageBox === null) {
messageBox = Window.openMessageBox(CLARA_DOWNLOAD_TITLE, text, CANCEL_BUTTON, NO_BUTTON);
} else {
Window.updateMessageBox(messageBox, CLARA_DOWNLOAD_TITLE, text, CANCEL_BUTTON, NO_BUTTON);
}
return;
}
if (message.slice(0, CLARA_IO_DOWNLOAD.length) === CLARA_IO_DOWNLOAD) {
if (messageBox) {
Window.closeMessageBox(messageBox);
messageBox = null;
}
return;
}
if (message === CLARA_IO_CANCELLED_DOWNLOAD) {
isDownloadBeingCancelled = false;
} }
}); });
function onMessageBoxClosed(id, button) {
if (id === messageBox && button === CANCEL_BUTTON) {
isDownloadBeingCancelled = true;
messageBox = null;
marketplaceWindow.emitScriptEvent(CLARA_IO_CANCEL_DOWNLOAD);
}
}
Window.messageBoxClosed.connect(onMessageBoxClosed);
var toolHeight = 50; var toolHeight = 50;
var toolWidth = 50; var toolWidth = 50;
var TOOLBAR_MARGIN_Y = 0; var TOOLBAR_MARGIN_Y = 0;