module Data.ZoomCache.Read (
zoomDumpFile
, zoomDumpSummary
, zoomDumpSummaryLevel
, zoomInfoFile
) where
import Data.Int
import qualified Data.IntMap as IM
import qualified Data.Iteratee as I
import Text.Printf
import Data.Iteratee.ZoomCache
import Data.ZoomCache.Common
import Data.ZoomCache.Packet
import Data.ZoomCache.Pretty
import Data.ZoomCache.Summary
zoomInfoFile :: FilePath -> IO ()
zoomInfoFile path = I.fileDriverRandom iterHeaders path >>= info
zoomDumpFile :: FilePath -> IO ()
zoomDumpFile = I.fileDriverRandom (mapPackets dumpData)
zoomDumpSummary :: FilePath -> IO ()
zoomDumpSummary = I.fileDriverRandom (mapSummaries dumpSummary)
zoomDumpSummaryLevel :: Int -> FilePath -> IO ()
zoomDumpSummaryLevel lvl = I.fileDriverRandom (mapSummaries (dumpSummaryLevel lvl))
info :: CacheFile -> IO ()
info CacheFile{..} = do
putStrLn . prettyGlobal $ cfGlobal
mapM_ (putStrLn . uncurry prettyTrackSpec) . IM.assocs $ cfSpecs
dumpData :: Packet -> IO ()
dumpData p = mapM_ (\(t,d) -> printf "%s: %s\n" t d) tds
where
tds = zip (map (show . unTS) $ packetTimeStamps p) vals
vals = case packetData p of
PDDouble ds -> map show ds
PDInt is -> map show is
dumpSummary :: Summary -> IO ()
dumpSummary = putStrLn . prettySummary
dumpSummaryLevel :: Int -> Summary -> IO ()
dumpSummaryLevel level s
| level == summaryLevel s = dumpSummary s
| otherwise = return ()