mirror of
https://github.com/scratchfoundation/scratch-desktop.git
synced 2025-01-09 14:12:05 -05:00
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:
parent
9ef9d8fce3
commit
1df51faa95
1 changed files with 28 additions and 17 deletions
|
@ -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();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue