1- port module AppStorage exposing (AppModeType (..) , AppOverrides , Config , GameModeType (..) , MoveablePiece , MoveablePieceType (..) , decodeMoveablePiece , empty , emptyOverrides , encodeMoveablePiece , loadFromStorage , loadOverrides , saveToStorage )
1+ port module AppStorage exposing (AppModeType (..) , AppOverrides , CampaignTrackerUrl (..) , Config , GameModeType (..) , MoveablePiece , MoveablePieceType (..) , decodeMoveablePiece , empty , emptyOverrides , encodeMoveablePiece , loadFromStorage , loadOverrides , saveToStorage )
22
33import BoardOverlay exposing (BoardOverlay )
44import Character exposing (CharacterClass , stringToCharacter )
55import Game exposing (GameState , Piece )
66import GameSync exposing (decodeGameState , decodePiece , encodeGameState , encodeOverlay , encodePiece )
77import Html exposing (s )
8- import Json.Decode as Decode exposing (Decoder , andThen , decodeValue , fail , field , map2 , map4 , map5 , map6 , maybe , string , succeed )
8+ import Json.Decode as Decode exposing (Decoder , andThen , decodeValue , fail , field , map2 , map4 , map5 , map6 , map7 , maybe , string , succeed )
99import Json.Encode as Encode exposing (object , string )
1010import List exposing (filterMap )
1111import SharedSync exposing (decodeBoardOverlay )
@@ -26,6 +26,7 @@ type alias Config =
2626 , roomCode : Maybe String
2727 , showRoomCode : Bool
2828 , boardOnly : Bool
29+ , campaignTracker : Maybe CampaignTrackerUrl
2930 }
3031
3132
@@ -36,9 +37,14 @@ type alias AppOverrides =
3637 , lockScenario : Bool
3738 , lockPlayers : Bool
3839 , lockRoomCode : Bool
40+ , campaignTracker : Maybe CampaignTrackerUrl
3941 }
4042
4143
44+ type CampaignTrackerUrl
45+ = CampaignTrackerUrl String String
46+
47+
4248type GameModeType
4349 = MovePiece
4450 | KillPiece
@@ -70,7 +76,7 @@ type MoveablePieceType
7076
7177emptyConfig : Config
7278emptyConfig =
73- Config Game MovePiece Nothing True False
79+ Config Game MovePiece Nothing True False Nothing
7480
7581
7682empty : ( GameState , Config )
@@ -80,7 +86,7 @@ empty =
8086
8187emptyOverrides : AppOverrides
8288emptyOverrides =
83- AppOverrides Nothing Nothing Nothing False False False
89+ AppOverrides Nothing Nothing Nothing False False False Nothing
8490
8591
8692saveToStorage : GameState -> Config -> Cmd msg
@@ -131,6 +137,14 @@ encodeConfig config =
131137 )
132138 , ( " showRoomCode" , Encode . bool config. showRoomCode )
133139 , ( " boardOnly" , Encode . bool config. boardOnly )
140+ , ( " campaignTracker"
141+ , case config. campaignTracker of
142+ Just t ->
143+ Encode . object ( encodeCampaignTrackerUrl t)
144+
145+ Nothing ->
146+ Encode . null
147+ )
134148 ]
135149
136150
@@ -184,7 +198,7 @@ storedDataDecoder =
184198
185199appOverridesDecoder : Decoder AppOverrides
186200appOverridesDecoder =
187- map6 AppOverrides
201+ map7 AppOverrides
188202 ( field " initScenario" ( maybe Decode . int))
189203 ( field " initPlayers"
190204 ( maybe ( Decode . list Decode . string)
@@ -199,16 +213,18 @@ appOverridesDecoder =
199213 ( field " lockScenario" Decode . bool)
200214 ( field " lockPlayers" Decode . bool)
201215 ( field " lockRoomCode" Decode . bool)
216+ ( field " campaignTracker" ( maybe decodeCampaignTrackerUrl))
202217
203218
204219decodeConfig : Decoder Config
205220decodeConfig =
206- map5 Config
221+ map6 Config
207222 ( field " appMode" ( Decode . string |> Decode . andThen decodeAppMode))
208223 ( field " gameMode" ( Decode . string |> Decode . andThen decodeGameMode))
209224 ( field " roomCode" ( Decode . nullable Decode . string))
210225 ( field " showRoomCode" Decode . bool)
211226 ( maybe ( field " boardOnly" Decode . bool) |> andThen ( \ b -> succeed ( Maybe . withDefault False b)))
227+ ( maybe ( field " campaignTracker" decodeCampaignTrackerUrl))
212228
213229
214230decodeAppMode : String -> Decoder AppModeType
@@ -310,6 +326,16 @@ decodeCoords =
310326 )
311327
312328
329+ decodeCampaignTrackerUrl : Decoder CampaignTrackerUrl
330+ decodeCampaignTrackerUrl =
331+ field " name" Decode . string
332+ |> andThen
333+ ( \ name ->
334+ field " url" Decode . string
335+ |> andThen ( \ url -> Decode . succeed ( CampaignTrackerUrl name url))
336+ )
337+
338+
313339encodeMoveablePiece : MoveablePiece -> Encode .Value
314340encodeMoveablePiece piece =
315341 Encode . object
@@ -378,3 +404,10 @@ encodeCoords ( x, y ) =
378404 [ ( " x" , Encode . int x )
379405 , ( " y" , Encode . int y )
380406 ]
407+
408+
409+ encodeCampaignTrackerUrl : CampaignTrackerUrl -> List ( String , Encode .Value )
410+ encodeCampaignTrackerUrl tracker =
411+ case tracker of
412+ CampaignTrackerUrl name url ->
413+ [ ( " name" , Encode . string name ) , ( " url" , Encode . string url ) ]
0 commit comments