mirror of
https://github.com/imputnet/cobalt.git
synced 2025-06-28 01:18:27 +00:00
86 lines
2.3 KiB
JavaScript
86 lines
2.3 KiB
JavaScript
// characters that are disallowed on windows:
|
||
// https://learn.microsoft.com/en-us/windows/win32/fileio/naming-a-file#naming-conventions
|
||
const characterMap = {
|
||
'<': '<',
|
||
'>': '>',
|
||
':': ':',
|
||
'"': '"',
|
||
'/': '/',
|
||
'\\': '\',
|
||
'|': '|',
|
||
'?': '?',
|
||
'*': '*'
|
||
};
|
||
|
||
export const sanitizeString = (string) => {
|
||
// remove any potential control characters the string might contain
|
||
string = string.replace(/[\u0000-\u001F\u007F-\u009F]/g, "");
|
||
|
||
for (const [ char, replacement ] of Object.entries(characterMap)) {
|
||
string = string.replaceAll(char, replacement);
|
||
}
|
||
|
||
return string;
|
||
}
|
||
|
||
export default (f, style, isAudioOnly, isAudioMuted) => {
|
||
let filename = '';
|
||
|
||
let infoBase = [f.service, f.id];
|
||
let classicTags = [...infoBase];
|
||
let basicTags = [];
|
||
|
||
let title = sanitizeString(f.title);
|
||
|
||
if (f.author) {
|
||
title += ` - ${sanitizeString(f.author)}`;
|
||
}
|
||
|
||
if (f.resolution) {
|
||
classicTags.push(f.resolution);
|
||
}
|
||
|
||
if (f.qualityLabel) {
|
||
basicTags.push(f.qualityLabel);
|
||
}
|
||
|
||
if (f.youtubeFormat) {
|
||
classicTags.push(f.youtubeFormat);
|
||
basicTags.push(f.youtubeFormat);
|
||
}
|
||
|
||
if (isAudioMuted) {
|
||
classicTags.push("mute");
|
||
basicTags.push("mute");
|
||
} else if (f.youtubeDubName) {
|
||
classicTags.push(f.youtubeDubName);
|
||
basicTags.push(f.youtubeDubName);
|
||
}
|
||
|
||
switch (style) {
|
||
default:
|
||
case "classic":
|
||
if (isAudioOnly) {
|
||
if (f.youtubeDubName) {
|
||
infoBase.push(f.youtubeDubName);
|
||
}
|
||
return `${infoBase.join("_")}_audio`;
|
||
}
|
||
filename = classicTags.join("_");
|
||
break;
|
||
case "basic":
|
||
if (isAudioOnly) return title;
|
||
filename = `${title} (${basicTags.join(", ")})`;
|
||
break;
|
||
case "pretty":
|
||
if (isAudioOnly) return `${title} (${infoBase[0]})`;
|
||
filename = `${title} (${[...basicTags, infoBase[0]].join(", ")})`;
|
||
break;
|
||
case "nerdy":
|
||
if (isAudioOnly) return `${title} (${infoBase.join(", ")})`;
|
||
filename = `${title} (${basicTags.concat(infoBase).join(", ")})`;
|
||
break;
|
||
}
|
||
return `${filename}.${f.extension}`;
|
||
}
|