diff options
author | Sean Whitton <spwhitton@spwhitton.name> | 2015-04-02 17:57:53 +0900 |
---|---|---|
committer | Sean Whitton <spwhitton@spwhitton.name> | 2015-04-02 17:57:53 +0900 |
commit | 9344f50755a07e398ea34c0180232cdc32a9bd1f (patch) | |
tree | 0cd906c65bdc5e284f00ee0d51bdb02333a6e6e4 | |
parent | 1a3e98dfdbdabbb738dc80071270880b3bffe34b (diff) | |
download | srem-9344f50755a07e398ea34c0180232cdc32a9bd1f.tar.gz |
parse absolute times on the command line
-rw-r--r-- | src/Main.hs | 34 | ||||
-rw-r--r-- | 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 @@ -20,5 +20,6 @@ executable srem , time , filepath , split + , old-locale hs-source-dirs: src default-language: Haskell2010 |