The app now opens on the login screen when there is nothing else to show
— no local paths and no configured library — and goes straight to the
images otherwise. Making someone click past a login they already
completed is pure friction.
launch.slint imported by app.slint, replacing the window rather
than overlaying it: there is no library to look at
until an account is configured
launch_ui.rs the Slint wiring, kept out of lib.rs so the launch
flow can change without touching the develop window
Login runs on a worker thread and posts results back through a channel,
since Slint's event loop is single-threaded and a 20-minute browser wait
cannot block it. The system browser is opened via xdg-open, never an
embedded webview (FR-NC-1).
Sign-out deletes the local credential even if server-side revocation
fails: a network error must not leave a usable secret on the machine.
Format tick-boxes persist on each toggle, so a selection survives a
crash before the library is opened.
Two things deliberately incomplete rather than faked:
- "Choose folder" lists the account's folders and reports them, but
there is no picker widget yet, so selection still happens via the
connect example.
- "Open library" logs the request. Opening a remote library needs the
scan-and-cache path, which belongs with the catalog work in flight.
Earlier I broke the other in-flight dr-ui work by calling
slint_build::compile twice, which replaces the generated module. The
correct wiring is an import inside app.slint, which is what this does.
30 dr-ui tests passing; both launch paths verified by running the app.
35 lines
999 B
TOML
35 lines
999 B
TOML
[package]
|
|
name = "dr-ui"
|
|
version.workspace = true
|
|
edition.workspace = true
|
|
rust-version.workspace = true
|
|
license.workspace = true
|
|
|
|
[dependencies]
|
|
dr-types.workspace = true
|
|
# The readback feature is on because Slint's texture-import path is unwired
|
|
# until spike S1; the develop view has no other way to reach the screen. It
|
|
# must come off when S1 lands (ARCH §6.1, AC-8).
|
|
dr-gpu = { workspace = true, features = ["readback"] }
|
|
dr-decode.workspace = true
|
|
serde_json.workspace = true
|
|
tokio.workspace = true
|
|
reqwest.workspace = true
|
|
dr-plat.workspace = true
|
|
dr-sync.workspace = true
|
|
dr-sync-nextcloud.workspace = true
|
|
dr-pipeline.workspace = true
|
|
slint = { workspace = true, features = ["compat-1-2", "renderer-femtovg", "backend-winit"] }
|
|
wgpu.workspace = true
|
|
anyhow.workspace = true
|
|
log.workspace = true
|
|
pollster.workspace = true
|
|
|
|
[build-dependencies]
|
|
slint-build.workspace = true
|
|
|
|
[features]
|
|
default = []
|
|
# Temporary CPU readback path; see dr-ui docs and spike S1.
|
|
readback = ["dr-gpu/readback"]
|