| Name | Modified | Size | Downloads / Week |
|---|---|---|---|
| Parent folder | |||
| build_installer.bat | 2026-03-06 | 1.3 kB | |
| build_portable.bat | 2026-03-06 | 1.2 kB | |
| InternetRadio-1.1.0.exe | 2026-03-04 | 68.5 MB | |
| README.md | 2026-03-04 | 3.9 kB | |
| v1.1.0 -- Security _ Bug Fix Release source code.tar.gz | 2026-03-04 | 53.4 kB | |
| v1.1.0 -- Security _ Bug Fix Release source code.zip | 2026-03-04 | 62.7 kB | |
| Totals: 6 Items | 68.6 MB | 6 | |
Changelog
[1.1.0] β 2026-03-04
π Bug Fixes
- Album art & Toast out of sync β the Toast notification now always displays the correct cover art. Previously, the iTunes response arrived after the toast was already shown, causing it to fall back to the station favicon instead of the album cover.
- Stale album art from previous track β if the current song changed while an iTunes request was still in flight, the result is now discarded. No more cover art from the previous track bleeding into the next one.
- Blacklist did not block album art fetching β blacklisted tracks still triggered iTunes API requests and updated
currentAlbumArtin the background. Fixed: blacklisted tracks now clear the cover art and skip the iTunes query entirely. - "Clear history" button had no effect β
getHistory()returns a copy of the internal list, so calling.clear()on it did nothing. Fixed via a dedicatedclearHistory()method that operates on the original list. - BlacklistDialog modified internal list without synchronization β direct access to the blacklist from the dialog could cause a
ConcurrentModificationExceptionduring playback. All operations now go through synchronized methods. - Race condition on
fxPlayerβ thefxPlayerfield was assigned on the JavaFX thread but read from other threads without synchronization. Fixed by introducing a dedicatedfxLockobject.
β¨ New Features
- Persistent song history β the last 50 played songs are now saved to
config.jsonand restored on the next launch. - 2 GB recording limit β live recording now automatically stops when the buffer reaches 2 GB, preventing an
OutOfMemoryErrorduring long sessions. - Volume tooltip in MiniPlayer β the volume slider in MiniPlayer mode now shows the current percentage in a tooltip, updated in real time.
π Security
- SSRF / URL validation β introduced
isUrlSafe()which blocks connections tolocalhost,127.x,10.x,192.168.x,169.254.x, IPv6 loopback (::1), and non-HTTP protocols (file://,javascript:,data:). Applied to stream playback, HTTP redirects, and the song metadata checker. - CSS injection protection β accent color values loaded from
config.jsonare now validated against the#RRGGBBformat viasanitizeColor()before being applied to the UI. - Path traversal protection β language file names are now validated against
[a-z]{2,10}and the resolved path is checked to stay within thelangs/directory. - Thread-safe blacklist β added
blacklistLock;isBlacklisted(),addToBlacklist(), andremoveFromBlacklist()are now fully synchronized.
π§Ή Refactoring
- Removed
TrayManager.javaβ the class was unused (system tray was replaced by MiniPlayer). Removing it eliminates dead code and reduces project size. - Removed static
INSTANCEsingleton βRadioModClient.INSTANCEandgetInstance()were unused outside the class itself and have been removed. - Proper executor shutdown β new
shutdownExecutors()method inRadioModClientcorrectly shuts downsleepTimerExecutorandsongCheckerwhen the app closes. - Translated
BlacklistDialogβ all hardcoded Polish strings replaced withmodClient.t()calls for proper multilingual support. - New app icon β replaced with a new 256Γ256 PNG/ICO featuring a music note and sound waves, fully filling the icon area and matching the app's purple accent color.
[1.0.0] β initial release
- Station search via Radio-Browser API
- MP3 / AAC / HLS stream playback
- MiniPlayer, Sleep Timer, WAV recording
- Song history, blacklist, Toast notifications
- Album art via iTunes API
- Global media key support
- Multilingual support (PL/EN) via JSON files