module Role.Downloader where import Types import Log import CmdLine import SessionID import Control.Concurrent.STM import Control.Concurrent.STM.TMChan import Role.Developer (run', processSessionStart, getServerMessage, Output(..)) run :: DownloadOpts -> IO () run = run' downloader . downloadUrl downloader :: TMChan (Message Entered) -> TMChan LogMessage -> SessionID -> IO () downloader _ichan ochan sid = do let logfile = sessionLogFile "." sid putStrLn $ "Starting download to " ++ logfile putStrLn "(Will keep downloading until the debug-me session is done.)" withLogger logfile $ \logger -> do (st, _startoutput) <- processSessionStart ochan logger go logger st where go logger st = do v <- atomically $ getServerMessage ochan st case v of Nothing -> return () Just (o, msg) -> do _ <- logger msg case o of ProtocolError e -> error ("Protocol error: " ++ e) _ -> go logger st