30 lines
1,017 B
JavaScript
30 lines
1,017 B
JavaScript
export function sanitiseFilename(filename) {
|
|
const illegalRe = /[/?<>\\:*|"]/g
|
|
// eslint-disable-next-line no-control-regex
|
|
const controlRe = /[\x00-\x1f\x80-\x9f]/g
|
|
const reservedRe = /^\.+$/
|
|
const windowsReservedRe = /^(con|prn|aux|nul|com[0-9]|lpt[0-9])(\..*)?$/i
|
|
const windowsTrailingRe = /[. ]+$/
|
|
const replacement = ''
|
|
return filename
|
|
.replace(illegalRe, replacement)
|
|
.replace(controlRe, replacement)
|
|
.replace(reservedRe, replacement)
|
|
.replace(windowsReservedRe, replacement)
|
|
.replace(windowsTrailingRe, replacement)
|
|
}
|
|
|
|
export function formatPath(path, metadata, extension) {
|
|
return path
|
|
.replace(
|
|
/%album_artist/gm,
|
|
sanitiseFilename(metadata.album.artists[0].name)
|
|
)
|
|
.replace(/%album_title/gm, sanitiseFilename(metadata.album.name))
|
|
.replace(/%artist/gm, sanitiseFilename(metadata.artists[0].name))
|
|
.replace(/%title/gm, sanitiseFilename(metadata.name))
|
|
.replace(/%track/gm, metadata.trackNumber)
|
|
.replace(/%disc/gm, metadata.discNumber)
|
|
.replace(/%ext/gm, extension)
|
|
}
|