{-# LANGUAGE NoImplicitPrelude #-} {-# LANGUAGE OverloadedStrings #-} module Cmt ( go ) where import ClassyPrelude import System.Directory (removeFile) import Cmt.IO.Config (load) import Cmt.IO.Git (commit) import Cmt.IO.Input (loop) import Cmt.Output.Format (format) import Cmt.Types.Config (Config, Output) data Next = Previous | Continue [Output] backup :: FilePath backup = ".cmt.bkp" send :: Text -> IO () send txt = do commited <- commit txt case commited of Right msg -> putStrLn msg Left msg -> do writeFile backup (encodeUtf8 txt) putStrLn msg display :: Either Text (Config, [Output]) -> IO () display (Left err) = putStrLn err display (Right (cfg, output)) = do parts <- loop cfg send $ format cfg (output ++ parts) previous :: IO () previous = do txt <- decodeUtf8 <$> readFile backup removeFile backup send txt parseArgs :: [Text] -> Next parseArgs ["--prev"] = Previous parseArgs [] = Continue [] parseArgs [msg] = Continue [("*", msg)] parseArgs parts = Continue [("*", unwords parts)] go :: IO () go = do next <- parseArgs <$> getArgs case next of Continue output -> load output >>= display Previous -> previous