Update albums config
This commit is contained in:
80
scripts/collect-static-data.ts
Normal file
80
scripts/collect-static-data.ts
Normal file
@@ -0,0 +1,80 @@
|
||||
import { readdirSync, readFileSync, writeFileSync } from 'fs';
|
||||
import { parse } from 'yaml';
|
||||
import { yellow, red } from 'colors';
|
||||
|
||||
const albumsPath = "./public/pictures/albums";
|
||||
|
||||
|
||||
function getDirectories(path: string) {
|
||||
return readdirSync(path, { withFileTypes: true })
|
||||
.filter(item => item.isDirectory()).map(item => item.name);
|
||||
}
|
||||
|
||||
|
||||
function getFiles(path: string) {
|
||||
return readdirSync(path, { withFileTypes: true })
|
||||
.filter(item => !item.isDirectory()).map(item => item.name);
|
||||
}
|
||||
|
||||
|
||||
function processAlbum(folderName: string) {
|
||||
let config = {};
|
||||
|
||||
const albumPath = `${albumsPath}/${folderName}`;
|
||||
|
||||
const directories = getDirectories(albumPath);
|
||||
const files = getFiles(albumPath);
|
||||
|
||||
let photos = [];
|
||||
|
||||
if (directories.includes('photos')) {
|
||||
photos = getFiles(`${albumPath}/photos`);
|
||||
} else {
|
||||
console.warn(yellow(`Warning: Folder ${albumPath}/photos does not exist!`));
|
||||
}
|
||||
|
||||
let photos360 = [];
|
||||
|
||||
if (directories.includes('360_photos')) {
|
||||
photos360 = getFiles(`${albumPath}/360_photos`);
|
||||
} else {
|
||||
console.warn(yellow(`Warning: Folder ${albumPath}/360_photos does not exist!`));
|
||||
}
|
||||
|
||||
if (files.includes('album.yml')) {
|
||||
const configData = readFileSync(`${albumPath}/album.yml`, 'utf-8');
|
||||
|
||||
let parsedData: object | null = null;
|
||||
|
||||
try {
|
||||
parsedData = parse(configData);
|
||||
} catch (YAMLSemanticError) {
|
||||
console.error(red(`Error: ${albumsPath}/album.yml parse error!`));
|
||||
}
|
||||
|
||||
if (parsedData !== null) {
|
||||
['name', 'description', 'protected', 'coverFileName'].forEach(item => {
|
||||
if (parsedData[item] !== undefined) {
|
||||
config[item] = parsedData[item];
|
||||
} else {
|
||||
console.error(red(`Error: File ${albumPath}/album.yml does not contains "${item}" key!`));
|
||||
}
|
||||
})
|
||||
}
|
||||
} else {
|
||||
console.error(red(`Error: File ${albumPath}/album.yml does not exists!`));
|
||||
}
|
||||
|
||||
config['folderName'] = folderName;
|
||||
|
||||
config['files'] = photos;
|
||||
|
||||
config['files_360'] = photos360;
|
||||
|
||||
return config;
|
||||
}
|
||||
|
||||
|
||||
const albumsConfig = getDirectories(albumsPath).map(item => processAlbum(item));
|
||||
|
||||
writeFileSync('./public/generated_albums_config.json', JSON.stringify(albumsConfig));
|
||||
Reference in New Issue
Block a user