Put the media browser on a screen
The media browser is a native Wayland client that draws the namespace’s
catalog on a screen, takes a remote’s presses, and starts a Play.
It takes the place of media-operator’s idle screen on a Player.
This guide names it on a Player and describes what a person sees.
1. Hand the idle screen to the operator
A Player’s spec.idle.controller names the operator that draws its
screen when nothing plays. Set it to this operator’s name:
apiVersion: media.liken.sh/v1alpha1
kind: Player
metadata:
name: living-room-player
namespace: media
spec:
idle:
controller: library.liken.sh/media-browser
media-operator resolves the name into status.idle.controller, and
this operator compares against that resolved value, never the spec.
The Player must be in the same namespace as the libraries it shows.
Hand the idle screen to another controller
in the media-operator manual describes the delegation from its side.
2. What the operator runs
The operator creates a pod named <player>-media-browser, owned by
the Player, so deleting the Player deletes the pod. It has two
containers: the catalog agent as a native sidecar, and the browser.
The browser starts after the agent’s startup probe passes.
The pod mounts every Library of the namespace read-only, whatever
the browser does. It mounts its own catalog claim, and a 640Mi
cache for scaled posters. It claims the display through the standing
ResourceClaim that media-operator holds for the Player, so no
second claim on the display is created.
kubectl -n media get player living-room-player
kubectl -n media get pod living-room-player-media-browser
kubectl -n media logs living-room-player-media-browser -c browser
The browser’s first log line reports the home page’s open time:
media-browser: the home page opened in 38.2 ms
When the default MediaPreferences states spec.timeZone, the
browser draws its clock in that zone. Otherwise it runs on UTC.
3. How presses reach it
The Player’s status.idle.bus names the bus topics for the
Player’s remotes. The browser subscribes to each remote’s events
and its retained focus mark, and answers a press only while the mark
names this Player. Starting a Play moves the mark to the Play’s
Player. A Play ending moves nothing, because the Player it names
is still there, showing its idle screen.
Over the bus, the presses that reach the browser are the arrows, enter, and back. Volume and mute are handled before they reach the browser, and the browser draws the level as a fading row. Home, search, and letter keys reach the browser from a keyboard attached to the screen’s machine.
4. The keys
| Key | Effect |
|---|---|
| arrows | move focus |
| enter | open the card, or play from a title’s page |
| back | pop to the screen before this one |
| home | pop to the home page |
| search | open the search wall with the on-screen keyboard |
| a letter or a digit | open the search wall with that character typed |
Up from the top of any wall puts focus on the strip, the row across the top that holds the clock and the search glass. Right from the last column of a long wall puts focus on the rail, the bars at the right edge that jump through the wall by year, decade, letter, or season. Enter on the rail’s sort button cycles the wall’s order.
5. The screens
The home page is the bottom of the stack. It draws a banner, what was recently released and recently added, a few strips chosen for the day, the libraries row, and every genre. Selecting a library or a genre opens a wall of posters under a heading with its count. A wall longer than eight rows draws the rail.
A movie’s page shows its art, its facts, its people, and the set or franchise it is part of. A series’ page shows its seasons as a wall of episode stills. A person’s page shows their credits and their biography. A franchise’s page draws its story order as one lane with a line per universe beside it, and its eras on the rail.
Search is a wall like any other. Every typed character rereads it. The index is built in memory from titles, original titles, people’s names, episode titles, and descriptions, in that rank.
6. Playback
Enter on a title resolves what to play from the browser’s own copy of
the catalog and publishes the list on the bus. The operator turns it
into a Play for the Player, with each item’s path as a claim
reference, and media-operator runs it. The Play is named after the
title, so kubectl get plays reads like a listing. When the Play
ends, the browser is presented again on the page it left.
Every screen shows every library
Nothing scopes a Player’s screen to a subset of the namespace’s
libraries. A screen that should show fewer libraries needs a namespace
of its own. See
The namespace is a boundary.