From 03de380fab998cc516f5708f223d5780f811ae83 Mon Sep 17 00:00:00 2001 From: Klesti Selimaj Date: Sat, 29 Aug 2026 00:51:08 +0200 Subject: [PATCH] Message sfx --- src/app/app.ts | 24 ++++++++++++++++++++---- src/assets/message.mp3 | Bin 0 -> 28416 bytes src/lib/soundEffects.ts | 8 ++++++++ 3 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 src/assets/message.mp3 diff --git a/src/app/app.ts b/src/app/app.ts index e485b51..180ec41 100644 --- a/src/app/app.ts +++ b/src/app/app.ts @@ -11,7 +11,7 @@ import { Channel } from "@/lib/types"; import { invoke } from "@tauri-apps/api/core"; import { ClientMethod } from "./protocol"; import { BackendConfig, Config, getConfig } from "@/lib/config"; -import { playJoin, playLeave } from "@/lib/soundEffects"; +import * as sfx from "@/lib/soundEffects"; ed.hashes.sha512 = sha512; @@ -222,7 +222,7 @@ export default class Enclave

{ this.forceRender(); - playLeave(); + sfx.playLeave(); } public async onMessage(msg: ClientMethod) { @@ -243,13 +243,27 @@ export default class Enclave

{ return; case "Messages": + const currentTimestamp = Date.now(); + let shouldPlaySfx = false; + const authors = Object.entries(msg.messages).flatMap( ([channelId, messages]) => { if (!server.messages[channelId]) { server.messages[channelId] = {}; } + const page = this.page as Page | undefined; + + const isInvisibleChannel = page?.channel.id !== channelId; + return messages.map((message) => { + if ( + Math.abs(currentTimestamp - message.timestamp) < 1000 && + (isInvisibleChannel || document.visibilityState === "hidden") + ) { + shouldPlaySfx = true; + } + server.messages[channelId][message.id] = message; return message.author; }); @@ -262,6 +276,8 @@ export default class Enclave

{ this.forceRender(); + if (shouldPlaySfx) sfx.playMessage(); + return; case "Users": @@ -295,7 +311,7 @@ export default class Enclave

{ this.server?.getUsers([msg.pubkey]); if (msg.channel_id === this.server?.voiceChannelId) { - playJoin(); + sfx.playJoin(); } return; @@ -310,7 +326,7 @@ export default class Enclave

{ this.forceRender(); if (msg.channel_id === this.server?.voiceChannelId) { - playLeave(); + sfx.playLeave(); } return; diff --git a/src/assets/message.mp3 b/src/assets/message.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..99094b2a7533b8ee94520ab13ed16e991775a233 GIT binary patch literal 28416 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 literal 0 HcmV?d00001 diff --git a/src/lib/soundEffects.ts b/src/lib/soundEffects.ts index f2429fd..a1f4fd6 100644 --- a/src/lib/soundEffects.ts +++ b/src/lib/soundEffects.ts @@ -1,5 +1,6 @@ import joinSfx from "@/assets/join.wav"; import leaveSfx from "@/assets/leave.wav"; +import messageSfx from "@/assets/message.mp3"; export function playJoin() { const audio = new Audio(joinSfx); @@ -14,3 +15,10 @@ export function playLeave() { audio.currentTime = 0; audio.play(); } + +export function playMessage() { + const audio = new Audio(messageSfx); + + audio.currentTime = 0; + audio.play(); +}