1 {-# LANGUAGE OverloadedStrings #-}
    2 module Databrary.Web.Messages
    3   ( generateMessagesJS
    4   ) where
    5 
    6 import Control.Monad.IO.Class (liftIO)
    7 import qualified Data.Aeson.Encoding as JSON
    8 import qualified Data.ByteString.Builder as BSB
    9 import System.IO (withBinaryFile, IOMode(WriteMode), hPutStr)
   10 
   11 import qualified Databrary.JSON as JSON
   12 import Databrary.Service.Messages
   13 import Databrary.Files
   14 import Databrary.Web
   15 import Databrary.Web.Types
   16 import Databrary.Web.Generate
   17 
   18 generateMessagesJS :: WebGenerator
   19 generateMessagesJS = \fo@(f, _) -> do
   20   mf <- liftIO messagesFile
   21   mfRawFilePath <- liftIO $ rawFilePath mf
   22   fp <- liftIO $ unRawFilePath $ webFileAbs f
   23   webRegenerate (do
   24     msg <- liftIO $ loadMessagesFrom mf
   25     withBinaryFile fp WriteMode $ \h -> do
   26       hPutStr h "app.constant('messageData',"
   27       BSB.hPutBuilder h $ JSON.fromEncoding $ JSON.value $ JSON.toJSON msg
   28       hPutStr h ");")
   29     [mfRawFilePath] [] fo