module Data.ZoomCache.Pretty (
prettyGlobal
, prettyTrackSpec
, prettyTimeStamp
, prettySampleOffset
, prettySummarySO
) where
import qualified Data.ByteString.Char8 as C
import Data.Ratio
import Data.Time (UTCTime, formatTime)
import System.Locale (defaultTimeLocale)
import Text.Printf
import Data.ZoomCache.Common
import Data.ZoomCache.Types
prettyGlobal :: Global -> String
prettyGlobal Global{..} = unlines
[ "Version:\t\t" ++ show vMaj ++ "." ++ show vMin
, "No. tracks:\t\t" ++ show noTracks
, "UTC baseTime:\t\t" ++ maybe "undefined" showUTC baseUTC
]
where
Version vMaj vMin = version
showUTC :: UTCTime -> String
showUTC = formatTime defaultTimeLocale "%Y-%m-%d %T"
prettyTrackSpec :: TrackNo -> TrackSpec -> String
prettyTrackSpec trackNo TrackSpec{..} = unlines
[ "Track " ++ show trackNo ++ ":"
, "\tName:\t" ++ C.unpack specName
, "\tType:\t" ++ show specType
, "\tEnc:\t" ++ unwords [encoding, compression]
, "\tRate:\t" ++ show specSRType ++ " " ++ ratShow specRate
]
where
encoding | specDeltaEncode = "Delta"
| otherwise = "Raw"
compression | specZlibCompress = "Zlib"
| otherwise = "Uncompressed"
prettyTimeStamp :: TimeStamp -> String
prettyTimeStamp (TS ts) = printf "%02d:%02d:%02d.%03d" hrs minN secN msN
where
secT, msN :: Integer
secT = floor ts
msN = round (1000 * (ts fromIntegral secT))
(minT, secN) = quotRem secT 60
(hrs, minN) = quotRem minT 60
prettySampleOffset :: Rational -> SampleOffset -> String
prettySampleOffset r (SO t)
| d == 0 = "00:00:00.000"
| otherwise = printf "%02d:%02d:%02d.%03d" hrs minN secN msN
where
d = denominator r
n = numerator r
msN = quot (1000 * framesN) n
(secT, framesN) = quotRem (fromIntegral t*d) n
(minT, secN) = quotRem secT 60
(hrs, minN) = quotRem minT 60
prettySummarySO :: ZoomReadable a => Rational -> SummarySO a -> String
prettySummarySO r s = concat
[ prettySummarySOTimes r s
, prettySummarySOLevel s
, prettySummaryData (summarySOData s)
]
prettySummarySOTimes :: Rational -> SummarySO a -> String
prettySummarySOTimes r s = concat
[ "[", (prettySampleOffset r $ summarySOEntry s)
, "-", (prettySampleOffset r $ summarySOExit s), "] "
]
prettySummarySOLevel :: SummarySO a -> String
prettySummarySOLevel s = printf "lvl: %d" (summarySOLevel s)
ratShow :: Rational -> String
ratShow r
| d == 0 = "0"
| d == 1 = show n
| otherwise = show n ++ "/" ++ show d
where
n = numerator r
d = denominator r