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