@anandaramr/obscura 1.0.0 → 1.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +7 -1
- package/dist/server.js +1 -0
- package/dist/server.js.map +1 -1
- package/package.json +1 -1
- package/public/app.js +93 -45
package/README.md
CHANGED
|
@@ -1,3 +1,9 @@
|
|
|
1
1
|
# Obscura Media Server
|
|
2
2
|
|
|
3
|
-
Core documentation and CLI guides will be published with the upcoming stable release.
|
|
3
|
+
Core documentation and CLI guides will be published with the upcoming stable release.
|
|
4
|
+
|
|
5
|
+
# Installation
|
|
6
|
+
|
|
7
|
+
```sh
|
|
8
|
+
npm i -g @anandaramr/obscura
|
|
9
|
+
```
|
package/dist/server.js
CHANGED
|
@@ -92,6 +92,7 @@ app.get("/api/events", (req, res) => {
|
|
|
92
92
|
res.setHeader("Content-Type", "text/event-stream");
|
|
93
93
|
res.setHeader("Cache-Control", "no-cache");
|
|
94
94
|
res.setHeader("Connection", "keep-alive");
|
|
95
|
+
res.flushHeaders();
|
|
95
96
|
const clientId = Date.now();
|
|
96
97
|
clients.push({ id: clientId, res });
|
|
97
98
|
req.on("close", () => {
|
package/dist/server.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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
|
|
1
|
+
{"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
package/public/app.js
CHANGED
|
@@ -2,20 +2,18 @@ let files = []
|
|
|
2
2
|
let isShuffled = false
|
|
3
3
|
let elementMap = new Map()
|
|
4
4
|
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
cacheTTLMap.delete(fileId)
|
|
8
|
-
}
|
|
9
|
-
|
|
10
|
-
function onVideoPause(fileId, vid) {
|
|
11
|
-
const timer = setTimeout(() => {
|
|
12
|
-
vid.removeAttribute('src')
|
|
13
|
-
vid.load()
|
|
14
|
-
cacheTTLMap.delete(fileId)
|
|
15
|
-
}, VIDEO_CACHE_TTL)
|
|
5
|
+
const VIDEO_CACHE_TTL = 60 * 1000
|
|
6
|
+
let cacheTTLMap = new Map()
|
|
16
7
|
|
|
17
|
-
|
|
18
|
-
|
|
8
|
+
let retryQueue = []
|
|
9
|
+
window.addEventListener('connected', () => {
|
|
10
|
+
if (retryQueue.length) {
|
|
11
|
+
for (const retry of retryQueue) {
|
|
12
|
+
retry()
|
|
13
|
+
}
|
|
14
|
+
retryQueue = []
|
|
15
|
+
}
|
|
16
|
+
})
|
|
19
17
|
|
|
20
18
|
init()
|
|
21
19
|
|
|
@@ -23,7 +21,7 @@ async function init() {
|
|
|
23
21
|
const res = await fetch('/api/files')
|
|
24
22
|
files = await res.json()
|
|
25
23
|
|
|
26
|
-
params = new URLSearchParams(window.location.search)
|
|
24
|
+
const params = new URLSearchParams(window.location.search)
|
|
27
25
|
isShuffled = params.has('shuffle')
|
|
28
26
|
const fileList = isShuffled ? shuffleArray(files) : files
|
|
29
27
|
|
|
@@ -53,6 +51,10 @@ eventSource.onmessage = evt => {
|
|
|
53
51
|
}
|
|
54
52
|
}
|
|
55
53
|
|
|
54
|
+
eventSource.onopen = () => {
|
|
55
|
+
window.dispatchEvent(new Event('connected'))
|
|
56
|
+
}
|
|
57
|
+
|
|
56
58
|
let previewWindow = []
|
|
57
59
|
const observer = new IntersectionObserver(
|
|
58
60
|
entries => {
|
|
@@ -69,30 +71,6 @@ const observer = new IntersectionObserver(
|
|
|
69
71
|
{ threshold: 1 }
|
|
70
72
|
)
|
|
71
73
|
|
|
72
|
-
let currentPreview = null
|
|
73
|
-
function onVisible(preview) {
|
|
74
|
-
const vid = preview.getElementsByClassName('video-preview')[0]
|
|
75
|
-
previewWindow.push(preview)
|
|
76
|
-
previewWindow.sort((a, b) => a.getBoundingClientRect().top - b.getBoundingClientRect().top)
|
|
77
|
-
|
|
78
|
-
vid.onended = evt => {
|
|
79
|
-
const idx = previewWindow.indexOf(preview)
|
|
80
|
-
stopMobilePreview(idx)
|
|
81
|
-
startMobilePreview((idx + 1) % previewWindow.length)
|
|
82
|
-
}
|
|
83
|
-
|
|
84
|
-
if (!currentPreview) startMobilePreview(0)
|
|
85
|
-
}
|
|
86
|
-
|
|
87
|
-
function onEndOfVisibility(preview) {
|
|
88
|
-
const idx = previewWindow.indexOf(preview)
|
|
89
|
-
const isCurrentlyPlaying = currentPreview == preview
|
|
90
|
-
|
|
91
|
-
stopMobilePreview(idx)
|
|
92
|
-
previewWindow.splice(idx, 1)
|
|
93
|
-
if (isCurrentlyPlaying && previewWindow.length) startMobilePreview(idx % previewWindow.length)
|
|
94
|
-
}
|
|
95
|
-
|
|
96
74
|
function insertGridItem(file, grid, prepend = false) {
|
|
97
75
|
const preview = document.createElement('a')
|
|
98
76
|
|
|
@@ -104,6 +82,13 @@ function insertGridItem(file, grid, prepend = false) {
|
|
|
104
82
|
media.src = `/api/thumb/${file.id}`
|
|
105
83
|
media.loading = 'lazy'
|
|
106
84
|
media.className = file.type === 'image' ? 'img' : 'video'
|
|
85
|
+
media.onerror = () => {
|
|
86
|
+
if (!isServerReachable()) {
|
|
87
|
+
retryQueue.push(() => {
|
|
88
|
+
media.src = media.src
|
|
89
|
+
})
|
|
90
|
+
}
|
|
91
|
+
}
|
|
107
92
|
preview.appendChild(media)
|
|
108
93
|
|
|
109
94
|
if (file.type != 'image') {
|
|
@@ -138,7 +123,7 @@ function insertGridItem(file, grid, prepend = false) {
|
|
|
138
123
|
} else if (file.isAnimated) {
|
|
139
124
|
const icon = document.createElement('span')
|
|
140
125
|
icon.className = 'live-indicator'
|
|
141
|
-
icon.innerText =
|
|
126
|
+
icon.innerText = 'LIVE'
|
|
142
127
|
preview.appendChild(icon)
|
|
143
128
|
|
|
144
129
|
preview.onmouseenter = () => {
|
|
@@ -146,7 +131,7 @@ function insertGridItem(file, grid, prepend = false) {
|
|
|
146
131
|
media.src = `/api/files/${file.id}`
|
|
147
132
|
}
|
|
148
133
|
}
|
|
149
|
-
|
|
134
|
+
|
|
150
135
|
preview.onmouseleave = () => {
|
|
151
136
|
if (!isMobileDevice()) {
|
|
152
137
|
media.src = `/api/thumb/${file.id}`
|
|
@@ -164,8 +149,67 @@ function insertGridItem(file, grid, prepend = false) {
|
|
|
164
149
|
elementMap.set(file.id, preview)
|
|
165
150
|
}
|
|
166
151
|
|
|
167
|
-
|
|
168
|
-
|
|
152
|
+
function isServerReachable() {
|
|
153
|
+
return eventSource.readyState === EventSource.OPEN
|
|
154
|
+
}
|
|
155
|
+
|
|
156
|
+
function onVideoPlay(fileId) {
|
|
157
|
+
clearTimeout(cacheTTLMap.get(fileId))
|
|
158
|
+
cacheTTLMap.delete(fileId)
|
|
159
|
+
}
|
|
160
|
+
|
|
161
|
+
function onVideoPause(fileId, vid) {
|
|
162
|
+
// Allow browser to free memory if the video hasn't been
|
|
163
|
+
// played for a specified amount of time
|
|
164
|
+
const timer = setTimeout(() => {
|
|
165
|
+
vid.removeAttribute('src')
|
|
166
|
+
vid.load()
|
|
167
|
+
cacheTTLMap.delete(fileId)
|
|
168
|
+
}, VIDEO_CACHE_TTL)
|
|
169
|
+
|
|
170
|
+
cacheTTLMap.set(fileId, timer)
|
|
171
|
+
}
|
|
172
|
+
|
|
173
|
+
let currentPreview = null
|
|
174
|
+
function onVisible(preview) {
|
|
175
|
+
const vid = preview.getElementsByClassName('video-preview')[0]
|
|
176
|
+
if (!vid) return
|
|
177
|
+
|
|
178
|
+
addToPreviewWindow(preview)
|
|
179
|
+
vid.onended = evt => {
|
|
180
|
+
const idx = previewWindow.indexOf(preview)
|
|
181
|
+
if (previewWindow.length == 1) {
|
|
182
|
+
vid.play().catch(err => console.log(`Play interrupted: ${err}`))
|
|
183
|
+
return
|
|
184
|
+
}
|
|
185
|
+
|
|
186
|
+
stopMobilePreview(idx)
|
|
187
|
+
startMobilePreview((idx + 1) % previewWindow.length)
|
|
188
|
+
}
|
|
189
|
+
|
|
190
|
+
if (!currentPreview) startMobilePreview(0)
|
|
191
|
+
}
|
|
192
|
+
|
|
193
|
+
const getPosition = element => element.getBoundingClientRect().top
|
|
194
|
+
function addToPreviewWindow(preview) {
|
|
195
|
+
// inserts elements sorted according to their relative position
|
|
196
|
+
// ASSUMES elements are added only during scroll and no elements
|
|
197
|
+
// would be added between
|
|
198
|
+
if (previewWindow.length && getPosition(preview) < getPosition(previewWindow[0])) {
|
|
199
|
+
previewWindow.unshift(preview)
|
|
200
|
+
} else {
|
|
201
|
+
previewWindow.push(preview)
|
|
202
|
+
}
|
|
203
|
+
}
|
|
204
|
+
|
|
205
|
+
function onEndOfVisibility(preview) {
|
|
206
|
+
const idx = previewWindow.indexOf(preview)
|
|
207
|
+
const isCurrentlyPlaying = currentPreview == preview
|
|
208
|
+
|
|
209
|
+
stopMobilePreview(idx)
|
|
210
|
+
previewWindow.splice(idx, 1)
|
|
211
|
+
if (isCurrentlyPlaying && previewWindow.length) startMobilePreview(idx % previewWindow.length)
|
|
212
|
+
}
|
|
169
213
|
|
|
170
214
|
function stopMobilePreview(idx) {
|
|
171
215
|
const preview = previewWindow[idx]
|
|
@@ -194,7 +238,7 @@ function startMobilePreview(idx) {
|
|
|
194
238
|
function stopVideoPreview(vid, id, media, icon) {
|
|
195
239
|
vid.pause()
|
|
196
240
|
onVideoPause(id, vid)
|
|
197
|
-
|
|
241
|
+
|
|
198
242
|
vid.classList.add('fade')
|
|
199
243
|
media.classList.remove('fade')
|
|
200
244
|
icon.classList.remove('blink')
|
|
@@ -212,7 +256,7 @@ function startVideoPreview(vid, id, media, icon) {
|
|
|
212
256
|
{ once: true }
|
|
213
257
|
)
|
|
214
258
|
|
|
215
|
-
if (
|
|
259
|
+
if (needsVideoLoading(vid)) {
|
|
216
260
|
vid.src = `/api/files/${id}`
|
|
217
261
|
vid.load()
|
|
218
262
|
}
|
|
@@ -220,11 +264,15 @@ function startVideoPreview(vid, id, media, icon) {
|
|
|
220
264
|
vid.classList.remove('fade')
|
|
221
265
|
media.classList.add('fade')
|
|
222
266
|
|
|
223
|
-
vid.currentTime = 0
|
|
224
267
|
onVideoPlay(id)
|
|
268
|
+
vid.currentTime = 0
|
|
225
269
|
vid.play().catch(err => console.log('Play interrupted:', err))
|
|
226
270
|
}
|
|
227
271
|
|
|
272
|
+
function needsVideoLoading(vid) {
|
|
273
|
+
return !vid.src || vid.networkState === HTMLMediaElement.NETWORK_NO_SOURCE || vid.error
|
|
274
|
+
}
|
|
275
|
+
|
|
228
276
|
function isMobileDevice() {
|
|
229
277
|
return !window.matchMedia('(min-width: 769px)').matches
|
|
230
278
|
}
|