Skip to content

Commit 37ab2eb

Browse files
authored
Merge pull request #40 from diffusionstudio/konstantin/feat/source-metadata
Konstantin/feat/source metadata
2 parents 3e33ffe + b863e95 commit 37ab2eb

File tree

15 files changed

+65
-18
lines changed

15 files changed

+65
-18
lines changed

package-lock.json

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@diffusionstudio/core",
33
"private": false,
4-
"version": "1.1.3",
4+
"version": "1.2.0",
55
"type": "module",
66
"description": "Build bleeding edge video processing applications",
77
"files": [

src/clips/audio/audio.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -86,7 +86,6 @@ export class AudioClip extends MediaClip<AudioClipProps> {
8686

8787
public copy(): AudioClip {
8888
const clip = AudioClip.fromJSON(JSON.parse(JSON.stringify(this)));
89-
clip.transcript = this.transcript;
9089
clip.source = this.source;
9190

9291
return clip;

src/clips/media/media.ts

Lines changed: 13 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@ import type { MediaClipProps } from './media.interfaces';
1919

2020

2121
export class MediaClip<Props extends MediaClipProps = MediaClipProps> extends Clip<MediaClipProps> {
22-
public readonly source = new AudioSource();
22+
public source = new AudioSource();
2323
public declare element?: HTMLAudioElement | HTMLVideoElement;
2424

2525
@serializable(Timestamp)
@@ -42,16 +42,22 @@ export class MediaClip<Props extends MediaClipProps = MediaClipProps> extends Cl
4242
@serializable(RangeDeserializer)
4343
public range: [Timestamp, Timestamp] = [new Timestamp(), this.duration];
4444

45+
public constructor(props: MediaClipProps = {}) {
46+
super();
47+
48+
Object.assign(this, props);
49+
}
50+
4551
/**
4652
* Defines the transcript of the video/audio
4753
*/
4854
@serializable(Transcript)
49-
public transcript?: Transcript;
55+
public get transcript(): Transcript | undefined {
56+
return this.source.transcript;
57+
};
5058

51-
public constructor(props: MediaClipProps = {}) {
52-
super();
53-
54-
Object.assign(this, props);
59+
public set transcript(transcript: Transcript | undefined) {
60+
this.source.transcript = transcript;
5561
}
5662

5763
public get start(): Timestamp {
@@ -234,7 +240,7 @@ export class MediaClip<Props extends MediaClipProps = MediaClipProps> extends Cl
234240

235241
public copy(): MediaClip {
236242
const clip = MediaClip.fromJSON(JSON.parse(JSON.stringify(this)));
237-
clip.transcript = this.transcript;
243+
clip.source = this.source;
238244
return clip;
239245
}
240246

src/clips/video/video.ts

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -142,7 +142,6 @@ export class VideoClip extends VisualMixin(MediaClip<VideoClipProps>) {
142142
const clip = VideoClip.fromJSON(JSON.parse(JSON.stringify(this)));
143143
clip.filters = this.filters;
144144
clip.source = this.source;
145-
clip.transcript = this.transcript;
146145

147146
return clip;
148147
}

src/sources/audio.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -89,6 +89,13 @@ describe('AudioSource', () => {
8989
}
9090
});
9191

92+
it('should accept custom metadata', async () => {
93+
const metadata = { a: 1, b: 2 };
94+
const source = new AudioSource<typeof metadata>();
95+
source.metadata = metadata;
96+
expect(source.metadata).toEqual(metadata);
97+
});
98+
9299
it('should create a thumbnail with correct DOM elements', async () => {
93100
const thumbnail = await audioSource.thumbnail(60, 50, 0);
94101

src/sources/audio.ts

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,11 +10,13 @@ import { Source } from './source';
1010
import type { ClipType } from '../clips';
1111
import type { ArgumentTypes } from '../types';
1212
import type { FastSamplerOptions } from './audio.types';
13+
import type { Transcript } from '../models';
1314

14-
export class AudioSource extends Source {
15+
export class AudioSource<T extends Object = {}> extends Source<T> {
16+
public readonly type: ClipType = 'audio';
1517
private decoding = false;
1618

17-
public readonly type: ClipType = 'audio';
19+
public transcript?: Transcript;
1820
public audioBuffer?: AudioBuffer;
1921

2022
public async decode(

src/sources/html.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -91,6 +91,13 @@ describe('The Html Source Object', () => {
9191

9292
expect(thumbnail).toBeInstanceOf(Image);
9393
});
94+
95+
it('should accept custom metadata', async () => {
96+
const metadata = { a: 1, b: 2 };
97+
const source = new HtmlSource<typeof metadata>();
98+
source.metadata = metadata;
99+
expect(source.metadata).toEqual(metadata);
100+
});
94101
});
95102

96103
function mockIframeValid(source: HtmlSource) {

src/sources/html.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { documentToSvgImageUrl } from './html.utils';
1010

1111
import type { ClipType } from '../clips';
1212

13-
export class HtmlSource extends Source {
13+
export class HtmlSource<T extends Object = {}> extends Source<T> {
1414
public readonly type: ClipType = 'html';
1515
/**
1616
* Access to the iframe that is required

src/sources/image.spec.ts

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,4 +19,11 @@ describe('The Image Source Object', () => {
1919

2020
expect(thumbnail).toBeInstanceOf(Image);
2121
});
22+
23+
it('should accept custom metadata', async () => {
24+
const metadata = { a: 1, b: 2 };
25+
const source = new ImageSource<typeof metadata>();
26+
source.metadata = metadata;
27+
expect(source.metadata).toEqual(metadata);
28+
});
2229
});

0 commit comments

Comments
 (0)