From 1df51faa95d614745f5a0afb45edc55d338e15ce Mon Sep 17 00:00:00 2001 From: Christopher Willis-Ford Date: Mon, 16 Sep 2019 11:23:11 -0700 Subject: [PATCH] detect project save based on content type Also, if saving a file is canceled, only try to cancel project save telemetry if the save was a project save. Also also, don't skip showing the save dialog just because a file doesn't have an extension. Instead, just skip trying to determine filters for the extension in this case. --- src/main/index.js | 45 ++++++++++++++++++++++++++++----------------- 1 file changed, 28 insertions(+), 17 deletions(-) diff --git a/src/main/index.js b/src/main/index.js index 8ba7f3c..54d73f1 100644 --- a/src/main/index.js +++ b/src/main/index.js @@ -73,6 +73,14 @@ const createAboutWindow = () => { return window; }; +const getIsProjectSave = downloadItem => { + switch (downloadItem.getMimeType()) { + case 'application/x.scratch.sb3': + return true; + } + return false; +}; + const createMainWindow = () => { const window = createWindow({ width: defaultSize.width, @@ -82,29 +90,32 @@ const createMainWindow = () => { const webContents = window.webContents; webContents.session.on('will-download', (ev, item) => { + const isProjectSave = getIsProjectSave(item); const itemPath = item.getFilename(); const baseName = path.basename(itemPath); const extName = path.extname(baseName); + const options = { + defaultPath: baseName + }; if (extName) { const extNameNoDot = extName.replace(/^\./, ''); - const options = { - defaultPath: baseName, - filters: [getFilterForExtension(extNameNoDot)] - }; - const userChosenPath = dialog.showSaveDialog(window, options); - if (userChosenPath) { - item.setSavePath(userChosenPath); - if (extNameNoDot.toUpperCase() == "SB3") { // when a project is downloaded, not an asset - const newProjectTitle = path.basename(userChosenPath, extName); - webContents.send('setTitleFromSave', {title: newProjectTitle}); + options.filters = [getFilterForExtension(extNameNoDot)]; + } + const userChosenPath = dialog.showSaveDialog(window, options); + if (userChosenPath) { + item.setSavePath(userChosenPath); + if (isProjectSave) { + const newProjectTitle = path.basename(userChosenPath, extName); + webContents.send('setTitleFromSave', {title: newProjectTitle}); - // "setTitleFromSave" will set the project title but GUI has already reported the telemetry event - // using the old title. This call lets the telemetry client know that the save was actually completed - // and the event should be committed to the event queue with this new title. - telemetry.projectSaveCompleted(newProjectTitle); - } - } else { - item.cancel(); + // "setTitleFromSave" will set the project title but GUI has already reported the telemetry event + // using the old title. This call lets the telemetry client know that the save was actually completed + // and the event should be committed to the event queue with this new title. + telemetry.projectSaveCompleted(newProjectTitle); + } + } else { + item.cancel(); + if (isProjectSave) { telemetry.projectSaveCanceled(); } }