diff options
-rw-r--r-- | Plugins/Monitors/Common.hs | 2 | ||||
-rw-r--r-- | Plugins/Monitors/Weather.hs | 42 |
2 files changed, 26 insertions, 18 deletions
diff --git a/Plugins/Monitors/Common.hs b/Plugins/Monitors/Common.hs index 5177fb8..7887e14 100644 --- a/Plugins/Monitors/Common.hs +++ b/Plugins/Monitors/Common.hs @@ -265,7 +265,7 @@ setColor str s = Just c -> return $ "<fc=" ++ c ++ ">" ++ str ++ "</fc>" -showWithColors :: (Float -> String) -> Float -> Monitor String +showWithColors :: (Num a, Ord a) => (a -> String) -> a -> Monitor String showWithColors f x = do h <- getConfigValue high l <- getConfigValue low diff --git a/Plugins/Monitors/Weather.hs b/Plugins/Monitors/Weather.hs index 447ac2c..cc3a58b 100644 --- a/Plugins/Monitors/Weather.hs +++ b/Plugins/Monitors/Weather.hs @@ -39,7 +39,7 @@ weatherConfig = mkMConfig , "tempF" , "dewPoint" , "rh" - ,"pressure" + , "pressure" ] data WeatherInfo = @@ -52,10 +52,11 @@ data WeatherInfo = , wind :: String , visibility :: String , skyCondition :: String - , temperature :: Float + , tempC :: Int + , tempF :: Int , dewPoint :: String - , humidity :: Float - , pressure :: String + , humidity :: Int + , pressure :: Int } deriving (Show) pTime :: Parser (String, String, String, String) @@ -69,16 +70,23 @@ pTime = do y <- getNumbersAsString char ' ' return (y, m, d ,([h]++[hh]++":"++[mi]++mimi)) -pTemp :: Parser Float -pTemp = do manyTill anyChar $ char '(' - s <- manyTill digit $ (char ' ' <|> char '.') +pTemp :: Parser (Int, Int) +pTemp = do f <- manyTill digit $ char ' ' + manyTill anyChar $ char '(' + c <- manyTill digit $ (char ' ' <|> char '.') skipRestOfLine - return $read s + return $ (read c, read f) -pRh :: Parser Float +pRh :: Parser Int pRh = do s <- manyTill digit $ (char '%' <|> char '.') return $ read s +pPressure :: Parser Int +pPressure = do manyTill anyChar $ char '(' + s <- manyTill digit $ char ' ' + skipRestOfLine + return $ read s + parseData :: Parser [WeatherInfo] parseData = do st <- getAllBut "," @@ -90,13 +98,14 @@ parseData = v <- getAfterString "Visibility: " sk <- getAfterString "Sky conditions: " skipTillString "Temperature: " - temp <- pTemp + (tC,tF) <- pTemp dp <- getAfterString "Dew Point: " skipTillString "Relative Humidity: " rh <- pRh - p <- getAfterString "Pressure (altimeter): " + skipTillString "Pressure (altimeter): " + p <- pPressure manyTill skipRestOfLine eof - return $ [WI st ss y m d h w v sk temp dp rh p] + return $ [WI st ss y m d h w v sk tC tF dp rh p] defUrl :: String defUrl = "http://weather.noaa.gov/pub/data/observations/metar/decoded/" @@ -115,11 +124,10 @@ getData url= return "Could not retrieve data" formatWeather :: [WeatherInfo] -> Monitor String -formatWeather [(WI st ss y m d h w v sk temp dp r p)] = - do cel <- showWithColors show temp - far <- showWithColors (showDigits 1) (((9 / 5) * temp) + 32) - rh <- showWithColors show r - parseTemplate [st, ss, y, m, d, h, w, v, sk, cel, far, dp, rh , p ] +formatWeather [(WI st ss y m d h w v sk tC tF dp r p)] = + do cel <- showWithColors show tC + far <- showWithColors show tF + parseTemplate [st, ss, y, m, d, h, w, v, sk, cel, far, dp, show r , show p ] formatWeather _ = return "N/A" runWeather :: [String] -> Monitor String |