The sidebar "+" called create_playlist(), which made a playlist named literally
"New Playlist" and navigated to it. Four of the modal's five fields had no other
door, and one had NO door at all:
name hardcoded reachable in Edit playlist
description always empty reachable in Edit playlist
folder always root reachable in the sidebar row menu
public always false NOWHERE
offline-only from connectivity NOWHERE for an online user
That last row is why this counts as a regression rather than a rough edge.
offline_only decides whether the playlist is a local_playlists row
(local:<uuid>, library.db, no Qobuz account, never uploaded) or a Qobuz entity,
and the shortcut derived it from connectivity alone — so someone with a Qobuz
session could not create a local playlist without pulling the network cable.
Ported against CreatePlaylistModal.slint plus on_create_playlist
(main.rs:21107) and on_submit (:21496). The submit branches where the reference
branches, and a creation forced local by being offline KEEPS the flag, as the
reference's own note says, so Edit can unmark it later to enable "Upload to
Qobuz".
Two calls made here:
- Create rides the QbzPlaylistEdit singleton rather than getting its own, where
the reference splits them. Same domain — a playlist's own metadata — with two
documents that never interact, and a second QObject is a second boot() to
forget; that bridge's header already documents a missing boot() swallowing
publishes silently and forever.
- The folder picker hides on the offline-only arm. folders_qt::move_playlist
takes a u64 and a local:<uuid> has none, so the reference shows the control
and discards the value.
The shortcut is deleted rather than left beside the modal: a second creation
path that skips it is the fork the port rule forbids. All thirteen strings were
already in the catalogues.
cc