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.
This commit is contained in:
Christopher Willis-Ford 2019-09-16 11:23:11 -07:00
parent 9ef9d8fce3
commit 1df51faa95

View file

@ -73,6 +73,14 @@ const createAboutWindow = () => {
return window; return window;
}; };
const getIsProjectSave = downloadItem => {
switch (downloadItem.getMimeType()) {
case 'application/x.scratch.sb3':
return true;
}
return false;
};
const createMainWindow = () => { const createMainWindow = () => {
const window = createWindow({ const window = createWindow({
width: defaultSize.width, width: defaultSize.width,
@ -82,29 +90,32 @@ const createMainWindow = () => {
const webContents = window.webContents; const webContents = window.webContents;
webContents.session.on('will-download', (ev, item) => { webContents.session.on('will-download', (ev, item) => {
const isProjectSave = getIsProjectSave(item);
const itemPath = item.getFilename(); const itemPath = item.getFilename();
const baseName = path.basename(itemPath); const baseName = path.basename(itemPath);
const extName = path.extname(baseName); const extName = path.extname(baseName);
const options = {
defaultPath: baseName
};
if (extName) { if (extName) {
const extNameNoDot = extName.replace(/^\./, ''); const extNameNoDot = extName.replace(/^\./, '');
const options = { options.filters = [getFilterForExtension(extNameNoDot)];
defaultPath: baseName, }
filters: [getFilterForExtension(extNameNoDot)] const userChosenPath = dialog.showSaveDialog(window, options);
}; if (userChosenPath) {
const userChosenPath = dialog.showSaveDialog(window, options); item.setSavePath(userChosenPath);
if (userChosenPath) { if (isProjectSave) {
item.setSavePath(userChosenPath); const newProjectTitle = path.basename(userChosenPath, extName);
if (extNameNoDot.toUpperCase() == "SB3") { // when a project is downloaded, not an asset webContents.send('setTitleFromSave', {title: newProjectTitle});
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 // "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 // 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. // and the event should be committed to the event queue with this new title.
telemetry.projectSaveCompleted(newProjectTitle); telemetry.projectSaveCompleted(newProjectTitle);
} }
} else { } else {
item.cancel(); item.cancel();
if (isProjectSave) {
telemetry.projectSaveCanceled(); telemetry.projectSaveCanceled();
} }
} }