mndrix / clk

a distributed time clock application for the command line
The Unlicense
2 stars 0 forks source link

handle month boundaries correctly #13

Open mndrix opened 14 years ago

mndrix commented 14 years ago

See the commit message for 0d6774d49dc0e2bec49fd455b8e0f63963da8f75 which decribes a problem with periods that cross month boundaries an the way that entry durations are calculated.

mndrix commented 14 years ago

It seems like two policies can help fix this problem:

Assign entry durations as late as possible

For an entry to know its duration, it must know which entry follows it. The subsequent entry could be in the same month or a subsequent month. If we postpone duration calculation as long as possible, we should know for sure that we have as much context as possible.

We currently calculate durations inside monthFileEntries That's too early. Instead, we should have a function calculateDurations :: [Entry] -> IO [Entry] which can be called as late as is reasonable.

Finding the first entry after a particular time

Assuming an arbitrary [Entry], the final entry in the list needs to look elsewhere for the subsequent entry. If there were a function firstEntryFollowing :: UTCTime -> Maybe Entry, we could use it to find the entry that follows the last entry in a [Entry]. This would have to do some IO but it shouldn't be too hard. At most it should have to inspect two month files.