Menu β–Ύ β–΄

Tree [f5728b] main /
 History

HTTPS access


File Date Author Commit
 src 2026-03-04 AnonBOTpl AnonBOTpl [8d6be8] Update version to 1.2.0 in build scripts
 CHANGELOG.md 2026-03-04 AnonBOTpl AnonBOTpl [8d6be8] Update version to 1.2.0 in build scripts
 LICENSE 2026-03-04 AnonBOTpl AnonBOTpl [f5728b] Add files via upload
 README.md 2026-03-04 AnonBOTpl AnonBOTpl [985247] Update README.md
 README_pl.md 2026-03-04 AnonBOTpl AnonBOTpl [c3dab2] Update README_pl.md
 build_installer.bat 2026-03-04 AnonBOTpl AnonBOTpl [8d6be8] Update version to 1.2.0 in build scripts
 build_portable.bat 2026-03-04 AnonBOTpl AnonBOTpl [8d6be8] Update version to 1.2.0 in build scripts
 icon.ico 2026-03-04 AnonBOTpl AnonBOTpl [8d6be8] Update version to 1.2.0 in build scripts
 pom.xml 2026-03-04 AnonBOTpl AnonBOTpl [8d6be8] Update version to 1.2.0 in build scripts

Read Me

🎡 Internet Radio App

A lightweight, modern, and feature-rich internet radio player written in Java 21 and JavaFX. Search and play thousands of radio stations worldwide, completely free.

Java
JavaFX
License

Przeczytaj po Polsku


{4DD8A20F-C0E1-44CD-8640-07A5B2D1D923}

✨ Features

  • 🌍 Global Station Search β€” Powered by the open Radio-Browser API. Search by name, country, or genre across thousands of stations.
  • πŸŒ— Modern Dark UI β€” Borderless, custom-themed interface with a dynamic accent color selector (presets + custom color picker).
  • 🎡 Synchronized Album Art β€” Cover art is fetched from the iTunes API and is always in sync with the currently playing song. Blacklisted tracks are never queried.
  • πŸ“± MiniPlayer Mode β€” A compact overlay bar that snaps to the bottom of your screen, with volume control and album art. Stays out of your way while you work.
  • ⌨️ Global Media Keys β€” Control playback with your keyboard's Play/Pause/Stop media keys even when the app is minimized, powered by JNativeHook.
  • ⏺️ Live Recording β€” Record live streams directly to lossless .wav files. Recording automatically stops at the 2 GB limit.
  • πŸŒ™ Sleep Timer β€” Automatically shuts down the app after 15, 30, 45, or 60 minutes.
  • 🚫 Blacklist & Notifications β€” Non-intrusive toast notifications show the current song with cover art. Add any keyword to the blacklist to suppress ads or unwanted tracks.
  • πŸ“œ Persistent History β€” The last 50 played songs are saved and restored between sessions.
  • 🌐 Multilingual β€” Fully translatable via external JSON files in ~/.radioapp/langs/. Defaults to Polish and English, auto-detected from system locale.

πŸš€ Running in Development

Prerequisites: JDK 21+, Apache Maven.

git clone https://github.com/yourusername/InternetRadioApp.git
cd InternetRadioApp
mvn clean compile javafx:run

πŸ“¦ Building a Standalone App (.exe)

The target user does not need Java installed.

Portable version (no installation required):

build_portable.bat

Output: release/InternetRadio/

Installer (.exe) β€” requires WiX Toolset v3:

build_installer.bat

Output: release/InternetRadio-1.0.0.exe


βš™οΈ Custom Translations

Language files are generated automatically on first run at ~/.radioapp/langs/.

  1. Open Settings β†’ Open language folder.
  2. Duplicate en.json, rename it to your locale (e.g. de.json).
  3. Translate the values on the right side of each key.
  4. The app auto-detects the correct file based on your system locale.

πŸ”’ Security

  • URL validation β€” only public http(s):// URLs accepted; localhost, private IPs and non-HTTP protocols are blocked.
  • CSS injection protection β€” accent colors from config.json are validated against #RRGGBB format before use.
  • Path traversal protection β€” language file names are validated to safe locale codes only.
  • Thread-safe blacklist β€” all blacklist operations are synchronized.

🀝 Dependencies

Library Purpose
JavaFX UI Framework
Gson JSON parsing
JNativeHook Global keyboard listener
MP3SPI / JLayer MP3 stream decoding
MongoDB Logo MongoDB