module Replay where import Types import Log import CmdLine import Session import qualified Data.ByteString as B import System.IO import Control.Concurrent.Thread.Delay replay :: ReplayOpts -> IO () replay opts = go Nothing =<< loadLog (replayLogFile opts) where go _ [] = sessionDone go prevts (l:ls) = do case prevts of Nothing -> return () Just t -> let s = loggedTimestamp l - t ms = s * 1000000 in delay (ceiling ms) case loggedMessage l of User (ActivityMessage a) -> do B.hPut stdout $ val $ seenData $ activity a hFlush stdout User (ControlMessage _) -> return () Developer _ -> return () go (Just $ loggedTimestamp l) ls