1 {-# LANGUAGE CPP, OverloadedStrings #-}
    2 module Databrary.Web.Service
    3   ( Web
    4   , initWeb
    5   , getWebVersion
    6   ) where
    7 
    8 #ifdef DEVEL
    9 import Control.Concurrent.MVar (newMVar)
   10 #endif
   11 
   12 import qualified Data.ByteString as BS
   13 import qualified Data.Text as T
   14 import qualified Data.Text.IO as TIO
   15 import qualified Data.Text.Encoding as TE
   16 import Databrary.Web.Types
   17 import Databrary.Web.Info
   18 import System.IO (FilePath)
   19 import Paths_databrary (getDataFileName)
   20 
   21 versionFile :: FilePath
   22 versionFile = "jsCssVersion.txt"
   23 
   24 initWeb :: IO Web
   25 initWeb = do
   26   -- TODO: should this IO happen higher in call stack before initWeb?
   27   versionFilePath <- getDataFileName versionFile
   28   version <- (TE.encodeUtf8 . T.strip) <$> TIO.readFile versionFilePath -- strip - manually editing can introduce newline
   29   fmap (\mp -> Web mp version) $
   30 #ifdef DEVEL
   31     newMVar =<<
   32 #endif
   33     loadWebFileMap
   34 
   35 getWebVersion :: Web -> BS.ByteString -- TODO: consistent with service pattern?
   36 getWebVersion web =
   37   webVersion web