aboutsummaryrefslogtreecommitdiff
path: root/src/View/Plain
diff options
context:
space:
mode:
Diffstat (limited to 'src/View/Plain')
-rw-r--r--src/View/Plain/Ad.hs88
1 files changed, 88 insertions, 0 deletions
diff --git a/src/View/Plain/Ad.hs b/src/View/Plain/Ad.hs
new file mode 100644
index 0000000..9dc5289
--- /dev/null
+++ b/src/View/Plain/Ad.hs
@@ -0,0 +1,88 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module View.Plain.Ad
+ ( renderConsoleAds
+ , renderAds
+ ) where
+
+import Data.List (intersperse)
+import Data.Maybe (fromMaybe)
+
+import Data.Text (Text)
+import qualified Data.Text as T
+
+import Model.Ad (Ad(..))
+import qualified Model.Ad as Ad
+
+import Model.Resume (Resume(..))
+import qualified Model.Resume as Resume
+
+import Model.Detail (Detail(..))
+import qualified Model.Detail as Detail
+
+import Model.URL
+
+renderConsoleAds :: Text -> [Ad] -> Text
+renderConsoleAds time ads =
+ let (title, message) = renderAds ads
+ titleWithTime =
+ T.concat
+ [ "\n["
+ , time
+ , "] "
+ , title
+ ]
+ line = T.map (\_ -> '-') titleWithTime
+ in T.intercalate
+ "\n"
+ [ titleWithTime
+ , line
+ , ""
+ , message
+ ]
+
+renderAds :: [Ad] -> (Text, Text)
+renderAds ads =
+ let titleMessage = renderTitle $ length ads
+ adsMessage = T.intercalate "\n\n" . map renderAd $ ads
+ in (titleMessage, adsMessage)
+
+renderTitle :: Int -> Text
+renderTitle count =
+ T.concat
+ [ T.pack . show $ count
+ , agreement " nouvelle"
+ , agreement " annonce"
+ ]
+ where agreement word =
+ T.concat
+ [ word
+ , if count > 1 then "s" else ""
+ ]
+
+renderAd :: Ad -> Text
+renderAd ad =
+ T.concat
+ [ renderResume (Ad.resume ad)
+ , "\n\n"
+ , renderDetail (Ad.detail ad)
+ ]
+
+renderResume :: Resume -> Text
+renderResume resume =
+ let formatPrice price = T.concat [" - ", price]
+ price = fromMaybe "" . fmap formatPrice . Resume.price $ resume
+ titleLine = T.concat [Resume.name resume, price]
+ in T.intercalate "\n" [titleLine, Resume.url resume]
+
+renderDetail :: Detail -> Text
+renderDetail detail =
+ T.concat
+ [ fromMaybe "−" (Detail.description detail)
+ , renderURLs "\n\nImages:" (Detail.images detail)
+ ]
+
+renderURLs :: Text -> [URL] -> Text
+renderURLs title [] = ""
+renderURLs title urls =
+ T.intercalate "\n" (title:urls)