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 Hledger.Web.EmbeddedFiles
 | |
|     (
 | |
|      files
 | |
|     ,createFilesIfMissing
 | |
|     )
 | |
| where
 | |
| import Control.Monad
 | |
| import qualified Data.ByteString as B
 | |
| import Data.FileEmbed (embedDir)
 | |
| import System.Directory
 | |
| import System.FilePath
 | |
| 
 | |
| import Hledger.Web.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
 |