Skip to content

Commit bad7f1b

Browse files
committed
app/constants: add zip file extension and mime type
1 parent 0da4a65 commit bad7f1b

File tree

3 files changed

+21
-9
lines changed

3 files changed

+21
-9
lines changed

src/app/constants.ts

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
// SPDX-License-Identifier: MIT
2-
// Copyright (c) 2021-2022 The Pybricks Authors
2+
// Copyright (c) 2021-2023 The Pybricks Authors
33
import docsPackage from '@pybricks/ide-docs/package.json';
44

55
// Definitions for compile-time UI settings.
@@ -81,3 +81,9 @@ export const docsPathPrefix = `static/docs/v${docsPackage.version}/`;
8181

8282
/** The index page of the docs. */
8383
export const docsDefaultPage = `${docsPathPrefix}index.html`;
84+
85+
/** The ZIP file extension ('.zip') */
86+
export const zipFileExtension = '.zip';
87+
88+
/** The ZIP file MIME type ('application/zip') */
89+
export const zipFileMimeType = 'application/zip';

src/explorer/sagas.ts

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,11 @@
11
// SPDX-License-Identifier: MIT
2-
// Copyright (c) 2022 The Pybricks Authors
2+
// Copyright (c) 2022-2023 The Pybricks Authors
33

44
import { fileOpen, fileSave } from 'browser-fs-access';
55
import JSZip from 'jszip';
66
import { call, put, race, select, take, takeEvery } from 'typed-redux-saga/macro';
77
import { alertsShowAlert } from '../alerts/actions';
8+
import { zipFileExtension, zipFileMimeType } from '../app/constants';
89
import {
910
editorActivateFile,
1011
editorCloseFile,
@@ -122,14 +123,14 @@ function* handleExplorerArchiveAllFiles(): Generator {
122123

123124
const zipData = yield* call(() => zip.generateAsync({ type: 'blob' }));
124125

125-
const fileName = `pybricks-backup-${timestamp()}.zip`;
126+
const fileName = `pybricks-backup-${timestamp()}${zipFileExtension}`;
126127

127128
yield* call(() =>
128129
fileSave(zipData, {
129130
id: 'pybricksCodeFileStorageArchive',
130131
fileName,
131-
extensions: ['.zip'],
132-
mimeTypes: ['application/zip'],
132+
extensions: [zipFileExtension],
133+
mimeTypes: [zipFileMimeType],
133134
// TODO: translate description
134135
description: 'Zip Files',
135136
}),

src/firmware/installPybricksDialog/InstallPybricksDialog.tsx

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,12 @@ import { useDropzone } from 'react-dropzone';
2828
import { useDispatch } from 'react-redux';
2929
import { useLocalStorage } from 'usehooks-ts';
3030
import { alertsShowAlert } from '../../alerts/actions';
31-
import { appName, legoMindstormsRegisteredTrademark } from '../../app/constants';
31+
import {
32+
appName,
33+
legoMindstormsRegisteredTrademark,
34+
zipFileExtension,
35+
zipFileMimeType,
36+
} from '../../app/constants';
3237
import HelpButton from '../../components/HelpButton';
3338
import { Hub, hubBootloaderType } from '../../components/hubPicker';
3439
import { HubPicker } from '../../components/hubPicker/HubPicker';
@@ -201,8 +206,8 @@ const SelectHubPanel: React.VoidFunctionComponent<SelectHubPanelProps> = ({
201206
try {
202207
const file = await fileOpen({
203208
id: 'customFirmware',
204-
mimeTypes: ['application/zip'],
205-
extensions: ['.zip'],
209+
mimeTypes: [zipFileMimeType],
210+
extensions: [zipFileExtension],
206211
// TODO: translate description
207212
description: 'Zip Files',
208213
excludeAcceptAllOption: true,
@@ -236,7 +241,7 @@ const SelectHubPanel: React.VoidFunctionComponent<SelectHubPanelProps> = ({
236241
);
237242

238243
const { getRootProps, getInputProps } = useDropzone({
239-
accept: { 'application/zip': ['.zip'] },
244+
accept: { [zipFileMimeType]: [zipFileExtension] },
240245
multiple: false,
241246
// react-dropzone doesn't allow full control of File System API, so we
242247
// implement our own using browser-fs-access instead.

0 commit comments

Comments
 (0)