If you’re ever going to be requesting large amounts of data via HTTP, show your users the state of the request by tracking its progress. Http.Progress’ track
function replaces send
from the Http
module, and when you include the resulting Platform.Sub
in your program’s subscriptions
function, you’ll receive updates on the progress.
Main.elm
main =
Navigation.program
UrlChange
{ subscriptions =
(\model ->
case model.currentRequest of
Nothing ->
Sub.none
Just req ->
Http.Progress.track (toString model.currentRequestNumber) FetchedBytesProgress req
)
}
update msg model =
case msg of
FetchedBytesProgress progress ->
case progress of
Http.Progress.None ->
model ! []
Http.Progress.Some { bytes, bytesExpected } ->
let
percent =
100
* (toFloat bytes)
/ (toFloat bytesExpected)
|> toString
|> flip (++) "%"
in
{ model | base64Text = percent } ! []
Http.Progress.Done txt ->
{ model | base64Text = txt } ! []
Http.Progress.Fail error ->
{ model | base64Text = "Error" } ! []