]> git.netwichtig.de Git - user/henk/code/haskell/diddohs.git/blobdiff - diddohs.hs
On branch master
[user/henk/code/haskell/diddohs.git] / diddohs.hs
index 7ee35cd3dad1b4bb50236cdd69cb778f08cd6ca8..c9ec4059c161c3178f0bcd6e8f1e25e0d7973780 100644 (file)
@@ -3,38 +3,34 @@ import Data.DateTime( parseDateTime, startOfTime, diffSeconds, formatDateTime )
 import Data.List( zip4, zipWith4, transpose )
 import Data.List.Split( splitOn )
 import Data.Maybe( fromJust, fromMaybe )
+import Data.Monoid( mempty )
 import Data.Time.Clock( secondsToDiffTime )
+import Options.Applicative( execParser, info, strOption, long )
 import System.Environment( getArgs )
-import Text.Printf( printf )
+import HMSTime( HMSTime(..), secondsToHMS )
+import Diddo.Entry( DiddoEntry(..) )
 
-data HMSTime = HMSTime { hours :: Integer, minutes :: Integer, seconds :: Integer }
-instance Show HMSTime where
-  show (HMSTime h m s) = printf "%d:%02d:%02d" h m s
+data DiddoOpts = DiddoOpts
+  { inDateFmt :: String
+  , inFile :: String
+  }
 
-secondsToHMS :: Integer -> HMSTime
-secondsToHMS seconds =  HMSTime h m s where
-                          (mLeft, s) = seconds `divMod` 60
-                          (h, m)     = mLeft `divMod` 60
-
-data DiddoEntry = DiddoEntry {  start :: String
-                                , finish :: String
-                                , delta :: HMSTime
-                                , entry :: String
-                             }
-instance Show DiddoEntry where
-  show (DiddoEntry start finish delta entry) = printf "%s;%s;%s;%s" start finish (show delta) entry
-
-main :: IO ()
-main = do
-  logfile_name : timestring_format : _ <- getArgs
-  logfile_lines_split <- map (splitOn ";") . lines <$> readFile logfile_name
-
-  let [timestrings_finish
+mainWithOpts :: DiddoOpts -> IO ()
+mainWithOpts opts = do
+  [timestrings_finish
         , entries
-        ]                  = transpose logfile_lines_split
-      utcTimes_finish      = map (fromMaybe (error "Input data broken.") . parseDateTime timestring_format) timestrings_finish
+        ]                  <- transpose . map (splitOn ";") . lines <$> readFile (inFile opts)
+  let utcTimes_finish      = map (fromMaybe (error "Input data broken.") . parseDateTime (inDateFmt opts)) timestrings_finish
       entry_deltas_HMMSS   = zipWith (\x y -> secondsToHMS $ diffSeconds x y) utcTimes_finish (startOfTime : init utcTimes_finish)
       diddos_summarized    = zipWith4 DiddoEntry ("" : init timestrings_finish) timestrings_finish entry_deltas_HMMSS entries
 
   mapM_ print diddos_summarized
 
+main :: IO ()
+main = execParser opts >>= mainWithOpts
+  where
+    opts = info parser mempty
+    parser = DiddoOpts
+      <$> strOption ( long "indateform" )
+      <*> strOption ( long "infile" )
+