@@ -2,7 +2,7 @@ use actix_http::Response as HttpResponse;
2
2
use actix_web:: web;
3
3
use evmap:: ReadHandle ;
4
4
5
- use crate :: { get, image_processor, resource_processor, WebDavClient } ;
5
+ use crate :: { get, image_processor, resource_processor, WebDavClient , WebDavResource } ;
6
6
7
7
#[ get( "" ) ]
8
8
pub async fn list_resources ( kv_reader : web:: Data < ReadHandle < String , String > > ) -> HttpResponse {
@@ -29,12 +29,20 @@ pub async fn get_resource(resources_id: web::Path<(String, u32, u32)>, kv_reader
29
29
let display_width = path_params. 1 ;
30
30
let display_height = path_params. 2 ;
31
31
32
- let resource_data = kv_reader. get_one ( resource_id)
32
+ let web_dav_resource = kv_reader. get_one ( resource_id)
33
33
. map ( |value| value. to_string ( ) )
34
- . and_then ( |resource_json_string| serde_json:: from_str ( resource_json_string. as_str ( ) ) . ok ( ) )
34
+ . and_then ( |resource_json_string| serde_json:: from_str ( resource_json_string. as_str ( ) ) . ok ( ) ) ;
35
+ let orientation = web_dav_resource. clone ( ) . and_then ( |web_dav_resource : WebDavResource | web_dav_resource. orientation ) ;
36
+
37
+ let resource_data = web_dav_resource
35
38
. map ( |web_dav_resource| web_dav_client. request_resource_data ( & web_dav_resource) )
36
39
. and_then ( |web_response| web_response. bytes ( ) . ok ( ) )
37
- . map ( |resource_data| image_processor:: scale ( resource_data. to_vec ( ) , display_width, display_height) ) ;
40
+ . map ( |resource_data| image_processor:: optimize_image (
41
+ resource_data. to_vec ( ) ,
42
+ display_width,
43
+ display_height,
44
+ orientation,
45
+ ) ) ;
38
46
39
47
if let Some ( resource_data) = resource_data {
40
48
HttpResponse :: Ok ( )
@@ -47,17 +55,22 @@ pub async fn get_resource(resources_id: web::Path<(String, u32, u32)>, kv_reader
47
55
48
56
#[ get( "{resource_id}/{display_width}/{display_height}/base64" ) ]
49
57
pub async fn get_resource_base64 ( resources_id : web:: Path < ( String , u32 , u32 ) > , kv_reader : web:: Data < ReadHandle < String , String > > , web_dav_client : web:: Data < WebDavClient > ) -> HttpResponse {
58
+ // TODO request caching
59
+
50
60
let path_params = resources_id. 0 ;
51
61
let resource_id = path_params. 0 . as_str ( ) ;
52
62
let display_width = path_params. 1 ;
53
63
let display_height = path_params. 2 ;
54
64
55
- let base64_image = kv_reader. get_one ( resource_id)
65
+ let web_dav_resource = kv_reader. get_one ( resource_id)
56
66
. map ( |value| value. to_string ( ) )
57
- . and_then ( |resource_json_string| serde_json:: from_str ( resource_json_string. as_str ( ) ) . ok ( ) )
67
+ . and_then ( |resource_json_string| serde_json:: from_str ( resource_json_string. as_str ( ) ) . ok ( ) ) ;
68
+ let orientation = web_dav_resource. clone ( ) . and_then ( |web_dav_resource : WebDavResource | web_dav_resource. orientation ) ;
69
+
70
+ let base64_image = web_dav_resource
58
71
. map ( |web_dav_resource| web_dav_client. request_resource_data ( & web_dav_resource) )
59
72
. and_then ( |web_response| web_response. bytes ( ) . ok ( ) )
60
- . map ( |resource_data| image_processor:: scale ( resource_data. to_vec ( ) , display_width, display_height) )
73
+ . map ( |resource_data| image_processor:: optimize_image ( resource_data. to_vec ( ) , display_width, display_height, orientation ) )
61
74
. map ( |scaled_image| base64:: encode ( & scaled_image) )
62
75
. map ( |base64_string| format ! ( "data:image/png;base64,{}" , base64_string) ) ;
63
76
0 commit comments