Open mndrix opened 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.
See the commit message for 0d6774d49dc0e2bec49fd455b8e0f63963da8f75 which decribes a problem with periods that cross month boundaries an the way that entry durations are calculated.