Eliminate unused code

pull/1/head
Bram van den Heuvel 2023-03-14 22:31:55 +01:00
parent 92e9527854
commit 27b3fc562e
6 changed files with 41 additions and 285 deletions

View File

@ -30,6 +30,7 @@ type as a message to the Credentials to update certain information.
-}
import Internal.Api.Helpers as Helpers
import Internal.Tools.Context as Context exposing (Context)
import Internal.Tools.Exceptions as X
import Task exposing (Task)
@ -120,10 +121,5 @@ When set to 1 or lower, the task will only try once.
-}
tryNTimes : Int -> TaskChain u a b -> TaskChain u a b
tryNTimes n f context =
if n <= 1 then
f context
else
(\_ -> tryNTimes (n - 1) f context)
|> Task.onError
|> (|>) (f context)
f context
|> Helpers.retryTask (n - 1)

View File

@ -44,10 +44,36 @@ ratelimited task =
This task will only return an error if it went wrong on the n'th attempt.
-}
retryTask : Int -> Task x a -> Task x a
retryTask : Int -> Task X.Error a -> Task X.Error a
retryTask n task =
if n <= 0 then
task
else
Task.onError (\_ -> retryTask (n - 1) task) task
Task.onError
(\err ->
let
retry : Task X.Error a
retry =
retryTask (n - 1) task
in
case err of
X.InternetException (Http.BadUrl _) ->
Task.fail err
X.InternetException _ ->
retry
X.SDKException (X.ServerReturnsBadJSON _) ->
retry
X.SDKException _ ->
Task.fail err
X.ServerException _ ->
Task.fail err
X.UnsupportedSpecVersion ->
Task.fail err
)
task

View File

@ -1,6 +1,7 @@
module Internal.Api.Request exposing (..)
import Http
import Internal.Api.Helpers as Helpers
import Internal.Tools.Context as Context exposing (Context)
import Internal.Tools.Exceptions as X
import Json.Decode as D
@ -111,6 +112,7 @@ toTask decoder (ApiCall data) =
|> List.reverse
|> List.head
}
|> Helpers.ratelimited
getUrl : ApiCall a -> String

View File

@ -208,6 +208,7 @@ redact input =
)
Redact.redact
input
|> Chain.tryNTimes 5
{-| Send a message event to a room.
@ -223,6 +224,7 @@ sendMessageEvent input =
)
SendMessageEvent.sendMessageEvent
input
|> Chain.tryNTimes 5
{-| Send a state key event to a room.
@ -238,6 +240,7 @@ sendStateEvent input =
)
SendStateKey.sendStateKey
input
|> Chain.tryNTimes 5
{-| Sync the latest updates.
@ -259,12 +262,14 @@ sync input =
-}
versions : Maybe V.Versions -> TaskChain VaultUpdate { a | baseUrl : () } (VB a)
versions mVersions =
case mVersions of
(case mVersions of
Just vs ->
withVersions vs
Nothing ->
getVersions
)
|> Chain.tryNTimes 5
{-| Create a task that insert the base URL into the context.

View File

@ -39,7 +39,6 @@ input.
-}
type ClientError
= ServerReturnsBadJSON String
| CouldntGetTimestamp
| NotSupportedYet String
| NoAccessToken
@ -211,9 +210,8 @@ errorToString e =
SDKException (ServerReturnsBadJSON s) ->
ES.serverReturnsBadJSON s
SDKException CouldntGetTimestamp ->
ES.couldNotGetTimestamp
-- SDKException CouldntGetTimestamp ->
-- ES.couldNotGetTimestamp
ServerException (M_FORBIDDEN data) ->
ES.serverSaysForbidden data.error

View File

@ -1,271 +0,0 @@
module Internal.Tools.ValueGetter exposing (..)
{-| This module creates task pipelines that help gather information
in the Matrix API.
For example, it might happen that you need to make multiple API calls:
- Authenticate
- Log in
- Get a list of channels
- Send a message in every room
For each of these API requests, you might need certain information like
which spec version the homeserver supports.
This module takes care of this. That way, functions can be written simply by
saying "I need THESE values" and you will then be able to assign them to each
HTTP call that needs that value.
-}
import Task exposing (Task)
{-| A ValueGetter x type takes care of values that MIGHT be available.
If a value is not available, then the task can be used to get a new value.
-}
type alias ValueGetter x a =
{ value : Maybe a, getValue : Task x a }
{-| Convert a `ValueGetter` type to a task. If a previous value has already been given,
then use that value. Otherwise, use the `getValue` task to get a new value.
-}
toTask : ValueGetter x a -> Task x a
toTask { value, getValue } =
Maybe.map Task.succeed value
|> Maybe.withDefault getValue
withInfo : (a -> Task x result) -> ValueGetter x a -> Task x result
withInfo task info1 =
Task.andThen
(\a ->
task a
)
(toTask info1)
withInfo2 :
(a -> b -> Task x result)
-> ValueGetter x a
-> ValueGetter x b
-> Task x result
withInfo2 task info1 info2 =
Task.andThen
(\a ->
Task.andThen
(\b ->
task a b
)
(toTask info2)
)
(toTask info1)
withInfo3 :
(a -> b -> c -> Task x result)
-> ValueGetter x a
-> ValueGetter x b
-> ValueGetter x c
-> Task x result
withInfo3 task info1 info2 info3 =
Task.andThen
(\a ->
Task.andThen
(\b ->
Task.andThen
(\c ->
task a b c
)
(toTask info3)
)
(toTask info2)
)
(toTask info1)
withInfo4 :
(a -> b -> c -> d -> Task x result)
-> ValueGetter x a
-> ValueGetter x b
-> ValueGetter x c
-> ValueGetter x d
-> Task x result
withInfo4 task info1 info2 info3 info4 =
Task.andThen
(\a ->
Task.andThen
(\b ->
Task.andThen
(\c ->
Task.andThen
(\d ->
task a b c d
)
(toTask info4)
)
(toTask info3)
)
(toTask info2)
)
(toTask info1)
withInfo5 :
(a -> b -> c -> d -> e -> Task x result)
-> ValueGetter x a
-> ValueGetter x b
-> ValueGetter x c
-> ValueGetter x d
-> ValueGetter x e
-> Task x result
withInfo5 task info1 info2 info3 info4 info5 =
Task.andThen
(\a ->
Task.andThen
(\b ->
Task.andThen
(\c ->
Task.andThen
(\d ->
Task.andThen
(\e ->
task a b c d e
)
(toTask info5)
)
(toTask info4)
)
(toTask info3)
)
(toTask info2)
)
(toTask info1)
withInfo6 :
(a -> b -> c -> d -> e -> f -> Task x result)
-> ValueGetter x a
-> ValueGetter x b
-> ValueGetter x c
-> ValueGetter x d
-> ValueGetter x e
-> ValueGetter x f
-> Task x result
withInfo6 task info1 info2 info3 info4 info5 info6 =
Task.andThen
(\a ->
Task.andThen
(\b ->
Task.andThen
(\c ->
Task.andThen
(\d ->
Task.andThen
(\e ->
Task.andThen
(\f ->
task a b c d e f
)
(toTask info6)
)
(toTask info5)
)
(toTask info4)
)
(toTask info3)
)
(toTask info2)
)
(toTask info1)
withInfo7 :
(a -> b -> c -> d -> e -> f -> g -> Task x result)
-> ValueGetter x a
-> ValueGetter x b
-> ValueGetter x c
-> ValueGetter x d
-> ValueGetter x e
-> ValueGetter x f
-> ValueGetter x g
-> Task x result
withInfo7 task info1 info2 info3 info4 info5 info6 info7 =
Task.andThen
(\a ->
Task.andThen
(\b ->
Task.andThen
(\c ->
Task.andThen
(\d ->
Task.andThen
(\e ->
Task.andThen
(\f ->
Task.andThen
(\g ->
task a b c d e f g
)
(toTask info7)
)
(toTask info6)
)
(toTask info5)
)
(toTask info4)
)
(toTask info3)
)
(toTask info2)
)
(toTask info1)
withInfo8 :
(a -> b -> c -> d -> e -> f -> g -> h -> Task x result)
-> ValueGetter x a
-> ValueGetter x b
-> ValueGetter x c
-> ValueGetter x d
-> ValueGetter x e
-> ValueGetter x f
-> ValueGetter x g
-> ValueGetter x h
-> Task x result
withInfo8 task info1 info2 info3 info4 info5 info6 info7 info8 =
Task.andThen
(\a ->
Task.andThen
(\b ->
Task.andThen
(\c ->
Task.andThen
(\d ->
Task.andThen
(\e ->
Task.andThen
(\f ->
Task.andThen
(\g ->
Task.andThen
(\h ->
task a b c d e f g h
)
(toTask info8)
)
(toTask info7)
)
(toTask info6)
)
(toTask info5)
)
(toTask info4)
)
(toTask info3)
)
(toTask info2)
)
(toTask info1)