feat(concerts): show artwork-themed event details in app

This commit is contained in:
zarzet
2026-09-25 12:00:28 +07:00
parent ab58cdbb0c
commit abb8dc4a42
18 changed files with 1047 additions and 23 deletions
+41 -1
View File
@@ -13,6 +13,7 @@ Older extensions may omit it; no concert button is shown for an empty list.
"venue": "Example Hall",
"start_at": "2026-10-07T01:00:00Z",
"time_zone": "America/New_York",
"detail_id": "event-123",
"url": "https://example.com/events/123"
}]
}
@@ -26,7 +27,8 @@ Older extensions may omit it; no concert button is shown for an empty list.
preserves the wall-clock fields supplied in `start_at`.
- `id`, `venue`, and `url` are optional. The app deduplicates by event ID (or
date/location/venue), orders events by date, and accepts at most 500 entries.
- Only HTTP(S) event links can be opened, and only after tapping an event.
- Tapping an event opens its internal detail page. Only explicit ticket and map
actions open external HTTP(S) links; the event URL is used for sharing.
- Providers should return upcoming events only. Failure to fetch this optional
information must not fail the artist's albums or top tracks.
@@ -34,3 +36,41 @@ The badge opens a native schedule with artist identity, venue-local date tiles,
and event details. Labels are provider-neutral in both application themes.
Concert metadata is supplied with the artist response, so the schedule opens
immediately without a second loading state or network request.
The schedule follows the application's light/dark theme. The detail page uses
the artist portrait's palette and light text in either theme, including its
loading placeholders. Any metadata extension can implement `getConcert(id)`
and supply `detail_id` on its events. The app requests it only when opening an
event through `getProviderMetadata(provider, "concert", detail_id)`, receiving
the generic `concert` envelope. Older providers without `detail_id` still open
a detail page with the schedule's date and venue.
```json
{
"id": "event-123",
"artist_name": "Example Artist",
"title": "Example Tour",
"cover_url": "https://example.com/artist.jpg",
"start_at": "2026-10-07T01:00:00Z",
"end_at": "2026-10-07T04:00:00Z",
"time_zone": "America/New_York",
"venue": "Example Hall",
"address": "123 Example Street",
"ticket_url": "https://example.com/tickets/123",
"map_url": "https://example.com/maps/123",
"url": "https://example.com/events/123",
"attribution": "Powered by Example Events",
"set_list": {
"id": "playlist-123",
"name": "Example Tour Set List",
"cover_url": "https://example.com/set-list.jpg"
}
}
```
All detail fields are optional. Omit unavailable actions instead of fabricating
links. Set lists open the existing internal playlist screen using the same
metadata provider. Calendar actions present a system editor for the user to
review and save; no event is added automatically. iOS 17+ needs no calendar
read permission; iOS 16 requests legacy permission. Android uses an insert
intent. Failed detail requests leave the date and venue visible with Retry.