align with metadata standard
This commit is contained in:
@@ -26,7 +26,8 @@ export function renamingRule(metamesh: Local, filepath?: string): string | null
|
||||
throw new Error(`No extension found for file: ${filepath}`);
|
||||
}
|
||||
|
||||
const title = metamesh?.titles?.eng || metamesh.originalTitle;
|
||||
// The display name — never the `titles/*` name set, which has no preferred member (METADATA_KEYS.md §3).
|
||||
const title = metamesh.title || metamesh.originalTitle;
|
||||
if (!title) {
|
||||
if (metamesh.fileType !== "torrent") {
|
||||
//don't warn for torrent files because they don't always have a title (eg representing a folder of files)
|
||||
|
||||
@@ -85,13 +85,10 @@ export class JellyfinFormatHandler implements IMetadataFormatHandler {
|
||||
if (metadata.originalTitle) jellyfinFields.originalTitle = metadata.originalTitle;
|
||||
if (metadata.movieYear) jellyfinFields.year = metadata.movieYear;
|
||||
|
||||
// Titles (first title or original title)
|
||||
if (metadata.titles) {
|
||||
const titleEntries = Object.entries(metadata.titles);
|
||||
if (titleEntries.length > 0) {
|
||||
jellyfinFields.title = titleEntries[0][1];
|
||||
}
|
||||
}
|
||||
// Title: the display name. `titles/*` is an unordered name set with no
|
||||
// preferred member, so it is never the NFO title (METADATA_KEYS.md §3).
|
||||
const title = metadata.title || metadata.originalTitle;
|
||||
if (title) jellyfinFields.title = title;
|
||||
|
||||
// IDs
|
||||
if (metadata.imdbid) jellyfinFields.imdbid = metadata.imdbid;
|
||||
|
||||
@@ -9,7 +9,7 @@ export interface FileMetadata {
|
||||
|
||||
// Filename parsing
|
||||
title?: string;
|
||||
titles?: string[];
|
||||
titles?: Record<string, Record<string, true | string>>; // key-set: lang3 → {name: "true"}
|
||||
originaltitle?: string;
|
||||
showtitle?: string;
|
||||
season?: number;
|
||||
|
||||
@@ -22,13 +22,13 @@ describe('MetaData', () => {
|
||||
});
|
||||
|
||||
it('should set and get nested metadata using nested keys', () => {
|
||||
root.at('titles').at('eng').set("Star Wars");
|
||||
root.at('titles').at('jpn').set("Staru Warsu");
|
||||
expect(root.at('titles').at('eng').get()).to.equal("Star Wars");
|
||||
expect(root.at('titles').at('jpn').get()).to.equal("Staru Warsu");
|
||||
expect(root.at('titles').get()).to.deep.equal({eng: "Star Wars", jpn: "Staru Warsu"});
|
||||
root.at('titles').at('eng').at('Star Wars').set(true);
|
||||
root.at('titles').at('jpn').at('Staru Warsu').set(true);
|
||||
expect(root.at('titles').at('eng').at('Star Wars').get()).to.equal(true);
|
||||
expect(root.at('titles').at('jpn').at('Staru Warsu').get()).to.equal(true);
|
||||
expect(root.at('titles').get()).to.deep.equal({eng: {"Star Wars": true}, jpn: {"Staru Warsu": true}});
|
||||
expect(root.get()).to.deep.equal({
|
||||
titles: {eng: "Star Wars", jpn: "Staru Warsu"}
|
||||
titles: {eng: {"Star Wars": true}, jpn: {"Staru Warsu": true}}
|
||||
});
|
||||
});
|
||||
|
||||
|
||||
@@ -8,8 +8,9 @@ export interface VideoMeta {
|
||||
increment?: string;
|
||||
movieYear?: string;
|
||||
videoType?: VideoType;
|
||||
title?: string;//display title (localized); the one name to show
|
||||
originalTitle?: string;//title in original language
|
||||
titles?: LanguageData<string>;// <ISO 639-3 lang codes, title>
|
||||
titles?: LanguageData<Record<string, true>>;// key-set: <ISO 639-3 lang code, {name: true}> — every clean name incl. AKAs (METADATA_KEYS.md §3)
|
||||
}
|
||||
|
||||
export const VideoMetaFields = [
|
||||
|
||||
Reference in New Issue
Block a user