[][src]Module ashpd::desktop::file_chooser

Open/save file(s) chooser.

Examples

Opening a file

use ashpd::desktop::file_chooser::{
    Choice, FileChooserProxy, FileFilter, SelectedFiles, OpenFileOptions,
};
use ashpd::{RequestProxy, Response, WindowIdentifier};
use zbus::{fdo::Result, Connection};

fn main() -> Result<()> {
    let connection = Connection::new_session()?;

    let proxy = FileChooserProxy::new(&connection)?;
    let request_handle = proxy.open_file(
        WindowIdentifier::default(),
        "open a file to read",
        OpenFileOptions::default()
            .accept_label("read")
            .modal(true)
            .multiple(true)
            .choice(
                Choice::new("encoding", "Encoding", "latin15")
                    .insert("utf8", "Unicode (UTF-8)")
                    .insert("latin15", "Western"),
            )
            // A trick to have a checkbox
            .choice(Choice::new("re-encode", "Re-encode", "false"))
            .filter(FileFilter::new("SVG Image").mimetype("image/svg+xml")),
    )?;

    let request = RequestProxy::new(&connection, &request_handle)?;
    request.on_response(|r: Response<SelectedFiles>| {
        println!("{:#?}", r.unwrap());
    })?;

    Ok(())
}

Ask to save a file

use ashpd::desktop::file_chooser::{
    FileChooserProxy, FileFilter, SelectedFiles, SaveFileOptions,
};
use ashpd::{RequestProxy, Response, WindowIdentifier};
use zbus::{fdo::Result, Connection};

fn main() -> Result<()> {
    let connection = Connection::new_session()?;

    let proxy = FileChooserProxy::new(&connection)?;
    let request_handle = proxy.save_file(
        WindowIdentifier::default(),
        "open a file to write",
        SaveFileOptions::default()
            .accept_label("write")
            .current_name("image.jpg")
            .modal(true)
            .filter(FileFilter::new("JPEG Image").glob("*.jpg")),
    )?;

    let request = RequestProxy::new(&connection, &request_handle)?;
    request.on_response(|r: Response<SelectedFiles>| {
        println!("{:#?}", r.unwrap());
    })?;

    Ok(())
}

Ask to save multiple files

use ashpd::desktop::file_chooser::{FileChooserProxy, SaveFilesOptions, SelectedFiles};
use ashpd::{RequestProxy, Response, WindowIdentifier};
use zbus::{fdo::Result, Connection};

fn main() -> Result<()> {
    let connection = Connection::new_session()?;

    let proxy = FileChooserProxy::new(&connection)?;
    let request_handle = proxy.save_files(
        WindowIdentifier::default(),
        "open files to write",
        SaveFilesOptions::default()
            .accept_label("write files")
            .modal(true)
            .current_folder("/home/bilelmoussaoui/Pictures")
            .files(vec!["test.jpg".to_string(), "awesome.png".to_string()]),
    )?;

    let request = RequestProxy::new(&connection, &request_handle)?;
    request.on_response(|r: Response<SelectedFiles>| {
        println!("{:#?}", r.unwrap());
    })?;

    Ok(())
}

Structs

Choice

Presents the user with a choice to select from or as a checkbox.

FileChooserProxy

The interface lets sandboxed applications ask the user for access to files outside the sandbox. The portal backend will present the user with a file chooser dialog.

FileFilter

A file filter, to limit the available file choices to a mimetype or a glob pattern.

OpenFileOptions

Specified options for a open_file request.

SaveFileOptions

Specified options for a save file request.

SaveFilesOptions

Specified options for a save files request.

SelectedFiles

A response to an open/save file request.