packages feed

hbro-1.3.0.0: library/Graphics/UI/Gtk/WebKit/Lifted.hs

{-# LANGUAGE ConstraintKinds   #-}
{-# LANGUAGE FlexibleContexts  #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
-- | Some lifted functions from 'Graphics.UI.Gtk.WebKit'.
-- Designed to be imported as @qualified@.
module Graphics.UI.Gtk.WebKit.Lifted (
-- * 'NetworkRequest'
    networkRequestGetUri,
-- * 'Download'
    downloadGetUri,
-- * 'NetworkRequest'
    downloadGetSuggestedFilename,
-- * 'WebDataSource'
    dataSourceGetData
    ) where

-- {{{ Imports
import           Hbro.Error
import           Hbro.Prelude

import qualified Graphics.UI.Gtk.WebKit.Download       as W
import           Graphics.UI.Gtk.WebKit.NetworkRequest (NetworkRequest)
import qualified Graphics.UI.Gtk.WebKit.NetworkRequest as W
import           Graphics.UI.Gtk.WebKit.WebDataSource  as W

import           Network.URI.Extended
-- }}}

-- | Error message
unavailableData, unavailableFileName, unavailableURI :: Text
unavailableData = "No data available in the web frame."
unavailableFileName = "No file name available"
unavailableURI = "No URI available"

networkRequestGetUri :: (MonadIO m, MonadError Text m) => NetworkRequest -> m URI
networkRequestGetUri r = parseURIReferenceM =<< io (W.networkRequestGetUri r) <!> unavailableURI

downloadGetUri :: (MonadIO m, MonadError Text m) => W.Download -> m URI
downloadGetUri d = parseURIM =<< io (W.downloadGetUri d) <!> unavailableURI

downloadGetSuggestedFilename :: (MonadIO m, MonadError Text m) => W.Download -> m Text
downloadGetSuggestedFilename d = io (W.downloadGetSuggestedFilename d) <!> unavailableFileName

dataSourceGetData :: (MonadIO m, MonadError Text m) => WebDataSource -> m ByteString
dataSourceGetData ds = io (webDataSourceGetData ds) <!> unavailableData