Skip to content

Refactor Fully Kiosk to single-instance#3849

Open
OzGav wants to merge 1 commit into
devfrom
refactor-fully-kiosk
Open

Refactor Fully Kiosk to single-instance#3849
OzGav wants to merge 1 commit into
devfrom
refactor-fully-kiosk

Conversation

@OzGav
Copy link
Copy Markdown
Contributor

@OzGav OzGav commented May 7, 2026

BREAKING CHANGE!

Refactored Fully Kiosk to single-instance, mirroring the MPD provider. Devices live in the provider config (host or host:port); password and SSL options are per-player so they show up in needs_setup until the password is filled in.

One-off migration in controllers/config.py collapses any existing fully_kiosk--* instances into the new shape and copies passwords/SSL across. Tagged for removal in 2.10.

BREAKING CHANGE: player IDs change from device hardware ID to fully_kiosk_<host>_<port>, so existing sync/universal group memberships, queues and per-player overrides won't be migrated and will have to be setup again.

@github-actions
Copy link
Copy Markdown
Contributor

github-actions Bot commented May 7, 2026

🔒 Dependency Security Report

✅ No dependency changes detected in this PR.

@marcelveldt
Copy link
Copy Markdown
Member

why is this a breaking change if you can simply migrate the player configs ?

@OzGav
Copy link
Copy Markdown
Contributor Author

OzGav commented May 11, 2026

Just because I think any groups will need to be recreated. Probably very small chance but I wanted to be cautious as we are getting heat from some users when we break stuff and dont tell them...

async def loaded_in_mass(self) -> None:
"""Sync registered players against the current hosts config."""
entries = cast("list[str]", self.config.get_value(CONF_MANUAL_IPS) or [])
new_ids = {f"fully_kiosk_{h}_{p}" for h, p in (_parse_host_entry(e) for e in entries)}
Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Why are we using new ids here rather than the old fully_kiosk.deviceInfo["deviceID"] ? I think using that would save you the migration logic + makes this change non breaking?

Copy link
Copy Markdown
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The reason I went with host:port IDs is a bit of a chicken/egg thing. In the new setup the password lives on the player config rather than the provider, so by the time we register the player we haven't actually talked to the device yet and don't know its deviceID.

I guess we could preserve the old deviceID for existing installs by reading it out of the legacy player config during migration and keeping it around but it would mean two ID shapes coexisting (legacy = deviceID, new = host:port), which is doable but adds a bit of complexity to carry forward.

Given the only thing that I think would actually break is universal groups containing a Fully Kiosk player, and my guess is that is not that likely that many users would have that, I figured a one-time re-link was the lighter trade-off. Happy to do the preserve-old-ID approach though if you think it's worth it!

@OzGav OzGav added this to the 2.9.0 milestone May 18, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants