sunrise-cms/helpers/images.helpers.ts

124 lines
3.0 KiB
TypeScript

import fs from 'node:fs/promises'
import path from 'node:path'
import chokidar from 'chokidar'
import Debug from 'debug'
import { DEBUG_NAMESPACE } from '../debug.config.js'
import { getConfigProperty } from './config.helpers.js'
const debug = Debug(`${DEBUG_NAMESPACE}:images.helpers`)
/*
* Burial Site Images
*/
const burialSiteImagesFolder = path.join(
getConfigProperty('settings.publicInternalPath'),
'images',
'burialSites'
)
const burialSiteImageFileExtensions = ['jpg', 'jpeg', 'png']
let burialSiteImages: string[] = []
export async function getBurialSiteImages(): Promise<string[]> {
if (burialSiteImages.length === 0) {
// eslint-disable-next-line security/detect-non-literal-fs-filename
const files = await fs.readdir(burialSiteImagesFolder)
const images: string[] = []
for (const file of files) {
const lowerCaseFileName = file.toLowerCase()
for (const fileExtension of burialSiteImageFileExtensions) {
if (lowerCaseFileName.endsWith(`.${fileExtension}`)) {
images.push(file)
break
}
}
}
burialSiteImages = images
}
return burialSiteImages
}
function clearCachedBurialSiteImages(): void {
debug('Burial site images folder changed.')
burialSiteImages = []
}
if (getConfigProperty('settings.burialSites.refreshImageChanges')) {
debug('Burial site images watcher enabled.')
const burialSitesWatcher = chokidar.watch(burialSiteImagesFolder, {
ignoreInitial: true,
persistent: true
})
burialSitesWatcher.on('add', clearCachedBurialSiteImages)
// burialSitesWatcher.on('change', clearCachedBurialSiteImages)
burialSitesWatcher.on('unlink', clearCachedBurialSiteImages)
}
/*
* Cemetery SVGs
*/
const cemeterySVGsFolder = path.join(
getConfigProperty('settings.publicInternalPath'),
'images',
'cemeteries'
)
const cemeterySVGFileExtensions = ['svg']
let cemeterySVGs: string[] = []
export async function getCemeterySVGs(): Promise<string[]> {
if (cemeterySVGs.length === 0) {
// eslint-disable-next-line security/detect-non-literal-fs-filename
const files = await fs.readdir(cemeterySVGsFolder)
const SVGs: string[] = []
for (const file of files) {
const lowerCaseFileName = file.toLowerCase()
for (const fileExtension of cemeterySVGFileExtensions) {
if (lowerCaseFileName.endsWith(`.${fileExtension}`)) {
SVGs.push(file)
break
}
}
}
cemeterySVGs = SVGs
}
return cemeterySVGs
}
function clearCachedCemeterySVGs(): void {
debug('Cemetery SVGs folder changed.')
cemeterySVGs = []
}
if (getConfigProperty('settings.cemeteries.refreshImageChanges')) {
debug('Cemetery SVGs watcher enabled.')
const cemeteryWatcher = chokidar.watch(cemeterySVGsFolder, {
ignoreInitial: true,
persistent: true
})
cemeteryWatcher.on('add', clearCachedCemeterySVGs)
// cemeteryWatcher.on('change', clearCachedCemeterySVGs)
cemeteryWatcher.on('unlink', clearCachedCemeterySVGs)
}