Add release builds, classic and stacked layouts

- electron-builder packaging: AppImage, deb and tar.gz for Linux, NSIS
  installer for Windows, app icon, desktop entry
- Gitea workflow builds Linux and Windows on version tags and attaches
  the files to the release
- Layout setting in Appearance: Modern, Classic (chat left, channels
  right) and Stacked (channels on top, chat below, resizable split),
  like the desktop Mumble client
- No message box while not connected; Manage identities on the welcome
  page
- Public list: a list that arrives after the source changed no longer
  replaces the new one

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
2026-10-01 01:31:51 +02:00
co-authored by Claude Opus 5.5
parent b44b8230d4
commit 2c7a94441d
15 changed files with 286 additions and 43 deletions
+10 -4
View File
@@ -26,17 +26,23 @@
async function load() {
// A new list starts a new ping round; answers from the previous round are dropped
generation++;
// and a list that arrives after the source changed is ignored
const round = ++generation;
queue = [];
running = 0;
loading = true;
error = '';
let list: PublicServer[] = [];
let failed = '';
try {
servers = (await native?.publicServers(store.settings.publicListUrl)) ?? [];
if (!native) error = 'The public list needs the desktop app.';
list = (await native?.publicServers(store.settings.publicListUrl)) ?? [];
if (!native) failed = 'The public list needs the desktop app.';
} catch (e) {
error = (e as Error).message.replace(/^Error invoking remote method '[^']+': (Error: )?/, '');
failed = (e as Error).message.replace(/^Error invoking remote method '[^']+': (Error: )?/, '');
}
if (round !== generation || !alive) return;
servers = list;
error = failed;
loading = false;
pingVisible();
}