diff options
author | Ben Boeckel <mathstuf@gmail.com> | 2014-02-05 02:33:22 -0500 |
---|---|---|
committer | Ben Boeckel <mathstuf@gmail.com> | 2014-02-05 02:43:11 -0500 |
commit | 7a4219abe3b4885820bece194c7f125274a711c6 (patch) | |
tree | e862cf9f8e3fb51fe79e930f51dcc67096244ba4 /src/Plugins/Monitors/Weather.hs | |
parent | c81976467d317dd23489603f255fcf75bb043be9 (diff) | |
download | xmobar-7a4219abe3b4885820bece194c7f125274a711c6.tar.gz xmobar-7a4219abe3b4885820bece194c7f125274a711c6.tar.bz2 |
Find out whether the weather monitor is likely to block
Uses the HTTP module to do the work rather than curl.
Diffstat (limited to 'src/Plugins/Monitors/Weather.hs')
-rw-r--r-- | src/Plugins/Monitors/Weather.hs | 19 |
1 files changed, 19 insertions, 0 deletions
diff --git a/src/Plugins/Monitors/Weather.hs b/src/Plugins/Monitors/Weather.hs index bb3d5da..a008453 100644 --- a/src/Plugins/Monitors/Weather.hs +++ b/src/Plugins/Monitors/Weather.hs @@ -20,6 +20,7 @@ import Control.Monad (when) import System.Process import System.Exit import System.IO +import Network.HTTP import Text.ParserCombinators.Parsec @@ -129,6 +130,9 @@ parseData = defUrl :: String defUrl = "http://weather.noaa.gov/pub/data/observations/metar/decoded/" +stationUrl :: String -> String +stationUrl station = defUrl ++ station ++ ".TXT" + getData :: String -> IO String getData url= do (i,o,e,p) <- runInteractiveCommand ("curl " ++ defUrl ++ url ++ ".TXT") @@ -156,3 +160,18 @@ runWeather str = do d <- io $ getData $ head str i <- io $ runP parseData d formatWeather i + +weatherReady :: [String] -> Monitor Bool +weatherReady str = do + let station = head str + request = headRequest (stationUrl station) + result <- io $ simpleHTTP request + case result of + Left _ -> return False + Right response -> do + case rspCode response of + -- Permission or network errors are failures; anything else is + -- recoverable. + (4, _, _) -> return False + (5, _, _) -> return False + (_, _, _) -> return True |