module Role.Downloader where import Types import Log import CmdLine import SessionID import Control.Concurrent.STM import Role.Developer (run', processSessionStart, getUserMessage, Output(..)) run :: DownloadOpts -> IO () run = run' downloader . downloadUrl downloader :: TChan (Message Entered) -> TChan (Message Seen) -> 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 <- processSessionStart ochan logger go logger st where go logger st = do (o, msg) <- atomically $ getUserMessage ochan st _ <- logger $ User msg case o of ProtocolError e -> error ("Protocol error: " ++ e) _ -> return () go logger st