Eliminate unused code
							parent
							
								
									92e9527854
								
							
						
					
					
						commit
						27b3fc562e
					
				| 
						 | 
				
			
			@ -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)
 | 
			
		||||
        |> Helpers.retryTask (n - 1)
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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.
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -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)
 | 
			
		||||
		Loading…
	
		Reference in New Issue