import utils from "./utils.js"; import server from "./server.js"; function getFileUrl(noteId) { return getUrlForDownload("api/notes/" + noteId + "/download"); } function download(url) { if (utils.isElectron()) { const remote = utils.dynamicRequire('electron').remote; remote.getCurrentWebContents().downloadURL(url); } else { window.location.href = url; } } function downloadFileNote(noteId) { const url = getFileUrl(noteId) + '?' + Date.now(); // don't use cache download(url); } async function openNoteExternally(noteId) { if (utils.isElectron()) { const resp = await server.post("notes/" + noteId + "/save-to-tmp-dir"); const electron = utils.dynamicRequire('electron'); const res = await electron.shell.openPath(resp.tmpFilePath); if (res) { // fallback in case there's no default application for this file open(getFileUrl(noteId), {url: true}); } } else { window.location.href = getFileUrl(noteId); } } function downloadNoteRevision(noteId, noteRevisionId) { const url = getUrlForDownload(`api/notes/${noteId}/revisions/${noteRevisionId}/download`); download(url); } /** * @param url - should be without initial slash!!! */ function getUrlForDownload(url) { if (utils.isElectron()) { // electron needs absolute URL so we extract current host, port, protocol return getHost() + '/' + url; } else { // web server can be deployed on subdomain so we need to use relative path return url; } } function getHost() { const url = new URL(window.location.href); return url.protocol + "//" + url.hostname + ":" + url.port; } export default { download, downloadFileNote, openNoteExternally, downloadNoteRevision, getUrlForDownload }