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
 |