From 316db6ad031f5c37c3923afc555926f147f4c69e Mon Sep 17 00:00:00 2001 From: Worph Date: Wed, 16 Sep 2026 14:55:56 +0200 Subject: [PATCH] add origin --- src/plugin.ts | 16 ++++++++++++++-- test/extractor.test.ts | 26 +++++++++++++++++++++----- 2 files changed, 35 insertions(+), 7 deletions(-) diff --git a/src/plugin.ts b/src/plugin.ts index 56efbb9..fa56e38 100644 --- a/src/plugin.ts +++ b/src/plugin.ts @@ -477,9 +477,21 @@ export function videoSubtitleKeys(produced: ProducedSubtitle[]): Record { - const keys: Record = { [`videos/${videoCid}`]: 'true' }; + const keys: Record = { + [`videos/${videoCid}`]: 'true', + 'source/extract': 'true', + }; if (lang3 !== 'und') keys.subtitleLanguage = lang3; return keys; } diff --git a/test/extractor.test.ts b/test/extractor.test.ts index 0bb4d56..2533d4c 100644 --- a/test/extractor.test.ts +++ b/test/extractor.test.ts @@ -284,9 +284,16 @@ describe('record keys (METADATA_KEYS.md §8)', () => { expect(keys.every((k) => k.split('/').length === 3)).toBe(true); }); - it('subtitle record carries the back-pointer and a determined language only', () => { - expect(subtitleRecordKeys('bagvideo', 'fre')).toEqual({ 'videos/bagvideo': 'true', subtitleLanguage: 'fre' }); - expect(subtitleRecordKeys('bagvideo', 'und')).toEqual({ 'videos/bagvideo': 'true' }); + it('subtitle record carries the back-pointer, its origin, and a determined language only', () => { + expect(subtitleRecordKeys('bagvideo', 'fre')).toEqual({ + 'videos/bagvideo': 'true', + 'source/extract': 'true', + subtitleLanguage: 'fre', + }); + expect(subtitleRecordKeys('bagvideo', 'und')).toEqual({ + 'videos/bagvideo': 'true', + 'source/extract': 'true', + }); }); }); @@ -501,8 +508,17 @@ describe.skipIf(!ffmpegReady)('process — end to end against a fake core', () = expect(video.subtitleLanguages).toBeUndefined(); expect(video['subtitleLanguages/und']).toBeUndefined(); - expect(core.records.get(fre)).toEqual({ [`videos/${VIDEO_CID}`]: 'true', subtitleLanguage: 'fre' }); - expect(core.records.get(und)).toEqual({ [`videos/${VIDEO_CID}`]: 'true' }); + // `source/extract` rides on the subtitle's OWN record, so a peer that + // fetched only the file can still tell it came out of a container. + expect(core.records.get(fre)).toEqual({ + [`videos/${VIDEO_CID}`]: 'true', + 'source/extract': 'true', + subtitleLanguage: 'fre', + }); + expect(core.records.get(und)).toEqual({ + [`videos/${VIDEO_CID}`]: 'true', + 'source/extract': 'true', + }); // The video PATCH carried only new keys — nothing the record already had. const patch = writesTo(core, VIDEO_CID).find((c) => c.method === 'PATCH')!;