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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
|
import { clamp, timestampToSeconds } from 'app/utils'
export const annotationFadeTimings = annotation => {
const fadeInDuration = timestampToSeconds(annotation.settings.fade_in_duration || '0') || 0.0
const fadeOutDuration = timestampToSeconds(annotation.settings.fade_out_duration || '0') || 0.0
const duration = timestampToSeconds(annotation.settings.duration || '0') || 0.1
const start_ts = annotation.start_ts
const end_ts = start_ts + duration
const fade_in_end_ts = start_ts + fadeInDuration
const fade_out_start_ts = end_ts - fadeOutDuration
return {
fadeInDuration, fadeOutDuration, duration,
start_ts, end_ts, fade_in_end_ts, fade_out_start_ts,
}
}
export const thumbnailURL = media => {
let image_id
// console.log(media)
switch (media.type) {
case 'video':
if (media.settings.poster) {
return media.settings.poster.url
}
return media.settings.video.thumbnail_url
case 'image':
return media.settings.thumbnail.url
case 'gallery':
if (media.settings.thumbnail) {
return media.settings.thumbnail.url
}
if (!media.settings.image_order || !media.settings.image_order.length) {
return null
}
image_id = media.settings.image_order[0]
return media.settings.thumbnail_lookup[image_id].url
default:
return null
}
}
export const displayThumbnailURL = media => {
let image_id
switch (media.type) {
case 'video':
if (media.settings.poster) {
return media.settings.poster.url
}
return media.settings.video.thumbnail_url
case 'image':
return media.settings.display.url
case 'gallery':
if (media.settings.thumbnail) {
return media.settings.thumbnail.url
}
if (!media.settings.image_order || !media.settings.image_order.length) {
return null
}
image_id = media.settings.image_order[0]
return media.settings.display_lookup[image_id].url
default:
return null
}
}
export const posterURL = media => {
if (!media.settings.video) return null
if (media.settings.poster) return media.settings.poster.url
return media.settings.video.thumbnail_url
}
export const sectionProgress = (section, play_ts) => {
return (clamp(play_ts, section.start_ts, section.end_ts) - section.start_ts) / section.duration
}
export const sectionProgressPercentage = (section, play_ts) => {
return (Math.round(sectionProgress(section, play_ts) * 2000) / 20) + '%'
}
export const makeMediaItems = (media, types) => {
const { lookup, order } = media
if (!(types instanceof Set)) {
types = new Set(types)
}
const listItems = order.filter(id => types.has(lookup[id].type)).map(id => {
const { title, author, type } = lookup[id]
return {
name: id,
label: '[' + type + '] ' + author + ' - ' + title
}
}).sort((a,b) => a.label.localeCompare(b.label))
return listItems
}
export const makeGalleryItems = (annotation, media) => {
if (!annotation.settings.media_id) return {}
if (!media.lookup[annotation.settings.media_id]) return {}
let thumbnail, frame_id
const item = media.lookup[annotation.settings.media_id]
if (item.type !== 'gallery') return {}
const gallery_items = item.settings.image_order.map((id, index) => {
const caption = item.settings.caption_lookup && item.settings.caption_lookup[id]
console.log(caption)
return {
name: index,
label: (index + 1) + ") " + (caption ? (caption.title || "") : "")
}
})
if (annotation.settings.frame_index) {
frame_id = item.settings.image_order[annotation.settings.frame_index]
thumbnail = item.settings.thumbnail_lookup[frame_id]
}
return { item, gallery_items, frame_id, thumbnail }
}
|