Skip to content

Commit 29dc69c

Browse files
committed
feat: add no body request
1 parent f21dd5c commit 29dc69c

2 files changed

Lines changed: 63 additions & 52 deletions

File tree

js/app/guest/video.js

Lines changed: 38 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -67,61 +67,50 @@ export const video = (() => {
6767
const bar = document.getElementById('progress-bar-video-love-stroy');
6868
const inf = document.getElementById('progress-info-video-love-stroy');
6969

70-
return request(HTTP_GET, src)
71-
.withCancel(new Promise((re) => vid.addEventListener('undangan.video.prefetch', re, { once: true })))
72-
.default({ 'Range': 'bytes=0-1' })
73-
.then((res) => {
74-
vid.dispatchEvent(new Event('undangan.video.prefetch'));
70+
return request(HTTP_GET, src).withNoBody().default({ 'Range': 'bytes=0-1' }).then((res) => {
7571

76-
if (res.status === HTTP_STATUS_OK) {
77-
vid.preload = 'none';
78-
vid.src = util.escapeHtml(src);
79-
wrap.appendChild(vid);
72+
if (res.status === HTTP_STATUS_OK) {
73+
vid.preload = 'none';
74+
vid.src = util.escapeHtml(src);
75+
wrap.appendChild(vid);
8076

81-
return Promise.resolve();
82-
}
77+
return Promise.resolve();
78+
}
8379

84-
if (res.status !== HTTP_STATUS_PARTIAL_CONTENT) {
85-
throw new Error('failed to fetch video');
86-
}
80+
if (res.status !== HTTP_STATUS_PARTIAL_CONTENT) {
81+
throw new Error('failed to fetch video');
82+
}
8783

88-
const loaded = new Promise((r) => vid.addEventListener('loadedmetadata', r, { once: true }));
84+
const loaded = new Promise((r) => vid.addEventListener('loadedmetadata', r, { once: true }));
8985

90-
vid.src = util.escapeHtml(src);
91-
wrap.appendChild(vid);
86+
vid.src = util.escapeHtml(src);
87+
wrap.appendChild(vid);
88+
89+
return loaded;
90+
}).then(() => {
91+
vid.pause();
92+
progress.complete('video');
93+
94+
return request(HTTP_GET, src).withRetry().withProgressFunc((a, b) => {
95+
const result = Number((a / b) * 100).toFixed(0) + '%';
96+
97+
bar.style.width = result;
98+
inf.innerText = result;
99+
}).default().then(resToVideo);
100+
}).then((res) => {
101+
vid.controls = true;
102+
vid.disableRemotePlayback = true;
103+
vid.disablePictureInPicture = true;
104+
vid.controlsList = 'noremoteplayback nodownload noplaybackrate';
92105

93-
return loaded;
94-
})
95-
.then(() => {
96-
vid.pause();
97-
progress.complete('video');
98-
99-
return request(HTTP_GET, src)
100-
.withProgressFunc((a, b) => {
101-
const result = Number((a / b) * 100).toFixed(0) + '%';
102-
103-
bar.style.width = result;
104-
inf.innerText = result;
105-
})
106-
.withRetry()
107-
.default()
108-
.then(resToVideo)
109-
.then((v) => {
110-
vid.controls = true;
111-
vid.disableRemotePlayback = true;
112-
vid.disablePictureInPicture = true;
113-
vid.controlsList = 'noremoteplayback nodownload noplaybackrate';
114-
115-
vid.load();
116-
observer.observe(vid);
117-
return v;
118-
})
119-
.catch((err) => {
120-
bar.style.backgroundColor = 'red';
121-
inf.innerText = `Error loading video`;
122-
console.error(err);
123-
});
124-
});
106+
vid.load();
107+
observer.observe(vid);
108+
return res;
109+
}).catch((err) => {
110+
bar.style.backgroundColor = 'red';
111+
inf.innerText = `Error loading video`;
112+
console.error(err);
113+
});
125114
};
126115

127116
if (!window.isSecureContext) {

js/connection/request.js

Lines changed: 25 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -136,6 +136,7 @@ export const request = (method, path) => {
136136
let reqRetry = 0;
137137
let reqDelay = 0;
138138
let reqAttempts = 0;
139+
let reqNoBody = false;
139140
let reqForceCache = false;
140141

141142
/**
@@ -168,6 +169,15 @@ export const request = (method, path) => {
168169
* @returns {Promise<Response>}
169170
*/
170171
const wrapperFetch = () => window.fetch(input, req).then(async (res) => {
172+
if (reqNoBody) {
173+
ac.abort();
174+
return new Response(null, {
175+
status: res.status,
176+
statusText: res.statusText,
177+
headers: new Headers(res.headers),
178+
});
179+
}
180+
171181
if (!res.ok || !callbackFunc) {
172182
return res;
173183
}
@@ -201,7 +211,7 @@ export const request = (method, path) => {
201211
});
202212
});
203213

204-
if (reqTtl === 0 || !window.isSecureContext) {
214+
if (reqTtl === 0 || !window.isSecureContext || reqNoBody) {
205215
return wrapperFetch();
206216
}
207217

@@ -219,7 +229,7 @@ export const request = (method, path) => {
219229
}));
220230
};
221231

222-
if (reqRetry === 0 && reqDelay === 0) {
232+
if (reqRetry === 0 || reqDelay === 0) {
223233
return abstractFetch();
224234
}
225235

@@ -343,10 +353,22 @@ export const request = (method, path) => {
343353
return this;
344354
},
345355
/**
356+
* @param {number} [ttl=21600000]
346357
* @returns {ReturnType<typeof request>}
347358
*/
348-
withForceCache() {
359+
withForceCache(ttl = 1000 * 60 * 60 * 6) {
349360
reqForceCache = true;
361+
if (reqTtl === 0) {
362+
reqTtl = ttl;
363+
}
364+
365+
return this;
366+
},
367+
/**
368+
* @returns {ReturnType<typeof request>}
369+
*/
370+
withNoBody() {
371+
reqNoBody = true;
350372

351373
return this;
352374
},

0 commit comments

Comments
 (0)