diff options
-rw-r--r-- | readme.md | 3 | ||||
-rw-r--r-- | src/Plugins/Monitors/UVMeter.hs | 25 | ||||
-rw-r--r-- | xmobar.cabal | 3 |
3 files changed, 20 insertions, 11 deletions
@@ -158,7 +158,8 @@ Otherwise, you'll need to install them yourself. Requires the [libXpm] C library. `with_uvmeter` -: Enables UVMeter plugin. The plugin shows UV data for Australia. +: Enables UVMeter plugin. The plugin shows UV data for Australia. Requires + `with_conduit` to connect to HTTPS URLs. `with_weather` : Support to display weather information. Enables Weather plugin. diff --git a/src/Plugins/Monitors/UVMeter.hs b/src/Plugins/Monitors/UVMeter.hs index b0f5ac3..4d90846 100644 --- a/src/Plugins/Monitors/UVMeter.hs +++ b/src/Plugins/Monitors/UVMeter.hs @@ -18,11 +18,14 @@ module Plugins.Monitors.UVMeter where import Plugins.Monitors.Common import qualified Control.Exception as CE -import Control.Applicative hiding ((<|>),many) -import Network.HTTP +import Network.HTTP.Conduit + (parseRequest, newManager, tlsManagerSettings, httpLbs, + responseBody) +import Data.ByteString.Lazy.Char8 as B import Text.Read (readMaybe) import Text.Parsec import Text.Parsec.String +import Control.Monad (void) uvConfig :: IO MConfig @@ -35,14 +38,18 @@ newtype UvInfo = UV { index :: String } deriving (Show) uvURL :: String -uvURL = "http://www.arpansa.gov.au/uvindex/realtime/xml/uvvalues.xml" +uvURL = "https://uvdata.arpansa.gov.au/xml/uvvalues.xml" getData :: IO String -getData = do - let request = getRequest uvURL - CE.catch (simpleHTTP request >>= getResponseBody) errHandler - where errHandler :: CE.IOException -> IO String - errHandler _ = return "<Could not retrieve data>" +getData = + CE.catch (do request <- parseRequest uvURL + manager <- newManager tlsManagerSettings + res <- httpLbs request manager + return $ B.unpack $ responseBody res) + errHandler + where errHandler + :: CE.SomeException -> IO String + errHandler _ = return "<Could not retrieve data>" textToXMLDocument :: String -> Either ParseError [XML] textToXMLDocument = parse document "" @@ -123,7 +130,7 @@ tag = do xmlDecl :: Parser XML xmlDecl = do - string "<?xml" + void $ manyTill anyToken (string "<?xml") -- ignore the byte order mark decl <- many (noneOf "?>") string "?>" return (Decl decl) diff --git a/xmobar.cabal b/xmobar.cabal index d03bdb3..9fa4cf2 100644 --- a/xmobar.cabal +++ b/xmobar.cabal @@ -201,6 +201,7 @@ executable xmobar build-depends: http-conduit, http-types cpp-options: -DHTTP_CONDUIT - if flag(with_uvmeter) + if flag(with_uvmeter) && flag(with_conduit) other-modules: Plugins.Monitors.UVMeter + build-depends: http-conduit, http-types cpp-options: -DUVMETER |