Completed
Push — master ( 61d444...b3f358 )
by Jan
16s queued 14s
created

src/frames/frame-sylt.ts   A

Complexity

Total Complexity 3
Complexity/F 0

Size

Lines of Code 47
Function Count 0

Duplication

Duplicated Lines 0
Ratio 0 %

Importance

Changes 0
Metric Value
wmc 3
eloc 36
mnd 3
bc 3
fnc 0
dl 0
loc 47
rs 10
bpm 0
cpm 0
noi 0
c 0
b 0
f 0
1
import { FrameBuilder } from "../FrameBuilder"
2
import { FrameReader } from "../FrameReader"
3
import type { Data } from "./type"
4
5
export const SYLT = {
6
    create: (data: Data) => {
7
        if(!(data instanceof Array)) {
8
            data = [data]
9
        }
10
11
        const encoding = 1 // 16 bit unicode
12
        return Buffer.concat(data.map((lycics: Data) => {
13
            const frameBuilder = new FrameBuilder("SYLT")
14
                .appendNumber(encoding, 1)
15
                .appendValue(lycics.language, 3)
16
                .appendNumber(lycics.timeStampFormat, 1)
17
                .appendNumber(lycics.contentType, 1)
18
                .appendNullTerminatedValue(lycics.shortText, encoding)
19
            lycics.synchronisedText.forEach((part: Data) => {
20
                frameBuilder.appendNullTerminatedValue(part.text, encoding)
21
                frameBuilder.appendNumber(part.timeStamp, 4)
22
            })
23
            return frameBuilder.getBuffer()
24
        }))
25
    },
26
    read: (buffer: Buffer) => {
27
        const reader = new FrameReader(buffer, 0)
28
29
        return {
30
            language: reader.consumeStaticValue('string', 3, 0x00),
31
            timeStampFormat: reader.consumeStaticValue('number', 1),
32
            contentType: reader.consumeStaticValue('number', 1),
33
            shortText: reader.consumeNullTerminatedValue('string'),
34
            synchronisedText: Array.from((function*() {
35
                while(true) {
36
                    const text = reader.consumeNullTerminatedValue('string')
37
                    const timeStamp = reader.consumeStaticValue('number', 4)
38
                    if (text === undefined || timeStamp === undefined) {
39
                        break
40
                    }
41
                    yield {text, timeStamp}
42
                }
43
            })())
44
        }
45
    }
46
}
47