diff --git a/.scripts/init_env.bat b/.scripts/init_env.bat index 24f49df63..b7e4ef692 100644 --- a/.scripts/init_env.bat +++ b/.scripts/init_env.bat @@ -8,8 +8,8 @@ IF "%cd%\"=="%~dp0" ( ) rem setup relative paths from root folder -set "TAURI_DIST_DIR=%~1tauri\test\fixture\dist" -set "TAURI_DIR=%~1tauri\test\fixture\src-tauri" +set "TAURI_DIST_DIR=%~1tauri\examples\communication\dist" +set "TAURI_DIR=%~1tauri\examples\communication\src-tauri" rem convert relative path to absolute path and re-set it into the enviroment var for /F "delims=" %%F IN ("%TAURI_DIST_DIR%") DO SET "TAURI_DIST_DIR=%%~fF" for /F "delims=" %%F IN ("%TAURI_DIR%") DO SET "TAURI_DIR=%%~fF" diff --git a/.scripts/init_env.ps1 b/.scripts/init_env.ps1 index 52a3a0d14..00e71d083 100644 --- a/.scripts/init_env.ps1 +++ b/.scripts/init_env.ps1 @@ -1,7 +1,7 @@ Write-Output "Setting up enviromental Variables" # setup relative paths -$dist_path = "tauri\test\fixture\dist" -$src_path = "tauri\test\fixture\src-tauri" +$dist_path = "tauri\examples\communication\dist" +$src_path = "tauri\examples\communication\src-tauri" # check to see if path variables are directories if ((Test-Path $dist_path -PathType Any) -Or (Test-Path $src_path -PathType Any)) { diff --git a/.scripts/init_env.sh b/.scripts/init_env.sh index 0875838c9..9afdd3f6c 100644 --- a/.scripts/init_env.sh +++ b/.scripts/init_env.sh @@ -2,8 +2,8 @@ # Note: Script must be run like this `. .init_env.sh` to setup variables for your current shell # define relative paths -DistPath='tauri/test/fixture/dist' -SrcPath='tauri/test/fixture/src-tauri' +DistPath='tauri/examples/communication/dist' +SrcPath='tauri/examples/communication/src-tauri' echo "Setting up enviroment Variables" diff --git a/tauri/Cargo.toml b/tauri/Cargo.toml index 7c54ae1d8..09d97525c 100644 --- a/tauri/Cargo.toml +++ b/tauri/Cargo.toml @@ -31,6 +31,9 @@ tauri_includedir_codegen = "0.5.2" [dev-dependencies] proptest = "0.9.5" +serde_json = "1.0" +tauri = {path = ".", features = [ "all-api", "edge" ]} +serde = { version = "1.0", features = [ "derive" ] } [features] edge = ["web-view/edge"] @@ -50,5 +53,9 @@ event = [] updater = [] [package.metadata.docs.rs] +features = ["dev-server", "all-api"] + +[[example]] +name = "communication" +path = "examples/communication/src-tauri/src/main.rs" -features = ["dev-server", "all-api"] \ No newline at end of file diff --git a/tauri/examples/communication/dist/index.html b/tauri/examples/communication/dist/index.html new file mode 100644 index 000000000..420b140cb --- /dev/null +++ b/tauri/examples/communication/dist/index.html @@ -0,0 +1,43 @@ + + + +
+ + + +
+
+ + + \ No newline at end of file diff --git a/tauri/examples/communication/dist/index.tauri.html b/tauri/examples/communication/dist/index.tauri.html new file mode 100644 index 000000000..d614632d8 --- /dev/null +++ b/tauri/examples/communication/dist/index.tauri.html @@ -0,0 +1,347 @@ + +
+ + + +
+
+ + + \ No newline at end of file diff --git a/tauri/examples/communication/package.json b/tauri/examples/communication/package.json new file mode 100644 index 000000000..d95b49f21 --- /dev/null +++ b/tauri/examples/communication/package.json @@ -0,0 +1,10 @@ +{ + "name": "communication-example", + "version": "1.0.0", + "description": "A Tauri example showcasing the JS-Rust communication", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "private": true +} diff --git a/tauri/examples/communication/src-tauri/.gitignore b/tauri/examples/communication/src-tauri/.gitignore new file mode 100644 index 000000000..5dae1ee09 --- /dev/null +++ b/tauri/examples/communication/src-tauri/.gitignore @@ -0,0 +1,11 @@ +# Generated by Cargo +# will have compiled files and executables +/target/ +WixTools + +# These are backup files generated by rustfmt +**/*.rs.bk + +tauri.js +config.json +bundle.json diff --git a/tauri/examples/communication/src-tauri/Cargo.toml b/tauri/examples/communication/src-tauri/Cargo.toml new file mode 100644 index 000000000..d54137849 --- /dev/null +++ b/tauri/examples/communication/src-tauri/Cargo.toml @@ -0,0 +1,39 @@ +workspace = { } + +[package] +name = "app" +version = "0.1.0" +description = "A Tauri App" +authors = [ "you" ] +license = "" +repository = "" +default-run = "app" +edition = "2018" +build = "src/build.rs" + +[package.metadata.bundle] +identifier = "com.tauri.dev" +icon = [ + "icons/32x32.png", + "icons/128x128.png", + "icons/128x128@2x.png", + "icons/icon.icns", + "icons/icon.ico" +] + +[dependencies] +serde_json = "1.0" +serde = { version = "1.0", features = [ "derive" ] } +tauri = { version = "0.4", features = [ "all-api", "edge" ] } + +[target."cfg(windows)".build-dependencies] +winres = "0.1" + +[features] +dev-server = [ "tauri/dev-server" ] +embedded-server = [ "tauri/embedded-server" ] +no-server = [ "tauri/no-server" ] + +[[bin]] +name = "app" +path = "src/main.rs" diff --git a/tauri/examples/communication/src-tauri/icons/128x128.png b/tauri/examples/communication/src-tauri/icons/128x128.png new file mode 100644 index 000000000..f8d9962cc Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/128x128.png differ diff --git a/tauri/examples/communication/src-tauri/icons/128x128@2x.png b/tauri/examples/communication/src-tauri/icons/128x128@2x.png new file mode 100644 index 000000000..44d26d04b Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/128x128@2x.png differ diff --git a/tauri/examples/communication/src-tauri/icons/32x32.png b/tauri/examples/communication/src-tauri/icons/32x32.png new file mode 100644 index 000000000..b6bf7d610 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/32x32.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square107x107Logo.png b/tauri/examples/communication/src-tauri/icons/Square107x107Logo.png new file mode 100644 index 000000000..6146c3354 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square107x107Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square142x142Logo.png b/tauri/examples/communication/src-tauri/icons/Square142x142Logo.png new file mode 100644 index 000000000..e24cb2a75 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square142x142Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square150x150Logo.png b/tauri/examples/communication/src-tauri/icons/Square150x150Logo.png new file mode 100644 index 000000000..a389fb4a6 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square150x150Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square284x284Logo.png b/tauri/examples/communication/src-tauri/icons/Square284x284Logo.png new file mode 100644 index 000000000..c43c42ffd Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square284x284Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square30x30Logo.png b/tauri/examples/communication/src-tauri/icons/Square30x30Logo.png new file mode 100644 index 000000000..493f155ac Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square30x30Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square310x310Logo.png b/tauri/examples/communication/src-tauri/icons/Square310x310Logo.png new file mode 100644 index 000000000..6380a98dd Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square310x310Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square44x44Logo.png b/tauri/examples/communication/src-tauri/icons/Square44x44Logo.png new file mode 100644 index 000000000..61e4eff35 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square44x44Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square71x71Logo.png b/tauri/examples/communication/src-tauri/icons/Square71x71Logo.png new file mode 100644 index 000000000..668945bab Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square71x71Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/Square89x89Logo.png b/tauri/examples/communication/src-tauri/icons/Square89x89Logo.png new file mode 100644 index 000000000..1e14926fd Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/Square89x89Logo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/StoreLogo.png b/tauri/examples/communication/src-tauri/icons/StoreLogo.png new file mode 100644 index 000000000..1f20ed7b0 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/StoreLogo.png differ diff --git a/tauri/examples/communication/src-tauri/icons/icon.icns b/tauri/examples/communication/src-tauri/icons/icon.icns new file mode 100644 index 000000000..43c73bda9 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/icon.icns differ diff --git a/tauri/examples/communication/src-tauri/icons/icon.ico b/tauri/examples/communication/src-tauri/icons/icon.ico new file mode 100644 index 000000000..db7fd9820 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/icon.ico differ diff --git a/tauri/examples/communication/src-tauri/icons/icon.png b/tauri/examples/communication/src-tauri/icons/icon.png new file mode 100644 index 000000000..e65ea7e86 Binary files /dev/null and b/tauri/examples/communication/src-tauri/icons/icon.png differ diff --git a/tauri/examples/communication/src-tauri/rustfmt.toml b/tauri/examples/communication/src-tauri/rustfmt.toml new file mode 100644 index 000000000..45642c190 --- /dev/null +++ b/tauri/examples/communication/src-tauri/rustfmt.toml @@ -0,0 +1,13 @@ +max_width = 100 +hard_tabs = false +tab_spaces = 2 +newline_style = "Auto" +use_small_heuristics = "Default" +reorder_imports = true +reorder_modules = true +remove_nested_parens = true +edition = "2018" +merge_derives = true +use_try_shorthand = false +use_field_init_shorthand = false +force_explicit_abi = true diff --git a/tauri/examples/communication/src-tauri/src/build.rs b/tauri/examples/communication/src-tauri/src/build.rs new file mode 100644 index 000000000..34fe92b12 --- /dev/null +++ b/tauri/examples/communication/src-tauri/src/build.rs @@ -0,0 +1,16 @@ +#[cfg(windows)] +extern crate winres; + +#[cfg(windows)] +fn main() { + if std::path::Path::new("icons/icon.ico").exists() { + let mut res = winres::WindowsResource::new(); + res.set_icon("icons/icon.ico"); + res.compile().expect("Unable to find visual studio tools"); + } else { + panic!("No Icon.ico found. Please add one or check the path"); + } +} + +#[cfg(not(windows))] +fn main() {} diff --git a/tauri/examples/communication/src-tauri/src/cmd.rs b/tauri/examples/communication/src-tauri/src/cmd.rs new file mode 100644 index 000000000..71c08cef3 --- /dev/null +++ b/tauri/examples/communication/src-tauri/src/cmd.rs @@ -0,0 +1,14 @@ +use serde::Deserialize; + +#[derive(Debug, Deserialize)] +pub struct RequestBody { + id: i32, + name: String +} + +#[derive(Deserialize)] +#[serde(tag = "cmd", rename_all = "camelCase")] +pub enum Cmd { + LogOperation { event: String, payload: Option }, + PerformRequest { endpoint: String, body: RequestBody, callback: String, error: String }, +} diff --git a/tauri/examples/communication/src-tauri/src/main.rs b/tauri/examples/communication/src-tauri/src/main.rs new file mode 100644 index 000000000..792670010 --- /dev/null +++ b/tauri/examples/communication/src-tauri/src/main.rs @@ -0,0 +1,64 @@ +#![cfg_attr( + all(not(debug_assertions), target_os = "windows"), + windows_subsystem = "windows" +)] + +mod cmd; + +use serde::Serialize; + +#[derive(Serialize)] +struct Reply { + data: String +} + +fn main() { + tauri::AppBuilder::new() + .setup(|webview, _source| { + let handle = webview.handle(); + tauri::event::listen(String::from("js-event"), move |msg| { + println!("got js-event with message '{}'", msg); + let reply = Reply { + data: "something else".to_string(), + }; + + tauri::event::emit( + &handle, + String::from("rust-event"), + serde_json::to_string(&reply).unwrap(), + ); + }); + }) + .invoke_handler(|_webview, arg| { + use cmd::Cmd::*; + match serde_json::from_str(arg) { + Err(_) => {} + Ok(command) => { + match command { + LogOperation { event, payload } => { + println!("{} {:?}", event, payload); + }, + PerformRequest { endpoint, body, callback, error } => { + // tauri::execute_promise is a helper for APIs that uses the tauri.promisified JS function + // so you can easily communicate between JS and Rust with promises + tauri::execute_promise( + _webview, + move || { + println!("{} {:?}", endpoint, body); + // perform an async operation here + // if the returned value is Ok, the promise will be resolved with its value + // if the returned value is Err, the promise will be rejected with its value + // the value is a string that will be eval'd + Ok("{ key: 'response', value: [{ id: 3 }] }".to_string()) + }, + callback, + error + ) + }, + } + } + } + }) + .build() + .run(); +} diff --git a/tauri/examples/communication/src-tauri/tauri.conf.json b/tauri/examples/communication/src-tauri/tauri.conf.json new file mode 100644 index 000000000..9f6f4aa65 --- /dev/null +++ b/tauri/examples/communication/src-tauri/tauri.conf.json @@ -0,0 +1,33 @@ +{ + "build": { + "distDir": "../dist", + "devPath": "../dist" + }, + "ctx": {}, + "tauri": { + "embeddedServer": { + "active": true + }, + "bundle": { + "active": true, + "icon": [ + "icons/32x32.png", "icons/128x128.png", "icons/128x128@2x.png", "icons/icon.icns", "icons/icon.ico" + ] + }, + "whitelist": { + "all": true + }, + "window": { + "title": "Tauri App" + }, + "security": { + "csp": "default-src blob: data: filesystem: ws: http: https: 'unsafe-eval' 'unsafe-inline'" + }, + "edge": { + "active": true + }, + "inliner": { + "active": true + } + } +} \ No newline at end of file diff --git a/tauri/src/lib.rs b/tauri/src/lib.rs index 18e1d8134..f2497d703 100644 --- a/tauri/src/lib.rs +++ b/tauri/src/lib.rs @@ -18,6 +18,7 @@ mod file_system; mod salt; #[cfg(feature = "embedded-server")] mod tcp; +mod view; use std::process::Stdio; diff --git a/tauri/src/view.rs b/tauri/src/view.rs new file mode 100644 index 000000000..8b1378917 --- /dev/null +++ b/tauri/src/view.rs @@ -0,0 +1 @@ +