diff options
Diffstat (limited to 'src/Model/Mail.hs')
-rw-r--r-- | src/Model/Mail.hs | 78 |
1 files changed, 39 insertions, 39 deletions
diff --git a/src/Model/Mail.hs b/src/Model/Mail.hs index 8cc8116..dd166ab 100644 --- a/src/Model/Mail.hs +++ b/src/Model/Mail.hs @@ -10,72 +10,72 @@ import qualified Data.Text as T import Data.Maybe (fromMaybe) import Model.Date -import Model.Birthdate +import Model.Event -data Event = +data Time = Today | NextWeek deriving (Eq, Show) -mailSubject :: [Birthdate] -> [Birthdate] -> Text -mailSubject birthdaysToday birthdaysNextWeek = +mailSubject :: [Event] -> [Event] -> Text +mailSubject eventsToday eventsNextWeek = T.concat [ "Hey, " - , if not . null $ birthdaysToday - then mailSubjectSentence Today birthdaysToday + , if not . null $ eventsToday + then mailSubjectSentence Today eventsToday else "" - , if not . null $ birthdaysNextWeek + , if not . null $ eventsNextWeek then T.concat - [ if not . null $ birthdaysToday then " and " else "" - , mailSubjectSentence NextWeek birthdaysNextWeek + [ if not . null $ eventsToday then " and " else "" + , mailSubjectSentence NextWeek eventsNextWeek ] else "" , "!" ] -mailSubjectSentence :: Event -> [Birthdate] -> Text -mailSubjectSentence event birthdates = - let count = length birthdates +mailSubjectSentence :: Time -> [Event] -> Text +mailSubjectSentence time events = + let count = length events in T.concat - [ case event of + [ case time of Today -> if count > 1 then "there are" else "there is" NextWeek -> "there will be" , " " , T.pack . show $ count - , " birthday" + , " event" , if count > 1 then "s" else "" , " " - , if event == Today then "today" else "next week" + , if time == Today then "today" else "next week" ] -mailBody :: Date -> SuccessiveDates -> [Birthdate] -> [Birthdate] -> Text -mailBody currentDate nextWeek birthdaysToday birthdaysNextWeek = +mailBody :: Date -> SuccessiveDates -> [Event] -> [Event] -> Text +mailBody currentDate nextWeek eventsToday eventsNextWeek = T.concat - [ if not . null $ birthdaysToday - then mailBodySentence Today currentDate nextWeek birthdaysToday + [ if not . null $ eventsToday + then mailBodySentence Today currentDate nextWeek eventsToday else "" - , if not . null $ birthdaysNextWeek + , if not . null $ eventsNextWeek then T.concat - [ if not . null $ birthdaysToday then " " else "" - , mailBodySentence NextWeek currentDate nextWeek birthdaysNextWeek + [ if not . null $ eventsToday then " " else "" + , mailBodySentence NextWeek currentDate nextWeek eventsNextWeek ] else "" ] -mailBodySentence :: Event -> Date -> SuccessiveDates -> [Birthdate] -> Text -mailBodySentence event currentDate nextWeek birthdates = - T.concat $ map (mailBodyPart event currentDate nextWeek) (attachLines birthdates) +mailBodySentence :: Time -> Date -> SuccessiveDates -> [Event] -> Text +mailBodySentence time currentDate nextWeek events = + T.concat $ map (mailBodyPart time currentDate nextWeek) (attachLines events) -attachLines :: [Birthdate] -> [(Line, Birthdate)] -attachLines birthdates = - let count = length birthdates +attachLines :: [Event] -> [(Line, Event)] +attachLines events = + let count = length events lineKind 1 = if count == 1 then SingleLine else FirstLine lineKind line = if line == count then LastLine else MiddleLine mapFst f (x, y) = (f x, y) - in map (mapFst lineKind) . zip [1..] $ birthdates + in map (mapFst lineKind) . zip [1..] $ events data Line = SingleLine @@ -84,27 +84,27 @@ data Line = | LastLine deriving (Eq, Show) -mailBodyPart :: Event -> Date -> SuccessiveDates -> (Line, Birthdate) -> Text -mailBodyPart event currDate nextWeek (line, birthdate) = - let nextWeekDay = dayAndMonthInRange nextWeek (date birthdate) +mailBodyPart :: Time -> Date -> SuccessiveDates -> (Line, Event) -> Text +mailBodyPart time currDate nextWeek (line, event) = + let nextWeekDay = dayAndMonthInRange nextWeek (date event) in T.concat [ case line of x | x `elem` [SingleLine, FirstLine] -> - if event == Today then "Today, " else "Next week, " + if time == Today then "Today, " else "Next week, " MiddleLine -> ", " LastLine -> " and " _ -> "" - , fullname birthdate - , if event == Today then " is " else " will be " + , name event + , if time == Today then " is " else " will be " , T.pack . show $ - if event == Today - then age currDate birthdate - else fromMaybe 0 $ (\d -> year d - year (date birthdate)) <$> nextWeekDay + if time == Today + then age currDate event + else fromMaybe 0 $ (\d -> year d - year (date event)) <$> nextWeekDay , " years old" - , if event == NextWeek + , if time == NextWeek then fromMaybe "" $ (\d -> T.concat [" on " , getWeekDay d]) <$> nextWeekDay else |