Skip to content

Commit 535987e

Browse files
Merge pull request #206 from Spydarlee/clean-file-names
Clean up generated files names to remove or replace invalid characters
2 parents a79b5dd + bc6b985 commit 535987e

File tree

2 files changed

+25
-1
lines changed

2 files changed

+25
-1
lines changed
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
// Illegal characters in the form `[illegal_character, replacement][]`
2+
export const ILLEGAL_FILENAME_CHARACTERS = [
3+
['\/', '-'],
4+
['\\', '-'],
5+
['<', ''],
6+
['>', ''],
7+
[':', ' - '],
8+
['"', "'"],
9+
['|', ' - '],
10+
['?', ''],
11+
['*', ''],
12+
['[', '('],
13+
[']', ')'],
14+
['^', ''],
15+
['#', ''],
16+
];

src/utils/MediaTypeManager.ts

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ import { WikiModel } from '../models/WikiModel';
1212
import type { MediaDbPluginSettings } from '../settings/Settings';
1313
import { MediaType } from './MediaType';
1414
import { replaceTags } from './Utils';
15+
import { ILLEGAL_FILENAME_CHARACTERS } from './IllegalFilenameCharactersList';
1516

1617
export const MEDIA_TYPES: MediaType[] = [
1718
MediaType.Movie,
@@ -71,7 +72,14 @@ export class MediaTypeManager {
7172

7273
getFileName(mediaTypeModel: MediaTypeModel): string {
7374
// Ignore undefined tags since some search APIs do not return all properties in the model and produce clean file names even if errors occur
74-
return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType())!, mediaTypeModel, true);
75+
let fileName = replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType())!, mediaTypeModel, true);
76+
return this.cleanFileName(fileName);
77+
}
78+
79+
cleanFileName(fileName: string): string {
80+
const cleanedFileName = ILLEGAL_FILENAME_CHARACTERS.reduce((str, char) => str.replaceAll(char[0], char[1]), fileName);
81+
// Remove all duplicate whitespace in the file name
82+
return cleanedFileName.replaceAll(/ +/g, ' ');
7583
}
7684

7785
async getTemplate(mediaTypeModel: MediaTypeModel, app: App): Promise<string> {

0 commit comments

Comments
 (0)