From ac6f350d93cd47181adcaf7f957c9be9db32ddaf Mon Sep 17 00:00:00 2001 From: Izaak Kuipers Date: Mon, 2 Mar 2026 10:40:02 +0100 Subject: [PATCH] Some goofy fun --- src/apps/components/addserver/runtime.ts | 4 +++- src/assets/audio/bip.wav | Bin 0 -> 8864 bytes src/assets/audio/bop.wav | Bin 0 -> 8864 bytes src/main.ts | 2 -- src/ts/kernel/mods/server/axios.ts | 12 +++++++++++- src/ts/kernel/mods/soundbus/index.ts | 10 ++++++++-- src/ts/kernel/mods/soundbus/store.ts | 4 ++++ src/ts/servicehost/services/AppStorage/index.ts | 3 ++- .../servicehost/services/GlobalDispatch/index.ts | 10 +++++++++- 9 files changed, 37 insertions(+), 8 deletions(-) create mode 100644 src/assets/audio/bip.wav create mode 100644 src/assets/audio/bop.wav 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 0000000000000000000000000000000000000000..46d2430a257d4824a1e926ff2682d38e9685d526 GIT binary patch literal 8864 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 literal 0 HcmV?d00001 diff --git a/src/assets/audio/bop.wav b/src/assets/audio/bop.wav new file mode 100644 index 0000000000000000000000000000000000000000..d10067b50480413364f2b1cfdf90848f9c28adb6 GIT binary patch literal 8864 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 literal 0 HcmV?d00001 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();