packages feed

todos-0.2: todos.hs

{-# LANGUAGE UnicodeSyntax, PatternGuards #-}

import Prelude hiding (putStrLn,readFile,getContents,print)
import IO
import Codec.Binary.UTF8.String
import System (getArgs)
import System.Exit
import System.Cmd (system)

import Control.Monad.Reader
import Data.Maybe
import Data.Tree
import Data.List

import Unicode
import Types
import TodoLoader
import TodoTree
import CommandParser
import Config
import CmdLine
import Dates (getCurrentDateTime)
import Dot

main ∷  IO ()
main = do
  currDate ← getCurrentDateTime 
  config ← readConfig
  args ← getArgs
  let (loptions, files') = parseCmdLine currDate (config ⧺ args)
  files ← glob files'
  case loptions of
    O qflags mflags oflags lflags → 
      do
        let options = O qflags mflags oflags lflags
            q = buildQuery options
        todos ← loadTodo q currDate files
        let todos'  = delTag "-" todos
            queried = transformList q (composeAll currDate) todos'
            format item = item {itemDescr = printfItem (descrFormat q) item}
        case commandToRun q of
          JustShow  → do
               printTodos q (mapT format queried)
               putStrLn ""
          ShowAsDot → 
               putStrLn $ showAsDot (mapT format queried)
          SystemCommand cmd → do
               forT selected (\item → system $ printfItem cmd (format item))
               return ()
            where selected | outOnlyFirst q = [Node (rootLabel $ head queried) []]
                           | otherwise       = queried

    Help → do putStrLn usage
              exitWith ExitSuccess