Skip to content

Commit 4a739a1

Browse files
committed
Added progress reporting from Rust
1 parent c687806 commit 4a739a1

4 files changed

Lines changed: 37 additions & 8 deletions

File tree

Cargo.lock

Lines changed: 11 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,4 +8,5 @@ crate-type = ["cdylib", "rlib"]
88

99
[dependencies]
1010
image = "0.25.8"
11+
js-sys = "0.3.78"
1112
wasm-bindgen = "0.2.101"

index.html

Lines changed: 5 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,12 +28,6 @@
2828
align-items: center;
2929
}
3030

31-
.icon-btn {
32-
background-color: var(--main-bg-color);
33-
border: 1px solid var(--main-bg-color);
34-
margin: 1px;
35-
}
36-
3731
#error-message {
3832
background-color: var(--main-error-color);
3933
border: 1px solid var(--main-draw-color);
@@ -94,7 +88,11 @@ <h1>Offline Image Converter</h1>
9488
<li>Everything stays on your device, private and secure</li>
9589
</ul>
9690

97-
<p>TODO create field</p>
91+
<p>Choose file to convert.</p>
92+
93+
<input type="file" id="fileInput" accept="image/*" />
94+
95+
<button id="convertBtn" onclick="convert"></button>
9896

9997
<div id="loader" style="display: none;">
10098
<span class="loader"></span>

src/lib.rs

Lines changed: 20 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,16 +1,20 @@
11
use std::io::Cursor;
22

33
use image::{ImageError, ImageFormat};
4-
use wasm_bindgen::prelude::wasm_bindgen;
4+
use js_sys::Reflect;
5+
use wasm_bindgen::{prelude::wasm_bindgen, JsCast, JsValue};
56

67
fn map_image_err(err: ImageError) -> String {
78
format!("Image processing error: {}", err)
89
}
910

1011
fn convert(image_data: Vec<u8>, output: ImageFormat) -> Result<Vec<u8>, String> {
12+
report_progress("Loading image...");
1113
let img = image::load_from_memory(&image_data).map_err(map_image_err)?;
1214
let mut output_data: Vec<u8> = Vec::new();
15+
report_progress("Converting to new format...");
1316
img.write_to(&mut Cursor::new(&mut output_data), output).map_err(map_image_err)?;
17+
report_progress("Completed conversion.");
1418
Ok(output_data)
1519
}
1620

@@ -27,4 +31,19 @@ pub fn convert_exposed(image_data: Vec<u8>, output: String) -> Result<Vec<u8>, S
2731
_ => return Err("Unsupported output format".to_string()),
2832
} ;
2933
convert(image_data, output)
34+
}
35+
36+
fn report_progress(message: &str) {
37+
let global = js_sys::global();
38+
39+
let func = js_sys::Reflect::get(&global, &JsValue::from_str("postMessage"))
40+
.unwrap()
41+
.dyn_into::<js_sys::Function>()
42+
.unwrap();
43+
44+
let obj = js_sys::Object::new();
45+
Reflect::set(&obj, &JsValue::from_str("type"), &JsValue::from_str("progress")).unwrap();
46+
Reflect::set(&obj, &JsValue::from_str("message"), &JsValue::from_str(message)).unwrap();
47+
48+
func.call1(&global, &obj).unwrap();
3049
}

0 commit comments

Comments
 (0)