From d35a64a744bf9ecd216b05c895b3cb177744fc4c Mon Sep 17 00:00:00 2001 From: Worph Date: Sun, 13 Sep 2026 15:57:12 +0200 Subject: [PATCH] align with metadata standard --- packages/meta-fuse-core/src/kv/RedisClient.ts | 8 -------- packages/meta-fuse-core/src/vfs/RenamingRule.ts | 4 ++-- packages/meta-fuse-core/src/vfs/VirtualFileSystem.ts | 7 ------- packages/meta-fuse-core/src/vfs/defaults/defaultRules.ts | 2 +- .../meta-fuse-core/src/vfs/types/RenamingRuleTypes.ts | 5 ++--- packages/meta-fuse-ui/src/components/RulesEditor.tsx | 6 +++--- 6 files changed, 8 insertions(+), 24 deletions(-) diff --git a/packages/meta-fuse-core/src/kv/RedisClient.ts b/packages/meta-fuse-core/src/kv/RedisClient.ts index 3fb5efc..9785efc 100644 --- a/packages/meta-fuse-core/src/kv/RedisClient.ts +++ b/packages/meta-fuse-core/src/kv/RedisClient.ts @@ -75,7 +75,6 @@ export interface FileMetadata { // Title information (for folder organization) title?: string; - titles?: { eng?: string; [key: string]: string | undefined }; originalTitle?: string; fileName?: string; @@ -623,12 +622,6 @@ export class RedisClient implements Partial { mtime = isNaN(parsed) ? parseFloat(data.mtime) : parsed; } - // Parse titles - can be nested object or simple string - let titles: { eng?: string; [key: string]: string | undefined } | undefined; - if (data['titles/eng']) { - titles = { eng: data['titles/eng'] }; - } - // Parse season/episode (can be 0 for specials) const season = data.season !== undefined ? parseInt(data.season, 10) : undefined; const episode = data.episode !== undefined ? parseInt(data.episode, 10) : undefined; @@ -660,7 +653,6 @@ export class RedisClient implements Partial { // Title information title: data.title, - titles, originalTitle: data.originalTitle, fileName: data.fileName, diff --git a/packages/meta-fuse-core/src/vfs/RenamingRule.ts b/packages/meta-fuse-core/src/vfs/RenamingRule.ts index d77bfe7..c4a73ce 100644 --- a/packages/meta-fuse-core/src/vfs/RenamingRule.ts +++ b/packages/meta-fuse-core/src/vfs/RenamingRule.ts @@ -13,7 +13,6 @@ */ export interface MediaMeta { // Title information - titles?: { eng?: string; [key: string]: string | undefined }; originalTitle?: string; title?: string; @@ -62,7 +61,8 @@ export function renamingRule(metadata: Partial, filepath?: string): s } // Get title - try various fields - const title = metadata.titles?.eng || metadata.originalTitle; + // The display name — never the `titles/*` name set (METADATA_KEYS.md §3). + const title = metadata.title || metadata.originalTitle; if (!title) { if (metadata.fileType !== 'torrent') { // Don't warn for torrent files because they don't always have a title diff --git a/packages/meta-fuse-core/src/vfs/VirtualFileSystem.ts b/packages/meta-fuse-core/src/vfs/VirtualFileSystem.ts index 19a8183..bc414a0 100644 --- a/packages/meta-fuse-core/src/vfs/VirtualFileSystem.ts +++ b/packages/meta-fuse-core/src/vfs/VirtualFileSystem.ts @@ -174,12 +174,6 @@ export class VirtualFileSystem implements VFSUpdateCallback { mtime = isNaN(parsed) ? parseFloat(props.mtime) : parsed; } - // Parse titles - can be from nested paths like 'titles/eng' - let titles: { eng?: string; [key: string]: string | undefined } | undefined; - if (props['titles/eng']) { - titles = { eng: props['titles/eng'] }; - } - // Parse season/episode const season = props.season !== undefined ? parseInt(props.season, 10) : undefined; const episode = props.episode !== undefined ? parseInt(props.episode, 10) : undefined; @@ -212,7 +206,6 @@ export class VirtualFileSystem implements VFSUpdateCallback { ctime: props.ctime ? parseFloat(props.ctime) : mtime, hashId, title: props.title, - titles, originalTitle: props.originalTitle, fileName, season, diff --git a/packages/meta-fuse-core/src/vfs/defaults/defaultRules.ts b/packages/meta-fuse-core/src/vfs/defaults/defaultRules.ts index f8f3023..585887f 100644 --- a/packages/meta-fuse-core/src/vfs/defaults/defaultRules.ts +++ b/packages/meta-fuse-core/src/vfs/defaults/defaultRules.ts @@ -7,7 +7,7 @@ * Old behavior: * - Only processes video, subtitle, torrent files * - Requires extension - * - Title from titles.eng || originalTitle + * - Title from title || originalTitle * - Files without title/extension are hidden (not in Unsorted) */ diff --git a/packages/meta-fuse-core/src/vfs/types/RenamingRuleTypes.ts b/packages/meta-fuse-core/src/vfs/types/RenamingRuleTypes.ts index 4e28d18..10c59bb 100644 --- a/packages/meta-fuse-core/src/vfs/types/RenamingRuleTypes.ts +++ b/packages/meta-fuse-core/src/vfs/types/RenamingRuleTypes.ts @@ -21,7 +21,7 @@ export type ConditionOperator = */ export interface Condition { type: ConditionOperator; - field: string; // Metadata field path, e.g., "titles.eng", "season", "fileType" + field: string; // Metadata field path, e.g., "title", "season", "fileType" value?: string | number | boolean; // Required for EQUALS, NOT_EQUALS, CONTAINS, MATCHES } @@ -83,7 +83,7 @@ export interface PreviewResponse { */ export interface TemplateVariable { name: string; // Display name - path: string; // Field path (e.g., "titles.eng") + path: string; // Field path (e.g., "title") type: 'string' | 'number' | 'boolean'; description: string; example?: string; @@ -93,7 +93,6 @@ export interface TemplateVariable { * List of all available template variables */ export const TEMPLATE_VARIABLES: TemplateVariable[] = [ - { name: 'English Title', path: 'titles.eng', type: 'string', description: 'English title from metadata', example: 'Breaking Bad' }, { name: 'Original Title', path: 'originalTitle', type: 'string', description: 'Original/native title', example: 'Breaking Bad' }, { name: 'Title', path: 'title', type: 'string', description: 'Simple title field', example: 'Breaking Bad' }, { name: 'Season', path: 'season', type: 'number', description: 'Season number', example: '1' }, diff --git a/packages/meta-fuse-ui/src/components/RulesEditor.tsx b/packages/meta-fuse-ui/src/components/RulesEditor.tsx index 580f664..7188ada 100644 --- a/packages/meta-fuse-ui/src/components/RulesEditor.tsx +++ b/packages/meta-fuse-ui/src/components/RulesEditor.tsx @@ -16,7 +16,7 @@ interface RulesEditorProps { // Available metadata fields for conditions const AVAILABLE_FIELDS = [ { value: 'fileType', label: 'File Type', type: 'string' }, - { value: 'titles.eng', label: 'English Title', type: 'string' }, + { value: 'title', label: 'Title', type: 'string' }, { value: 'originalTitle', label: 'Original Title', type: 'string' }, { value: 'season', label: 'Season', type: 'number' }, { value: 'episode', label: 'Episode', type: 'number' }, @@ -53,7 +53,7 @@ function createEmptyRule(): RenamingRule { function createEmptyCondition(): Condition { return { type: 'EXISTS', - field: 'titles.eng', + field: 'title', }; } @@ -197,7 +197,7 @@ function TemplateEditor({ template, onChange, variables }: TemplateEditorProps)