39 lines
1.4 KiB
Haskell
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"
|