Fix off-by-one-error :-)
[darcs-mirror-arbtt.git] / src / import-main.hs
1 module Main where
2 import System.Directory
3 import System.FilePath
4 import System.Console.GetOpt
5 import System.Environment
6 import System.Exit
7 import System.IO
8 import qualified Data.Map as M
9 import Data.Version (showVersion)
10 import Data.Maybe
11 import Control.Monad
12 import Control.Applicative
13
14 import TimeLog
15 import Data
16 import CommonStartup
17
18 import Paths_arbtt (version)
19
20 data Options = Options
21     { optLogFile :: String
22     }
23
24 defaultOptions dir = Options
25     { optLogFile = dir </> "capture.log"
26     }
27
28 versionStr = "arbtt-import " ++ showVersion version
29 header = "Usage: arbtt-import [OPTIONS...]"
30
31 options :: [OptDescr (Options -> IO Options)]
32 options =
33      [ Option "h?"     ["help"]
34               (NoArg $ \_ -> do
35                     hPutStr stderr (usageInfo header options)
36                     exitSuccess
37               )
38               "show this help"
39      , Option "V"      ["version"]
40               (NoArg $ \_ -> do
41                     hPutStrLn stderr versionStr
42                     exitSuccess
43               )
44               "show the version number"
45      , Option "f"      ["logfile"]
46               (ReqArg (\arg opt -> return opt { optLogFile = arg }) "FILE")
47                "use this file instead of ~/.arbtt/capture.log"
48      ]
49
50 main = do
51   commonStartup
52   args <- getArgs
53   actions <- case getOpt Permute options args of
54           (o,[],[])  -> return o
55           (_,_,errs) -> do
56                 hPutStr stderr (concat errs ++ usageInfo header options)
57                 exitFailure
58
59   dir <- getAppUserDataDirectory "arbtt"
60   flags <- foldl (>>=) (return (defaultOptions dir)) actions
61   
62   ex <- doesFileExist (optLogFile flags)
63   if ex
64     then do
65       putStrLn $ "File at " ++ (optLogFile flags) ++ " does already exist. Please delete this"
66       putStrLn $ "file before running arbtt-import."
67     else do
68       captures <- map read . lines <$> getContents :: IO (TimeLog CaptureData)
69       writeTimeLog (optLogFile flags) captures