You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit ce3116c
Browse filesBrowse the repository at this point in the historyBrowse files
feat: parse + show ID3 artist & album in the now-playing (Control) tab
The Control tab already showed the ID3 title + embedded cover; add artist and album:
- AudioPlayer: parse 'Artist'/'ARTIST=' (TPE1) and 'Album'/'ALBUM=' (TALB) in the
evt_id3data handler via a small Audio_SetMeta() helper (value after ':'/'='), stored
in new gPlayProperties.artist/album. Cleared per track in AudioPlayer_ClearCover() so
a tag-less track shows no stale metadata.
- Web: trackinfo websocket payload gains artist/album.
- UI: a #trackmeta line under the title shows 'Artist — Album' (omits empty parts).
Verified on the test device with a generated MP3 carrying safe ID3 tags (uploaded,
played, removed): the final trackinfo carries both artist and album and the Control
tab renders 'LEO TestArtist — LEO TestAlbum'. Note: the existing title parser keeps a
pre-existing leading space (unchanged here).
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: README.md
+1Lines changed: 1 addition & 0 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -142,6 +142,7 @@ neon logo that doubles as the SVG favicon ([`7be5254`](../../commit/7be5254)):
142
142
|**Listening-time statistics**: tracks how long was actually listened per local calendar day in a 365-day ring buffer (persisted in NVS, ~1.5 KB). The info dialog (ℹ️) shows **today / yesterday / last 7 days / last 30 days** next to the existing total playtime. Seconds are accumulated by the audio loop while playing (clock from NTP/RTC; ignored until the clock is valid), flushed to NVS at most once a minute and on shutdown. New `/info` audio fields `playToday`/`playYesterday`/`play7d`/`play30d` (seconds). i18n de/en/fr |[`listening-stats`](../../releases/tag/listening-stats)|
143
143
| **RFID-tag syncing (server + peer-to-peer)**: keeps RFID-tag assignments in sync across a central PHP server *and* other ESPuinos at the same time. On **learn** a freshly assigned card is pushed to the server and to every configured peer; a **full sync** (button in the Sync settings tab, bindable command **187**, or MQTT `rfid_sync`) pulls the server list, merges newest-wins per tag id (by timestamp) and pushes every local tag back to server + peers. A **catch-up** sync runs automatically once after the device comes online, so a player used **offline/outdoors** (no WiFi, no server) keeps working — cards learned offline are stored locally and pushed up on reconnect (assignments made while the clock was never set are healed to "now" on first sync so they win). Conflict resolution is **newest-wins** by timestamp. Two dynamic server scripts (no static manifest.json): [`server/manifest.php`](server/manifest.php) lists the files for the file sync, [`server/rfid.php`](server/rfid.php) is the stateful RFID-tag store — both are linked from the Sync settings tab. Peers are managed in a small **add-peer editor** (IP/hostname + password, with a reveal toggle) and stored as JSON; since ESPuinos are password-protected, the peer push authenticates with each peer's password via the `X-API-Key` header (falling back to this device's web password). The Sync settings tab is split into **File sync** and **RFID-tag sync** sections (each Save button disabled until its URL is filled), and both runners (file sync + RFID full sync) live in the **Tools** tab. The file browser badges a file/folder (after the name) when it has an RFID assignment (tag icon) or a per-path EQ rule (sliders icon), and the explorer context menu can assign/remove both. i18n de/en/fr | [`rfid-sync`](../../releases/tag/rfid-sync) |
144
144
|**Configurable branding + RFID settings tidy-up**: the navbar **header** title and the **footer** brand are now configurable (General → Branding) with a **live preview** as you type — empty keeps the "Leo Industries" default, so the fork is easy to re-brand. The Sync settings tab is split into two clear sections (**File sync** and **RFID-tag sync**). The RFID **reader** settings (reader type, MFRC522 gain, PN5180 LPCD, SLIX2 password) moved out of the General tab into the **RFID** settings sub-tab where they belong, next to the card-learning UI. Both are covered by the General/RFID-tab auto-save. i18n de/en/fr |[`ui-branding`](../../releases/tag/ui-branding)|
145
+
|**Now-playing: ID3 artist + album**: the Control tab already showed the ID3 **title** and embedded **cover** (APIC); it now also parses the **artist** (`TPE1`/`ARTIST=`) and **album** (`TALB`/`ALBUM=`) tags and shows them as "Artist — Album" under the title. The fields are reset per track (so a tag-less track doesn't show stale metadata) and exposed in the `trackinfo` websocket payload (`artist`/`album`) |[`id3-meta`](../../releases/tag/id3-meta)|
145
146
|**OpenAPI/Swagger spec updated**: the bundled `REST_API.yaml` (served at `/swagger.html`) now documents all fork-added endpoints (`/sync`, `/syncstop`, `/playlist`, `/githubupdate`, `/version`, `/login`, `/logout`, `/security`, `/eqrule(s)`, `/activeequalizer`, `/bluetooth*`, `/sdclean`) and declares the security schemes (`X-API-Key` header / `apikey` query param, or the `ESPUINO_SESSION` login cookie) so the Swagger "Authorize" button works. The web-interface footer links to the Swagger UI (`/swagger.html`) |[`f8298d9`](../../commit/f8298d9)|
0 commit comments