11use std:: io:: Cursor ;
22
33use 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
67fn map_image_err ( err : ImageError ) -> String {
78 format ! ( "Image processing error: {}" , err)
89}
910
1011fn 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