Add send message event as Task
parent
4f08dd1176
commit
7a75bffbfb
|
@ -1,7 +1,7 @@
|
||||||
module Internal.Api.Chain exposing
|
module Internal.Api.Chain exposing
|
||||||
( TaskChain, CompleteChain
|
( TaskChain, CompleteChain
|
||||||
, IdemChain, toTask
|
, IdemChain, toTask
|
||||||
, fail, succeed, andThen
|
, fail, succeed, andThen, catchWith
|
||||||
)
|
)
|
||||||
|
|
||||||
{-|
|
{-|
|
||||||
|
@ -27,7 +27,7 @@ avoid leaking values passing through the API in unexpected ways.
|
||||||
|
|
||||||
## Operations
|
## Operations
|
||||||
|
|
||||||
@docs fail, succeed, andThen
|
@docs fail, succeed, andThen, catchWith
|
||||||
|
|
||||||
-}
|
-}
|
||||||
|
|
||||||
|
@ -127,7 +127,7 @@ andThen f2 f1 =
|
||||||
|
|
||||||
{-| When an error has occurred, "fix" it with an artificial task chain result.
|
{-| When an error has occurred, "fix" it with an artificial task chain result.
|
||||||
-}
|
-}
|
||||||
catchWith : (err -> TaskChainPiece u a b) -> TaskChain err u a b -> TaskChain err u a b
|
catchWith : (err -> TaskChainPiece u a b) -> TaskChain err u a b -> TaskChain err2 u a b
|
||||||
catchWith onErr f =
|
catchWith onErr f =
|
||||||
onError (\e -> succeed <| onErr e) f
|
onError (\e -> succeed <| onErr e) f
|
||||||
|
|
||||||
|
@ -173,7 +173,7 @@ onError onErr f =
|
||||||
|> Task.onError
|
|> Task.onError
|
||||||
(\old ->
|
(\old ->
|
||||||
{ contextChange = identity
|
{ contextChange = identity
|
||||||
, logs = old.logs
|
, logs = old.logs -- TODO: Log caught errors
|
||||||
, messages = old.messages
|
, messages = old.messages
|
||||||
}
|
}
|
||||||
|> succeed
|
|> succeed
|
||||||
|
|
|
@ -1,4 +1,7 @@
|
||||||
module Internal.Api.Task exposing (Task, run)
|
module Internal.Api.Task exposing
|
||||||
|
( Task, run
|
||||||
|
, sendMessageEvent
|
||||||
|
)
|
||||||
|
|
||||||
{-|
|
{-|
|
||||||
|
|
||||||
|
@ -17,6 +20,11 @@ up-to-date.
|
||||||
|
|
||||||
@docs Task, run
|
@docs Task, run
|
||||||
|
|
||||||
|
|
||||||
|
## Tasks
|
||||||
|
|
||||||
|
@docs sendMessageEvent
|
||||||
|
|
||||||
-}
|
-}
|
||||||
|
|
||||||
import Internal.Api.BaseUrl.Api
|
import Internal.Api.BaseUrl.Api
|
||||||
|
@ -24,8 +32,10 @@ import Internal.Api.Chain as C
|
||||||
import Internal.Api.LoginWithUsernameAndPassword.Api
|
import Internal.Api.LoginWithUsernameAndPassword.Api
|
||||||
import Internal.Api.Now.Api
|
import Internal.Api.Now.Api
|
||||||
import Internal.Api.Request as Request
|
import Internal.Api.Request as Request
|
||||||
|
import Internal.Api.SendMessageEvent.Api
|
||||||
import Internal.Api.Versions.Api
|
import Internal.Api.Versions.Api
|
||||||
import Internal.Config.Log exposing (Log, log)
|
import Internal.Config.Log exposing (Log, log)
|
||||||
|
import Internal.Tools.Json as Json
|
||||||
import Internal.Values.Context as Context exposing (APIContext)
|
import Internal.Values.Context as Context exposing (APIContext)
|
||||||
import Internal.Values.Envelope exposing (EnvelopeUpdate(..))
|
import Internal.Values.Envelope exposing (EnvelopeUpdate(..))
|
||||||
import Internal.Values.Room exposing (RoomUpdate(..))
|
import Internal.Values.Room exposing (RoomUpdate(..))
|
||||||
|
@ -128,6 +138,25 @@ getVersions c =
|
||||||
Internal.Api.Versions.Api.versions c
|
Internal.Api.Versions.Api.versions c
|
||||||
|
|
||||||
|
|
||||||
|
finishTask : UFTask {} b -> Task
|
||||||
|
finishTask uftask =
|
||||||
|
uftask
|
||||||
|
|> C.andThen
|
||||||
|
(C.succeed
|
||||||
|
{ messages = []
|
||||||
|
, logs = []
|
||||||
|
, contextChange = Context.reset
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|> C.catchWith
|
||||||
|
(\_ ->
|
||||||
|
{ messages = [] -- TODO: Maybe categorize errors?
|
||||||
|
, logs = [ log.warn "Encountered unhandled error" ]
|
||||||
|
, contextChange = Context.reset
|
||||||
|
}
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
{-| Establish a Task Chain context where the base URL and supported list of
|
{-| Establish a Task Chain context where the base URL and supported list of
|
||||||
versions are known.
|
versions are known.
|
||||||
-}
|
-}
|
||||||
|
@ -147,6 +176,15 @@ makeVBA =
|
||||||
|> C.andThen getAccessToken
|
|> C.andThen getAccessToken
|
||||||
|
|
||||||
|
|
||||||
|
{-| Send a message event to a room.
|
||||||
|
-}
|
||||||
|
sendMessageEvent : { content : Json.Value, eventType : String, roomId : String, transactionId : String } -> Task
|
||||||
|
sendMessageEvent input =
|
||||||
|
makeVBA
|
||||||
|
|> C.andThen (Internal.Api.SendMessageEvent.Api.sendMessageEvent input)
|
||||||
|
|> finishTask
|
||||||
|
|
||||||
|
|
||||||
{-| Transform a completed task into a Cmd.
|
{-| Transform a completed task into a Cmd.
|
||||||
-}
|
-}
|
||||||
run : (Backpack -> msg) -> Task -> APIContext {} -> Cmd msg
|
run : (Backpack -> msg) -> Task -> APIContext {} -> Cmd msg
|
||||||
|
|
|
@ -6,6 +6,7 @@ module Internal.Values.Context exposing
|
||||||
, setNow, getNow
|
, setNow, getNow
|
||||||
, setTransaction, getTransaction
|
, setTransaction, getTransaction
|
||||||
, Versions, setVersions, getVersions
|
, Versions, setVersions, getVersions
|
||||||
|
, reset
|
||||||
)
|
)
|
||||||
|
|
||||||
{-| The Context is the set of variables that the user (mostly) cannot control.
|
{-| The Context is the set of variables that the user (mostly) cannot control.
|
||||||
|
@ -53,6 +54,11 @@ information that can be inserted.
|
||||||
|
|
||||||
@docs Versions, setVersions, getVersions
|
@docs Versions, setVersions, getVersions
|
||||||
|
|
||||||
|
|
||||||
|
### Reset
|
||||||
|
|
||||||
|
@docs reset
|
||||||
|
|
||||||
-}
|
-}
|
||||||
|
|
||||||
import Internal.Config.Leaks as L
|
import Internal.Config.Leaks as L
|
||||||
|
@ -317,6 +323,13 @@ mostPopularToken c =
|
||||||
|> Maybe.map .value
|
|> Maybe.map .value
|
||||||
|
|
||||||
|
|
||||||
|
{-| Reset the phantom type of the Context, effectively forgetting all values.
|
||||||
|
-}
|
||||||
|
reset : APIContext a -> APIContext {}
|
||||||
|
reset (APIContext c) =
|
||||||
|
APIContext c
|
||||||
|
|
||||||
|
|
||||||
{-| Get an inserted access token.
|
{-| Get an inserted access token.
|
||||||
-}
|
-}
|
||||||
getAccessToken : APIContext { a | accessToken : () } -> String
|
getAccessToken : APIContext { a | accessToken : () } -> String
|
||||||
|
|
Loading…
Reference in New Issue