From 82c67bb71c89fd35b15db2f41c7a55ce9fd5c8b3 Mon Sep 17 00:00:00 2001 From: liamcottle Date: Wed, 1 Jan 2025 20:55:56 +1300 Subject: [PATCH] refactor downloading file --- .../components/interfaces/InterfacesPage.vue | 16 +++++------ src/frontend/js/DownloadUtils.js | 28 +++++++++++++++++++ 2 files changed, 36 insertions(+), 8 deletions(-) create mode 100644 src/frontend/js/DownloadUtils.js diff --git a/src/frontend/components/interfaces/InterfacesPage.vue b/src/frontend/components/interfaces/InterfacesPage.vue index 1a6861d..4bfdb09 100644 --- a/src/frontend/components/interfaces/InterfacesPage.vue +++ b/src/frontend/components/interfaces/InterfacesPage.vue @@ -84,6 +84,7 @@ import ElectronUtils from "../../js/ElectronUtils"; import Interface from "./Interface.vue"; import Utils from "../../js/Utils"; import ImportInterfacesModal from "./ImportInterfacesModal.vue"; +import DownloadUtils from "../../js/DownloadUtils"; export default { name: 'InterfacesPage', @@ -250,17 +251,16 @@ export default { }, async exportInterfaces() { try { + + // fetch exported interfaces const response = await window.axios.get('/api/v1/reticulum/interfaces/export', { responseType: 'blob' }); - - const url = window.URL.createObjectURL(new Blob([response.data])); - const link = document.createElement('a'); - link.href = url; - link.setAttribute('download', 'reticulum_interfaces'); - document.body.appendChild(link); - link.click(); - link.remove(); + + // download file to browser + const blob = new Blob([response.data]); + DownloadUtils.downloadFile("meshchat_interfaces", blob); + } catch(e) { DialogUtils.alert("Failed to export interfaces"); console.error(e); diff --git a/src/frontend/js/DownloadUtils.js b/src/frontend/js/DownloadUtils.js new file mode 100644 index 0000000..7d1a5ff --- /dev/null +++ b/src/frontend/js/DownloadUtils.js @@ -0,0 +1,28 @@ +class DownloadUtils { + + static downloadFile(filename, blob) { + + // create object url for blob + const objectUrl = URL.createObjectURL(blob); + + // create hidden link element to download blob + const link = document.createElement('a'); + link.href = objectUrl; + link.download = filename; + link.style.display = "none"; + document.body.append(link); + + // click link to download file in browser + link.click(); + + // link element is no longer needed + link.remove(); + + // revoke object url to clear memory + setTimeout(() => URL.revokeObjectURL(objectUrl), 10000); + + } + +} + +export default DownloadUtils;