86 lines
2.4 KiB
JavaScript
86 lines
2.4 KiB
JavaScript
import { format } from 'date-fns';
|
|
import Cookies from 'js-cookie';
|
|
import { parse } from 'yaml';
|
|
|
|
import slugify from '#/utils/slugify.js';
|
|
|
|
import defaultTemplate from '#/assets/summary.yaml';
|
|
|
|
const cookies = Cookies.withConverter({
|
|
write: (value) => value,
|
|
});
|
|
|
|
const storedTemplate = cookies.get('summary');
|
|
const template = storedTemplate
|
|
? parse(JSON.parse(storedTemplate)?.custom)
|
|
: defaultTemplate;
|
|
|
|
const genderMap = {
|
|
f: 'female',
|
|
m: 'male',
|
|
t: 'transsexual',
|
|
o: 'other',
|
|
u: null,
|
|
};
|
|
|
|
const propProcessors = {
|
|
channel: (sceneInfo) => sceneInfo.channel?.name || sceneInfo.network?.name,
|
|
network: (sceneInfo) => sceneInfo.network?.name || sceneInfo.channel?.name,
|
|
actors: (sceneInfo, options) => {
|
|
const genders = (options.genders || 'fmtou').split('').map((genderKey) => genderMap[genderKey]);
|
|
|
|
return sceneInfo.actors
|
|
.filter((actor) => genders.includes(actor.gender))
|
|
.map((actor) => actor.name);
|
|
},
|
|
tags: (sceneInfo, options) => sceneInfo.tags
|
|
.filter((tag) => {
|
|
if (options.include && !options.include.includes(tag.name) && !options.include.includes(tag.slug)) {
|
|
return false;
|
|
}
|
|
|
|
if (options.exclude?.includes(tag.name) || options.exclude?.includes(tag.slug)) {
|
|
return false;
|
|
}
|
|
|
|
if (options.priority && tag.priority < options.priority) {
|
|
return false;
|
|
}
|
|
|
|
return true;
|
|
})
|
|
.map((tag) => tag.name),
|
|
movie: (sceneInfo) => sceneInfo.movies[0]?.title,
|
|
date: (sceneInfo, options) => format(sceneInfo.effectiveDate, options.format || 'yyyy-MM-dd'),
|
|
};
|
|
|
|
export default function processReleaseTemplate(release, chain = template, delimit = ' ', wrapOpen = '', wrapClose = '') {
|
|
const results = chain.reduce((result, item) => {
|
|
const key = typeof item === 'string' ? item : item.key;
|
|
|
|
if (key) {
|
|
const value = propProcessors[key]?.(release, typeof item === 'string' ? { key } : item) || release[key];
|
|
|
|
if (Array.isArray(value)) {
|
|
return result.concat(value.join(item.delimit || ', '));
|
|
}
|
|
|
|
return result.concat(item.slugify ? slugify(value, item.slugify) : value);
|
|
}
|
|
|
|
if (item.items) {
|
|
const value = processReleaseTemplate(release, item.items, item.delimit, item.wrap?.[0] || '', item.wrap?.[1] || '');
|
|
|
|
return result.concat(item.slugify ? slugify(value, item.slugify) : value);
|
|
}
|
|
|
|
return [];
|
|
}, []);
|
|
|
|
if (results.length > 0) {
|
|
return `${wrapOpen}${results.filter(Boolean).join(delimit)}${wrapClose}`;
|
|
}
|
|
|
|
return '';
|
|
}
|