mirror of
https://github.com/simonmichael/hledger.git
synced 2024-11-15 00:27:46 +03:00
47 lines
1.4 KiB
Haskell
47 lines
1.4 KiB
Haskell
{-# LANGUAGE TemplateHaskell #-}
|
|
{-|
|
|
|
|
Support files (static files and templates) used by the web app are
|
|
embedded in this module at compile time. Since hamlet can not easily use
|
|
these directly, we provide a way to write them out to the filesystem at
|
|
startup, when needed. This simplifies installation for end-users, and
|
|
customisation too.
|
|
|
|
-}
|
|
module EmbeddedFiles
|
|
(
|
|
files
|
|
,createFilesIfMissing
|
|
)
|
|
where
|
|
import Control.Monad
|
|
import qualified Data.ByteString as B
|
|
import Data.FileEmbed (embedDir)
|
|
import System.Directory
|
|
import System.FilePath
|
|
|
|
import Settings (datadir)
|
|
|
|
-- | An embedded copy of all files below the the hledger-web data
|
|
-- directory (@.hledger/web/@) at compile time, as (FilePath,ByteString)
|
|
-- pairs.
|
|
files :: [(FilePath, B.ByteString)]
|
|
files = $(embedDir datadir)
|
|
|
|
-- | If the hledger-web data directory (@.hledger/web/@) does not exist in
|
|
-- the current directory, create and fill it with the web app support
|
|
-- files (templates, stylesheets, images etc.) Returns True if the
|
|
-- directory was missing.
|
|
createFilesIfMissing :: IO Bool
|
|
createFilesIfMissing = do
|
|
exists <- doesDirectoryExist datadir
|
|
if exists
|
|
then return False
|
|
else do
|
|
createDirectoryIfMissing True datadir
|
|
setCurrentDirectory datadir
|
|
forM_ files $ \(f,d) -> do
|
|
createDirectoryIfMissing True $ takeDirectory f
|
|
B.writeFile f d
|
|
return True
|