refactor(player): simplify loadFiles code
This commit is contained in:
parent
bfe14db353
commit
983fef55ef
1 changed files with 18 additions and 31 deletions
|
|
@ -1,43 +1,33 @@
|
||||||
import APIClient from 'App/api_client';
|
import APIClient from 'App/api_client';
|
||||||
|
|
||||||
const NO_NTH_FILE = "nnf"
|
const NO_FILE_OK = "No-file-but-this-is-ok"
|
||||||
const NO_UNPROCESSED_FILES = "nuf"
|
const NO_BACKUP_FILE = "No-efs-file"
|
||||||
|
|
||||||
export const loadFiles = (
|
export const loadFiles = (
|
||||||
urls: string[],
|
urls: string[],
|
||||||
onData: (data: Uint8Array) => void,
|
onData: (data: Uint8Array) => void,
|
||||||
): Promise<void> => {
|
): Promise<void> => {
|
||||||
const firstFileURL = urls[0]
|
if (!urls.length) {
|
||||||
urls = urls.slice(1)
|
|
||||||
if (!firstFileURL) {
|
|
||||||
return Promise.reject("No urls provided")
|
return Promise.reject("No urls provided")
|
||||||
}
|
}
|
||||||
return window.fetch(firstFileURL)
|
return urls.reduce((p, url, index) =>
|
||||||
.then(r => {
|
p.then(() =>
|
||||||
return processAPIStreamResponse(r, true)
|
window.fetch(url)
|
||||||
})
|
.then(r => {
|
||||||
.then(onData)
|
return processAPIStreamResponse(r, index===0)
|
||||||
.then(() =>
|
})
|
||||||
urls.reduce((p, url) =>
|
.then(onData)
|
||||||
p.then(() =>
|
),
|
||||||
window.fetch(url)
|
Promise.resolve(),
|
||||||
.then(r => {
|
|
||||||
return processAPIStreamResponse(r, false)
|
|
||||||
})
|
|
||||||
.then(onData)
|
|
||||||
),
|
|
||||||
Promise.resolve(),
|
|
||||||
)
|
|
||||||
)
|
)
|
||||||
.catch(e => {
|
.catch(e => {
|
||||||
if (e === NO_NTH_FILE) {
|
if (e === NO_FILE_OK) {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
throw e
|
throw e
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
export async function requestEFSDom(sessionId: string) {
|
export async function requestEFSDom(sessionId: string) {
|
||||||
return await requestEFSMobFile(sessionId + "/dom.mob")
|
return await requestEFSMobFile(sessionId + "/dom.mob")
|
||||||
}
|
}
|
||||||
|
|
@ -50,21 +40,18 @@ async function requestEFSMobFile(filename: string) {
|
||||||
const api = new APIClient()
|
const api = new APIClient()
|
||||||
const res = await api.fetch('/unprocessed/' + filename)
|
const res = await api.fetch('/unprocessed/' + filename)
|
||||||
if (res.status >= 400) {
|
if (res.status >= 400) {
|
||||||
throw NO_UNPROCESSED_FILES
|
throw NO_BACKUP_FILE
|
||||||
}
|
}
|
||||||
return await processAPIStreamResponse(res, false)
|
return await processAPIStreamResponse(res, false)
|
||||||
}
|
}
|
||||||
|
|
||||||
const processAPIStreamResponse = (response: Response, isFirstFile: boolean) => {
|
const processAPIStreamResponse = (response: Response, canBeMissed: boolean) => {
|
||||||
return new Promise<ArrayBuffer>((res, rej) => {
|
return new Promise<ArrayBuffer>((res, rej) => {
|
||||||
if (response.status === 404 && !isFirstFile) {
|
if (response.status === 404 && canBeMissed) {
|
||||||
return rej(NO_NTH_FILE)
|
return rej(NO_FILE_OK)
|
||||||
}
|
}
|
||||||
if (response.status >= 400) {
|
if (response.status >= 400) {
|
||||||
return rej(
|
return rej(`Bad file status code ${response.status}. Url: ${response.url}`)
|
||||||
isFirstFile ? `no start file. status code ${ response.status }`
|
|
||||||
: `Bad endfile status code ${response.status}`
|
|
||||||
)
|
|
||||||
}
|
}
|
||||||
res(response.arrayBuffer())
|
res(response.arrayBuffer())
|
||||||
}).then(buffer => new Uint8Array(buffer))
|
}).then(buffer => new Uint8Array(buffer))
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue