Fix file picker extension filtering

This commit is contained in:
“Naeel”
2026-09-05 09:55:44 +03:00
parent a965f181d9
commit 6fea5bce49
6 changed files with 95 additions and 17 deletions
+3 -5
View File
@@ -15,12 +15,10 @@ export async function addFiles(state, cfg, files, elements) {
continue;
}
try {
addFileWithDedup(state, await listZipFiles(file, cfg.allowedExt));
const zipTree = await listZipFiles(file, cfg.allowedExt);
if (zipTree) addFileWithDedup(state, zipTree);
} catch (error) {
addFileWithDedup(state, {
id: crypto.randomUUID(), kind: 'zip', name: file.name, path: file.name,
file, children: [], expanded: true, error: 'Не удалось раскрыть ZIP',
});
continue;
}
}
render(state, elements);
+5 -5
View File
@@ -41,12 +41,12 @@ export function onFolderChange(state, cfg, elements) {
if (lowerPath.endsWith('.zip')) {
try {
const zip = await listZipFiles(file, cfg.allowedExt);
rebaseTree(zip, rootName);
addToFolder(zip);
if (zip) {
rebaseTree(zip, rootName);
addToFolder(zip);
}
} catch (error) {
addToFolder({ id: crypto.randomUUID(), kind: 'zip', name: parts.at(-1),
path: relativePath, file, children: [], expanded: true,
error: 'Не удалось раскрыть ZIP' });
continue;
}
} else if (cfg.allowedExt.some((extension) => lowerPath.endsWith(extension))) {
addToFolder({ id: crypto.randomUUID(), kind: 'file', name: parts.at(-1),
+6 -4
View File
@@ -44,16 +44,18 @@ async function listEntries(data, zipName, allowedExt, depth) {
if (entryName.endsWith('/')) continue;
if (entryName.toLowerCase().endsWith('.zip')) {
const nested = await listEntries(entryData, entryName, allowedExt, depth + 1);
rebaseTree(nested, zipName);
nested.name = entryName.split('/').pop();
addPath(root, entryName.split('/'), nested);
if (nested) {
rebaseTree(nested, zipName);
nested.name = entryName.split('/').pop();
addPath(root, entryName.split('/'), nested);
}
} else if (extensionAllowed(entryName, allowedExt)) {
const path = `${zipName}/${entryName}`;
const file = makeFile(entryData, path);
addPath(root, entryName.split('/'), node('file', entryName.split('/').pop(), path, [], file));
}
}
return root;
return root.children.length ? root : null;
}
export async function listZipFiles(file, allowedExt) {