imm-1.3.0.0: Execute arbitrary actions for each unread element of RSS/Atom feeds

Safe HaskellNone
LanguageHaskell98

Imm.Boot

Description

Getting started

Dynamic reconfiguration

This program is dynamically configured using the dyre library.

You may want to check out this documentation to know how to get started.

Your personal configuration is located at $XDG_CONFIG_HOME/imm/imm.hs.

ReaderT pattern

The behavior of this program can be customized through the ReaderT pattern.

Synopsis

Documentation

imm :: ModulesM IO -> IO () Source #

Main function, meant to be used in your personal configuration file.

Here is an example:

import           Imm.Boot
import           Imm.Database.JsonFile
import           Imm.Feed
import           Imm.Hooks.SendMail
import           Imm.HTTP.Conduit
import           Imm.Logger.Simple
import           Imm.XML.Simple

main :: IO ()
main = do
  logger   <- defaultLogger
  manager  <- defaultManager
  database <- defaultDatabase

  imm $ mkModulesM manager database logger sendmail defaultXmlParser

sendmail :: SendMailSettings
sendmail = SendMailSettings smtpServer formatMail

formatMail :: FormatMail
formatMail = FormatMail
  (\a b -> (defaultFormatFrom a b) { addressEmail = "user@host" } )
  defaultFormatSubject
  defaultFormatBody
  (\_ _ -> [Address Nothing "user@host"])

smtpServer :: Feed -> FeedElement -> SMTPServer
smtpServer _ _ = SMTPServer
  (Just $ Authentication PLAIN "user" "password")
  (StartTls "smtp.host" defaultSettingsSMTPSTARTTLS)

data Modules httpClient databaseClient logger hooks xmlParser Source #

Modules are independent features of the program which behavior can be controlled by the user.

Constructors

Modules 

Fields

Instances

(MonadThrow m, MonadDatabase FeedTable (ReaderT * b m)) => MonadDatabase FeedTable (ReaderT * (Modules a b c d e) m) Source # 
(MonadIO m, MonadLog (ReaderT * c m)) => MonadLog (ReaderT * (Modules a b c d e) m) Source # 

Methods

log :: LogLevel -> Doc AnsiStyle -> ReaderT * (Modules a b c d e) m () Source #

getLogLevel :: ReaderT * (Modules a b c d e) m LogLevel Source #

setLogLevel :: LogLevel -> ReaderT * (Modules a b c d e) m () Source #

setColorizeLogs :: Bool -> ReaderT * (Modules a b c d e) m () Source #

flushLogs :: ReaderT * (Modules a b c d e) m () Source #

(MonadThrow m, MonadHttpClient (ReaderT * a m)) => MonadHttpClient (ReaderT * (Modules a b c d e) m) Source # 

Methods

httpGet :: URI -> ReaderT * (Modules a b c d e) m LByteString Source #

(Monad m, MonadImm (ReaderT * d m)) => MonadImm (ReaderT * (Modules a b c d e) m) Source # 

Methods

processNewElement :: Feed -> FeedElement -> ReaderT * (Modules a b c d e) m () Source #

(MonadThrow m, MonadXmlParser (ReaderT * e m)) => MonadXmlParser (ReaderT * (Modules a b c d e) m) Source # 

Methods

parseXml :: URI -> LByteString -> ReaderT * (Modules a b c d e) m Feed Source #

data ModulesM m Source #

Type-erased version of Modules, using existential quantification.

mkModulesM :: (MonadXmlParser (ReaderT e m), MonadImm (ReaderT d m), MonadLog (ReaderT c m), MonadDatabase FeedTable (ReaderT b m), MonadHttpClient (ReaderT a m)) => a -> b -> c -> d -> e -> ModulesM m Source #

Constructor for ModulesM.