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;