diff --git a/main.js b/main.js index cbc011f..1baa6e2 100644 --- a/main.js +++ b/main.js @@ -1,7 +1,6 @@ const { app, BrowserWindow, session, desktopCapturer, ipcMain, clipboard } = require('electron'); const { autoUpdater } = require('electron-updater'); const path = require('path'); -const packageJson = require('./package.json'); const updateState = { status: 'idle', // idle | checking | available | downloading | downloaded | not-available | error @@ -25,22 +24,6 @@ function isNewerVersionAvailable(info) { let updateCheckInProgress = false; -function resolveBackendUrl() { - const configuredUrl = (process.env.CHATTZ_URL || process.env.APP_BASE_URL || '').trim(); - if (configuredUrl) { - return configuredUrl.replace(/\/$/, ''); - } - - const packagedFallback = typeof packageJson.homepage === 'string' - ? packageJson.homepage.trim() - : ''; - if (app.isPackaged && packagedFallback) { - return packagedFallback.replace(/\/$/, ''); - } - - return 'http://localhost:3000'; -} - async function runUpdateCheck(reason = 'manual') { if (updateCheckInProgress) { console.log(`Update check skipped (${reason}): another check is already in progress`); @@ -73,9 +56,8 @@ async function runUpdateCheck(reason = 'manual') { function createWindow() { const sess = session.fromPartition('persist:chattz'); - const backendUrl = resolveBackendUrl(); + const backendUrl = (process.env.CHATTZ_URL || process.env.APP_BASE_URL || 'http://localhost:3000').replace(/\/$/, ''); const backendOrigin = new URL(backendUrl).origin; - console.log(`Desktop backend URL: ${backendUrl}`); const win = new BrowserWindow({ width: 1200, diff --git a/static/shared/app-core.js b/static/shared/app-core.js index deee4bc..aaaa0b4 100644 --- a/static/shared/app-core.js +++ b/static/shared/app-core.js @@ -576,103 +576,50 @@ function renderChannels() { pList.style.paddingLeft = "24px"; for (const p of participants) { const pRow = document.createElement("div"); - pRow.className = `channel-row voice-participant-row ${p.is_speaking ? 'voice-speaking' : ''}`; - pRow.style.display = "block"; + pRow.className = `channel-row ${p.is_speaking ? 'voice-speaking' : ''}`; pRow.style.padding = "2px 8px"; pRow.style.flexWrap = "wrap"; - const topRow = document.createElement("div"); - topRow.style.display = "flex"; - topRow.style.alignItems = "center"; - topRow.style.gap = "8px"; - topRow.style.width = "100%"; - - const avatar = document.createElement("div"); - avatar.className = "avatar"; - avatar.style.width = "20px"; - avatar.style.height = "20px"; - avatar.style.fontSize = "10px"; - avatar.textContent = shortName(p.display_name); - topRow.appendChild(avatar); - - const name = document.createElement("span"); - name.style.flex = "1"; - name.style.overflow = "hidden"; - name.style.textOverflow = "ellipsis"; - name.textContent = p.display_name; - topRow.appendChild(name); - - const isRemoteParticipant = p.user_id !== state.me.id; - if (isRemoteParticipant) { - const volumeToggle = document.createElement("button"); - volumeToggle.type = "button"; - volumeToggle.title = "Toggle volume slider"; - volumeToggle.style.display = "grid"; - volumeToggle.style.placeItems = "center"; - volumeToggle.style.width = "20px"; - volumeToggle.style.height = "20px"; - volumeToggle.style.color = "var(--text-muted)"; - volumeToggle.innerHTML = ''; - topRow.appendChild(volumeToggle); - - volumeToggle.addEventListener('click', (e) => { - toggleVolumeSlider(e); - }); + let sliderHtml = ''; + if (p.user_id !== state.me.id) { + const vol = state.userVolumes.get(p.user_id) ?? 1.0; + const isVisible = state.voice.visibleVolumeSliders.has(p.user_id); + sliderHtml = ` +