@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 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", () => {
@@ -1 +1 @@
1
- {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":";AAEA,OAAO,OAAO,MAAM,SAAS,CAAA;AAC7B,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,QAAQ,MAAM,UAAU,CAAA;AAC/B,OAAO,MAAM,MAAM,SAAS,CAAA;AAE5B,OAAO,MAAM,MAAM,QAAQ,CAAA;AAC3B,MAAM,CAAC,MAAM,CAAC,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC,CAAA;AAE9B,OAAO,IAAI,MAAM,MAAM,CAAA;AACvB,OAAO,EAAE,MAAM,IAAI,CAAA;AACnB,OAAO,KAAK,MAAM,OAAO,CAAA;AACzB,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,CAAA;AAElB,OAAO,EAAE,iBAAiB,EAAE,iBAAiB,EAAE,YAAY,EAAE,MAAM,WAAW,CAAA;AAC9E,OAAO,EACH,YAAY,EACZ,eAAe,EACf,iBAAiB,EACjB,mBAAmB,EACnB,kBAAkB,EAClB,uBAAuB,GAC1B,MAAM,eAAe,CAAA;AACtB,OAAO,MAAM,MAAM,aAAa,CAAA;AAEhC,OAAO,EAAE,sBAAsB,EAAE,sBAAsB,EAAE,MAAM,gBAAgB,CAAA;AAC/E,OAAO,EAAE,YAAY,EAAE,MAAM,YAAY,CAAA;AAGzC,OAAO,EAAE,aAAa,EAAE,MAAM,KAAK,CAAA;AACnC,MAAM,UAAU,GAAG,aAAa,CAAC,MAAM,CAAC,IAAI,CAAC,GAAG,CAAC,CAAA;AACjD,MAAM,YAAY,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,OAAO,CAAC,UAAU,CAAC,EAAE,IAAI,CAAC,CAAA;AAEjE,MAAM,GAAG,GAAG,OAAO,EAAE,CAAA;AACrB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,IAAI,EAAE,CAAC,CAAA;AACvB,GAAG,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAA;AACjB,GAAG,CAAC,GAAG,CAAC,OAAO,CAAC,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAC,CAAC,CAAA;AAE1D,MAAM,WAAW,GAAG,IAAI,CAAC,OAAO,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,iBAAiB,CAAC,CAAA;AAChH,MAAM,OAAO,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,OAAO,CAAC,GAAG,CAAC,OAAO,IAAI,eAAe,CAAA;AACzE,MAAM,IAAI,GAAG,QAAQ,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,IAAI,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,EAAE,CAAC,IAAI,YAAY,CAAA;AAEhG,MAAM,eAAe,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE,CAAC,IAAI,uBAAuB,CAAA;AAC9F,MAAM,UAAU,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,UAAU,IAAI,EAAE,CAAC,IAAI,kBAAkB,CAAA;AAC/E,MAAM,WAAW,GAAG,QAAQ,CAAC,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC,IAAI,mBAAmB,CAAA;AAElF,MAAM,UAAU,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,QAAQ,CAAC,CAAA;AACpD,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,UAAU,CAAC;IAAE,EAAE,CAAC,SAAS,CAAC,UAAU,EAAE,EAAE,SAAS,EAAE,IAAI,EAAE,CAAC,CAAA;AAE7E,MAAM,KAAK,GAAG,MAAM,CAAC,WAAW,CAAC,CAAA;AAEjC,MAAM,EAAE,KAAK,EAAE,GAAG,iBAAiB,CAAC,WAAW,CAAC,CAAA;AAChD,IAAI,KAAK,EAAE,CAAC;IACR,OAAO,CAAC,KAAK,CAAC,0CAA0C,KAAK,EAAE,CAAC,CAAA;IAChE,OAAO,CAAC,KAAK,CAAC,8CAA8C,CAAC,CAAA;IAC7D,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;AACnB,CAAC;AAED,IAAI,QAAQ,GAAG,IAAI,GAAG,EAAwB,CAAA;AAC9C,IAAI,WAAW,GAAyB,EAAE,CAAA;AAE1C,MAAM,OAAO,GAAG,QAAQ,CAAC,KAAK,CAAC,WAAW,EAAE;IACxC,OAAO,EAAE,eAAe;IACxB,UAAU,EAAE,IAAI;IAChB,aAAa,EAAE,KAAK;CACvB,CAAC,CAAA;AAEF,IAAI,OAAO,GAAgB,EAAE,CAAA;AAC7B,IAAI,SAAS,GAAG,IAAI,CAAA;AACpB,SAAS,gBAAgB,CAAC,MAAc,EAAE,QAAqC;IAC3E,OAAO,CAAC,OAAO,CAAC,CAAC,MAAM,EAAE,EAAE;QACvB,MAAM,CAAC,GAAG,CAAC,KAAK,CAAC,SAAS,IAAI,CAAC,SAAS,CAAC,EAAE,MAAM,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAC,MAAM,CAAC,CAAA;IAC/E,CAAC,CAAC,CAAA;AACN,CAAC;AAED,OAAO,CAAC,EAAE,CAAC,KAAK,EAAE,KAAK,EAAE,QAAQ,EAAE,EAAE;IACjC,MAAM,QAAQ,GAAG,MAAM,iBAAiB,CAAC,QAAQ,CAAC,CAAA;IAClD,IAAI,CAAC,QAAQ;QAAE,OAAM;IAErB,MAAM,UAAU,GAAG,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC,CAAA;IAC5C,QAAQ,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,EAAE,QAAQ,CAAC,CAAA;IAEnC,IAAI,UAAU;QAAE,OAAM;IACtB,MAAM,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,GAAG,QAAQ,CAAA;IAC3D,MAAM,cAAc,GAAG,EAAE,EAAE,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAAE,CAAA;IACjE,YAAY,CACR,WAAW,EACX,cAAc,EACd,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,EACvC,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,CAAC,CAAC,GAAG,CAAC,CAClB,CAAA;IAED,IAAI,SAAS;QAAE,OAAM;IACrB,gBAAgB,CAAC,KAAK,EAAE,cAAc,CAAC,CAAA;AAC3C,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,QAAQ,EAAE,CAAC,QAAQ,EAAE,EAAE;IAC9B,MAAM,MAAM,GAAG,YAAY,CAAC,QAAQ,CAAC,CAAA;IAErC,IAAI,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC;QACvB,QAAQ,CAAC,MAAM,CAAC,MAAM,CAAC,CAAA;QACvB,WAAW,GAAG,WAAW,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,KAAK,MAAM,CAAC,CAAA;QAC9D,gBAAgB,CAAC,QAAQ,EAAE,EAAE,EAAE,EAAE,MAAM,EAAE,CAAC,CAAA;QAE1C,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,MAAM,MAAM,CAAC,CAAA;QACxD,EAAE,CAAC,MAAM,CAAC,SAAS,EAAE,GAAG,EAAE,GAAE,CAAC,CAAC,CAAA;IAClC,CAAC;AACL,CAAC,CAAC,CAAA;AAEF,OAAO,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;IACrB,SAAS,GAAG,KAAK,CAAA;AACrB,CAAC,CAAC,CAAA;AAEF,GAAG,CAAC,GAAG,CAAC,YAAY,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAC/B,GAAG,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;AACrC,CAAC,CAAC,CAAA;AAEF,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IACnC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACrC,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;AAC3B,CAAC,CAAC,CAAA;AAEF,GAAG,CAAC,GAAG,CAAC,aAAa,EAAE,CAAC,GAAG,EAAE,GAAG,EAAE,EAAE;IAChC,GAAG,CAAC,SAAS,CAAC,cAAc,EAAE,mBAAmB,CAAC,CAAA;IAClD,GAAG,CAAC,SAAS,CAAC,eAAe,EAAE,UAAU,CAAC,CAAA;IAC1C,GAAG,CAAC,SAAS,CAAC,YAAY,EAAE,YAAY,CAAC,CAAA;IAEzC,MAAM,QAAQ,GAAG,IAAI,CAAC,GAAG,EAAE,CAAA;IAC3B,OAAO,CAAC,IAAI,CAAC,EAAE,EAAE,EAAE,QAAQ,EAAE,GAAG,EAAE,CAAC,CAAA;IACnC,GAAG,CAAC,EAAE,CAAC,OAAO,EAAE,GAAG,EAAE;QACjB,OAAO,GAAG,OAAO,CAAC,MAAM,CAAC,CAAC,MAAM,EAAE,EAAE,CAAC,MAAM,CAAC,EAAE,KAAK,QAAQ,CAAC,CAAA;IAChE,CAAC,CAAC,CAAA;AACN,CAAC,CAAC,CAAA;AAEF,GAAG,CAAC,GAAG,CAAC,gBAAgB,EAAE,KAAK,EAAE,GAAG,EAAE,GAAG,EAAE,EAAE;IACzC,MAAM,IAAI,GAAG,QAAQ,CAAC,GAAG,CAAC,GAAG,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACxC,IAAI,CAAC,IAAI;QAAE,OAAO,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IAErC,IAAI,kBAAkB,CAAC,IAAI,CAAC,EAAE,CAAC;QAC3B,OAAO,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;IAClC,CAAC;IAED,MAAM,SAAS,GAAG,IAAI,CAAC,IAAI,CAAC,UAAU,EAAE,GAAG,IAAI,CAAC,EAAE,MAAM,CAAC,CAAA;IAEzD,IAAI,CAAC;QACD,MAAM,KAAK,CAAC,KAAK,IAAI,EAAE;YACnB,qCAAqC;YACrC,IAAI,EAAE,CAAC,UAAU,CAAC,SAAS,CAAC;gBAAE,OAAM;YAEpC,IAAI,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,CAAC;gBACxB,MAAM,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;YAC7D,CAAC;iBAAM,CAAC;gBACJ,MAAM,sBAAsB,CAAC,IAAI,EAAE,SAAS,EAAE,UAAU,CAAC,CAAA;YAC7D,CAAC;QACL,CAAC,CAAC,CAAA;QACF,GAAG,CAAC,QAAQ,CAAC,IAAI,CAAC,OAAO,CAAC,SAAS,CAAC,CAAC,CAAA;IACzC,CAAC;IAAC,OAAO,GAAG,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,mCAAmC,GAAG,EAAE,CAAC,CAAA;QACvD,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAA;IACvB,CAAC;AACL,CAAC,CAAC,CAAA;AAEF,GAAG,CAAC,MAAM,CAAC,IAAI,EAAE,OAAO,EAAE,CAAC,KAAK,EAAE,EAAE;IAChC,IAAI,KAAK,EAAE,CAAC;QACR,OAAO,CAAC,KAAK,CAAC,0CAA0C,KAAK,CAAC,OAAO,EAAE,CAAC,CAAA;QACxE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAA;IACnB,CAAC;IAED,OAAO,CAAC,GAAG,CAAC,sBAAsB,OAAO,IAAI,IAAI,EAAE,CAAC,CAAA;IACpD,OAAO,CAAC,GAAG,CAAC,8BAA8B,WAAW,WAAW,CAAC,CAAA;IAEjE,MAAM,UAAU,GAAG,EAAE,CAAC,iBAAiB,EAAE,CAAA;IACzC,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,EAAE,SAAS,CAAC,EAAE,EAAE;QACrD,SAAS;YACL,EAAE,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,MAAM,KAAK,MAAM,CAAC;aACzC,OAAO,CAAC,CAAC,IAAI,EAAE,EAAE;YACd,OAAO,CAAC,GAAG,CAAC,oBAAoB,IAAI,CAAC,OAAO,IAAI,IAAI,eAAe,IAAI,GAAG,CAAC,CAAA;QAC/E,CAAC,CAAC,CAAA;IACV,CAAC,CAAC,CAAA;IAEF,OAAO,CAAC,GAAG,CAAC,IAAI,CAAC,CAAA;AACrB,CAAC,CAAC,CAAA;AAEF,SAAS,kBAAkB,CAAC,IAAkB;IAC1C,OAAO,IAAI,CAAC,IAAI,IAAI,OAAO,IAAI,CAAC,IAAI,CAAC,IAAI,GAAG,eAAe,IAAI,CAAC,IAAI,CAAC,UAAU,CAAC,CAAA;AACpF,CAAC"}
1
+ {"version":3,"file":"server.js","sourceRoot":"","sources":["../src/server.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@anandaramr/obscura",
3
- "version": "1.0.0",
3
+ "version": "1.0.1",
4
4
  "description": "A lightweight local media streaming server",
5
5
  "main": "dist/server.js",
6
6
  "type": "module",
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
- function onVideoPlay(fileId) {
6
- clearTimeout(cacheTTLMap.get(fileId))
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
- cacheTTLMap.set(fileId, timer)
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 = "LIVE"
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
- const VIDEO_CACHE_TTL = 60 * 1000
168
- let cacheTTLMap = new Map()
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 (!vid.src) {
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
  }