From 0c582df9625b0c70af3c984661e687b5bf0fb398 Mon Sep 17 00:00:00 2001 From: Alex Date: Mon, 16 Jan 2023 15:54:52 -0600 Subject: [PATCH] feat(server) Add filetype variable to storage template (#1337) * feat(server) Add filetype variable to storage template * Remove console.log * Added additional variable for full file type --- server/libs/storage/src/storage.service.ts | 13 ++++++++++--- .../storage-template-settings.svelte | 6 ++++-- .../supported-variables-panel.svelte | 8 ++++++++ 3 files changed, 22 insertions(+), 5 deletions(-) diff --git a/server/libs/storage/src/storage.service.ts b/server/libs/storage/src/storage.service.ts index 1f16ae5f1e..fff681fb90 100644 --- a/server/libs/storage/src/storage.service.ts +++ b/server/libs/storage/src/storage.service.ts @@ -1,5 +1,5 @@ import { APP_UPLOAD_LOCATION } from '@app/common'; -import { AssetEntity, SystemConfig } from '@app/infra'; +import { AssetEntity, AssetType, SystemConfig } from '@app/infra'; import { ImmichConfigService, INITIAL_SYSTEM_CONFIG } from '@app/immich-config'; import { Inject, Injectable, Logger } from '@nestjs/common'; import { InjectRepository } from '@nestjs/typeorm'; @@ -128,19 +128,19 @@ export class StorageService { private validateStorageTemplate(templateString: string) { try { const template = this.compile(templateString); - // test render an asset this.render( template, { createdAt: new Date().toISOString(), originalPath: '/upload/test/IMG_123.jpg', + type: AssetType.IMAGE, } as AssetEntity, 'IMG_123', 'jpg', ); } catch (e) { - this.logger.warn(`Storage template validation failed: ${e}`); + this.logger.warn(`Storage template validation failed: ${JSON.stringify(e)}`); throw new Error(`Invalid storage template: ${e}`); } } @@ -158,6 +158,9 @@ export class StorageService { ext, }; + const fileType = asset.type == AssetType.IMAGE ? 'IMG' : 'VID'; + const fileTypeFull = asset.type == AssetType.IMAGE ? 'IMAGE' : 'VIDEO'; + const dt = luxon.DateTime.fromISO(new Date(asset.createdAt).toISOString()); const dateTokens = [ @@ -173,6 +176,10 @@ export class StorageService { substitutions[token] = dt.toFormat(token); } + // Support file type token + substitutions.filetype = fileType; + substitutions.filetypefull = fileTypeFull; + return template(substitutions); } diff --git a/web/src/lib/components/admin-page/settings/storate-template/storage-template-settings.svelte b/web/src/lib/components/admin-page/settings/storate-template/storage-template-settings.svelte index 65398a005f..4a698d7108 100644 --- a/web/src/lib/components/admin-page/settings/storate-template/storage-template-settings.svelte +++ b/web/src/lib/components/admin-page/settings/storate-template/storage-template-settings.svelte @@ -56,8 +56,10 @@ }); const substitutions: Record = { - filename: 'IMG_10041123', - ext: 'jpeg' + filename: 'IMAGE_56437', + ext: 'jpeg', + filetype: 'IMG', + filetypefull: 'IMAGE' }; const dt = luxon.DateTime.fromISO(new Date('2022-09-04T20:03:05.250').toISOString()); diff --git a/web/src/lib/components/admin-page/settings/storate-template/supported-variables-panel.svelte b/web/src/lib/components/admin-page/settings/storate-template/supported-variables-panel.svelte index 1eb252e0ac..a65c2bd7e6 100644 --- a/web/src/lib/components/admin-page/settings/storate-template/supported-variables-panel.svelte +++ b/web/src/lib/components/admin-page/settings/storate-template/supported-variables-panel.svelte @@ -17,5 +17,13 @@
  • {`{{ext}}`}
  • + +
    +

    FILE TYPE

    +
      +
    • {`{{filetype}}`} - VID or IMG
    • +
    • {`{{filetypefull}}`} - VIDEO or IMAGE
    • +
    +