From 9344f50755a07e398ea34c0180232cdc32a9bd1f Mon Sep 17 00:00:00 2001 From: Sean Whitton Date: Thu, 2 Apr 2015 17:57:53 +0900 Subject: parse absolute times on the command line --- src/Main.hs | 34 ++++++++++++++++++++++++++-------- srem.cabal | 1 + 2 files changed, 27 insertions(+), 8 deletions(-) diff --git a/src/Main.hs b/src/Main.hs index e09ba9b..c4b33e3 100644 --- a/src/Main.hs +++ b/src/Main.hs @@ -27,7 +27,9 @@ import Data.List (intercalate) import System.Environment (getArgs) import Data.Time.Calendar +import Data.Time.Format import Data.Time.LocalTime +import System.Locale (defaultTimeLocale) import Text.Regex.Posix ((=~)) import Types.Reminder @@ -43,15 +45,31 @@ doCron = do nowRems = filter nowRemsFilter rems mapM_ sendNotification nowRems -cmdLineReminder :: [String] -> Maybe Reminder -cmdLineReminder [] = Nothing -cmdLineReminder [_] = Nothing -cmdLineReminder (exp:textParts) = do - undefined +cmdLineReminder :: [String] -> Maybe Reminder +cmdLineReminder [] = Nothing +cmdLineReminder [_] = Nothing +cmdLineReminder (exp:textParts) + | exp =~ relativeRegExp :: Bool = do + (h, m) <- parseRelativeTime exp -- TODO: add to current time + makeReminder h m text + | exp =~ absoluteRegExp :: Bool = do + (h, m) <- parseAbsoluteTime exp + makeReminder h m text + | otherwise = Nothing where - text = intercalate " " textParts - relativeRegExp = "[0-9]+[mh]" - absoluteRegExp = "[0-9]{1,2}(:[0-9][0-9])?(am|pm)?" + text = intercalate " " textParts + relativeRegExp = "[0-9]+[mh]" + absoluteRegExp = "[0-9]{1,2}(:[0-9][0-9])?(am|pm)?" + +parseRelativeTime :: String -> Maybe (Hour, Minute) +parseRelativeTime exp = undefined + +parseAbsoluteTime :: String -> Maybe (Hour, Minute) +parseAbsoluteTime exp = let formatString = if last exp == 'm' + then "%k:%M%P" + else "%k:%M" + in parseTime defaultTimeLocale formatString exp + >>= \tod -> Just (todHour tod, todMin tod) appendUserReminder :: Reminder -> IO () appendUserReminder r = do diff --git a/srem.cabal b/srem.cabal index 80fac73..6b42a57 100644 --- a/srem.cabal +++ b/srem.cabal @@ -20,5 +20,6 @@ executable srem , time , filepath , split + , old-locale hs-source-dirs: src default-language: Haskell2010 -- cgit v1.2.3