Add global account data functions
parent
3566d3ee7a
commit
41bee45693
|
@ -1,6 +1,6 @@
|
|||
module Internal.Api.Main exposing
|
||||
( Msg
|
||||
, sendMessageEvent, sendStateEvent, setRoomAccountData, sync
|
||||
, sendMessageEvent, sendStateEvent, setAccountData, setRoomAccountData, sync
|
||||
)
|
||||
|
||||
{-|
|
||||
|
@ -18,7 +18,7 @@ This module is used as reference for getting
|
|||
|
||||
## Actions
|
||||
|
||||
@docs sendMessageEvent, sendStateEvent, setRoomAccountData, sync
|
||||
@docs sendMessageEvent, sendStateEvent, setAccountData, setRoomAccountData, sync
|
||||
|
||||
-}
|
||||
|
||||
|
@ -86,6 +86,33 @@ sendStateEvent env data =
|
|||
(Context.apiFormat env.context)
|
||||
|
||||
|
||||
{-| Set global account data.
|
||||
-}
|
||||
setAccountData :
|
||||
E.Envelope a
|
||||
->
|
||||
{ content : Json.Value
|
||||
, eventType : String
|
||||
, toMsg : Msg -> msg
|
||||
}
|
||||
-> Cmd msg
|
||||
setAccountData env data =
|
||||
case env.context.user of
|
||||
Just u ->
|
||||
ITask.run
|
||||
data.toMsg
|
||||
(ITask.setAccountData
|
||||
{ content = data.content
|
||||
, eventType = data.eventType
|
||||
, userId = User.toString u
|
||||
}
|
||||
)
|
||||
(Context.apiFormat env.context)
|
||||
|
||||
Nothing ->
|
||||
Cmd.none
|
||||
|
||||
|
||||
{-| Set the account data for a Matrix room.
|
||||
-}
|
||||
setRoomAccountData :
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
module Internal.Api.SetAccountData.Api exposing (Phantom, setAccountData)
|
||||
|
||||
{-|
|
||||
|
||||
|
||||
# Set Account Data
|
||||
|
||||
This module allows the developer to set global account data.
|
||||
|
||||
@docs Phantom, setAccountData
|
||||
|
||||
-}
|
||||
|
||||
import Internal.Api.Api as A
|
||||
import Internal.Api.Invite.Api exposing (Phantom)
|
||||
import Internal.Api.Request as R
|
||||
import Internal.Config.Log exposing (log)
|
||||
import Internal.Config.Text as Text
|
||||
import Internal.Tools.Json as Json
|
||||
import Internal.Values.Envelope as E
|
||||
import Internal.Values.Room as R
|
||||
import Internal.Values.Vault as V
|
||||
|
||||
|
||||
setAccountData : SetAccountDataInput -> A.TaskChain (Phantom a) (Phantom a)
|
||||
setAccountData =
|
||||
A.startWithVersion "r0.0.0" setAccountDataV1
|
||||
|> A.sameForVersion "r0.0.1"
|
||||
|> A.sameForVersion "r0.1.0"
|
||||
|> A.sameForVersion "r0.2.0"
|
||||
|> A.sameForVersion "r0.3.0"
|
||||
|> A.sameForVersion "r0.4.0"
|
||||
|> A.sameForVersion "r0.5.0"
|
||||
|> A.sameForVersion "r0.6.0"
|
||||
|> A.sameForVersion "r0.6.1"
|
||||
|> A.forVersion "v1.1" setAccountDataV2
|
||||
|> A.sameForVersion "v1.2"
|
||||
|> A.sameForVersion "v1.3"
|
||||
|> A.sameForVersion "v1.4"
|
||||
|> A.sameForVersion "v1.5"
|
||||
|> A.sameForVersion "v1.6"
|
||||
|> A.sameForVersion "v1.7"
|
||||
|> A.sameForVersion "v1.8"
|
||||
|> A.sameForVersion "v1.9"
|
||||
|> A.sameForVersion "v1.10"
|
||||
|> A.sameForVersion "v1.11"
|
||||
|> A.versionChain
|
||||
|
||||
|
||||
{-| Context needed for setting global account data.
|
||||
-}
|
||||
type alias Phantom a =
|
||||
{ a | accessToken : (), baseUrl : (), versions : () }
|
||||
|
||||
|
||||
type alias PhantomV1 a =
|
||||
{ a | accessToken : (), baseUrl : () }
|
||||
|
||||
|
||||
type alias SetAccountDataInput =
|
||||
{ content : Json.Value, eventType : String, userId : String }
|
||||
|
||||
|
||||
type alias SetAccountDataInputV1 a =
|
||||
{ a | content : Json.Value, eventType : String, userId : String }
|
||||
|
||||
|
||||
type alias SetAccountDataOutput =
|
||||
()
|
||||
|
||||
|
||||
setAccountDataV1 : SetAccountDataInputV1 i -> A.TaskChain (PhantomV1 a) (PhantomV1 a)
|
||||
setAccountDataV1 { content, eventType, userId } =
|
||||
A.request
|
||||
{ attributes = [ R.accessToken, R.fullBody content ]
|
||||
, coder = coderV1
|
||||
, contextChange = always identity
|
||||
, method = "PUT"
|
||||
, path = [ "_matrix", "client", "r0", "user", userId, "account_data", eventType ]
|
||||
, toUpdate =
|
||||
\() ->
|
||||
( V.SetAccountData eventType content
|
||||
|> E.ContentUpdate
|
||||
, []
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
setAccountDataV2 : SetAccountDataInputV1 i -> A.TaskChain (PhantomV1 a) (PhantomV1 a)
|
||||
setAccountDataV2 { content, eventType, userId } =
|
||||
A.request
|
||||
{ attributes = [ R.accessToken, R.fullBody content ]
|
||||
, coder = coderV1
|
||||
, contextChange = always identity
|
||||
, method = "PUT"
|
||||
, path = [ "_matrix", "client", "v3", "user", userId, "account_data", eventType ]
|
||||
, toUpdate =
|
||||
\() ->
|
||||
( V.SetAccountData eventType content
|
||||
|> E.ContentUpdate
|
||||
, []
|
||||
)
|
||||
}
|
||||
|
||||
|
||||
coderV1 : Json.Coder SetAccountDataOutput
|
||||
coderV1 =
|
||||
Json.unit
|
|
@ -1,6 +1,6 @@
|
|||
module Internal.Api.Task exposing
|
||||
( Task, run, Backpack
|
||||
, sendMessageEvent, sendStateEvent, setRoomAccountData, sync
|
||||
, sendMessageEvent, sendStateEvent, setAccountData, setRoomAccountData, sync
|
||||
)
|
||||
|
||||
{-|
|
||||
|
@ -23,7 +23,7 @@ up-to-date.
|
|||
|
||||
## Tasks
|
||||
|
||||
@docs sendMessageEvent, sendStateEvent, setRoomAccountData, sync
|
||||
@docs sendMessageEvent, sendStateEvent, setAccountData, setRoomAccountData, sync
|
||||
|
||||
-}
|
||||
|
||||
|
@ -34,6 +34,7 @@ import Internal.Api.Now.Api
|
|||
import Internal.Api.Request as Request
|
||||
import Internal.Api.SendMessageEvent.Api
|
||||
import Internal.Api.SendStateEvent.Api
|
||||
import Internal.Api.SetAccountData.Api
|
||||
import Internal.Api.SetRoomAccountData.Api
|
||||
import Internal.Api.Sync.Api
|
||||
import Internal.Api.Versions.Api
|
||||
|
@ -243,6 +244,15 @@ sendStateEvent input =
|
|||
|> finishTask
|
||||
|
||||
|
||||
{-| Set global account data.
|
||||
-}
|
||||
setAccountData : { content : Json.Value, eventType : String, userId : String } -> Task
|
||||
setAccountData input =
|
||||
makeVBA
|
||||
|> C.andThen (Internal.Api.SetAccountData.Api.setAccountData input)
|
||||
|> finishTask
|
||||
|
||||
|
||||
{-| Set account data for a Matrix room.
|
||||
-}
|
||||
setRoomAccountData : { content : Json.Value, eventType : String, roomId : String, userId : String } -> Task
|
||||
|
|
|
@ -2,6 +2,7 @@ module Matrix exposing
|
|||
( Vault, fromUserId, fromUsername
|
||||
, VaultUpdate, update, sync, logs
|
||||
, rooms, fromRoomId
|
||||
, getAccountData, setAccountData
|
||||
, addAccessToken, sendMessageEvent
|
||||
)
|
||||
|
||||
|
@ -33,6 +34,11 @@ support a monolithic public registry. (:
|
|||
@docs rooms, fromRoomId
|
||||
|
||||
|
||||
## Account data
|
||||
|
||||
@docs getAccountData, setAccountData
|
||||
|
||||
|
||||
## Debugging
|
||||
|
||||
@docs addAccessToken, sendMessageEvent
|
||||
|
@ -80,6 +86,13 @@ fromRoomId roomId (Vault vault) =
|
|||
|> Maybe.map Types.Room
|
||||
|
||||
|
||||
{-| Get global account data.
|
||||
-}
|
||||
getAccountData : String -> Vault -> Maybe E.Value
|
||||
getAccountData key (Vault vault) =
|
||||
Envelope.extract (Internal.getAccountData key) vault
|
||||
|
||||
|
||||
{-| Use a fully-fledged Matrix ID to connect.
|
||||
|
||||
case Matrix.fromUserId "@alice:example.org" of
|
||||
|
@ -199,6 +212,25 @@ sendMessageEvent data =
|
|||
}
|
||||
|
||||
|
||||
{-| Set global account data.
|
||||
-}
|
||||
setAccountData :
|
||||
{ content : E.Value
|
||||
, eventType : String
|
||||
, room : Vault
|
||||
, toMsg : Types.VaultUpdate -> msg
|
||||
}
|
||||
-> Cmd msg
|
||||
setAccountData data =
|
||||
case data.room of
|
||||
Vault vault ->
|
||||
Api.setAccountData vault
|
||||
{ content = data.content
|
||||
, eventType = data.eventType
|
||||
, toMsg = Types.VaultUpdate >> data.toMsg
|
||||
}
|
||||
|
||||
|
||||
{-| Synchronize the Vault with the Matrix API.
|
||||
|
||||
Effectively, this task asks the Matrix API to provide the latest information,
|
||||
|
|
Loading…
Reference in New Issue