]> glassweightruler.freedombox.rocks Git - xdg-ninja.git/blob - lib/Output.hs
Fix invalid json format
[xdg-ninja.git] / lib / Output.hs
1 module Output where
2
3 import qualified Data.Text as T
4 import Data.Text.ANSI
5 import Data.UUID
6 import Data.UUID.V4
7 import System.Exit
8 import System.Process
9 import Program
10
11 getFilename :: IO String
12 getFilename = do
13 id <- toString <$> Data.UUID.V4.nextRandom
14 return ("/tmp/xdg-ninja." ++ id ++ ".txt")
15
16 renderMarkdown :: String -> IO String
17 renderMarkdown content = do
18 filenameInput <- getFilename
19 filenameOutput <- getFilename
20 editor <- appendFile (filenameInput) content
21 (_, _, _, p) <- createProcess (shell ("glow -s dark " ++ filenameInput ++ " > " ++ filenameOutput))
22 f <- waitForProcess p
23 case f of
24 ExitSuccess -> readFile filenameOutput
25 ExitFailure a -> return ""
26
27 line :: (T.Text -> T.Text) -> String -> String -> String
28 line color name filename = T.unpack ((T.pack "[") <> bold (color (T.pack name)) <> (T.pack "]: ") <> bold (italic (T.pack filename)))
29
30 data Mode = ERR | WARN | INFO | SUCS | HELP
31
32 log :: Mode -> String -> String -> String -> IO ()
33 log mode name filename help = case mode of
34 ERR -> do
35 putStrLn (line red name filename)
36 Output.log HELP name filename help
37 WARN -> do
38 putStrLn (line yellow name filename)
39 Output.log HELP name filename help
40 INFO -> do
41 putStrLn (line cyan name filename)
42 Output.log HELP name filename help
43 SUCS -> putStrLn (line green name filename)
44 HELP -> do
45 md <- renderMarkdown help
46 putStr md
47
48 logFile :: T.Text -> File -> Bool -> IO ()
49 logFile programName file onFilesystem = case onFilesystem of
50 False -> Output.log SUCS (T.unpack programName) (path file) (help file)
51 True -> case (supportLevel file) of
52 Unsupported -> Output.log WARN (T.unpack programName) (path file) (help file)
53 _ -> Output.log ERR (T.unpack programName) (path file) (help file)