diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js
index c5d463875f..d70575184c 100644
--- a/scripts/system/html/js/marketplacesInject.js
+++ b/scripts/system/html/js/marketplacesInject.js
@@ -14,12 +14,16 @@
// Event bridge messages.
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 QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS";
var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS";
var WARN_USER_NO_PERMISSIONS = "WARN_USER_NO_PERMISSIONS";
var canWriteAssets = false;
+ var xmlHttpRequest = null;
function injectCommonCode(isDirectoryPage) {
@@ -154,7 +158,7 @@
var uuid = location.href.match(/\/view\/([a-z0-9\-]*)/)[1];
var url = XMLHTTPREQUEST_URL.replace("{uuid}", uuid);
- var xmlHttpRequest = new XMLHttpRequest();
+ xmlHttpRequest = new XMLHttpRequest();
var responseTextIndex = 0;
var statusMessage = "";
var zipFileURL = "";
@@ -170,6 +174,7 @@
if (data.hasOwnProperty("message") && data.message !== null) {
statusMessage = data.message;
console.log("Clara.io FBX: " + statusMessage);
+ EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage);
}
// Extract zip file URL.
@@ -186,21 +191,28 @@
xmlHttpRequest.onload = function () {
var HTTP_OK = 200;
if (this.status !== HTTP_OK) {
- console.log("ERROR: Clara.io FBX: Zip file request terminated with " + this.status + " "
- + this.statusText);
+ statusMessage = "Zip file request terminated with " + this.status + " " + this.statusText;
+ console.log("ERROR: Clara.io FBX: " + statusMessage);
+ EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage);
return;
}
- if (zipFileURL == "") {
- console.log("ERROR: Clara.io FBX: Zip file URL not found");
+ if (zipFileURL === "") {
+ statusMessage = "Download file URL not provided";
+ console.log("ERROR: Clara.io FBX: " + statusMessage);
+ EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage);
return;
}
EventBridge.emitWebEvent(CLARA_IO_DOWNLOAD + " " + zipFileURL);
console.log("Clara.io FBX: File download initiated for " + zipFileURL);
+
+ xmlHttpRequest = null;
}
console.log("Clara.io FBX: Request zip file for " + uuid);
+ EventBridge.emitWebEvent(CLARA_IO_STATUS + " Initiating download");
+
xmlHttpRequest.open("POST", url, true);
xmlHttpRequest.setRequestHeader("Accept", "text/event-stream");
xmlHttpRequest.send();
@@ -248,12 +260,25 @@
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() {
EventBridge.scriptEventReceived.connect(function (message) {
if (message.slice(0, CAN_WRITE_ASSETS.length) === CAN_WRITE_ASSETS) {
canWriteAssets = message.slice(-4) === "true";
}
+
+ if (message.slice(0, CLARA_IO_CANCEL_DOWNLOAD.length) === CLARA_IO_CANCEL_DOWNLOAD) {
+ cancelClaraDownload();
+ }
});
var DIRECTORY = 0;
diff --git a/scripts/system/marketplaces/marketplaces.js b/scripts/system/marketplaces/marketplaces.js
index c173683c74..53aef34600 100644
--- a/scripts/system/marketplaces/marketplaces.js
+++ b/scripts/system/marketplaces/marketplaces.js
@@ -15,17 +15,29 @@ Script.include("../libraries/WebTablet.js");
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 MARKETPLACES_URL = Script.resolvePath("../html/marketplaces.html");
var MARKETPLACES_INJECT_SCRIPT_URL = Script.resolvePath("../html/js/marketplacesInject.js");
// Event bridge messages.
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 QUERY_CAN_WRITE_ASSETS = "QUERY_CAN_WRITE_ASSETS";
var CAN_WRITE_ASSETS = "CAN_WRITE_ASSETS";
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 marketplaceWindow = new OverlayWebWindow({
@@ -36,18 +48,58 @@ var marketplaceWindow = new OverlayWebWindow({
visible: false
});
marketplaceWindow.setScriptURL(MARKETPLACES_INJECT_SCRIPT_URL);
+
marketplaceWindow.webEventReceived.connect(function (message) {
if (message === GOTO_DIRECTORY) {
marketplaceWindow.setURL(MARKETPLACES_URL);
+ return;
}
if (message === QUERY_CAN_WRITE_ASSETS) {
marketplaceWindow.emitScriptEvent(CAN_WRITE_ASSETS + " " + Entities.canWriteAssets());
+ return;
}
if (message === WARN_USER_NO_PERMISSIONS) {
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 toolWidth = 50;
var TOOLBAR_MARGIN_Y = 0;