Print times in local timezone
authorJoachim Breitner <mail@joachim-breitner.de>
Sun, 29 Dec 2013 15:19:43 +0000 (15:19 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Sun, 29 Dec 2013 15:19:43 +0000 (15:19 +0000)
in human readable dumps (arbtt-stats or arbtt-capture).

doc/arbtt.xml
src/DumpFormat.hs
src/Stats.hs
src/dump-main.hs

index 2f73e96..f27b9b4 100644 (file)
@@ -1180,6 +1180,9 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
       <listitem>
         <para><command>arbtt-recover</command> can handle larger datasets with a reasonable amount of memory.</para>
       </listitem>
+      <listitem>
+        <para>When dumping sampels with <command>arbtt-stats</command> or <command>arbtt-dump</command> (in human-readable mode), times are printed in the local time zone, as suggested by Oren Gampel.</para>
+      </listitem>
     </itemizedlist>
   </sect2>
   
index 0b88e07..f7bc604 100644 (file)
@@ -37,23 +37,25 @@ readDumpFormat arg =
         "json"       -> return DFJSON
         _            -> Nothing
 
-dumpActivity :: TimeLog (CaptureData, ActivityData) -> IO ()
+dumpActivity :: TimeLog (CaptureData, TimeZone, ActivityData) -> IO ()
 dumpActivity = mapM_ go
  where
     go tle = do
-        dumpHeader (tlTime tle) (cLastActivity cd)
+        dumpHeader tz (tlTime tle) (cLastActivity cd)
         mapM_ dumpWindow (cWindows cd)
         dumpTags ad
       where
-        (cd, ad) = tlData tle
+        (cd, tz, ad) = tlData tle
 
 dumpTags :: ActivityData -> IO ()
 dumpTags = mapM_ go
   where go act = printf "    %s\n" (show act)
 
-dumpHeader :: UTCTime -> Integer -> IO ()
-dumpHeader time lastActivity = do
-    printf "%s (%dms inactive):\n" (formatTime defaultTimeLocale "%F %X" time) lastActivity
+dumpHeader :: TimeZone -> UTCTime -> Integer -> IO ()
+dumpHeader tz time lastActivity = do
+    printf "%s (%dms inactive):\n"
+        (formatTime defaultTimeLocale "%F %X" (utcToLocalTime tz time))
+        lastActivity
 
 dumpWindow :: (Bool, Text, Text) -> IO ()
 dumpWindow (active, title, program) = do
@@ -62,14 +64,14 @@ dumpWindow (active, title, program) = do
         (unpack program ++ ":")
         (unpack title)
 
-dumpSamples :: DumpFormat -> TimeLog CaptureData -> IO ()
-dumpSamples DFShow = mapM_ print
+dumpSamples :: TimeZone -> DumpFormat -> TimeLog CaptureData -> IO ()
+dumpSamples DFShow = mapM_ print
 
-dumpSamples DFHuman = mapM_ go
+dumpSamples tz DFHuman = mapM_ go
   where
     go tle = do
-        dumpHeader (tlTime tle) (cLastActivity (tlData tle))
+        dumpHeader tz (tlTime tle) (cLastActivity (tlData tle))
         mapM_ dumpWindow (cWindows (tlData tle))
-dumpSamples DFJSON = enclose . sequence_ . intersperse (putStrLn ",") . map (LBS.putStr . encode)
+dumpSamples DFJSON = enclose . sequence_ . intersperse (putStrLn ",") . map (LBS.putStr . encode)
   where
     enclose m = putStrLn "[" >> m >> putStrLn "]"
index bcf2c09..ce00d5c 100644 (file)
@@ -89,7 +89,7 @@ data ReportResults =
         | ListOfIntervals String [Interval]
         | MultipleReportResults [ReportResults]
         | RepeatedReportResults String [(String, ReportResults)]
-        | DumpResult (TimeLog (CaptureData, ActivityData))
+        | DumpResult (TimeLog (CaptureData, TimeZone, ActivityData))
 
 
 filterPredicate :: [Filter] -> TimeLogEntry (Ctx, ActivityData) -> Bool
@@ -252,7 +252,9 @@ processReport opts (IntervalTag tag) =
         extractTag tag = fmap show . listToMaybe . filter ( (==tag) )
 
 processReport opts DumpSamples =
-    DumpResult <$> onSelected (toList `mapElems` (fmap ((tlData . cNow) *** (filterActivity (roActivityFilter opts)))))
+    DumpResult <$> onSelected (mapElems toList $ fmap $
+        \(cd,ad) -> (tlData (cNow cd), cTimeZone cd, filterActivity (roActivityFilter opts) ad)
+        )
 
 calcCategories :: LeftFold (TimeLogEntry (Ctx, ActivityData)) [Category]
 calcCategories = fmap S.toList $ leftFold S.empty $ \s tl ->
index 4ad4fd8..1c3ef36 100644 (file)
@@ -11,6 +11,7 @@ import Data.Maybe
 import Control.Monad
 import Data.Char
 import Data.List.TakeR
+import Data.Time.LocalTime
 
 import TimeLog
 import Data
@@ -90,4 +91,5 @@ main = do
     Nothing -> return captures
     Just n  -> return $ takeR n captures
 
-  dumpSamples (optFormat flags) captures
+  tz <- getCurrentTimeZone
+  dumpSamples tz (optFormat flags) captures