module Imm.Types where
import Control.Monad.Error
import Data.Text.Encoding.Error
import qualified Data.Text.Lazy as T
import Data.Time
import Network.URI
import Network.Stream
import System.Console.CmdArgs
import System.IO.Error
import Text.Feed.Query
import Text.Feed.Types
data ImmError =
OtherError String
| HTTPError String
| UnicodeError UnicodeException
| ParseUriError String
| ParseTimeError String
| ParseItemDateError Item
| ParseFeedError String
| CE ConnError
| IOE IOError
instance Show ImmError where
show (OtherError e) = e
show (HTTPError e) = e
show (UnicodeError (DecodeError e _)) = e
show (UnicodeError (EncodeError e _)) = e
show (ParseUriError raw) = "Cannot parse URI: " ++ raw
show (ParseItemDateError item) = unlines [
"Cannot parse date from item: ",
" title: " ++ (show $ getItemTitle item),
" link:" ++ (show $ getItemLink item),
" publish date:" ++ (show $ getItemPublishDate item),
" date:" ++ (show $ getItemDate item)]
show (ParseTimeError raw) = "Cannot parse time: " ++ raw
show (ParseFeedError raw) = "Cannot parse feed: " ++ raw
show (CE e) = show e
show (IOE e) = ioeGetLocation e ++ " " ++ maybe "" id (ioeGetFileName e) ++ " " ++ ioeGetErrorString e
instance Error ImmError where
strMsg x = OtherError x
data CliOptions = CliOptions {
mCheck :: Bool,
mList :: Bool,
mDenyReconf :: Bool,
mMasterBinary :: Maybe String}
deriving (Data, Typeable, Show, Eq)
data Settings = Settings {
mStateDirectory :: PortableFilePath,
mFeedGroups :: [FeedGroup],
mFromBuilder :: (Item, Feed) -> String,
mSubjectBuilder :: (Item, Feed) -> T.Text,
mBodyBuilder :: (Item, Feed) -> T.Text
}
type FeedGroup = (FeedSettings, [String])
data FeedSettings = FeedSettings {
mMaildir :: PortableFilePath}
type ImmFeed = (URI, Feed)
data Mail = Mail {
mReturnPath :: String,
mDate :: Maybe ZonedTime,
mFrom :: String,
mSubject :: T.Text,
mMIME :: String,
mCharset :: String,
mContentDisposition :: String,
mBody :: T.Text}
data RefDirs = RefDirs {
mHome :: FilePath,
mTemporary :: FilePath,
mConfiguration :: FilePath,
mData :: FilePath}
type PortableFilePath = RefDirs -> FilePath