todo/app/FileActions.hs
2025-05-13 20:21:30 +02:00

39 lines
1.4 KiB
Haskell

{-# 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"