lib: after reloading a journal, also refilter it (#314)
After reloading a journal due to a file change, we now also re-apply any query specified by the options.
This commit is contained in:
		
							parent
							
								
									7b1b1f5f8d
								
							
						
					
					
						commit
						f3360c8cfe
					
				| @ -25,6 +25,7 @@ where | ||||
| import Control.Exception as C | ||||
| import Data.List | ||||
| import Data.Maybe | ||||
| import Data.Time (Day) | ||||
| import Safe (readMay) | ||||
| import System.Console.CmdArgs | ||||
| import System.Directory (getModificationTime, getDirectoryContents, copyFile) | ||||
| @ -56,6 +57,7 @@ import Data.Time.Clock.POSIX (utcTimeToPOSIXSeconds) | ||||
| import Hledger.Cli.CliOptions | ||||
| import Hledger.Data | ||||
| import Hledger.Read | ||||
| import Hledger.Reports (queryFromOpts) | ||||
| import Hledger.Utils | ||||
| 
 | ||||
| 
 | ||||
| @ -87,19 +89,23 @@ journalReload j = readJournalFile Nothing Nothing True $ journalFilePath j | ||||
| 
 | ||||
| -- | Re-read a journal from its data file mostly, only if the file has | ||||
| -- changed since last read (or if there is no file, ie data read from | ||||
| -- stdin). The provided options are mostly ignored. Return a journal or | ||||
| -- the error message while reading it, and a flag indicating whether it | ||||
| -- was re-read or not. | ||||
| journalReloadIfChanged :: CliOpts -> Journal -> IO (Either String Journal, Bool) | ||||
| journalReloadIfChanged _ j = do | ||||
| -- stdin). The provided options and current date are used to filter | ||||
| -- the re-read journal; this is intended to reapply the same filter as | ||||
| -- at program startup (though, the current date may not be what it was | ||||
| -- then, so results may differ). Returns a journal or error message, | ||||
| -- and a flag indicating whether it was re-read or not. | ||||
| journalReloadIfChanged :: CliOpts -> Day -> Journal -> IO (Either String Journal, Bool) | ||||
| journalReloadIfChanged opts d j = do | ||||
|   let maybeChangedFilename f = do newer <- journalSpecifiedFileIsNewer j f | ||||
|                                   return $ if newer then Just f else Nothing | ||||
|   changedfiles <- catMaybes `fmap` mapM maybeChangedFilename (journalFilePaths j) | ||||
|   if not $ null changedfiles | ||||
|    then do | ||||
|      whenLoud $ printf "%s has changed, reloading\n" (head changedfiles) | ||||
|      jE <- journalReload j | ||||
|      return (jE, True) | ||||
|      ej <- journalReload j | ||||
|      let initq = queryFromOpts d $ reportopts_ opts | ||||
|          ej'   = filterJournalTransactions initq <$> ej | ||||
|      return (ej', True) | ||||
|    else | ||||
|      return (Right j, False) | ||||
| 
 | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user