1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
|
import * as types from 'app/types'
import { store, history, dispatch } from 'app/store'
import { MEDIA_TYPES } from 'app/constants'
export const buildParagraphs = () => dispatch => {
const state = store.getState()
const { order: annotationOrder, lookup: annotationLookup } = state.annotation.index
const { lookup: paragraphLookup } = state.paragraph.index
let currentParagraph = {}
let sectionCount = 0
const paragraphs = []
// loop over the annotations in time order
annotationOrder.forEach((annotation_id, i) => {
const annotation = annotationLookup[annotation_id]
const paragraph = paragraphLookup[annotation.paragraph_id]
// if this annotation is media, insert it after the current paragraph
if (MEDIA_TYPES.has(annotation.type)) {
paragraphs.push({
id: ('index_' + i),
type: annotation.type,
start_ts: annotation.start_ts,
end_ts: 0,
annotations: [annotation],
})
return
}
// if this annotation is from a different paragraph, make a new paragraph
if (annotation.type === 'header' || annotation.paragraph_id !== currentParagraph.id) {
const paragraph_type = getParagraphType(annotation, paragraph)
currentParagraph = {
id: annotation.paragraph_id || ('index_' + i),
type: paragraph_type,
start_ts: annotation.start_ts,
end_ts: 0,
annotations: [],
}
if (annotation.type === 'header') {
currentParagraph.sectionIndex = sectionCount++
currentParagraph.id = 'section_' + currentParagraph.sectionIndex
}
paragraphs.push(currentParagraph)
}
// if this annotation is a paragraph_end, set the end timestamp
if (annotation.type === 'paragraph_end') {
currentParagraph.end_ts = annotation.start_ts
}
// otherwise, just append this annotation to the paragraph
else {
currentParagraph.annotations.push(annotation)
}
})
for (let i = 0; i < (paragraphs.length - 1); i++) {
if (!paragraphs[i].end_ts) {
paragraphs[i].end_ts = paragraphs[i+1].start_ts - 0.1
}
}
dispatch({ type: types.paragraph.update_transcript, paragraphs })
}
const getParagraphType = (annotation, paragraph) => {
if (annotation.type === 'header') {
return annotation.type
}
if (!paragraph) {
return annotation.type
}
return paragraph.type
}
|