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 | 
