aboutsummaryrefslogtreecommitdiff
path: root/lib/elements/transfert.ml
diff options
context:
space:
mode:
Diffstat (limited to 'lib/elements/transfert.ml')
-rwxr-xr-xlib/elements/transfert.ml73
1 files changed, 48 insertions, 25 deletions
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