module Hbro.Error where

-- {{{ Imports
import Control.Monad.Error

import Data.Maybe

import Graphics.UI.Gtk.WebKit.Download
import Graphics.UI.Gtk.WebKit.NetworkRequest

import System.IO.Error
-- }}}

data HError =
    CannotGoBack
  | CannotGoForward
  | EmptyCallback
  | EmptyClipboard
  | EmptyDownloadURI Download
  | EmptyRequestURI NetworkRequest
  | EmptySuggestedFileName Download
  | InvalidIconURI
  | InvalidPageTitle
  | InvalidPageURI
  | InvalidURI String
  | IOE IOError
  | OtherError String

instance Error HError where
    strMsg = OtherError

instance Show HError where
    show CannotGoBack               = "Unable to go back: already at oldest page."
    show CannotGoForward            = "Unable to go forward: already at newest page."
    show (IOE e)                    = "IO error: " ++ ioeGetLocation e ++ ": " ++ fromMaybe "" (ioeGetFileName e) ++ " " ++ ioeGetErrorString e
    show InvalidIconURI             = "No favicon URI."
    show InvalidPageTitle           = "No page title."
    show InvalidPageURI             = "Invalid page URI."
    show (InvalidURI s)             = show s
    show (EmptyDownloadURI _)       = "Invalid download URI."
    show (EmptyClipboard)           = "Empty clipboard."
    show (EmptySuggestedFileName _) = "No suggested name for this download."
    show (EmptyRequestURI _)        = "Invalid request URI."
    show EmptyCallback              = "No callback defined."
    show (OtherError s)             = show s