diff --git a/services/static-webserver/client/source/class/osparc/data/PollTask.js b/services/static-webserver/client/source/class/osparc/data/PollTask.js index 65c08968111e..cf6194233feb 100644 --- a/services/static-webserver/client/source/class/osparc/data/PollTask.js +++ b/services/static-webserver/client/source/class/osparc/data/PollTask.js @@ -30,8 +30,9 @@ qx.Class.define("osparc.data.PollTask", { if (taskData && "task_id" in taskData) { this.set({ taskId: taskData["task_id"], + taskName: taskData["task_name"] || "", statusHref: taskData["status_href"], - resultHref: taskData["result_href"] + resultHref: taskData["result_href"], }); if ("abort_href" in taskData) { @@ -64,6 +65,11 @@ qx.Class.define("osparc.data.PollTask", { nullable: false }, + taskName: { + check: "String", + nullable: true + }, + statusHref: { check: "String", nullable: false diff --git a/services/static-webserver/client/source/class/osparc/desktop/MainPage.js b/services/static-webserver/client/source/class/osparc/desktop/MainPage.js index 3b4677d25e9d..8204b8250d1b 100644 --- a/services/static-webserver/client/source/class/osparc/desktop/MainPage.js +++ b/services/static-webserver/client/source/class/osparc/desktop/MainPage.js @@ -79,6 +79,7 @@ qx.Class.define("osparc.desktop.MainPage", { flex: 1 }); + this.__attachTasks(); this.__listenToWalletSocket(); this.__attachHandlers(); }); @@ -90,6 +91,14 @@ qx.Class.define("osparc.desktop.MainPage", { __loadingPage: null, __studyEditor: null, + __attachTasks: function() { + const pollTasks = osparc.store.PollTasks.getInstance(); + const exportDataTasks = pollTasks.getExportDataTasks(); + exportDataTasks.forEach(task => { + osparc.task.ExportData.exportDataTaskReceived(task, false); + }); + }, + __listenToWalletSocket: function() { const socket = osparc.wrapper.WebSocket.getInstance(); if (!socket.slotExists("walletOsparcCreditsUpdated")) { diff --git a/services/static-webserver/client/source/class/osparc/file/FileLabelWithActions.js b/services/static-webserver/client/source/class/osparc/file/FileLabelWithActions.js index 21fb0d39cad4..531f133b0038 100644 --- a/services/static-webserver/client/source/class/osparc/file/FileLabelWithActions.js +++ b/services/static-webserver/client/source/class/osparc/file/FileLabelWithActions.js @@ -180,7 +180,7 @@ qx.Class.define("osparc.file.FileLabelWithActions", { const fetchPromise = dataStore.exportData(paths); const pollTasks = osparc.store.PollTasks.getInstance(); pollTasks.createPollingTask(fetchPromise) - .then(task => this.__exportDataTaskReceived(task)) + .then(task => osparc.task.ExportData.exportDataTaskReceived(task)) .catch(err => osparc.FlashMessenger.logError(err, this.tr("Unsuccessful files download"))); }, @@ -245,71 +245,6 @@ qx.Class.define("osparc.file.FileLabelWithActions", { } }, - __exportDataTaskReceived: function(task) { - const exportDataTaskUI = new osparc.task.ExportData(); - exportDataTaskUI.setTask(task); - osparc.task.TasksContainer.getInstance().addTaskUI(exportDataTaskUI); - - const progressWindow = new osparc.ui.window.Progress( - this.tr("Downloading files"), - "@FontAwesome5Solid/download/14", - this.tr("Downloading files..."), - ); - if (task.getAbortHref()) { - const cancelButton = progressWindow.addCancelButton(); - cancelButton.setLabel(this.tr("Ignore")); - const abortButton = new qx.ui.form.Button().set({ - label: this.tr("Cancel"), - center: true, - minWidth: 100, - }); - abortButton.addListener("execute", () => task.abortRequested()); - progressWindow.addButton(abortButton); - abortButton.set({ - appearance: "danger-button", - }); - } - progressWindow.open(); - - task.addListener("updateReceived", e => { - const data = e.getData(); - if (data["task_progress"]) { - if ("message" in data["task_progress"] && data["task_progress"]["message"]) { - progressWindow.setMessage(data["task_progress"]["message"]); - } - progressWindow.setProgress(osparc.data.PollTask.extractProgress(data) * 100); - } - }, this); - task.addListener("resultReceived", e => { - const taskData = e.getData(); - if (taskData["result"]) { - const params = { - url: { - locationId: 0, - fileUuid: encodeURIComponent(taskData["result"]), - } - }; - osparc.data.Resources.fetch("storageLink", "getOne", params) - .then(data => { - if (data && data.link) { - const fileName = taskData["result"].split("/").pop(); - osparc.utils.Utils.downloadLink(data.link, "GET", fileName); - } - }) - } - progressWindow.close(); - }); - task.addListener("taskAborted", () => { - osparc.FlashMessenger.logAs(this.tr("Download aborted"), "WARNING"); - progressWindow.close(); - }); - task.addListener("pollingError", e => { - const err = e.getData(); - osparc.FlashMessenger.logError(err); - progressWindow.close(); - }); - }, - __deleteTaskReceived: function(task, paths) { const taskUI = new osparc.task.TaskUI(); taskUI.setIcon("@FontAwesome5Solid/trash/14"); diff --git a/services/static-webserver/client/source/class/osparc/store/PollTasks.js b/services/static-webserver/client/source/class/osparc/store/PollTasks.js index 9adbb29f196b..96752ecc5601 100644 --- a/services/static-webserver/client/source/class/osparc/store/PollTasks.js +++ b/services/static-webserver/client/source/class/osparc/store/PollTasks.js @@ -83,6 +83,10 @@ qx.Class.define("osparc.store.PollTasks", { return this.getTasks().filter(task => task.getTaskId().includes("from_study") && task.getTaskId().includes("as_template")); }, + getExportDataTasks: function() { + return this.getTasks().filter(task => task.getTaskName() && task.getTaskName() === "export_data"); + }, + removeTasks: function() { const tasks = this.getTasks(); tasks.forEach(task => task.dispose()); diff --git a/services/static-webserver/client/source/class/osparc/task/ExportData.js b/services/static-webserver/client/source/class/osparc/task/ExportData.js index a8c46a34f0ed..85c00d75801c 100644 --- a/services/static-webserver/client/source/class/osparc/task/ExportData.js +++ b/services/static-webserver/client/source/class/osparc/task/ExportData.js @@ -26,6 +26,77 @@ qx.Class.define("osparc.task.ExportData", { }, statics: { - ICON: "@FontAwesome5Solid/download" + ICON: "@FontAwesome5Solid/download", + + exportDataTaskReceived: function(task, popUpProgressWindow = true) { + const exportDataTaskUI = new osparc.task.ExportData(); + exportDataTaskUI.setTask(task); + osparc.task.TasksContainer.getInstance().addTaskUI(exportDataTaskUI); + + if (popUpProgressWindow) { + const progressWindow = new osparc.ui.window.Progress( + qx.locale.Manager.tr("Downloading files"), + osparc.task.ExportData+"/14", + qx.locale.Manager.tr("Compressing files..."), + ); + + if (task.getAbortHref()) { + const cancelButton = progressWindow.addCancelButton(); + cancelButton.setLabel(qx.locale.Manager.tr("Ignore")); + const abortButton = new qx.ui.form.Button().set({ + label: qx.locale.Manager.tr("Cancel"), + center: true, + minWidth: 100, + }); + abortButton.addListener("execute", () => task.abortRequested()); + progressWindow.addButton(abortButton); + abortButton.set({ + appearance: "danger-button", + }); + } + + task.addListener("updateReceived", e => { + const data = e.getData(); + if (data["task_progress"]) { + if ("message" in data["task_progress"] && data["task_progress"]["message"]) { + progressWindow.setMessage(data["task_progress"]["message"]); + } + progressWindow.setProgress(osparc.data.PollTask.extractProgress(data) * 100); + } + }); + + task.addListener("resultReceived", () => progressWindow.close()); + task.addListener("taskAborted", () => progressWindow.close()); + task.addListener("pollingError", () => progressWindow.close()); + + progressWindow.open(); + } + + task.addListener("resultReceived", e => { + const taskData = e.getData(); + if (taskData["result"]) { + const params = { + url: { + locationId: 0, + fileUuid: encodeURIComponent(taskData["result"]), + } + }; + osparc.data.Resources.fetch("storageLink", "getOne", params) + .then(data => { + if (data && data.link) { + const fileName = taskData["result"].split("/").pop(); + osparc.utils.Utils.downloadLink(data.link, "GET", fileName); + } + }) + } + }); + task.addListener("taskAborted", () => { + osparc.FlashMessenger.logAs(qx.locale.Manager.tr("Download aborted"), "WARNING"); + }); + task.addListener("pollingError", e => { + const err = e.getData(); + osparc.FlashMessenger.logError(err); + }); + } }, }); diff --git a/services/static-webserver/client/source/class/osparc/ui/window/Progress.js b/services/static-webserver/client/source/class/osparc/ui/window/Progress.js index 792b7575cf76..45956468ece4 100644 --- a/services/static-webserver/client/source/class/osparc/ui/window/Progress.js +++ b/services/static-webserver/client/source/class/osparc/ui/window/Progress.js @@ -44,6 +44,9 @@ qx.Class.define("osparc.ui.window.Progress", { control.getChildControl("progress").set({ backgroundColor: "strong-main" }); + control.getContentElement().setStyles({ + "border-radius": "4px" + }); this.addAt(control, 1); break; }