diff --git a/src/apps/components/addserver/runtime.ts b/src/apps/components/addserver/runtime.ts index bd51a60b3..86d07d970 100644 --- a/src/apps/components/addserver/runtime.ts +++ b/src/apps/components/addserver/runtime.ts @@ -1,5 +1,5 @@ import { AppProcess } from "$ts/apps/process"; -import { Server } from "$ts/env"; +import { Server, SoundBus } from "$ts/env"; import { ErrorIcon, WarningIcon } from "$ts/images/dialog"; import { GoodStatusIcon } from "$ts/images/status"; import { MessageBox } from "$ts/util/dialog"; @@ -90,6 +90,7 @@ export class AddServerRuntime extends AppProcess { if (this.action() === "") this.action.set("callServer"); try { + SoundBus.playSound("arcos.bip"); const response = await axios.get(`/ping`, { timeout: 3000, timeoutErrorMessage: "We're offline", @@ -98,6 +99,7 @@ export class AddServerRuntime extends AppProcess { }); if (response.status !== 200) return false; + SoundBus.playSound("arcos.bop"); return true; } catch { diff --git a/src/assets/audio/bip.wav b/src/assets/audio/bip.wav new file mode 100644 index 000000000..46d2430a2 Binary files /dev/null and b/src/assets/audio/bip.wav differ diff --git a/src/assets/audio/bop.wav b/src/assets/audio/bop.wav new file mode 100644 index 000000000..d10067b50 Binary files /dev/null and b/src/assets/audio/bop.wav differ diff --git a/src/main.ts b/src/main.ts index bc660855c..35a1dcfe8 100755 --- a/src/main.ts +++ b/src/main.ts @@ -3,12 +3,10 @@ import "./css/main.css"; // CODE EXECUTION STARTS HERE async function Main() { const { WaveKernel } = await import("$ts/kernel/wavekernel"); - const kernel = new WaveKernel(); window.__DW_STATUS__ = "async Main"; document.querySelector("#stateLoader")!.innerText = ".."; - await kernel._init(); } diff --git a/src/ts/kernel/mods/server/axios.ts b/src/ts/kernel/mods/server/axios.ts index 0830540a4..495eb821a 100644 --- a/src/ts/kernel/mods/server/axios.ts +++ b/src/ts/kernel/mods/server/axios.ts @@ -1,6 +1,6 @@ import type { IEnvironment } from "$interfaces/modules/env"; import { __Console__ } from "$ts/console"; -import { Kernel } from "$ts/env"; +import { Kernel, SoundBus } from "$ts/env"; import { ArcMode } from "$ts/metadata/mode"; import { UUID } from "$ts/util/uuid"; import axios, { type AxiosRequestConfig, type InternalAxiosRequestConfig } from "axios"; @@ -13,6 +13,16 @@ export const Backend = axios.create({ }, }); +Backend.interceptors.request.use((config) => { + SoundBus?.playSound("arcos.bip"); + return config; +}) + +Backend.interceptors.response.use((config) => { + SoundBus?.playSound("arcos.bop"); + return config; +}) + Backend.interceptors.request.use( (config) => { config.headers.set("X-Request-ID", Kernel?.getModule("env").get("dispatch_sock_id")); diff --git a/src/ts/kernel/mods/soundbus/index.ts b/src/ts/kernel/mods/soundbus/index.ts index 2de13596d..f0be79d69 100644 --- a/src/ts/kernel/mods/soundbus/index.ts +++ b/src/ts/kernel/mods/soundbus/index.ts @@ -1,6 +1,5 @@ import type { IWaveKernel } from "$interfaces/kernel"; import type { ISoundbus } from "$interfaces/modules/soundbus"; -import { Env } from "$ts/env"; import { KernelModule } from "$ts/kernel/module"; import type { SoundBusStore, SoundStore } from "$types/soundbus"; import { ArcSounds } from "./store"; @@ -8,6 +7,7 @@ import { ArcSounds } from "./store"; export class SoundBus extends KernelModule implements ISoundbus { private store: SoundStore = {}; private _bus: SoundBusStore = {}; + private readonly SOUNDBUS_LIMIT = 40; //#region LIFECYCLE @@ -21,9 +21,15 @@ export class SoundBus extends KernelModule implements ISoundbus { public playSound(id: string, volume = 1) { this.isKmod(); - if (Env.get("safemode")) return; + // if (Env.get("safemode")) return; if (!this.store[id]) return false; + const totalCount = Object.values(this._bus) + .map((s) => s.length) + .reduce((a, b) => a + b, 0); + + if (totalCount > this.SOUNDBUS_LIMIT) return false; + this.Log(`Playing sound ${id} from store`); const element = document.createElement("audio"); diff --git a/src/ts/kernel/mods/soundbus/store.ts b/src/ts/kernel/mods/soundbus/store.ts index fa9ae0581..a11ed6b02 100644 --- a/src/ts/kernel/mods/soundbus/store.ts +++ b/src/ts/kernel/mods/soundbus/store.ts @@ -9,6 +9,8 @@ import click from "$assets/audio/click.wav"; import systemLogoff from "$assets/audio/logoff.wav"; import systemLogon from "$assets/audio/logon.wav"; import mwomp from "$assets/audio/mwomp.mp3"; +import bip from "$assets/audio/bip.wav"; +import bop from "$assets/audio/bop.wav"; export const ArcSounds: SoundStore = { "arcos.dialog.error": dialogError, @@ -20,4 +22,6 @@ export const ArcSounds: SoundStore = { "arcos.click": click, "arcos.mwomp": mwomp, "646973636F72640A": v646973636F72640A, + "arcos.bip": bip, + "arcos.bop": bop }; diff --git a/src/ts/servicehost/services/AppStorage/index.ts b/src/ts/servicehost/services/AppStorage/index.ts index 96a4ddc73..db16c9053 100755 --- a/src/ts/servicehost/services/AppStorage/index.ts +++ b/src/ts/servicehost/services/AppStorage/index.ts @@ -3,7 +3,7 @@ import type { IApplicationStorage } from "$interfaces/services/AppStorage"; import type { IThirdPartyAppProcess } from "$interfaces/thirdparty"; import { BuiltinAppImportPathAbsolutes } from "$ts/apps/store"; import { Daemon } from "$ts/daemon"; -import { ArcOSVersion, Env, Fs, SysDispatch } from "$ts/env"; +import { ArcOSVersion, Env, Fs, SoundBus, SysDispatch } from "$ts/env"; import { ArcBuild } from "$ts/metadata/build"; import { ArcMode } from "$ts/metadata/mode"; import { CommandResult } from "$ts/result"; @@ -63,6 +63,7 @@ export class ApplicationStorage extends BaseService implements IApplicationStora const end = performance.now() - start; const appCopy = await deepCopyWithBlobs(app); + SoundBus?.playSound("arcos.bop"); appCopy._internalSysVer = `v${ArcOSVersion}-${ArcMode()}_${ArcBuild()}`; appCopy._internalOriginalPath = path; diff --git a/src/ts/servicehost/services/GlobalDispatch/index.ts b/src/ts/servicehost/services/GlobalDispatch/index.ts index 9cd369ab0..db2dda125 100644 --- a/src/ts/servicehost/services/GlobalDispatch/index.ts +++ b/src/ts/servicehost/services/GlobalDispatch/index.ts @@ -2,7 +2,7 @@ import type { IUserDaemon } from "$interfaces/daemon"; import type { IServerManager } from "$interfaces/modules/server"; import type { IGlobalDispatch } from "$interfaces/services/GlobalDispatch"; import { Daemon } from "$ts/daemon"; -import { Env, getKMod, Stack, SysDispatch } from "$ts/env"; +import { Env, getKMod, SoundBus, Stack, SysDispatch } from "$ts/env"; import { Backend } from "$ts/kernel/mods/server/axios"; import type { ServiceHost } from "$ts/servicehost"; import { BaseService } from "$ts/servicehost/base"; @@ -40,6 +40,14 @@ export class GlobalDispatch extends BaseService implements IGlobalDispatch { resolve(); }); + this.client.onAnyOutgoing(() => { + SoundBus?.playSound("arcos.bip"); + }); + + this.client.onAny(() => { + SoundBus?.playSound("arcos.bop"); + }); + this.client.on("kicked", () => { const daemon = Stack.getProcess(+Env.get("userdaemon_pid")); daemon?.power?.logoff();