module Main ( main ) where import Data.List (intersperse) import Control.Concurrent (threadDelay) import Ad (getResumes) import Model.Ad import Model.URL import Model.Resume (getURLs, getNewResumes) import View.Ad (renderResume) import Page import Parser.Detail url :: URL url = "http://www.leboncoin.fr/annonces/offres/corse/" main :: IO () main = initListenToNewResumes initListenToNewResumes :: IO () initListenToNewResumes = do eitherResumes <- getResumes url case eitherResumes of Left error -> do putStrLn error waitOneMinute initListenToNewResumes Right resumes -> let viewedURLs = getURLs resumes in do putStrLn "Initialization complete" waitOneMinute listenToNewResumes viewedURLs listenToNewResumes :: [URL] -> IO () listenToNewResumes viewedURLs = do eitherResumes <- getResumes url case eitherResumes of Left error -> do putStrLn error waitOneMinute listenToNewResumes viewedURLs Right resumes -> let (newViewdURLs, newResumes) = getNewResumes viewedURLs resumes newAdsCount = length newResumes in do if newAdsCount > 0 then do putStrLn ("Got " ++ (show newAdsCount) ++ " new ads.\n") putStrLn (concat . intersperse "\n\n" . map renderResume $ newResumes) else return () waitOneMinute listenToNewResumes newViewdURLs waitOneMinute :: IO () waitOneMinute = threadDelay (1000 * 1000 * 60)