]> 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 fdc1d0d73bd0244fb1e70c9b78ff885bb7d138bb..7ee35cd3dad1b4bb50236cdd69cb778f08cd6ca8 100644 (file)
@@ -1,36 +1,40 @@
-import System.Environment
-import System.IO
-import Options.Applicative
-import Data.Time
+import Control.Applicative( (<$>), (<*>), liftA, liftA2 )
+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.Time.Clock( secondsToDiffTime )
+import System.Environment( getArgs )
+import Text.Printf( printf )
 
-data Args = Args
-  { entry :: String
---  , time :: Time
---  , verbose :: Bool
---  , file :: String
-}
+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
 
-runWithOptions :: Args -> IO ()
-runWithOptions opts =
-  putStrLn ( entry opts ++ " saved." )
+secondsToHMS :: Integer -> HMSTime
+secondsToHMS seconds =  HMSTime h m s where
+                          (mLeft, s) = seconds `divMod` 60
+                          (h, m)     = mLeft `divMod` 60
 
-main :: IO ()
-main = execParser opts >>= runWithOptions
-  where
-    parser = Args <$> argument str (metavar "ENTRY")
-    opts = info parser mempty
+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 = getArgs >>= parse
+main :: IO ()
+main = do
+  logfile_name : timestring_format : _ <- getArgs
+  logfile_lines_split <- map (splitOn ";") . lines <$> readFile logfile_name
 
--- parse [] = getLine >>= saveActivity "actlog.txt"
--- parse ["add"] = getLine >>= saveActivity "actlog.txt"
--- parse ["new"] = getLine >>= saveActivity "actlog.txt"
--- parse ("add":entry) = saveActivity "actlog.txt" $ unwords entry
--- parse ("new":entry) = saveActivity "actlog.txt" $ unwords entry
--- parse ("-f":
+  let [timestrings_finish
+        , entries
+        ]                  = transpose logfile_lines_split
+      utcTimes_finish      = map (fromMaybe (error "Input data broken.") . parseDateTime timestring_format) 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
 
--- saveActivity file act = do
---   zoneTime <- fmap show Data.Time.getZonedTime
---   appendFile "actlog.txt" (zoneTime ++ "\t" ++ act ++ "\n")
---   hPutStrLn stderr ("\"" ++ zoneTime ++ "\t" ++ act ++ "\"" ++ " saved.")
+  mapM_ print diddos_summarized