import System.IO (hPutStrLn, stderr)
import CommandLine
+import ExitCodes
import Mail
import Twitter.Http
import Twitter.Status
import Twitter.User
-exit_args_parse_failed :: Int
-exit_args_parse_failed = 1
--- The length of all calls to sleep, in seconds.
+-- |The length of all calls to sleep (or threadDelay), in seconds.
heartbeat :: Int
heartbeat = 600
+-- |A wrapper around threadDelay which takes seconds instead of
+-- microseconds as its argument.
thread_sleep :: Int -> IO ()
-thread_sleep microseconds = do
- let seconds = microseconds * (10 ^ (6 :: Int))
- threadDelay seconds
+thread_sleep seconds = do
+ let microseconds = seconds * (10 ^ (6 :: Int))
+ threadDelay microseconds
+-- |Given a 'Message' and a 'Status', update that message's body and
+-- subject with the information contained in the status. Returns the
+-- updated message.
message_from_status :: Message -> Status -> Message
message_from_status message status =
message { subject = "Twat: " ++ (screen_name (user status)),
body = (pretty_print status) }
+
+-- |This is the main recursive loop. It takes a username, a
+-- latest_status_id, and optionally a 'Message' as arguments. The
+-- latest_status_id is the last status (that we know of) to be posted
+-- to username's Twitter account. If we find any newer statuses when
+-- we check, they are printed and optionally emailed (if a 'Message'
+-- was supplied). Then, the process repeats.
recurse :: String -> Integer -> (Maybe Message) -> IO ()
recurse username latest_status_id maybe_message = do
thread_sleep heartbeat
return ()
+-- |Try continually to download username's timeline, and determine the
+-- latest status id to be posted once we have done so.
get_latest_status_id :: String -> IO Integer
get_latest_status_id username = do
xmldata <- get_user_timeline username
+-- |This function wraps two steps. First, we need to find the latest
+-- status id posted by username. Once we have that, we can begin the
+-- recursive loop that checks for updates forever. The message
+-- argument is optional and is passed to recurse in case the updates
+-- should be emailed.
run_twat :: Maybe Message -> String -> IO ()
run_twat message username = do
latest_status_id <- get_latest_status_id username
return ()
+-- |The main function just parses the command-line arguments and then
+-- forks off calls to 'run_twat' for each supplied username. After
+-- forking, main loops forever.
main :: IO ()
main = do
errors <- parse_errors