todo/app/FileActions.hs
2025-05-18 23:14:03 +02:00

40 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
write folder file result
write folder file content = do
TIO.writeFile (folder <> tempFile) content
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)
write folder file result
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"