From 74aff92204f70a6f113039fe90d332b44f9493c2 Mon Sep 17 00:00:00 2001 From: Joris Date: Sun, 20 Nov 2016 18:26:07 +0100 Subject: Enable multi-urls in config file --- src/AdListener.hs | 77 +++++++++++++++++++------------------------------------ 1 file changed, 26 insertions(+), 51 deletions(-) (limited to 'src/AdListener.hs') diff --git a/src/AdListener.hs b/src/AdListener.hs index 3db4c6a..d8400d8 100644 --- a/src/AdListener.hs +++ b/src/AdListener.hs @@ -6,14 +6,11 @@ module AdListener import Prelude hiding (error) -import Data.Text (Text) import qualified Data.Text.IO as T -import qualified Data.Text.Lazy as LT -import Data.Text.Lazy.Builder (toLazyText, fromText) import Control.Concurrent (threadDelay) -import Fetch (fetchResumes, fetchAds) +import qualified Fetch import Model.Ad import Model.URL @@ -32,61 +29,39 @@ import Time (getCurrentFormattedTime) start :: Conf -> IO () start conf = do - eitherResumes <- fetchResumes (Conf.url conf) - case eitherResumes of - Left error -> - showErrorAndListenBack conf [] error - Right resumes -> do - let newURLs = map url resumes - T.putStrLn "Listening to new ads…" - waitListenInterval conf - listenToNewAdsWithViewedURLs conf newURLs + resumes <- Fetch.resumes . Conf.urls $ conf + let newURLs = map url resumes + T.putStrLn "Listening to new ads…" + waitListenInterval conf + listenToNewAdsWithViewedURLs conf newURLs listenToNewAdsWithViewedURLs :: Conf -> [URL] -> IO () listenToNewAdsWithViewedURLs conf viewedURLs = do - eitherResumes <- fetchResumes (Conf.url conf) - case eitherResumes of - Left error -> - showErrorAndListenBack conf viewedURLs error - Right resumes -> - listenToNewAdsWithResumes conf viewedURLs resumes - -listenToNewAdsWithResumes :: Conf -> [URL] -> [Resume] -> IO () -listenToNewAdsWithResumes conf viewedURLs resumes = + resumes <- Fetch.resumes . Conf.urls $ conf let (newURLs, newResumes) = getNewResumes viewedURLs resumes - in do - eitherNewAds <- fetchAds newResumes - case eitherNewAds of - Left error -> - showErrorAndListenBack conf viewedURLs error - Right newAds -> do - time <- getCurrentFormattedTime - if not (null newAds) - then - let message = P.renderConsoleAds conf time newAds - in do - T.putStrLn message - trySendMail conf newAds - else - return () - waitListenInterval conf - listenToNewAdsWithViewedURLs conf (viewedURLs ++ newURLs) + eitherNewAds <- Fetch.ads newResumes + case eitherNewAds of + Left error -> do + T.putStrLn error + waitListenInterval conf + listenToNewAdsWithViewedURLs conf viewedURLs + Right newAds -> do + time <- getCurrentFormattedTime + if not (null newAds) + then + let message = P.renderConsoleAds conf time newAds + in T.putStrLn message >> sendMail conf newAds + else + return () + waitListenInterval conf + listenToNewAdsWithViewedURLs conf (viewedURLs ++ newURLs) -trySendMail :: Conf -> [Ad] -> IO () -trySendMail conf ads = +sendMail :: Conf -> [Ad] -> IO () +sendMail conf ads = let (title, plainBody) = P.renderAds conf ads htmlBody = H.renderAds conf ads - mail = Mail (Conf.mailFrom conf) (Conf.mailTo conf) title (strictToLazy plainBody) (strictToLazy htmlBody) + mail = Mail (Conf.mailFrom conf) (Conf.mailTo conf) title plainBody htmlBody in Mail.send mail >> return () -strictToLazy :: Text -> LT.Text -strictToLazy = toLazyText . fromText - -showErrorAndListenBack :: Conf -> [URL] -> Text -> IO () -showErrorAndListenBack conf viewedURLs error = do - T.putStrLn error - waitListenInterval conf - listenToNewAdsWithViewedURLs conf viewedURLs - waitListenInterval :: Conf -> IO () waitListenInterval = threadDelay . (*) 1000000 . round . Conf.listenInterval -- cgit v1.2.3