tauri_plugin_android_fs/
lib.rs1#![allow(unused_variables)]
4
5mod models;
6mod cmds;
7mod consts;
8
9pub mod api;
10
11pub use models::*;
12pub use consts::*;
13
14pub fn init<R: tauri::Runtime>() -> tauri::plugin::TauriPlugin<R> {
28 tauri::plugin::Builder::new("android-fs")
29 .setup(|app, api| {
30 use tauri::Manager as _;
31
32 #[cfg(target_os = "android")] {
33 let handle = api.register_android_plugin("com.plugin.android_fs", "AndroidFsPlugin")?;
34 let afs_sync = crate::api::api_sync::AndroidFs { handle: handle.clone() };
35 let afs_async = crate::api::api_async::AndroidFs { handle: handle.clone() };
36 app.manage(afs_sync);
37 app.manage(afs_async);
38
39 let app_handle = app.app_handle().clone();
40 std::thread::spawn(move || {
41 let afs = app_handle.android_fs();
42
43 afs.impls().remove_all_temp_files().ok();
45 });
46 }
47 #[cfg(not(target_os = "android"))] {
48 let afs_sync = crate::api::api_sync::AndroidFs::<R> { handle: Default::default() };
49 let afs_async = crate::api::api_async::AndroidFs::<R> { handle: Default::default() };
50 app.manage(afs_sync);
51 app.manage(afs_async);
52 }
53
54 Ok(())
55 })
56 .js_init_script(format!(
57 "window.__TAURI_ANDROID_FS_PLUGIN_INTERNALS__ = {{ isAndroid: {} }};",
58 cfg!(target_os = "android")
59 ))
60 .invoke_handler(tauri::generate_handler![
61 cmds::get_name,
62 cmds::get_byte_length,
63 cmds::get_mime_type,
64 cmds::get_type,
65 cmds::get_metadata,
66 cmds::get_fs_path,
67 cmds::get_thumbnail,
68 cmds::get_thumbnail_base64,
69 cmds::get_thumbnail_data_url,
70 cmds::list_volumes,
71 cmds::create_new_public_file,
72 cmds::create_new_public_image_file,
73 cmds::create_new_public_video_file,
74 cmds::create_new_public_audio_file,
75 cmds::scan_public_file,
76 cmds::request_public_files_permission,
77 cmds::has_public_files_permission,
78 cmds::create_new_file,
79 cmds::create_dir_all,
80 cmds::copy_file,
81 cmds::truncate_file,
82 cmds::read_dir,
83 cmds::rename_file,
84 cmds::rename_dir,
85 cmds::remove_file,
86 cmds::remove_empty_dir,
87 cmds::remove_dir_all,
88 cmds::check_picker_uri_permission,
89 cmds::persist_picker_uri_permission,
90 cmds::check_persisted_picker_uri_permission,
91 cmds::release_persisted_picker_uri_permission,
92 cmds::release_all_persisted_picker_uri_permissions,
93 cmds::show_open_file_picker,
94 cmds::show_open_dir_picker,
95 cmds::show_save_file_picker,
96 cmds::show_share_file_dialog,
97 cmds::show_view_file_dialog,
98 cmds::show_view_dir_dialog,
99
100 cmds::persist_uri_permission,
102 cmds::check_persisted_uri_permission,
103 cmds::release_persisted_uri_permission,
104 cmds::release_all_persisted_uri_permissions,
105 ])
106 .build()
107}
108
109pub trait AndroidFsExt<R: tauri::Runtime> {
110
111 fn android_fs(&self) -> &api::api_sync::AndroidFs<R>;
112
113 fn android_fs_async(&self) -> &api::api_async::AndroidFs<R>;
114}
115
116impl<R: tauri::Runtime, T: tauri::Manager<R>> AndroidFsExt<R> for T {
117
118 fn android_fs(&self) -> &api::api_sync::AndroidFs<R> {
119 self.try_state::<api::api_sync::AndroidFs<R>>()
120 .map(|i| i.inner())
121 .expect("should register this plugin by tauri_plugin_android_fs::init(). see https://crates.io/crates/tauri-plugin-android-fs")
122 }
123
124 fn android_fs_async(&self) -> &api::api_async::AndroidFs<R> {
125 self.try_state::<api::api_async::AndroidFs<R>>()
126 .map(|i| i.inner())
127 .expect("should register this plugin by tauri_plugin_android_fs::init(). see https://crates.io/crates/tauri-plugin-android-fs")
128 }
129}