fix: Allow multiple date parsers to apply at the same folder hierarchy level (#2090)
- For: #1748
This commit is contained in:
@@ -51,8 +51,11 @@ export class MetadataGenerator {
|
|||||||
}
|
}
|
||||||
if (parser.type === 'startdate' || parser.type === 'date') {
|
if (parser.type === 'startdate' || parser.type === 'date') {
|
||||||
metadata.startDate =
|
metadata.startDate =
|
||||||
this._parseDate(parser, valueToParse, parent?._metadata?.startDate) ??
|
this._parseDate(
|
||||||
undefined;
|
parser,
|
||||||
|
valueToParse,
|
||||||
|
metadata.startDate ?? parent?._metadata?.startDate,
|
||||||
|
) ?? undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -83,7 +86,7 @@ export class MetadataGenerator {
|
|||||||
if (!Object.keys(result).length) {
|
if (!Object.keys(result).length) {
|
||||||
return undefined;
|
return undefined;
|
||||||
}
|
}
|
||||||
return this._anyDateParser.fromObject({
|
const candidate = this._anyDateParser.fromObject({
|
||||||
...(base && {
|
...(base && {
|
||||||
year: base.getFullYear(),
|
year: base.getFullYear(),
|
||||||
month: base.getMonth() + 1,
|
month: base.getMonth() + 1,
|
||||||
@@ -95,5 +98,6 @@ export class MetadataGenerator {
|
|||||||
}),
|
}),
|
||||||
...result,
|
...result,
|
||||||
});
|
});
|
||||||
|
return isValidDate(candidate) ? candidate : undefined;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -115,6 +115,19 @@ describe('MetadataGenerator', () => {
|
|||||||
).toBeUndefined();
|
).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should fail to generate start date with invalid date', async () => {
|
||||||
|
const badBrowseMedia = createBrowseMedia({
|
||||||
|
title: '20250507AM',
|
||||||
|
});
|
||||||
|
const generator = new MetadataGenerator();
|
||||||
|
await generator.prepare([formatlessDateParser]);
|
||||||
|
|
||||||
|
expect(
|
||||||
|
generator.generate(badBrowseMedia, undefined, [formatlessDateParser])
|
||||||
|
?.startDate,
|
||||||
|
).toBeUndefined();
|
||||||
|
});
|
||||||
|
|
||||||
it('should incorporate parent metadata without a date format', async () => {
|
it('should incorporate parent metadata without a date format', async () => {
|
||||||
const parentBrowseMedia = createRichBrowseMedia({
|
const parentBrowseMedia = createRichBrowseMedia({
|
||||||
title: '2025-05-26',
|
title: '2025-05-26',
|
||||||
@@ -164,6 +177,29 @@ describe('MetadataGenerator', () => {
|
|||||||
).toBeUndefined();
|
).toBeUndefined();
|
||||||
});
|
});
|
||||||
|
|
||||||
|
it('should use multiple parsed dates together', async () => {
|
||||||
|
const browseMedia = createBrowseMedia({
|
||||||
|
title: 'Foscam C1-20250507-171758-1746631078004-3.mp4',
|
||||||
|
});
|
||||||
|
const parsers: Parser[] = [
|
||||||
|
{
|
||||||
|
type: 'date',
|
||||||
|
regexp: '\\d{8}',
|
||||||
|
},
|
||||||
|
{
|
||||||
|
type: 'date',
|
||||||
|
regexp: '-(?<value>\\d{6})-',
|
||||||
|
format: 'HHmmss',
|
||||||
|
},
|
||||||
|
];
|
||||||
|
const generator = new MetadataGenerator();
|
||||||
|
await generator.prepare(parsers);
|
||||||
|
|
||||||
|
expect(generator.generate(browseMedia, undefined, parsers)?.startDate).toEqual(
|
||||||
|
new Date('2025-05-07T17:17:58.000Z'),
|
||||||
|
);
|
||||||
|
});
|
||||||
|
|
||||||
it('should incorporate parent metadata with a date format', async () => {
|
it('should incorporate parent metadata with a date format', async () => {
|
||||||
const parentBrowseMedia = createRichBrowseMedia({
|
const parentBrowseMedia = createRichBrowseMedia({
|
||||||
title: '2025-05-26',
|
title: '2025-05-26',
|
||||||
|
|||||||
Reference in New Issue
Block a user