aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorSean Whitton <spwhitton@spwhitton.name>2015-04-02 17:57:53 +0900
committerSean Whitton <spwhitton@spwhitton.name>2015-04-02 17:57:53 +0900
commit9344f50755a07e398ea34c0180232cdc32a9bd1f (patch)
tree0cd906c65bdc5e284f00ee0d51bdb02333a6e6e4
parent1a3e98dfdbdabbb738dc80071270880b3bffe34b (diff)
downloadsrem-9344f50755a07e398ea34c0180232cdc32a9bd1f.tar.gz
parse absolute times on the command line
-rw-r--r--src/Main.hs34
-rw-r--r--srem.cabal1
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