From 448846b834d23df6e7c5dc66c5dd9aa0cb01846d Mon Sep 17 00:00:00 2001 From: mikoto2000 Date: Sat, 24 Aug 2024 01:35:53 +0900 Subject: [PATCH] feat(fs): resolve content URIs on Android (#1658) * Implemented writeTextFile on Android. * Added license headers. * fix fmt checks. * implement more file APIs * change file * cleanup * refactor dialog plugin to leverage new FS APIs * implement metadata functions * fix build * expose FS rust API * resolve resources on android * update pnpm * update docs --------- Co-authored-by: Lucas Nogueira --- .changes/dialog-return-path.md | 7 + .changes/resolve-content-uris.md | 5 + Cargo.lock | 33 +- Cargo.toml | 8 +- examples/api/package.json | 2 +- examples/api/src-tauri/capabilities/base.json | 3 + .../src-tauri/gen/android/.idea/gradle.xml | 1 + examples/api/src/views/Dialog.svelte | 15 +- plugins/deep-link/examples/app/package.json | 2 +- plugins/dialog/Cargo.toml | 4 + .../android/src/main/java/DialogPlugin.kt | 41 +- plugins/dialog/guest-js/index.ts | 17 +- plugins/dialog/ios/Sources/DialogPlugin.swift | 49 +- plugins/dialog/src/commands.rs | 84 +- plugins/dialog/src/desktop.rs | 32 +- plugins/dialog/src/error.rs | 2 + plugins/dialog/src/lib.rs | 292 ++++-- plugins/dialog/src/mobile.rs | 13 +- plugins/fs/android/.gitignore | 2 + plugins/fs/android/build.gradle.kts | 45 + plugins/fs/android/proguard-rules.pro | 21 + plugins/fs/android/settings.gradle | 31 + .../java/ExampleInstrumentedTest.kt | 28 + .../fs/android/src/main/AndroidManifest.xml | 3 + plugins/fs/android/src/main/java/FsPlugin.kt | 93 ++ .../android/src/test/java/ExampleUnitTest.kt | 21 + plugins/fs/build.rs | 1 + plugins/fs/src/commands.rs | 493 ++++++---- plugins/fs/src/desktop.rs | 35 + plugins/fs/src/error.rs | 3 + plugins/fs/src/lib.rs | 384 ++++++++ plugins/fs/src/mobile.rs | 96 ++ plugins/fs/src/models.rs | 18 + plugins/fs/src/watcher.rs | 6 +- .../examples/vanilla/package.json | 2 +- .../examples/AppSettingsManager/package.json | 2 +- .../websocket/examples/tauri-app/package.json | 2 +- pnpm-lock.yaml | 873 +++++++++++------- 38 files changed, 1950 insertions(+), 819 deletions(-) create mode 100644 .changes/dialog-return-path.md create mode 100644 .changes/resolve-content-uris.md create mode 100644 plugins/fs/android/.gitignore create mode 100644 plugins/fs/android/build.gradle.kts create mode 100644 plugins/fs/android/proguard-rules.pro create mode 100644 plugins/fs/android/settings.gradle create mode 100644 plugins/fs/android/src/androidTest/java/ExampleInstrumentedTest.kt create mode 100644 plugins/fs/android/src/main/AndroidManifest.xml create mode 100644 plugins/fs/android/src/main/java/FsPlugin.kt create mode 100644 plugins/fs/android/src/test/java/ExampleUnitTest.kt create mode 100644 plugins/fs/src/desktop.rs create mode 100644 plugins/fs/src/mobile.rs create mode 100644 plugins/fs/src/models.rs diff --git a/.changes/dialog-return-path.md b/.changes/dialog-return-path.md new file mode 100644 index 00000000..2bd7b4db --- /dev/null +++ b/.changes/dialog-return-path.md @@ -0,0 +1,7 @@ +--- +"dialog": patch +"dialog-js": patch +--- + +The `open` function now returns a string representing either the file path or URI instead of an object. +To read the file data, use the `fs` APIs. diff --git a/.changes/resolve-content-uris.md b/.changes/resolve-content-uris.md new file mode 100644 index 00000000..781eff70 --- /dev/null +++ b/.changes/resolve-content-uris.md @@ -0,0 +1,5 @@ +--- +"fs": patch:feat +--- + +Resolve `content://` path URIs on Android. diff --git a/Cargo.lock b/Cargo.lock index 302518d1..c685b090 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -6359,9 +6359,9 @@ checksum = "61c41af27dd6d1e27b1b16b489db798443478cef1f06a660c96db617ba5de3b1" [[package]] name = "tauri" -version = "2.0.0-rc.3" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "79776954e2cd6b6c3b56e2cd99905a3a166017495a39ac8eb4c85dd8ea8704b4" +checksum = "7d386b956b09cf88301912453829269f3914b3c813020d429ed8110c75e9dded" dependencies = [ "anyhow", "bytes", @@ -6412,9 +6412,9 @@ dependencies = [ [[package]] name = "tauri-build" -version = "2.0.0-rc.3" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "1fc103bde77870e08d5fc8765615b9615997827550b626fbc4ebbd7a1fbfe2a2" +checksum = "1e79aafbbfc8262d7937675cb44c397e975ab8e0cd722db1c37de694fd443570" dependencies = [ "anyhow", "cargo_toml", @@ -6436,9 +6436,9 @@ dependencies = [ [[package]] name = "tauri-codegen" -version = "2.0.0-rc.3" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ea061e6be9b37ab455eadc189f45617deafc85c94f78f9cd584862a6deaa83d1" +checksum = "5ce4e521130c5d7b377ddfdc43310ece626b67ec07ae74174407ad7e6cd17d20" dependencies = [ "base64 0.22.1", "brotli", @@ -6463,9 +6463,9 @@ dependencies = [ [[package]] name = "tauri-macros" -version = "2.0.0-rc.3" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9e20d6f6f96f55a43339c465b3c8205d71940372d54d7c665c5329e8e4ba35d0" +checksum = "a5995206394cd30411fc5c8ae195e498357f63e11ed960ea32b53512dcb2a5a5" dependencies = [ "heck 0.5.0", "proc-macro2", @@ -6477,9 +6477,9 @@ dependencies = [ [[package]] name = "tauri-plugin" -version = "2.0.0-rc.3" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "ec01af01098a286d3e430c1fa947bfd77bc8011ecb209438af4444b02d82b29e" +checksum = "0ebbdbf4e6d7328e0c0f2427b4f56d792ee1ae84ab4fb0286b81a2e408836046" dependencies = [ "anyhow", "glob", @@ -6612,6 +6612,7 @@ dependencies = [ "tauri-plugin", "tauri-plugin-fs", "thiserror", + "url", ] [[package]] @@ -6971,9 +6972,9 @@ dependencies = [ [[package]] name = "tauri-runtime" -version = "2.0.0-rc.3" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "f4e736d3293f8347e5d2c5b250fe0e5b873499f5483578b139445dbbf802e2e5" +checksum = "6e49398fb1d7736e41099aa7efaf45d599e480a36b3e7f88977b547b662d7253" dependencies = [ "dpi", "gtk", @@ -6990,9 +6991,9 @@ dependencies = [ [[package]] name = "tauri-runtime-wry" -version = "2.0.0-rc.3" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "9fead81c1bd0205d5f02580e64f522704618274e784c2d1c127e4ba19acd0b79" +checksum = "8b2ce1dca90243bd4a77a1020847688590e1ded2f6d190d5a96877b0039f0500" dependencies = [ "cocoa 0.26.0", "gtk", @@ -7014,9 +7015,9 @@ dependencies = [ [[package]] name = "tauri-utils" -version = "2.0.0-rc.3" +version = "2.0.0-rc.5" source = "registry+https://github.com/rust-lang/crates.io-index" -checksum = "285af18e09665ea15fdda04cb28fb579a4d71b4e1640628489fecca98838ca9a" +checksum = "2d702b62eed4cf89034926cb1834e2d13a7d745ea08a457fd336f94cde48f2fb" dependencies = [ "aes-gcm", "brotli", diff --git a/Cargo.toml b/Cargo.toml index e24823f7..5ba3f825 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -11,10 +11,10 @@ resolver = "2" [workspace.dependencies] serde = { version = "1", features = ["derive"] } log = "0.4" -tauri = { version = "2.0.0-rc.3", default-features = false } -tauri-build = "2.0.0-rc.3" -tauri-plugin = "2.0.0-rc.3" -tauri-utils = "2.0.0-rc.3" +tauri = { version = "2.0.0-rc.5", default-features = false } +tauri-build = "2.0.0-rc.5" +tauri-plugin = "2.0.0-rc.5" +tauri-utils = "2.0.0-rc.5" serde_json = "1" thiserror = "1" url = "2" diff --git a/examples/api/package.json b/examples/api/package.json index 6c4d1d4a..8d28c501 100644 --- a/examples/api/package.json +++ b/examples/api/package.json @@ -30,7 +30,7 @@ "@iconify-json/codicon": "^1.1.37", "@iconify-json/ph": "^1.1.8", "@sveltejs/vite-plugin-svelte": "^3.0.1", - "@tauri-apps/cli": "2.0.0-rc.4", + "@tauri-apps/cli": "2.0.0-rc.6", "@unocss/extractor-svelte": "^0.62.0", "svelte": "^4.2.8", "unocss": "^0.62.0", diff --git a/examples/api/src-tauri/capabilities/base.json b/examples/api/src-tauri/capabilities/base.json index da21da28..1a030079 100644 --- a/examples/api/src-tauri/capabilities/base.json +++ b/examples/api/src-tauri/capabilities/base.json @@ -61,6 +61,9 @@ "clipboard-manager:allow-write-text", "clipboard-manager:allow-read-image", "clipboard-manager:allow-write-image", + "fs:allow-open", + "fs:allow-write", + "fs:allow-read", "fs:allow-rename", "fs:allow-mkdir", "fs:allow-remove", diff --git a/examples/api/src-tauri/gen/android/.idea/gradle.xml b/examples/api/src-tauri/gen/android/.idea/gradle.xml index 83b872db..120d2e91 100644 --- a/examples/api/src-tauri/gen/android/.idea/gradle.xml +++ b/examples/api/src-tauri/gen/android/.idea/gradle.xml @@ -27,6 +27,7 @@