module Main where
import MPS.Env hiding (log)
import MPS.Extra (now, t2i)
import Prelude ()
import Data.Default
import Text.JSON.Generic
import PracticeRoom.Type
import System.Directory
import Control.Monad hiding (join)
import System.Environment
import Data.Maybe (isJust, isNothing)
import Text.Printf
import qualified Data.ByteString.Lazy.Char8 as B
{-
usage: practice-room start
practice-room stop
practice-room reset
-}
log :: String -> IO ()
log = putStrLn
config_file :: String
config_file = ".practice.json"
write_config :: Practice -> IO ()
write_config x = B.writeFile config_file - B.pack - x.encodeJSON
main :: IO ()
main = do
exist <- doesFileExist config_file
when (not exist) - do
write_config def
saved_config <- B.readFile config_file ^ B.unpack ^ decodeJSON
return (saved_config :: Practice)
args <- getArgs
let
dispatch [] = show_stats
dispatch (x:_)
| x.is "start" = start_practice
| x.is "stop" = stop_practice
| x.is "reset" = reset_practice
| otherwise = show_help
show_stats = do
let total_time = saved_config.intervals.map (\x -> x.end_time + (-x.start_time)).sum
hours = total_time `div` 3600
minites = ( total_time `mod` 3600 ) `div` 60
seconds = total_time `mod` 60
log - printf "Practiced: %d hours, %d minites and %d seconds" hours minites seconds
-- log - printf "Practiced: %d hours and %d minites" hours minites
when ( saved_config.started.isJust ) - do
log "Still practicing..."
start_practice =
if saved_config.started.isJust
then
log "already started"
else do
timestamp <- now ^ t2i
write_config saved_config {started = Just timestamp}
log "started"
stop_practice =
case saved_config.started of
Nothing ->
log "already stopped"
Just saved_start_time -> do
timestamp <- now ^ t2i
let intervals' = saved_config.intervals
new_interval = def { start_time = saved_start_time, end_time = timestamp }
write_config saved_config { started = Nothing, intervals = new_interval : intervals' }
log "stopped"
reset_practice = do
write_config def
log "resetted"
show_help = log help
dispatch args
help :: String
help = unlines -
[ "usage: practice-room start"
, " practice-room stop "
, " practice-room reset"
, " practice-room "
, " "
]