{-# LANGUAGE ImportQualifiedPost #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE ScopedTypeVariables #-} module FileActions where import Data.Text qualified as T import Data.Text.IO qualified as TIO import System.Directory import TodoListItem tempFile = "tempFile" -- TODO: add sanitisation using the todo item type ? -- TODO: sometimes the whitespace does not work as expected, find why and solve it add folder file item = do content <- TIO.readFile (folder <> file) let result = content <> item TIO.writeFile (folder <> tempFile) result renameFile (folder <> tempFile) (folder <> file) delete folder file item = do content <- TIO.readFile (folder <> file) let result = T.unlines $ filter (not . item) (T.lines content) TIO.writeFile (folder <> tempFile) result renameFile (folder <> tempFile) (folder <> file) check folder file item = do content <- TIO.readFile (folder <> file) let result = T.unlines $ map (swapIfMatch item) (T.lines content) TIO.writeFile (folder <> tempFile) result renameFile (folder <> tempFile) (folder <> file) swapIfMatch name strEncodedItem = if name == strEncodedItem then swapCheck strEncodedItem else strEncodedItem swapCheck text | T.index text 1 == 'x' = "[ ] " <> T.drop 4 text | T.index text 1 == ' ' = "[x] " <> T.drop 4 text | otherwise = error "incorrectly formated element"