57 lines
1.7 KiB
JavaScript
57 lines
1.7 KiB
JavaScript
if( typeof emulator != 'undefined' ){
|
|
|
|
}else{
|
|
|
|
ISOTerminal.addEventListener('ready', function(e){
|
|
|
|
function getMimeType(file) {
|
|
const mimeTypes = {
|
|
jpg: 'image/jpeg',
|
|
jpeg: 'image/jpeg',
|
|
png: 'image/png',
|
|
mp4: 'video/mp4',
|
|
gif: 'image/gif',
|
|
};
|
|
|
|
const extension = file.split('.').pop().toLowerCase();
|
|
return mimeTypes[extension] || 'application/octet-stream'; // Fallback
|
|
}
|
|
|
|
// listen for http request to the filesystem ( file://host/path )
|
|
xhook.before( (request,callback) => {
|
|
console.log(request.url)
|
|
if (request.url.match(/^\/mnt\/.*/) ){
|
|
let response
|
|
let file = request.url.replace(/^\/mnt\//,'')
|
|
let mimetype = getMimeType(file)
|
|
this.worker.read_file_world(file)
|
|
.then( (data) => {
|
|
if( data == null ) throw `/mnt/${file} does not exist in ISO filesystem`"
|
|
let blob = new Blob( [data], {type: getMimeType(file) }) // wrap Uint8Array into array
|
|
response = {
|
|
headers: new Headers({ 'Content-Type': getMimeType(file) }),
|
|
data,
|
|
url: file,
|
|
status: 200,
|
|
blob: () => new Promise( (resolve,reject) => resolve(blob) ),
|
|
arrayBuffer: blob.arrayBuffer
|
|
}
|
|
console.log("serving from iso filesystem: "+file)
|
|
console.log("*TODO* large files being served partially")
|
|
callback(response)
|
|
})
|
|
.catch( (e) => {
|
|
console.error(e)
|
|
response = new Response()
|
|
response.status = 404
|
|
callback(response)
|
|
})
|
|
return
|
|
}else{
|
|
callback()
|
|
}
|
|
})
|
|
|
|
})
|
|
}
|