<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ao2-client/src/lobby.cpp, branch master</title>
<subtitle>AO2 client fork</subtitle>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/'/>
<entry>
<title>Provide more information in About page</title>
<updated>2026-03-30T13:07:11+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-25T06:05:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=b21dfd36cdafd76b5538383279d28b003188fa19'/>
<id>b21dfd36cdafd76b5538383279d28b003188fa19</id>
<content type='text'>
- Downstream version and the upstream revision it's based on
  (commit and date)

- URL to our modified source code.

- miniaudio and libsodium versions.

- Build profile (release, dev, or debug).

Also, stop checking for updates.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
- Downstream version and the upstream revision it's based on
  (commit and date)

- URL to our modified source code.

- miniaudio and libsodium versions.

- Build profile (release, dev, or debug).

Also, stop checking for updates.
</pre>
</div>
</content>
</entry>
<entry>
<title>Constrain the lifetime of the demo server</title>
<updated>2026-03-30T13:07:11+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-24T23:10:21+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=14a48530d911e9d9d0539eb4c273ce1379534607'/>
<id>14a48530d911e9d9d0539eb4c273ce1379534607</id>
<content type='text'>
Demo server was being deleted and recreated every time the lobby was
constructed, so it was always active. This rendered the "are we playing
a demo" checks useless as they always assumed we did. Logs didn't work
because of it, for example.

Construct the demo server only when the user selects demo playback, and
destroy it during the destruction of courtroom.

Make log_filename based on the application path, so `logs` subdirectory
is created relative to the executable rather than the working directory.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Demo server was being deleted and recreated every time the lobby was
constructed, so it was always active. This rendered the "are we playing
a demo" checks useless as they always assumed we did. Logs didn't work
because of it, for example.

Construct the demo server only when the user selects demo playback, and
destroy it during the destruction of courtroom.

Make log_filename based on the application path, so `logs` subdirectory
is created relative to the executable rather than the working directory.
</pre>
</div>
</content>
</entry>
<entry>
<title>Move image plugin status to "About" page</title>
<updated>2026-03-30T13:07:11+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:59:37+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=4858f1d4049d514cc99792c7ff13518dfe95398c'/>
<id>4858f1d4049d514cc99792c7ff13518dfe95398c</id>
<content type='text'>
Remove the error dialog that pops up if an image format is missing.

Check AVIF, WebP, and APNG support, and report their status. As it
stands, WebP should be supported by Qt itself, and AVIF has yet to be
added. The rest (like PNG and JPEG) are on by default.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Remove the error dialog that pops up if an image format is missing.

Check AVIF, WebP, and APNG support, and report their status. As it
stands, WebP should be supported by Qt itself, and AVIF has yet to be
added. The rest (like PNG and JPEG) are on by default.
</pre>
</div>
</content>
</entry>
<entry>
<title>Reset selection on server list refresh</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:59:07+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=ade040cfa6c402bb336e7772de5e675549ded18e'/>
<id>ade040cfa6c402bb336e7772de5e675549ded18e</id>
<content type='text'>
Avoids "list index out of range" crashes when you press "Edit server"
afterwards.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Avoids "list index out of range" crashes when you press "Edit server"
afterwards.
</pre>
</div>
</content>
</entry>
<entry>
<title>Open Favorites tab by default</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:58:32+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=82ccc23ad03ed8acb8e041e33a1c0e25f85826f7'/>
<id>82ccc23ad03ed8acb8e041e33a1c0e25f85826f7</id>
<content type='text'>
Not a good universal change. But if you're using this client, you're
likely connecting to favorited servers either way, and you can always
add them from the MS.

That said, I don't want to keep it like that. One solution is to save
last opened tab with QSettings, and then restore it.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Not a good universal change. But if you're using this client, you're
likely connecting to favorited servers either way, and you can always
add them from the MS.

That said, I don't want to keep it like that. One solution is to save
last opened tab with QSettings, and then restore it.
</pre>
</div>
</content>
</entry>
<entry>
<title>Support Secure WebSocket</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-22T17:57:13+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=79c2262cae02b513aee70943f7e07a9205316bdf'/>
<id>79c2262cae02b513aee70943f7e07a9205316bdf</id>
<content type='text'>
Add full WSS support to public server list (using wss_port, overriding
insecure port), favorite servers list, and direct connections, and show
which servers are secure.

Revert the upstream's removal of `legacy` ServerInfo field, as I use it
to filter out legacy servers. To differentiate schemes, the `scheme`
field is used, either "ws" or "wss". I don't see the reason to add "tcp"
protocol when we don't even support it.

For the UI, add icons for secure and insecure connections. Highlight
secure servers with a green background.

In the favorite server dialog, a checkbox was added to select whether
the server is using WSS.

In the direct connection dialog, support "wss" scheme and default ports:
80 for WS, 443 for WSS, as per the WebSocket specification.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Add full WSS support to public server list (using wss_port, overriding
insecure port), favorite servers list, and direct connections, and show
which servers are secure.

Revert the upstream's removal of `legacy` ServerInfo field, as I use it
to filter out legacy servers. To differentiate schemes, the `scheme`
field is used, either "ws" or "wss". I don't see the reason to add "tcp"
protocol when we don't even support it.

For the UI, add icons for secure and insecure connections. Highlight
secure servers with a green background.

In the favorite server dialog, a checkbox was added to select whether
the server is using WSS.

In the direct connection dialog, support "wss" scheme and default ports:
80 for WS, 443 for WSS, as per the WebSocket specification.
</pre>
</div>
</content>
</entry>
<entry>
<title>Rewrite audio engine: replace BASS with miniaudio</title>
<updated>2026-03-29T22:22:25+00:00</updated>
<author>
<name>Osmium Sorcerer</name>
<email>os@sof.beauty</email>
</author>
<published>2026-03-24T02:56:23+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=3f6fb17deddd1b366d16db5a2531c82407ced9db'/>
<id>3f6fb17deddd1b366d16db5a2531c82407ced9db</id>
<content type='text'>
SFX and blip players largely remain the same.

For the music player, we now have to implement network streaming
natively, we no longer have a convenient function that did everything
for us. I introduced QNetworkRequest to download the stream in memory
and signal when it's ready to be decoded and played back. The size is
guarded to prevent the client from accidentally downloading terabytes of
audio.

Delete QFutureWatcher, we no longer need it for concurrency. miniaudio
uses a separate audio thread. Network donwloads and communication with
the track name display are handled by Qt signals.

Also, delete an odd "music.txt" feature. Its purpose was specifying
offsets for loops in a text file per track, but it remained obscure and
unused in practice.

Unsupported:

- Large streams, including unbounded ones (radio). We'll need a ring
  buffer for that, and a mechanism to write to it from the network and
  feed it to the audio thread.

- Effect flags: fade in, fade out, sync pos. Ignored.

- Audio device selection.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
SFX and blip players largely remain the same.

For the music player, we now have to implement network streaming
natively, we no longer have a convenient function that did everything
for us. I introduced QNetworkRequest to download the stream in memory
and signal when it's ready to be decoded and played back. The size is
guarded to prevent the client from accidentally downloading terabytes of
audio.

Delete QFutureWatcher, we no longer need it for concurrency. miniaudio
uses a separate audio thread. Network donwloads and communication with
the track name display are handled by Qt signals.

Also, delete an odd "music.txt" feature. Its purpose was specifying
offsets for loops in a text file per track, but it remained obscure and
unused in practice.

Unsupported:

- Large streams, including unbounded ones (radio). We'll need a ring
  buffer for that, and a mechanism to write to it from the network and
  feed it to the audio thread.

- Effect flags: fade in, fade out, sync pos. Ignored.

- Audio device selection.
</pre>
</div>
</content>
</entry>
<entry>
<title>WSS support (#1114)</title>
<updated>2026-02-03T09:39:53+00:00</updated>
<author>
<name>stonedDiscord</name>
<email>Tukz@gmx.de</email>
</author>
<published>2026-02-03T09:39:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=5dea0406c73704ebf30cf0b8aac671f698e89959'/>
<id>5dea0406c73704ebf30cf0b8aac671f698e89959</id>
<content type='text'>
* add ssl scheme

* use protocol

* set port

* remove last legacy entry</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
* add ssl scheme

* use protocol

* set port

* remove last legacy entry</pre>
</div>
</content>
</entry>
<entry>
<title>Explicitly set app icon on widgets (#1098)</title>
<updated>2025-05-08T07:06:47+00:00</updated>
<author>
<name>Salanto</name>
<email>62221668+Salanto@users.noreply.github.com</email>
</author>
<published>2025-05-08T07:06:47+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=cde34538dc6045223c965958535218a38d22b2ee'/>
<id>cde34538dc6045223c965958535218a38d22b2ee</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>contribs (#1087)</title>
<updated>2025-02-28T09:50:42+00:00</updated>
<author>
<name>in1tiate</name>
<email>32779090+in1tiate@users.noreply.github.com</email>
</author>
<published>2025-02-28T09:50:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.sof.beauty/ao2-client/commit/?id=50075c755386ff9714bdb6386ac3ff98201aceb0'/>
<id>50075c755386ff9714bdb6386ac3ff98201aceb0</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
