Skip to content
Snippets Groups Projects
Unverified Commit 04c06db0 authored by Alexander Rose's avatar Alexander Rose Committed by GitHub
Browse files

Merge pull request #519 from MadCatX/gzip_files

Allow download of Gzipped files
parents ebdfc694 a96f94b6
No related branches found
No related tags found
No related merge requests found
......@@ -11,6 +11,7 @@ Note that since we don't clearly distinguish between a public and private interf
- Improve naming of some internal types in Confal pyramids extension coordinate
- Add example mmCIF file with categories necessary to display Confal pyramids
- Change the lookup logic of NtC steps from residues
- Add support for download of gzipped files
## [v3.13.0] - 2022-07-24
......
......@@ -83,7 +83,7 @@ export const DownloadFile = StateAction.build({
display: { name: 'Download File', description: 'Load one or more file from an URL' },
from: PluginStateObject.Root,
params: (a, ctx: PluginContext) => {
const options = [...ctx.dataFormats.options, ['zip', 'Zip'] as const];
const options = [...ctx.dataFormats.options, ['zip', 'Zip'] as const, ['gzip', 'Gzip'] as const];
return {
url: PD.Url(''),
format: PD.Select(options[0][0], options),
......@@ -96,17 +96,23 @@ export const DownloadFile = StateAction.build({
await state.transaction(async () => {
try {
if (params.format === 'zip') {
if (params.format === 'zip' || params.format === 'gzip') {
// TODO: add ReadZipFile transformer so this can be saved as a simple state snaphot,
// would need support for extracting individual files from zip
const data = await plugin.builders.data.download({ url: params.url, isBinary: true });
const zippedFiles = await unzip(taskCtx, (data.obj?.data as Uint8Array).buffer);
for (const [fn, filedata] of Object.entries(zippedFiles)) {
if (!(filedata instanceof Uint8Array) || filedata.length === 0) continue;
if (params.format === 'zip') {
const zippedFiles = await unzip(taskCtx, (data.obj?.data as Uint8Array).buffer);
for (const [fn, filedata] of Object.entries(zippedFiles)) {
if (!(filedata instanceof Uint8Array) || filedata.length === 0) continue;
const asset = Asset.File(new File([filedata], fn));
const asset = Asset.File(new File([filedata], fn));
await processFile(asset, plugin, 'auto', params.visuals);
await processFile(asset, plugin, 'auto', params.visuals);
}
} else {
const url = Asset.getUrl(params.url);
const info = getFileInfo(url);
await processFile(Asset.File(new File([data.obj?.data as Uint8Array], info.name)), plugin, 'auto', params.visuals);
}
} else {
const provider = plugin.dataFormats.get(params.format);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment