refactor(formatDownloadTitle): simplify function

I've kept the "extension determination process" in a nested function,
that reuses the formatDownloadTitle arguments,
however it could also be refactored into an own util function later,
if it is ever required.

The for loop got replaced by the built functions in `mimeType`
pull/879/head
Panagiotis Papadopoulos 2025-01-03 12:50:17 +07:00
parent d173daa14e
commit 6da656cd67
1 changed files with 17 additions and 33 deletions

@ -178,45 +178,29 @@ export function replaceAll(string: string, replaceWhat: string, replaceWith: str
} }
export function formatDownloadTitle(fileName: string, type: string | null, mime: string) { export function formatDownloadTitle(fileName: string, type: string | null, mime: string) {
if (!fileName) { const fileNameBase = (!fileName) ? "untitled" : sanitize(fileName);
fileName = "untitled";
}
fileName = sanitize(fileName);
if (type === 'text') {
return `${fileName}.html`;
} else if (type && ['relationMap', 'canvas', 'search'].includes(type)) {
return `${fileName}.json`;
} else {
if (!mime) {
return fileName;
}
mime = mime.toLowerCase(); const getExtension = () => {
const filenameLc = fileName.toLowerCase(); if (type === "text") return ".html";
const extensions = mimeTypes.extensions[mime]; if (type === "relationMap" || type === "canvas" || type === "search") return ".json";
if (!mime) return "";
if (!extensions || extensions.length === 0) { const mimeLc = mime.toLowerCase();
return fileName;
}
for (const ext of extensions) { // better to just return the current name without a fake extension
if (filenameLc.endsWith(`.${ext}`)) { // it's possible that the title still preserves the correct extension anyways
return fileName; if (mimeLc === 'application/octet-stream') return "";
}
}
if (mime === 'application/octet-stream') { // if fileName has an extension matching the mime already - reuse it
// we didn't find any good guess for this one, it will be better to just return const mimeTypeFromFileName = mimeTypes.lookup(fileName);
// the current name without a fake extension. It's possible that the title still preserves the correct if (mimeTypeFromFileName === mimeLc) return "";
// extension too
return fileName; // as last resort try to get extension from mimeType
} const extensions = mimeTypes.extension(mime);
return extensions ? `.${extensions}` : "";
};
return `${fileName}.${extensions[0]}`; return `${fileNameBase}${getExtension()}`;
}
} }
export function removeTextFileExtension(filePath: string) { export function removeTextFileExtension(filePath: string) {