Everything written this session that has not been through the device: rounds 43 to 48 (each patch adversarially verified, 43's transient-notice expectation fixed), a partial round 49, the pipeline scripts, the Android Auto design and the icon comparison mock. Also the two harness changes that were never A/B'd — adaptive waits, which may only shorten a declared wait and never lengthen it, and a ship that runs the mock walk and the deploy at the same time. The A/B and its 255-step baseline are in handoff/tools; main stays at what the phone has actually walked.
21 lines
1.4 KiB
Plaintext
21 lines
1.4 KiB
Plaintext
**A file** from the phone is the same plugin's `pick_file`, beside
|
|
`pick_folder` and `pick_image`: Android's document picker with the caller's
|
|
own MIME filter, answered with `{ path, name, size, copied }`. It copies as
|
|
little as it can, because an image is small and an audio file is not. A
|
|
document already on this phone's storage hands its own path over as it lies
|
|
— the DOCUMENT sibling of the tree id the folder picker resolves, plus the
|
|
Downloads provider's `raw:` — so picking a 300 MB file costs nothing and
|
|
touches no cache. One that has no path (a cloud provider's, a document a
|
|
provider only streams) is copied into `cacheDir/picked` under its own
|
|
display name, and only as far as the caller's `maxCopyBytes` allows: zero
|
|
refuses the copy outright, which is what an audio-sized pick wants, and the
|
|
copy counts itself as it goes because a provider's stated size is often
|
|
absent and sometimes wrong. Those copies are swept at the start of every
|
|
pick — unlike `pick_image`'s, which live in the cache for ever — so a path
|
|
from one pick is gone by the next. The display name travels beside the path
|
|
because it is load-bearing: `playlist_formats::detect_format` reads the
|
|
extension off it and `parse` titles the draft from its stem, so a copy under
|
|
an invented name would read every playlist as plain text. The dialog plugin
|
|
cannot serve here: `tauri-plugin-dialog` does open the sheet from Rust, but
|
|
it answers with a `content://` URI, and `std::fs` cannot take one.
|