aboutsummaryrefslogtreecommitdiff
path: root/src/executable/haskell/Service/AdListener.hs
diff options
context:
space:
mode:
Diffstat (limited to 'src/executable/haskell/Service/AdListener.hs')
-rw-r--r--src/executable/haskell/Service/AdListener.hs64
1 files changed, 33 insertions, 31 deletions
diff --git a/src/executable/haskell/Service/AdListener.hs b/src/executable/haskell/Service/AdListener.hs
index bbd06d9..5cf26d1 100644
--- a/src/executable/haskell/Service/AdListener.hs
+++ b/src/executable/haskell/Service/AdListener.hs
@@ -2,62 +2,64 @@ module Service.AdListener
( start
) where
-import Control.Concurrent (threadDelay)
-import qualified Data.Text.IO as T
-import Prelude hiding (error)
+import Control.Concurrent (threadDelay)
+import qualified Data.Text as T
+import qualified Data.Text.IO as T
+import Network.HTTP.Conduit (Manager)
+import Prelude hiding (error)
-import Conf (Conf)
+import Conf (Conf)
import qualified Conf
import qualified FetchAd
-import Model.Ad (Ad)
-import qualified Model.Ad as Ad
-import Model.Mail (Mail (Mail))
-import Model.URL (URL)
-import qualified Service.MailService as MailService
-import qualified Utils.Time as TimeUtils
-import qualified View.Ad as Ad
+import Model.Ad (Ad)
+import qualified Model.Ad as Ad
+import Model.Mail (Mail (Mail))
+import Model.URL (URL)
+import qualified Service.MailService as MailService
+import qualified Utils.Time as TimeUtils
+import qualified View.Ad as Ad
-start :: Conf -> IO ()
-start conf = do
- ads <- fetchAds conf
+start :: Conf -> Manager -> IO ()
+start conf manager = do
+ ads <- fetchAds conf manager
let newURLs = map Ad.url ads
T.putStrLn "Listening to new ads…"
waitListenInterval conf
- listenToNewAdsWithViewedURLs conf newURLs
+ listenToNewAdsWithViewedURLs conf manager newURLs
-listenToNewAdsWithViewedURLs :: Conf -> [URL] -> IO ()
-listenToNewAdsWithViewedURLs conf viewedURLs = do
- ads <- fetchAds conf
+listenToNewAdsWithViewedURLs :: Conf -> Manager -> [URL] -> IO ()
+listenToNewAdsWithViewedURLs conf manager viewedURLs = do
+ ads <- fetchAds conf manager
let (newURLs, newAds) = Ad.getNewAds viewedURLs ads
time <- TimeUtils.getCurrentFormattedTime
if not (null newAds)
then
do
_ <- T.putStrLn (Ad.renderConsoleAds time newAds)
- if Conf.devMode conf
- then return ()
- else sendMail conf newAds
+ sendMail conf newAds
else
return ()
waitListenInterval conf
- listenToNewAdsWithViewedURLs conf (viewedURLs ++ newURLs)
+ listenToNewAdsWithViewedURLs conf manager (viewedURLs ++ newURLs)
-fetchAds :: Conf -> IO [Ad]
-fetchAds conf = do
- leboncoinAds <- FetchAd.leboncoin (Conf.leboncoinUrls conf)
- ouestFranceAds <- FetchAd.ouestFrance (Conf.ouestFranceUrls conf)
- seLogerAds <- FetchAd.seLoger (Conf.seLogerUrls conf)
+fetchAds :: Conf -> Manager -> IO [Ad]
+fetchAds conf manager = do
+ leboncoinAds <- FetchAd.leboncoin manager (Conf.leboncoinUrls conf)
+ ouestFranceAds <- FetchAd.ouestFrance manager (Conf.ouestFranceUrls conf)
+ seLogerAds <- FetchAd.seLoger manager (Conf.seLogerUrls conf)
let results = leboncoinAds ++ ouestFranceAds ++ seLogerAds
- if null results
- then T.putStrLn "Parsed 0 results!"
- else return ()
+ T.putStrLn . T.concat $
+ [ "Parsed "
+ , T.pack . show $ length results
+ , " results"
+ ]
return results
sendMail :: Conf -> [Ad] -> IO ()
sendMail conf ads =
let (title, plainBody) = Ad.renderAds ads
mail = Mail (Conf.mailFrom conf) (Conf.mailTo conf) title plainBody
- in MailService.send mail >> return ()
+ in MailService.send (Conf.mailMock conf) mail >> return ()
waitListenInterval :: Conf -> IO ()
waitListenInterval = threadDelay . (*) 1000000 . round . Conf.listenInterval