1 {-# LANGUAGE OverloadedStrings #-}
    2 module Databrary.Store.Transcoder
    3   ( runTranscoder
    4   , initTranscoder
    5   , transcodeEnabled
    6   ) where
    7 
    8 import Data.Maybe (isJust)
    9 import Data.Version (showVersion)
   10 import System.Process (readProcessWithExitCode)
   11 import System.Exit (ExitCode(..))
   12 
   13 import Paths_databrary (version, getDataFileName)
   14 import qualified Databrary.Store.Config as C
   15 import Databrary.Store.Types
   16 
   17 runTranscoder :: Transcoder -> [String] -> IO (ExitCode, String, String)
   18 runTranscoder (Transcoder cmd arg) args =
   19   readProcessWithExitCode cmd (arg ++ args) ""
   20 
   21 initTranscoder :: C.Config -> IO (Maybe Transcoder)
   22 initTranscoder conf =
   23   case (host, dir) of
   24     (Nothing, Nothing) -> return Nothing
   25     _ -> Just <$> do
   26       cmd <- getDataFileName "transctl.sh"
   27       let t = Transcoder cmd $
   28                 [ "-v", showVersion version ]
   29                 ++ maybe [] (\d -> ["-d", d]) dir
   30                 ++ maybe [] (\h -> ["-h", h]) host
   31                 ++ maybe [] (\m -> ["-m", m]) mount
   32       (r, out, err) <- runTranscoder t ["-t"]
   33       case r of
   34         ExitSuccess -> return t
   35         ExitFailure e -> fail $ "initTranscoder test: " ++ show e ++ "\n" ++ out ++ err
   36   where
   37   host = conf C.! "host"
   38   dir = conf C.! "dir"
   39   mount = conf C.! "mount"
   40 
   41 transcodeEnabled :: Storage -> Bool
   42 transcodeEnabled = isJust . storageTranscoder