@@ -26,13 +26,15 @@ import Brig.Types
2626import Brig.User.Auth.Cookie.Limit
2727import Brig.Whitelist (Whitelist (.. ))
2828import qualified Brig.ZAuth as ZAuth
29+ import Control.Applicative
2930import qualified Control.Lens as Lens
30- import Data.Aeson (withText )
31+ import Data.Aeson (defaultOptions , fieldLabelModifier , genericParseJSON , withText )
3132import qualified Data.Aeson as Aeson
3233import Data.Aeson.Types (typeMismatch )
3334import qualified Data.Char as Char
3435import Data.Domain (Domain (.. ))
3536import Data.Id
37+ import Data.LanguageCodes (ISO639_1 (EN ))
3638import Data.Misc (HttpsUrl )
3739import Data.Range
3840import Data.Scientific (toBoundedInteger )
@@ -439,9 +441,12 @@ data Settings = Settings
439441 -- field names and values), should be in sync
440442 -- with Spar
441443 setRichInfoLimit :: ! Int ,
442- -- | Default locale to use
443- -- (e.g. when selecting templates)
444- setDefaultLocale :: ! Locale ,
444+ -- | Default locale to use when selecting templates
445+ -- use `setDefaultTemplateLocale` as the getter function which always provides a default value
446+ setDefaultTemplateLocaleInternal :: ! (Maybe Locale ),
447+ -- | Default locale to use for users
448+ -- use `setDefaultUserLocale` as the getter function which always provides a default value
449+ setDefaultUserLocaleInternal :: ! (Maybe Locale ),
445450 -- | Max. # of members in a team.
446451 -- NOTE: This must be in sync with galley
447452 setMaxTeamSize :: ! Word32 ,
@@ -474,7 +479,7 @@ data Settings = Settings
474479 -- setFederationAllowedDomains:
475480 -- - wire.com
476481 -- - example.com
477- setFederationDomain :: ! ( Domain ) ,
482+ setFederationDomain :: ! Domain ,
478483 -- | The amount of time in milliseconds to wait after reading from an SQS queue
479484 -- returns no message, before asking for messages from SQS again.
480485 -- defaults to 'defSqsThrottleMillis'.
@@ -499,6 +504,18 @@ data Settings = Settings
499504 }
500505 deriving (Show , Generic )
501506
507+ defaultUserLocale :: Locale
508+ defaultUserLocale = Locale (Language EN ) Nothing
509+
510+ defaultTemplateLocale :: Locale
511+ defaultTemplateLocale = defaultUserLocale
512+
513+ setDefaultUserLocale :: Settings -> Locale
514+ setDefaultUserLocale = fromMaybe defaultUserLocale . setDefaultUserLocaleInternal
515+
516+ setDefaultTemplateLocale :: Settings -> Locale
517+ setDefaultTemplateLocale = fromMaybe defaultTemplateLocale . setDefaultTemplateLocaleInternal
518+
502519-- | The analog to `GT.FeatureFlags`. This type tracks only the things that we need to
503520-- express our current cloud business logic.
504521--
@@ -664,7 +681,16 @@ instance FromJSON Timeout where
664681 maybe defaultV fromIntegral bounded
665682 parseJSON v = typeMismatch " activationTimeout" v
666683
667- instance FromJSON Settings
684+ instance FromJSON Settings where
685+ parseJSON = genericParseJSON customOptions
686+ where
687+ customOptions =
688+ defaultOptions
689+ { fieldLabelModifier = \ case
690+ " setDefaultUserLocaleInternal" -> " setDefaultUserLocale"
691+ " setDefaultTemplateLocaleInternal" -> " setDefaultTemplateLocale"
692+ other -> other
693+ }
668694
669695instance FromJSON Opts
670696
0 commit comments