Allow time diff values > 99:00
authorJoachim Breitner <mail@joachim-breitner.de>
Wed, 11 Jun 2014 19:48:03 +0000 (19:48 +0000)
committerJoachim Breitner <mail@joachim-breitner.de>
Wed, 11 Jun 2014 19:48:03 +0000 (19:48 +0000)
This partly implements ticket #14.

doc/arbtt.xml
src/Categorize.hs
tests/test.hs

index 6850e70..5cc9703 100644 (file)
@@ -425,7 +425,7 @@ $ runhaskell Setup.hs install</screen>
            <rhs> <quote>$time</quote> </rhs>
            <rhs> <quote>$sampleage</quote> </rhs>
            <!-- <rhs> <nonterminal def="#g-date"/> <quote>-</quote> <nonterminal def="#g-date"/></rhs> -->
-            <rhs>[ Digit ] Digit <quote>:</quote> Digit Digit</rhs>
+            <rhs>( Digit )* Digit <quote>:</quote> Digit Digit</rhs>
          </production>
 
           <production id="g-tag">
@@ -1178,7 +1178,19 @@ Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
   <para>
   The version history with changes relevant for the user is documented here.
   </para>
-  
+
+  <sect2 id="release-notes-0.8">
+    <title>Version 0.8.1 (UNRELEASED)</title>
+    <itemizedlist>
+      <listitem>
+       <para>
+         The syntax now allows for time differences larger than 99:99.
+          (<ulink url="https://bitbucket.org/nomeata/arbtt/issue/14/improve-time-categorization-directives">issue #14</ulink>)
+       </para>
+      </listitem>
+    </itemizedlist>
+  </sect2>
+
   <sect2 id="release-notes-0.8">
     <title>Version 0.8</title>
     <itemizedlist>
index 2862dd3..ebf96f2 100644 (file)
@@ -433,13 +433,10 @@ parseRegex = fmap (flip RE.compile [] . T.pack) $ lexeme lang $ choice
 -- | Parses a day-of-time specification (hh:mm)
 parseTime :: Parser NominalDiffTime
 parseTime = fmap fromIntegral $ lexeme lang $ do
-               h <- digitToInt <$> digit
-               mh <- optionMaybe (digitToInt <$> digit)
+               hour <- read <$> many1 digit
                char ':'
-               m1 <- digitToInt <$> digit
-               m2 <- digitToInt <$> digit
-               let hour = maybe h ((10*h)+) mh
-               return $ (hour * 60 + m1 * 10 + m2) * 60
+               minute <- read <$> count 2 digit
+               return $ (hour * 60 + minute) * 60
 
 parseDate :: Parser UTCTime
 parseDate = lexeme lang $ do
index 8f888e4..ad4b836 100644 (file)
@@ -16,6 +16,7 @@ import System.Posix.Env
 import Categorize
 import TimeLog
 import Data
+import Data.Time.Clock
 
 main = do
     putEnv "TZ=UTC" -- to make tests reproducible
@@ -38,6 +39,15 @@ regressionTests = testGroup "Regression tests"
         let [TimeLogEntry _ _ (_,acts)] = cat [sample]
         [Activity Nothing "A2"] @=? acts
         return ()
+    , testCase "Issue #14" $ do
+        cat <- readCategorizer "tests/issue14.cfg"
+        now <- getCurrentTime
+        let backThen = (-60*60*101) `addUTCTime` now
+
+        let sample = TimeLogEntry backThen 0 (CaptureData [(True, "aa", "program")] 0 "")
+        let [TimeLogEntry _ _ (_,acts)] = cat [sample]
+        [Activity Nothing "old"] @=? acts
+        return ()
     ]