📂 cosmic: FileChooser ejercido — pero NO desde cosmic-store, y el motivo importa
NO SE PUEDE DESDE LA TIENDA. cosmic-store se compila con la feature
xdg-portal, pero su ÚNICO uso del selector (src/update.rs:505,
Message::RepositoryAddDialog) arranca con
`if backend_name == BackendName::FlatpakUser`: el diálogo sólo se abre para
añadir un repositorio flatpak, y esta imagen no construye el backend
flatpak. La feature está compilada y el punto de llamada es INALCANZABLE.
Tener la feature encendida no es tener el flujo disponible.
El camino que sí ejerce la interfaz es llamarla directo por D-Bus, que
además prueba los tres eslabones sin depender de qué app la use:
dbus-send --session --print-reply --dest=org.freedesktop.portal.Desktop \
/org/freedesktop/portal/desktop \
org.freedesktop.portal.FileChooser.OpenFile \
string:"" string:Prueba dict:string:variant:handle_token,string:hammer1 &
Medido: el frontend devuelve el objeto Request con NUESTRO token
(/org/freedesktop/portal/desktop/request/1_113/hammer3) y el backend dibuja
el diálogo REAL — título «Prueba», el FS de verdad (run/tmp/dev/proc/sys),
panel de detalles (inode/directory, 963 items), Cancel/Open. La navegación
anda: doble clic en dev cambia la miga a «Filesystem › dev» y lista sus 129
entradas; seleccionar y pulsar Open lo cierra.
⚠ LO QUE NO QUEDÓ CAPTURADO: la URI devuelta. El Response de la spec de
portales es una señal UNICAST al llamador, y dbus-send termina apenas recibe
el method return, así que ya no está para recibirla; dbus-monitor con un
match rule normal tampoco la ve. Pide un cliente que implemente el ciclo
Request/Response, que es lo que hace ashpd dentro de las aplicaciones.
El diálogo está probado; la entrega del fichero a la aplicación, no.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
Binary file not shown.
|
After Width: | Height: | Size: 81 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 76 KiB |
@@ -901,12 +901,49 @@ que es justamente el eslabón que el `.service` con `@libexecdir@` sustituido ha
|
||||
⚠ **Alcance honesto de esta medición**: prueba DISPONIBILIDAD y ENRUTADO, no los flujos completos.
|
||||
La única interfaz ejercida de punta a punta —con fichero en disco— es `Screenshot`.
|
||||
|
||||
### 📂 FileChooser EJERCIDO — y por qué NO se puede desde cosmic-store
|
||||
|
||||
`docs/evidencia/cosmic-portal-filechooser-2026-08-05.png` y `…-nav-…png`.
|
||||
|
||||
**Primero, el camino que NO existe.** `cosmic-store` se compila con la feature `xdg-portal`, pero su
|
||||
ÚNICO uso del selector está en `src/update.rs:505`, dentro de
|
||||
`Message::RepositoryAddDialog`, y arranca con:
|
||||
|
||||
```rust
|
||||
if backend_name == BackendName::FlatpakUser {
|
||||
#[cfg(feature = "xdg-portal")]
|
||||
...file_chooser::open::Dialog::new()...
|
||||
```
|
||||
|
||||
O sea que el diálogo sólo se abre para **añadir un repositorio flatpak**, y esta imagen no construye
|
||||
el backend flatpak (ver arriba: sólo `pkgar`). La feature está compilada y el punto de llamada es
|
||||
inalcanzable. **Tener la feature encendida no es tener el flujo disponible.**
|
||||
|
||||
**El camino que sí ejerce la interfaz** es llamarla directo, que además prueba los tres eslabones sin
|
||||
depender de qué aplicación la use:
|
||||
|
||||
```sh
|
||||
dbus-send --session --print-reply --dest=org.freedesktop.portal.Desktop \
|
||||
/org/freedesktop/portal/desktop org.freedesktop.portal.FileChooser.OpenFile \
|
||||
string:"" string:Prueba dict:string:variant:handle_token,string:hammer1 &
|
||||
```
|
||||
|
||||
Resultado medido: el frontend devuelve el objeto Request con el token que le pasamos
|
||||
(`/org/freedesktop/portal/desktop/request/1_113/hammer3`) y el **backend dibuja el diálogo real** —
|
||||
título `Prueba`, el FS de verdad (`run`, `tmp`, `dev`, `proc`, `sys`), panel de detalles
|
||||
(`inode/directory`, 963 items) y botones Cancel/Open. La navegación anda: doble clic en `dev` cambia
|
||||
la miga de pan a `Filesystem › dev` y lista sus 129 entradas; seleccionar y pulsar *Open* lo cierra.
|
||||
|
||||
⚠ **Lo que NO quedó capturado, y por qué**: la URI devuelta. El `Response` de la especificación de
|
||||
portales es una señal **unicast al llamador**, y `dbus-send` termina apenas recibe el *method return*,
|
||||
así que ya no está para recibirla; `dbus-monitor` con un match rule normal tampoco la ve. Capturarla
|
||||
pide un cliente que implemente el ciclo Request/Response — que es justo lo que hace `ashpd` dentro de
|
||||
las aplicaciones. **El diálogo está probado; la entrega del fichero a la aplicación, no.**
|
||||
|
||||
## Lo que falta, en orden
|
||||
|
||||
1. **Ejercer los flujos, no sólo sondear**: `FileChooser` desde una aplicación que use el portal
|
||||
(`cosmic-store` se compiló con la feature `xdg-portal`; `cosmic-edit` NO la usa, va con el
|
||||
selector propio de `cosmic-files` como crate) y `ScreenCast`, que es la que ejercita pipewire de
|
||||
verdad.
|
||||
1. **`ScreenCast`**, que es la que ejercita pipewire de verdad, y la entrega de URI del `FileChooser`
|
||||
con un cliente `ashpd` real en vez de `dbus-send`.
|
||||
2. **Decidir `gvfs`** (ver la corrección de arriba: las piezas ya están selladas, lo que falta es la
|
||||
decisión sobre la segunda glib). Destrabaría los montajes remotos de cosmic-files y su applet.
|
||||
3. **Enchufar la tienda a `.swm`**: servir `org.freedesktop.PackageKit` y encender la feature
|
||||
|
||||
Reference in New Issue
Block a user