From: Cameron Ball Date: Mon, 24 Jun 2019 08:07:39 +0000 (+0800) Subject: More refactoring X-Git-Url: http://cameron1729.xyz/?p=xyz.git;a=commitdiff_plain;h=5f63db115fc2383383de209505eae6ad87d5a4c7 More refactoring --- diff --git a/app/Main.hs b/app/Main.hs index 4ddb724..07f31d8 100644 --- a/app/Main.hs +++ b/app/Main.hs @@ -3,12 +3,12 @@ module Main where import Data.List (intercalate) import Data.String hiding (unlines) import Data.Text hiding (map, init, length, splitAt) -import Data.Text.IO (putStrLn, putStr) +import Data.Text.IO (putStrLn, putStr, writeFile) import Data.Text.Lazy (toStrict) import Data.Text.Template import Data.Time.Clock.POSIX import Lib -import Prelude hiding (putStrLn, putStr, init, unlines) +import Prelude hiding (putStrLn, putStr, init, unlines, writeFile) import Prompts import System.Directory import System.Directory (doesFileExist) @@ -39,7 +39,7 @@ init = do themes <- allFilesIn $ home ++ "/.xyz/themes" projectSpec <- initPrompt (map pack themes) createDirectory "entries" - writeFile "xyz.json" . encode . toJSObject $ projectSpec + writeFile "xyz.json" . pack . encode . toJSObject $ projectSpec putStrLn "\n\nInitialised empty project" build :: IO () @@ -58,40 +58,28 @@ entry = do homeDir <- getHomeDirectory entrySpec <- entryPrompt entryNum <- fmap (show . (+1) . length) $ allFilesIn "entries" - stamp <- fmap (show . round) getPOSIXTime + stamp <- fmap (pack . show . round) getPOSIXTime videoTemplate <- readFile (homeDir ++ "/.xyz/entry-video.txt") >>= return . template . fromString normalTemplate <- readFile (homeDir ++ "/.xyz/entry.txt") >>= return . template . fromString - --let filename = "entries/" ++ (show entryNum) ++ "-" ++ (unpack . (toLower. replace " " "-") $ pack entryName) ++ ".txt" - case entrySpec of - Just (title, videoSpec) -> do - let filename = "entries/" ++ entryNum ++ "-" ++ (unpack . slugify $ title) ++ ".txt" - case videoSpec of - Just (videoId, videoFilename) -> putStrLn "oh jimmy" - Nothing -> putStrLn "oh bimmy" + let rawEntry = case entrySpec of + Just (title, videoSpec) -> do + let baseContext = [("timestamp", stamp), ("title", title)] + case videoSpec of + Just (videoId, videoFilename) -> (title, toStrict . render videoTemplate $ context $ baseContext ++ [("videoid", videoId), ("videofilename", videoFilename)]) + Nothing -> (title, toStrict . render normalTemplate $ context baseContext) + let fileName = "entries/" ++ entryNum ++ "-" ++ (unpack . slugify $ fst rawEntry) ++ ".txt" + writeFile fileName $ snd rawEntry - putStrLn "lel" - -- case video of - -- Just (videoId, videoFilename) -> do - -- let tmplContext = context $ [("timestamp", fromString . show $ (stamp::Integer)), ("title", pack entryName), ("videofilename", pack $ videoFilename), ("videoid", pack videoId)] - -- let rawEntry = unpack . toStrict $ render videoTemplate tmplContext - -- writeFile filename rawEntry - -- callCommand $ "youtube-dl -f 'webm[height<1080]+bestaudio' \"https://www.youtube.com/watch?v=" ++ videoId ++ "\" -o 'build/videos/" ++ videoFilename ++ "'" - -- Nothing -> do - -- let tmplContext = context $ [("timestamp", fromString . show $ (stamp::Integer)), ("title", pack entryName)] - -- let rawEntry = unpack . toStrict $ render normalTemplate tmplContext - -- writeFile filename rawEntry + callCommand $ "nano " ++ fileName - -- (putStrLn $ ("Created " ++ filename)) >> build + push <- pushPrompt + case push of + True -> do callCommand . unpack $ "git add . && git commit -m \"" +++ (fst rawEntry) +++ "\" && git push" + False -> return () - -- push <- yornPrompt "Do you want to push this entry?" - - -- case push of - -- True -> do callCommand $ "git add . && git commit -m \"" ++ entryName ++ "\" && git push" - -- False -> return () - - -- putStrLn "Thanks for using xyz!" + putStrLn "Thanks for using xyz!" usage :: IO () usage = putStr . ununlines $ [ diff --git a/src/Lib.hs b/src/Lib.hs index b48ddf8..123e315 100644 --- a/src/Lib.hs +++ b/src/Lib.hs @@ -143,8 +143,3 @@ writeOutProject projectConfig files = do mapM_ (createDirectoryIfMissing True . takeDirectory . unpack . fst) $ getEntryPages project mapM_ (\x -> writeFile (unpack $ fst x) (unpack $ snd x)) $ getEntryPages project writeFile "build/index.html" $ unpack $ toStrict $ render (getIndexTemplate project) $ context [("index", entryListToIndex (entries project))] - -context :: [(Text, Text)] -> Context -context assocs x = case lookup x $ assocs of - Nothing -> "lol could not find that " `append` x - Just a -> a diff --git a/src/Prompts.hs b/src/Prompts.hs index 72530d6..aa54876 100644 --- a/src/Prompts.hs +++ b/src/Prompts.hs @@ -1,11 +1,4 @@ -module Prompts ( - textPrompt, - nonEmptyTextPrompt, - yornPrompt, - subPrompt, - entryPrompt, - initPrompt - ) where +module Prompts (entryPrompt, initPrompt, pushPrompt) where import Util import Prelude hiding (getLine, null, putStrLn, putStr, unlines) @@ -50,7 +43,7 @@ yornPrompt xs = do "y" -> Right True "n" -> Right False _ -> Left "Please answer with y or n" - prompt (xs +++ " (y/n):") getOneText v + prompt (xs +++ " (y/n): ") getOneText v listPrompt :: Text -> [Text] -> IO Text listPrompt xs options = do @@ -82,3 +75,5 @@ initPrompt themes = fmap (zip ["projectName", "description", "theme"]) $ sequenc nonEmptyTextPrompt "Enter a short description for your project: ", listPrompt "Which theme would you like to use?" themes ] + +pushPrompt = yornPrompt "Do you want to push this entry?" diff --git a/src/Util.hs b/src/Util.hs index d1c5834..caae57c 100644 --- a/src/Util.hs +++ b/src/Util.hs @@ -2,6 +2,7 @@ module Util where import Data.Text hiding (filter) import System.Directory +import Data.Text.Template ununlines :: [Text] -> Text ununlines = intercalate "\n\n" @@ -12,3 +13,8 @@ urlify = slugify . replace "?" "" allFilesIn dir = filter (/= "..")<$>(filter(/= "."))<$>(getDirectoryContents dir) (+++) = append + +context :: [(Text, Text)] -> Context +context assocs x = case lookup x $ assocs of + Nothing -> "[[" +++ x +++ "]]" + Just a -> a