diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml index 4ed70f4..655dbf7 100644 --- a/.github/workflows/deploy.yml +++ b/.github/workflows/deploy.yml @@ -24,9 +24,6 @@ jobs: - name: Install NPM Dependencies run: npm ci - - name: Download ISO - run: wget https://spacestation13.github.io/dm-playground-linux/rootfs.iso9660 -O public/lib/rootfs.iso - - name: Build project run: npx ng build --base-href /dm-playground/ diff --git a/angular.json b/angular.json index 01a646d..3eccf34 100644 --- a/angular.json +++ b/angular.json @@ -88,7 +88,13 @@ "development": { "optimization": false, "extractLicenses": false, - "sourceMap": true + "sourceMap": true, + "fileReplacements": [ + { + "replace": "src/environments/environment.ts", + "with": "src/environments/environment.development.ts" + } + ] } }, "defaultConfiguration": "production" diff --git a/src/environments/environment.development.ts b/src/environments/environment.development.ts new file mode 100644 index 0000000..e7111d2 --- /dev/null +++ b/src/environments/environment.development.ts @@ -0,0 +1,3 @@ +export const environment = { + isoUrl: './lib/rootfs.iso', +}; diff --git a/src/environments/environment.ts b/src/environments/environment.ts new file mode 100644 index 0000000..4667f0e --- /dev/null +++ b/src/environments/environment.ts @@ -0,0 +1,3 @@ +export const environment = { + isoUrl: 'https://spacestation13.github.io/dm-playground-linux/rootfs.iso9660', +}; diff --git a/src/utils/literalConstants.ts b/src/utils/literalConstants.ts new file mode 100644 index 0000000..cbcf1e2 --- /dev/null +++ b/src/utils/literalConstants.ts @@ -0,0 +1 @@ +export const isoUrlSearchParameter = 'isoUrl'; diff --git a/src/vm/emulator.service.ts b/src/vm/emulator.service.ts index 9160341..79d9a7f 100644 --- a/src/vm/emulator.service.ts +++ b/src/vm/emulator.service.ts @@ -1,5 +1,7 @@ import { EventEmitter, Injectable, Output } from '@angular/core'; import type { WorkerMsgWithoutCID, WorkerResponseMsg } from './emulator.worker'; +import { environment } from '../environments/environment'; +import { isoUrlSearchParameter } from '../utils/literalConstants'; const encoder = new TextEncoder(); @@ -16,11 +18,20 @@ export class EmulatorService { @Output() public receivedOutputController = new EventEmitter(); - private worker = new Worker(new URL('./emulator.worker', import.meta.url)); + private worker; private asyncCallbacks = new Map(); constructor() { + interface FakeWorker { + new (url: URL): Worker; + } + const Worker = function (url: URL) { + url.searchParams.set(isoUrlSearchParameter, environment.isoUrl); + return new window.Worker(url); + } as unknown as FakeWorker; + this.worker = new Worker(new URL('./emulator.worker', import.meta.url)); + this.worker.onmessage = (event: MessageEvent) => { let e = event.data; if ('event' in e) { diff --git a/src/vm/emulator.worker.ts b/src/vm/emulator.worker.ts index b754895..1292d99 100644 --- a/src/vm/emulator.worker.ts +++ b/src/vm/emulator.worker.ts @@ -1,9 +1,8 @@ /// -// @ts-ignore -import { dynamic_import } from '../utils/misc'; +import { isoUrlSearchParameter } from '../utils/literalConstants'; -await dynamic_import('./lib/libv86.js'); +importScripts('./lib/libv86.js'); interface MsgSendTerminal { command: 'sendTerminal'; @@ -73,6 +72,7 @@ export type WorkerEventResponseMsg = data: void; }; +const parameters = new URLSearchParams(location.search); const emulator = new V86({ //Emulator binaries wasm_path: 'lib/v86.wasm', @@ -131,7 +131,7 @@ const emulator = new V86({ url: 'https://raw.githubusercontent.com/copy/v86/master/bios/vgabios.bin', }, cdrom: { - url: './lib/rootfs.iso', //TODO: Use github url + url: parameters.get(isoUrlSearchParameter), }, hda: null, hdb: null,