This commit is contained in:
MiTHRAL 2026-05-05 20:48:42 -04:00
parent 3055e283a1
commit 816182c01d
3 changed files with 39 additions and 4 deletions

View file

@ -60,6 +60,7 @@
let globalObserver = null; let globalObserver = null;
let refreshTimer = null; let refreshTimer = null;
let lastVoiceState = null; let lastVoiceState = null;
let lastMemberIdentityKey = "";
let leaveWatchdog = null; let leaveWatchdog = null;
const recentRowActivity = new Map(); const recentRowActivity = new Map();
@ -87,6 +88,7 @@
leaveWatchdog = null; leaveWatchdog = null;
recentRowActivity.clear(); recentRowActivity.clear();
lastVoiceState = null; lastVoiceState = null;
lastMemberIdentityKey = "";
playLeave(); playLeave();
console.debug("[VCSounds] self left"); console.debug("[VCSounds] self left");
const overlayApi = window.native?.overlay; const overlayApi = window.native?.overlay;
@ -508,6 +510,18 @@
}; };
} }
function memberIdentityKey(members) {
return members
.map((member) =>
[
String(member?.name || "").trim().toLowerCase(),
String(member?.avatarUrl || "").trim().toLowerCase(),
].join(":"),
)
.sort()
.join("|");
}
function publishVoiceState() { function publishVoiceState() {
const overlayApi = window.native?.overlay; const overlayApi = window.native?.overlay;
if (!overlayApi || typeof overlayApi.setVoiceState !== "function") return; if (!overlayApi || typeof overlayApi.setVoiceState !== "function") return;
@ -515,7 +529,28 @@
pruneRowActivity(); pruneRowActivity();
const next = collectVoiceState(); const next = collectVoiceState();
const voiceState = inVoice ? next : null; const voiceState = inVoice ? next : null;
const nextMemberKey = memberIdentityKey(next.members);
const nextKey = JSON.stringify(voiceState); const nextKey = JSON.stringify(voiceState);
const memberChanged = nextMemberKey !== lastMemberIdentityKey;
if (memberChanged && inVoice && !initialising && lastMemberIdentityKey) {
const previousMembers = new Set(
lastMemberIdentityKey
.split("|")
.map((entry) => entry.trim())
.filter(Boolean),
);
const currentMembers = new Set(
nextMemberKey
.split("|")
.map((entry) => entry.trim())
.filter(Boolean),
);
const added = [...currentMembers].some((entry) => !previousMembers.has(entry));
const removed = [...previousMembers].some((entry) => !currentMembers.has(entry));
if (added) playJoin();
if (removed) playLeave();
}
lastMemberIdentityKey = nextMemberKey;
if (nextKey === lastVoiceState) return; if (nextKey === lastVoiceState) return;
lastVoiceState = nextKey; lastVoiceState = nextKey;

View file

@ -27,9 +27,9 @@
<control>pointing</control> <control>pointing</control>
</supports> </supports>
<releases> <releases>
<release date="2026-05-05" version="1.0.5"> <release date="2026-05-05" version="1.0.6">
<description> <description>
<p>Gameplay overlay and improved game presence support.</p> <p>Fixed VC sounds and tightened game presence to catalog entries plus user allowlists.</p>
</description> </description>
</release> </release>
<release date="2026-04-22" version="1.0.0"> <release date="2026-04-22" version="1.0.0">

View file

@ -1,8 +1,8 @@
{ {
"name": "sanctum", "name": "sanctum",
"productName": "Sanctum", "productName": "Sanctum",
"version": "1.0.5", "version": "1.0.6",
"aviaVersion": "1.0.5", "aviaVersion": "1.0.6",
"main": ".vite/build/main.js", "main": ".vite/build/main.js",
"repository": "https://git.mithraic.cloud/ad3laid3/sanctum", "repository": "https://git.mithraic.cloud/ad3laid3/sanctum",
"scripts": { "scripts": {