Allow for non-string values in responses, and ports.
This commit is contained in:
		
							parent
							
								
									cf2ada4329
								
							
						
					
					
						commit
						6d39279591
					
				
							
								
								
									
										17
									
								
								src/Main.elm
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								src/Main.elm
									
									
									
									
									
								
							| @ -15,6 +15,7 @@ import Url exposing (Url) | ||||
| import Url.Parser exposing (parse) | ||||
| import Url.Builder | ||||
| import Json.Encode | ||||
| import Json.Decode | ||||
| import Html exposing (div, text) | ||||
| import Http | ||||
| import Dict | ||||
| @ -78,15 +79,17 @@ update msg model = case msg of | ||||
|     ReceiveCompletedReadMarker r -> (model, Cmd.none) | ||||
|     ReceiveStoreData d -> updateStoreData model d | ||||
| 
 | ||||
| updateStoreData : Model -> StoreData -> (Model, Cmd Msg) | ||||
| updateStoreData m d = case d.key of | ||||
|     "scylla.loginInfo" -> updateLoginInfo m d.value | ||||
| updateStoreData : Model -> Json.Encode.Value -> (Model, Cmd Msg) | ||||
| updateStoreData m d = case (Json.Decode.decodeValue storeDataDecoder d) of | ||||
|     Ok { key, value } -> case key of | ||||
|         "scylla.loginInfo" -> updateLoginInfo m value | ||||
|         _ -> (m, Cmd.none) | ||||
|     Err _ -> (m, Cmd.none) | ||||
| 
 | ||||
| updateLoginInfo : Model -> String -> (Model, Cmd Msg) | ||||
| updateLoginInfo m s = case decodeLoginInfo s of | ||||
|     Just (t,a,u) -> ({ m | token = Just t, apiUrl = a, loginUsername = u}, firstSync a t) | ||||
|     Nothing -> (m, Nav.pushUrl m.key <| Url.Builder.absolute [ "login" ] []) | ||||
| updateLoginInfo : Model -> Json.Encode.Value -> (Model, Cmd Msg) | ||||
| updateLoginInfo m s = case Json.Decode.decodeValue (Json.Decode.map decodeLoginInfo Json.Decode.string) s of | ||||
|     Ok (Just (t,a,u)) -> ({ m | token = Just t, apiUrl = a, loginUsername = u}, firstSync a t) | ||||
|     _ -> (m, Nav.pushUrl m.key <| Url.Builder.absolute [ "login" ] []) | ||||
| 
 | ||||
| updateChangeRoute : Model -> Route -> (Model, Cmd Msg) | ||||
| updateChangeRoute m r = | ||||
|  | ||||
| @ -46,7 +46,7 @@ type Msg = | ||||
|     | ReceiveLoginResponse ApiUrl (Result Http.Error LoginResponse) -- HTTP, Login has finished | ||||
|     | ReceiveUserData Username (Result Http.Error UserData) | ||||
|     | ReceiveCompletedReadMarker (Result Http.Error ()) | ||||
|     | ReceiveStoreData StoreData | ||||
|     | ReceiveStoreData Json.Decode.Value | ||||
| 
 | ||||
| displayName : Model -> Username -> String | ||||
| displayName m s = Maybe.withDefault (senderName s) <| Maybe.andThen .displayName <| Dict.get s m.userData | ||||
|  | ||||
| @ -1,11 +1,18 @@ | ||||
| port module Scylla.Storage exposing (..) | ||||
| import Json.Encode | ||||
| import Json.Decode as Decode exposing (Decoder, int, string, float, list, value, dict, bool) | ||||
| import Json.Decode.Pipeline exposing (required, optional) | ||||
| 
 | ||||
| type alias StoreData = | ||||
|     { key : String | ||||
|     , value: String | ||||
|     , value: Decode.Value | ||||
|     } | ||||
| 
 | ||||
| storeDataDecoder : Decoder StoreData | ||||
| storeDataDecoder = Decode.succeed StoreData | ||||
|     |> required "key" string | ||||
|     |> required "value" value | ||||
| 
 | ||||
| port setStoreValuePort : (String, Json.Encode.Value) -> Cmd msg | ||||
| port getStoreValuePort : (String) -> Cmd msg | ||||
| port receiveStoreValuePort : (StoreData -> msg) -> Sub msg | ||||
| port receiveStoreValuePort : (Json.Encode.Value -> msg) -> Sub msg | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user