ff6edc5383
feat: log [UNHANDLED] for routes with no local handler ( #190 )
...
feat: log [UNHANDLED] for routes with no local handler
Every request that falls through to HandleNotFound now emits an
[UNHANDLED] METHOD path log line, making it immediately visible when a
speaker calls an endpoint we have not implemented. When proxyLogBody is
enabled the request body is also included (truncated to 512 bytes) and
restored before forwarding, so the proxy still sees the full payload.
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com >
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-28 15:28:25 +02:00
a2f952495e
fix: use proper URL manipulation for TuneIn render=json parameter ( #189 )
...
Naive string concatenation (`rawURL + "&render=json"`) produced
malformed URLs when the input had no query string yet, or already
contained render=json. Replace with tuneInRenderJSONURI which parses and
sets the parameter cleanly. Also fix TuneIn search query encoding in the
self link and section href, and replace the http-prefix check for OPML
URIs with a proper host comparison.
Co-authored-by: Claude Sonnet 4.6 <noreply@anthropic.com >
2026-04-28 15:24:43 +02:00
Tobias Gesellchen and GitHub
29c904b7e4
The official Bose SoundTouch USB update website is not available anymore ( #187 )
...
The previous link
https://downloads.bose.com/ced/soundtouch/soundtouch_usb/index.html
responds with status code 403 and redirects to
[`/index.html`](https://downloads.bose.com/index.html ), which ultimately
lands at https://www.bose.com/support/international
v0.65.0
2026-04-25 21:35:07 +02:00
Tobias Gesellchen and GitHub
4a46df1167
Make the soundtouch-web port configurable via env ( #186 )
...
See
https://github.com/gesellix/Bose-SoundTouch/issues/181#issuecomment-4313151490
2026-04-25 21:29:13 +02:00
Tobias Gesellchen and GitHub
cdaf9f0c0a
Build and publish a soundtouch-web Docker image ( #184 )
...
Relates to https://github.com/gesellix/Bose-SoundTouch/issues/181
v0.64.0
2026-04-23 22:23:00 +02:00
Tobias Gesellchen
174d087b8e
Do not duplicate existing sources with default sources
2026-04-23 22:08:54 +02:00
Tobias Gesellchen
066e381737
Fix/beautify the account overview
2026-04-23 22:08:54 +02:00
Tobias Gesellchen and GitHub
522492177d
Embed web resources in soundtouch-web ( #182 )
...
Relates to https://github.com/gesellix/Bose-SoundTouch/issues/181
v0.63.0
2026-04-23 20:51:00 +02:00
Tobias Gesellchen and GitHub
885967aafc
The RADIOPLAYER source is deprecated ( #180 )
...
See https://www.radioplayer.de/apps/bose.html
> Der Radioplayer in BOSE Lautsprechersystemen (ARCHIV)
>
> Bose Soundbar und Bose Soundtouch
>
> ACHTUNG: BOSE steht seit jeher für glasklaren Sound. Im Jahr 2018
wurden daher auch sämtliche Sender des Radioplayers in den SoundBar und
SoundTouch Geräten des Audio-Herstellers aus Massachussets verfügbar
gemacht. Trotz des großen Erfolges der Geräte, besondern auch in
Deutschland, hat sich BOSE jedoch dazu entschieden die Linie der
SoundTouch-Geräte nicht mehr fortzuführen. Die letzte Aktualisierung der
BOSE SoundTouch-App (in der der Radioplayer integriert war, siehe unten)
erfolgte in den App-Stores in 2021. Seither sind einige (neuere) Sender
nicht mehr wie gewohnt verfügbar. BOSE hat zudem verkündet, den Support
der SoundTouch-Geräte zum 18. Februar 2026 komplett einzustellen, was
den Zugriff auf Musikdienste wie den Radioplayer vollends beendet.
v0.62.0
2026-04-22 18:26:14 +02:00
Tobias Gesellchen and GitHub
c6748eda41
Serialize all WebSocket writes ( #179 )
2026-04-21 21:57:19 +02:00
Tobias Gesellchen and GitHub
469a91ad80
Fix logo filenames ( #178 )
2026-04-21 21:49:11 +02:00
Tobias Gesellchen and GitHub
ceb08cd6bf
Fix ETag for account-level endpoints ( #177 )
2026-04-20 21:09:00 +02:00
Tobias Gesellchen
7a3eef110b
Allow multiple sources for the same source type and different provider
v0.61.0
2026-04-20 19:18:39 +02:00
Tobias Gesellchen
5e6885cfe8
Add missing RADIO_BROWSER default source
2026-04-20 19:18:39 +02:00
Tobias Gesellchen and GitHub
747a9cec97
Add app analyzing/debugging docs and scripts ( #174 )
v0.60.0
2026-04-19 22:27:54 +02:00
Tobias Gesellchen
88c83b6131
Fix security issues
2026-04-19 21:59:55 +02:00
Tobias Gesellchen
5943abfddd
Add soundtouch-web release build
2026-04-19 21:59:55 +02:00
Tobias Gesellchen
56e82d5a01
Add TuneIn search/browse/playback
...
We might peek into https://github.com/core-hacked/tunein-api for more advanced use cases
2026-04-19 21:59:55 +02:00
Tobias Gesellchen
56256de47b
lint
2026-04-19 21:59:55 +02:00
Tobias Gesellchen
5b99d7f46b
Add a web-based app
2026-04-19 21:59:55 +02:00
Tobias Gesellchen and GitHub
d0ce48ef03
Fix a mismatch where the local service was incorrectly wrapping the single preset in a <presets> element ( #172 )
v0.59.1
2026-04-18 21:49:16 +02:00
Tobias Gesellchen and GitHub
9704e2d8ac
Make the get_full_account test more comprehensive ( #171 )
...
https://github.com/gesellix/Bose-SoundTouch/issues/135
v0.59.0
2026-04-17 23:15:52 +02:00
Tobias Gesellchen and GitHub
aa5a25b382
Enhance version-info ( #170 )
2026-04-17 22:16:47 +02:00
Tobias Gesellchen and GitHub
f14cb45680
Enhance and group device discovery settings in web UI ( #169 )
2026-04-17 21:51:11 +02:00
Tobias Gesellchen and GitHub
1fecb3948e
Refactor constants for sources and source providers ( #168 )
2026-04-17 19:08:50 +02:00
Tobias Gesellchen and GitHub
0e2f05e6e5
Improve source sync by adding deduction of known source IDs ( #167 )
2026-04-17 18:50:51 +02:00
Tobias Gesellchen and GitHub
ffe61dd7a6
Prevent loops for proxied requests on unknown endpoints ( #166 )
...
Follow-up for https://github.com/gesellix/Bose-SoundTouch/issues/161
2026-04-17 18:20:46 +02:00
Tobias Gesellchen and GitHub
76bb19ebcb
Fix migration to use the correct URL format ( #165 )
...
Fixes https://github.com/gesellix/Bose-SoundTouch/issues/161
v0.58.0
2026-04-15 19:05:07 +02:00
dependabot[bot] and Tobias Gesellchen
13b8e7be82
ci(deps): bump softprops/action-gh-release from 2 to 3
...
Bumps [softprops/action-gh-release](https://github.com/softprops/action-gh-release ) from 2 to 3.
- [Release notes](https://github.com/softprops/action-gh-release/releases )
- [Changelog](https://github.com/softprops/action-gh-release/blob/master/CHANGELOG.md )
- [Commits](https://github.com/softprops/action-gh-release/compare/v2...v3 )
---
updated-dependencies:
- dependency-name: softprops/action-gh-release
dependency-version: '3'
dependency-type: direct:production
update-type: version-update:semver-major
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-04-15 08:43:21 +02:00
dependabot[bot] and Tobias Gesellchen
57d020c407
ci(deps): bump the actions-core group with 2 updates
...
Bumps the actions-core group with 2 updates: [actions/github-script](https://github.com/actions/github-script ) and [actions/upload-pages-artifact](https://github.com/actions/upload-pages-artifact ).
Updates `actions/github-script` from 8 to 9
- [Release notes](https://github.com/actions/github-script/releases )
- [Commits](https://github.com/actions/github-script/compare/v8...v9 )
Updates `actions/upload-pages-artifact` from 4 to 5
- [Release notes](https://github.com/actions/upload-pages-artifact/releases )
- [Commits](https://github.com/actions/upload-pages-artifact/compare/v4...v5 )
---
updated-dependencies:
- dependency-name: actions/github-script
dependency-version: '9'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions-core
- dependency-name: actions/upload-pages-artifact
dependency-version: '5'
dependency-type: direct:production
update-type: version-update:semver-major
dependency-group: actions-core
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-04-15 08:42:47 +02:00
dependabot[bot] and Tobias Gesellchen
4348d22c5c
deps(deps): bump the golang group with 6 updates
...
Bumps the golang group with 6 updates:
| Package | From | To |
| --- | --- | --- |
| [golang.org/x/crypto](https://github.com/golang/crypto ) | `0.49.0` | `0.50.0` |
| [golang.org/x/image](https://github.com/golang/image ) | `0.38.0` | `0.39.0` |
| [golang.org/x/mod](https://github.com/golang/mod ) | `0.34.0` | `0.35.0` |
| [golang.org/x/net](https://github.com/golang/net ) | `0.52.0` | `0.53.0` |
| [golang.org/x/text](https://github.com/golang/text ) | `0.35.0` | `0.36.0` |
| [golang.org/x/tools](https://github.com/golang/tools ) | `0.43.0` | `0.44.0` |
Updates `golang.org/x/crypto` from 0.49.0 to 0.50.0
- [Commits](https://github.com/golang/crypto/compare/v0.49.0...v0.50.0 )
Updates `golang.org/x/image` from 0.38.0 to 0.39.0
- [Commits](https://github.com/golang/image/compare/v0.38.0...v0.39.0 )
Updates `golang.org/x/mod` from 0.34.0 to 0.35.0
- [Commits](https://github.com/golang/mod/compare/v0.34.0...v0.35.0 )
Updates `golang.org/x/net` from 0.52.0 to 0.53.0
- [Commits](https://github.com/golang/net/compare/v0.52.0...v0.53.0 )
Updates `golang.org/x/text` from 0.35.0 to 0.36.0
- [Release notes](https://github.com/golang/text/releases )
- [Commits](https://github.com/golang/text/compare/v0.35.0...v0.36.0 )
Updates `golang.org/x/tools` from 0.43.0 to 0.44.0
- [Release notes](https://github.com/golang/tools/releases )
- [Commits](https://github.com/golang/tools/compare/v0.43.0...v0.44.0 )
---
updated-dependencies:
- dependency-name: golang.org/x/crypto
dependency-version: 0.50.0
dependency-type: direct:production
update-type: version-update:semver-minor
dependency-group: golang
- dependency-name: golang.org/x/image
dependency-version: 0.39.0
dependency-type: indirect
update-type: version-update:semver-minor
dependency-group: golang
- dependency-name: golang.org/x/mod
dependency-version: 0.35.0
dependency-type: indirect
update-type: version-update:semver-minor
dependency-group: golang
- dependency-name: golang.org/x/net
dependency-version: 0.53.0
dependency-type: indirect
update-type: version-update:semver-minor
dependency-group: golang
- dependency-name: golang.org/x/text
dependency-version: 0.36.0
dependency-type: indirect
update-type: version-update:semver-minor
dependency-group: golang
- dependency-name: golang.org/x/tools
dependency-version: 0.44.0
dependency-type: indirect
update-type: version-update:semver-minor
dependency-group: golang
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-04-13 15:12:44 +02:00
Tobias Gesellchen
82fd77c8e2
Add Bose SoundTouch Web API v1.1 docs
2026-04-08 19:35:27 +02:00
dependabot[bot] and Tobias Gesellchen
0b59e66f70
deps(deps): bump golang.org/x/sys in the golang group
...
Bumps the golang group with 1 update: [golang.org/x/sys](https://github.com/golang/sys ).
Updates `golang.org/x/sys` from 0.42.0 to 0.43.0
- [Commits](https://github.com/golang/sys/compare/v0.42.0...v0.43.0 )
---
updated-dependencies:
- dependency-name: golang.org/x/sys
dependency-version: 0.43.0
dependency-type: indirect
update-type: version-update:semver-minor
dependency-group: golang
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-04-08 19:30:30 +02:00
Tobias Gesellchen
3678719627
Update to Golang 1.26.2
2026-04-08 19:22:24 +02:00
Tobias Gesellchen
ccfd49778e
Update to Golang 1.26.2
2026-04-08 19:22:24 +02:00
dependabot[bot] and Tobias Gesellchen
bdc1f71ece
docker(deps): bump golang from 1.26.1-alpine to 1.26.2-alpine
...
Bumps golang from 1.26.1-alpine to 1.26.2-alpine.
---
updated-dependencies:
- dependency-name: golang
dependency-version: 1.26.2-alpine
dependency-type: direct:production
update-type: version-update:semver-patch
...
Signed-off-by: dependabot[bot] <support@github.com >
2026-04-08 19:22:24 +02:00
Tobias Gesellchen and GitHub
68f8efce4e
Improve parity with upstream ( #155 )
...
See https://github.com/gesellix/Bose-SoundTouch/issues/135
v0.57.0
2026-04-07 14:44:05 +02:00
Tobias Gesellchen and Junie
276d01fe42
feat(spotify): improve Spotify registration flow and speaker notification
...
- Implement full SoundTouch app flow for Spotify registration in the Web UI.
- Update `/mgmt/spotify/init` to pass `accountID` via OAuth `state`.
- Add "Connect Spotify" button to Local Account tab in Web UI with polling.
- Implement legacy and Marge-sync fallbacks for speaker notifications (Error 1029).
- Add support for parsing multi-error XML responses (`<errors>`) from speakers.
- Add `NotifySourcesUpdated` to client for triggering manual source synchronization.
- Improve test coverage for error parsing and Spotify initialization handlers.
Co-authored-by: Junie <junie@jetbrains.com >
2026-04-06 22:39:30 +02:00
Tobias Gesellchen
4de7911817
Fix data race in TestSpotifyBridge
2026-04-06 21:15:15 +02:00
Tobias Gesellchen
5d933f7ebc
Use a constant prefix for our internal token
2026-04-06 21:15:15 +02:00
Tobias Gesellchen
153d387aaf
Fix a complete flow for Spotify registration, preset
2026-04-06 21:15:15 +02:00
Tobias Gesellchen
fea6df32f3
Implement the Spotify source bridge
2026-04-06 21:15:15 +02:00
Tobias Gesellchen
3b1c639892
Completely ignore integration testdata
2026-04-06 15:22:06 +02:00
Tobias Gesellchen
740cf54b9d
Cleanup Spotify tests
2026-04-06 15:22:06 +02:00
Tobias Gesellchen
e5b94158e6
Use modern docker compose command syntax
2026-04-06 15:05:44 +02:00
Tobias Gesellchen
c54ee79320
No need for that mock Spotify account to be version controlled
2026-04-06 15:05:44 +02:00
Tobias Gesellchen
c4cf078d2a
Add Spotify mock server and integration tests
2026-04-06 15:05:44 +02:00
Tobias Gesellchen and GitHub
382567d67d
Add .../api_versions.xml and .../musicprovider/{providerID}/is_eligible ( #150 )
v0.56.0
2026-04-05 23:25:30 +02:00
Tobias Gesellchen and GitHub
de96b1f119
Add /streaming/account/{account}/presets/all ( #149 )
2026-04-05 23:10:53 +02:00
Tobias Gesellchen and GitHub
d22dc99c9e
Add /streaming/account/{account}/devices ( #148 )
2026-04-05 10:16:22 +02:00