mahoro-0.1.1: Parsers.hs
-- | Parsers.hs
-- Chans parsers.
module Parsers (
parsePage
) where
import Config
import Parsers.Post
---
import Parsers.Wakaba
import Parsers.Dobrochan
import Parsers.Nowai
---
import Control.OldException
import Data.List
parsers = [ ("wakaba_thread", wakabaThread)
, ("wakaba_board", wakabaBoard)
, ("dobrochan_thread", dobrochanThread)
, ("dobrochan_board", dobrochanBoard)
, ("nowai_thread", nowaiThread)
, ("nowai_board", nowaiBoard)
]
-- | Function what find parser and return new msgs.
parsePage :: Chan -> Integer -> String -> IO (Maybe (Integer, String))
parsePage chan lastPost body =
case lookup (cengine chan) parsers of
-- find parser, let's parse it
Just parser -> do
let ps = parser lastPost body
len <- try (evaluate $ length ps)
case len of
-- err
Left _ -> return Nothing
-- no new posts
Right 0 -> return Nothing
_ -> do
-- test for errors
err <- try (evaluate $ snd $ last ps)
return $ case err of
Left _ ->
Nothing
Right _ ->
Just (fst $ last ps
,intercalate "\n\n" $ map (showPost chan) ps)
-- no parser for such engine
_ ->
return Nothing