From 741f88ab405995003eb6e9f301d3b065c1e84a4a Mon Sep 17 00:00:00 2001 From: Sébastien Dailly Date: Fri, 28 Jan 2022 14:44:57 +0100 Subject: Added a motus solver --- lib/elements/transfert.ml | 73 +++++++++++++++++++++++++++++++---------------- 1 file changed, 48 insertions(+), 25 deletions(-) (limited to 'lib/elements/transfert.ml') diff --git a/lib/elements/transfert.ml b/lib/elements/transfert.ml index 3001e32..878af2d 100755 --- a/lib/elements/transfert.ml +++ b/lib/elements/transfert.ml @@ -1,31 +1,54 @@ open Brr -let send_raw - : filename:Jstr.t -> Jstr.t -> unit - = fun ~filename data -> - (* Create the link to download the the element, and simulate a click on it *) - let a = El.a - ~at:At.[ href Jv.Id.(of_jv @@ to_jv data) - ; v (Jstr.v "download") filename ] - [] in - El.click a +let send_raw : filename:Jstr.t -> Jstr.t -> unit = + fun ~filename data -> + (* Create the link to download the the element, and simulate a click on it *) + let a = + El.a + ~at: + At.[ href Jv.Id.(of_jv @@ to_jv data); v (Jstr.v "download") filename ] + [] + in + El.click a + (** Send a file to the user. *) -let send - : mime_type:Jstr.t -> filename:Jstr.t -> Jstr.t -> unit - = fun ~mime_type ~filename content -> - let btoa = Jv.get Jv.global "btoa" in - let base64data = Jv.apply btoa - [| Jv.of_jstr content |] in +let send : mime_type:Jstr.t -> filename:Jstr.t -> Jstr.t -> unit = + fun ~mime_type ~filename content -> + let btoa = Jv.get Jv.global "btoa" in + let base64data = Jv.apply btoa [| Jv.of_jstr content |] in + + let data = + Jv.to_jstr + @@ Jv.call + (Jv.of_string "data:") + "concat" + [| Jv.of_jstr mime_type; Jv.of_jstr (Jstr.v ";base64,"); base64data |] + in + + send_raw ~filename data - let data = Jv.to_jstr @@ Jv.call - (Jv.of_string "data:") - "concat" - [| Jv.of_jstr mime_type - ; Jv.of_jstr (Jstr.v ";base64,") - ; base64data - |] in - send_raw - ~filename - data +(** Load the content at the given URL and return it + The response body is only loaded if the result code is 200 + *) +let get_content_from_url : + string -> (int * Jstr.t, Jv.Error.t) result Note.event = + fun resource -> + Brr_io.Fetch.Request.v (Jstr.v resource) + |> Brr_io.Fetch.request + |> fun f -> + Fut.bind f (fun result -> + match result with + | Error e -> Fut.return (Error e) + | Ok response -> + (* Check the status before loading the response itself *) + ( match Brr_io.Fetch.Response.status response with + | 200 -> + Brr_io.Fetch.Response.as_body response + |> Brr_io.Fetch.Body.text + |> Fut.map + (Result.map (fun v -> + (Brr_io.Fetch.Response.status response, v) ) ) + | other -> Fut.return (Ok (other, Jstr.empty)) ) ) + |> Brr_note.Futr.to_event -- cgit v1.2.3