mirror of
https://github.com/tauri-apps/plugins-workspace.git
synced 2026-05-11 12:37:34 +02:00
f5f68063e4
Co-authored-by: FabianLars <30730186+FabianLars@users.noreply.github.com>
42 lines
1.3 KiB
Rust
42 lines
1.3 KiB
Rust
// Copyright 2019-2023 Tauri Programme within The Commons Conservancy
|
|
// SPDX-License-Identifier: Apache-2.0
|
|
// SPDX-License-Identifier: MIT
|
|
|
|
use std::path::PathBuf;
|
|
|
|
use tauri::{AppHandle, Runtime};
|
|
|
|
use crate::{FilePath, OpenOptions};
|
|
|
|
pub struct Fs<R: Runtime>(pub(crate) AppHandle<R>);
|
|
|
|
fn path_or_err<P: Into<FilePath>>(p: P) -> std::io::Result<PathBuf> {
|
|
match p.into() {
|
|
FilePath::Path(p) => Ok(p),
|
|
FilePath::Url(u) if u.scheme() == "file" => u
|
|
.to_file_path()
|
|
.map_err(|_| std::io::Error::new(std::io::ErrorKind::InvalidInput, "invalid file URL")),
|
|
FilePath::Url(_) => Err(std::io::Error::new(
|
|
std::io::ErrorKind::InvalidInput,
|
|
"cannot use a URL to load files on desktop and iOS",
|
|
)),
|
|
}
|
|
}
|
|
|
|
impl<R: Runtime> Fs<R> {
|
|
/// Open a file.
|
|
///
|
|
/// # Platform-specific
|
|
///
|
|
/// - **iOS**: This method will automatically start accessing a security-scoped resource if the path is a file URL.
|
|
/// You must call `stop_accessing_security_scoped_resource` when you're done accessing the file.
|
|
pub fn open<P: Into<FilePath>>(
|
|
&self,
|
|
path: P,
|
|
opts: OpenOptions,
|
|
) -> std::io::Result<std::fs::File> {
|
|
let path = path_or_err(path)?;
|
|
std::fs::OpenOptions::from(opts).open(path)
|
|
}
|
|
}
|