From 22482f5bbd32452db61041036bf11db40ab98431 Mon Sep 17 00:00:00 2001 From: Kelvin John Falk Szolnoky Date: Wed, 24 Jan 2024 23:12:13 +0100 Subject: [PATCH 1/2] feat: add index operator for templating arrays --- src/utils/Utils.ts | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 4aebac1..4833143 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -64,6 +64,16 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { return '{{ INVALID TEMPLATE TAG - operator ENUM is only applicable on an array }}'; } return obj.join(', '); + } else if (operator === 'FIRST') { + if (!Array.isArray(obj)) { + return '{{ INVALID TEMPLATE TAG - operator FIRST is only applicable on an array }}'; + } + return obj[0]; + } else if (operator === 'LAST') { + if (!Array.isArray(obj)) { + return '{{ INVALID TEMPLATE TAG - operator LAST is only applicable on an array }}'; + } + return obj[obj.length - 1]; } return `{{ INVALID TEMPLATE TAG - unknown operator ${operator} }}`; From 45b14dfd75e4e4e4bf85b74f8a40e6e49f3b6541 Mon Sep 17 00:00:00 2001 From: Kelvin John Falk Szolnoky Date: Wed, 24 Jan 2024 23:33:36 +0100 Subject: [PATCH 2/2] fix: ignore displaying undefined template error in file name --- src/utils/MediaTypeManager.ts | 3 ++- src/utils/Utils.ts | 10 +++++----- 2 files changed, 7 insertions(+), 6 deletions(-) diff --git a/src/utils/MediaTypeManager.ts b/src/utils/MediaTypeManager.ts index d94c1ec..57dfa9f 100644 --- a/src/utils/MediaTypeManager.ts +++ b/src/utils/MediaTypeManager.ts @@ -65,7 +65,8 @@ export class MediaTypeManager { } getFileName(mediaTypeModel: MediaTypeModel): string { - return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel); + // Ignore undefined tags since some search APIs do not return all properties in the model and produce clean file names even if errors occur + return replaceTags(this.mediaFileNameTemplateMap.get(mediaTypeModel.getMediaType()), mediaTypeModel, true); } async getTemplate(mediaTypeModel: MediaTypeModel, app: App): Promise { diff --git a/src/utils/Utils.ts b/src/utils/Utils.ts index 4833143..64bf0a5 100644 --- a/src/utils/Utils.ts +++ b/src/utils/Utils.ts @@ -22,11 +22,11 @@ export function replaceIllegalFileNameCharactersInString(string: string): string return string.replace(/[\\,#%&{}/*<>$"@.?]*/g, '').replace(/:+/g, ' -'); } -export function replaceTags(template: string, mediaTypeModel: MediaTypeModel): string { - return template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel)); +export function replaceTags(template: string, mediaTypeModel: MediaTypeModel, ignoreUndefined: boolean = false): string { + return template.replace(new RegExp('{{.*?}}', 'g'), (match: string) => replaceTag(match, mediaTypeModel, ignoreUndefined)); } -function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { +function replaceTag(match: string, mediaTypeModel: MediaTypeModel, ignoreUndefined: boolean): string { let tag = match; tag = tag.substring(2); tag = tag.substring(0, tag.length - 2); @@ -39,7 +39,7 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { const obj = traverseMetaData(path, mediaTypeModel); if (obj === undefined) { - return '{{ INVALID TEMPLATE TAG - object undefined }}'; + return ignoreUndefined ? '' : '{{ INVALID TEMPLATE TAG - object undefined }}'; } return obj; @@ -51,7 +51,7 @@ function replaceTag(match: string, mediaTypeModel: MediaTypeModel): string { const obj = traverseMetaData(path, mediaTypeModel); if (obj === undefined) { - return '{{ INVALID TEMPLATE TAG - object undefined }}'; + return ignoreUndefined ? '' : '{{ INVALID TEMPLATE TAG - object undefined }}'; } if (operator === 'LIST') {