From: Michael Orlitzky Date: Fri, 30 Aug 2013 01:15:51 +0000 (-0400) Subject: Fix two unsafe casts. X-Git-Url: http://gitweb.michael.orlitzky.com/?p=dead%2Fhalcyon.git;a=commitdiff_plain;h=4f1ecbb17ed0e0a9506187630374468a46179514;ds=sidebyside Fix two unsafe casts. --- diff --git a/src/Main.hs b/src/Main.hs index c104874..942b512 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -5,6 +5,7 @@ import Control.Concurrent (forkIO, threadDelay) import Control.Monad (forever, when) import Data.Aeson (decode) import Data.List ((\\)) +import Data.Maybe (fromMaybe, isNothing) import Data.Monoid ((<>)) import Data.Time.LocalTime (TimeZone, getCurrentTimeZone) import System.Exit (ExitCode(..), exitWith) @@ -114,14 +115,19 @@ recurse cfg username latest_status_id maybe_message = do thread_sleep (heartbeat cfg) timeline <- get_user_new_statuses cfg username latest_status_id - -- FIXME - let Just new_statuses = decode timeline :: Maybe Timeline + let decoded_timeline = decode timeline :: Maybe Timeline - case (length new_statuses) of - 0 -> - do_recurse latest_status_id - _ -> do + when (isNothing decoded_timeline) $ + hPutStrLn stderr $ + "Couldn't retrieve " + ++ username + ++ "'s timeline. Skipping..." + let new_statuses = fromMaybe [] decoded_timeline + + case new_statuses of + [] -> do_recurse latest_status_id + _ -> do mention_replies cfg new_statuses mention_retweets cfg new_statuses @@ -149,15 +155,24 @@ get_latest_status_id :: Cfg -> String -> IO Integer get_latest_status_id cfg username = do let delay = heartbeat cfg timeline <- get_user_timeline cfg username - let Just initial_timeline = decode timeline :: Maybe Timeline - case (length initial_timeline) of - 0 -> do + let decoded_timeline = decode timeline :: Maybe Timeline + + when (isNothing decoded_timeline) $ + hPutStrLn stderr $ + "Couldn't retrieve " + ++ username + ++ "'s timeline. Skipping..." + + let initial_timeline = fromMaybe [] decoded_timeline + + case initial_timeline of + [] -> do -- If the HTTP part barfs, try again after a while. - putStrLn ("Couldn't retrieve " ++ username ++ "'s timeline. Retrying...") thread_sleep delay get_latest_status_id cfg username - _ -> return (get_max_status_id initial_timeline) + _ -> + return (get_max_status_id initial_timeline)