From 6f2386eabd02dc0b0560d50bd4a0324934426bcb Mon Sep 17 00:00:00 2001 From: David Rowe Date: Fri, 13 Jan 2017 11:20:00 +1300 Subject: [PATCH] Fix processing of Clara.io status messages --- scripts/system/html/js/marketplacesInject.js | 48 ++++++++++++++------ 1 file changed, 33 insertions(+), 15 deletions(-) diff --git a/scripts/system/html/js/marketplacesInject.js b/scripts/system/html/js/marketplacesInject.js index 94e2a68460..65f722826f 100644 --- a/scripts/system/html/js/marketplacesInject.js +++ b/scripts/system/html/js/marketplacesInject.js @@ -172,29 +172,46 @@ xmlHttpRequest = new XMLHttpRequest(); var responseTextIndex = 0; - var statusMessage = ""; var zipFileURL = ""; xmlHttpRequest.onreadystatechange = function () { - // Messages are appended to responseText; process the new one. + // Messages are appended to responseText; process the new ones. var message = this.responseText.slice(responseTextIndex); + var statusMessage = ""; - if (isDownloading && message.slice(0, 5) === "data:") { // Ignore messages in flight after finished/cancelled. - var data = JSON.parse(message.slice(5)); + if (isDownloading) { // Ignore messages in flight after finished/cancelled. + var lines = message.split(/[\n\r]+/); - // Extract status message. - if (data.hasOwnProperty("message") && data.message !== null) { - statusMessage = data.message; - console.log("Clara.io FBX: " + statusMessage); - EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage); + for (var i = 0, length = lines.length; i < length; i++) { + if (lines[i].slice(0, 5) === "data:") { + // Parse line. + var data; + try { + data = JSON.parse(lines[i].slice(5)); + } + catch (e) { + data = {}; + } + + // Extract status message. + if (data.hasOwnProperty("message") && data.message !== null) { + statusMessage = data.message; + console.log("Clara.io FBX: " + statusMessage); + } + + // Extract zip file URL. + if (data.hasOwnProperty("files") && data.files.length > 0) { + zipFileURL = data.files[0].url; + if (zipFileURL.slice(-4) !== ".zip") { + console.log(JSON.stringify(data)); // Data for debugging. + } + } + } } - // Extract zip file URL. - if (data.hasOwnProperty("files") && data.files.length > 0) { - zipFileURL = data.files[0].url; - if (zipFileURL.slice(-4) !== ".zip") { - console.log(JSON.stringify(data)); // Data for debugging. - } + if (statusMessage !== "") { + // Update the UI with the most recent status message. + EventBridge.emitWebEvent(CLARA_IO_STATUS + " " + statusMessage); } } @@ -204,6 +221,7 @@ // Note: onprogress doesn't have computable total length. xmlHttpRequest.onload = function () { + var statusMessage = ""; if (!isDownloading) { return;