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 | |
| 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')
| -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 | 
