From 70d596fb38cc324b8196c375bce62217a63b79fe Mon Sep 17 00:00:00 2001 From: Simon Michael Date: Wed, 8 Jun 2016 10:48:34 -0700 Subject: [PATCH] ui: extract journal reloading --- hledger-ui/Hledger/UI/AccountsScreen.hs | 10 ++-------- hledger-ui/Hledger/UI/ErrorScreen.hs | 13 ++++++++++++- hledger-ui/Hledger/UI/RegisterScreen.hs | 10 ++-------- 3 files changed, 16 insertions(+), 17 deletions(-) diff --git a/hledger-ui/Hledger/UI/AccountsScreen.hs b/hledger-ui/Hledger/UI/AccountsScreen.hs index a4be7530b..6ae1662e9 100644 --- a/hledger-ui/Hledger/UI/AccountsScreen.hs +++ b/hledger-ui/Hledger/UI/AccountsScreen.hs @@ -37,7 +37,7 @@ import Hledger.UI.UIOptions import Hledger.UI.UITypes import Hledger.UI.UIUtils import qualified Hledger.UI.RegisterScreen as RS (screen, rsSetCurrentAccount) -import qualified Hledger.UI.ErrorScreen as ES (screen) +import qualified Hledger.UI.ErrorScreen as ES (stReloadJournalIfChanged) screen = AccountsScreen{ asState = (list "accounts" V.empty 1, "") @@ -256,13 +256,7 @@ handleAccountsScreen st@AppState{ Vty.EvKey (Vty.KChar 'q') [] -> halt st' -- Vty.EvKey (Vty.KChar 'l') [Vty.MCtrl] -> do Vty.EvKey Vty.KEsc [] -> continue $ resetScreens d st' - - Vty.EvKey (Vty.KChar 'g') [] -> do - (ej, _) <- liftIO $ journalReloadIfChanged copts d j - case ej of - Right j' -> continue $ reload j' d st' - Left err -> continue $ screenEnter d ES.screen{esState=err} st' - + Vty.EvKey (Vty.KChar 'g') [] -> liftIO (ES.stReloadJournalIfChanged copts d j st') >>= continue Vty.EvKey (Vty.KChar '-') [] -> continue $ regenerateScreens j d $ decDepth st' Vty.EvKey (Vty.KChar '+') [] -> continue $ regenerateScreens j d $ incDepth st' Vty.EvKey (Vty.KChar '=') [] -> continue $ regenerateScreens j d $ incDepth st' diff --git a/hledger-ui/Hledger/UI/ErrorScreen.hs b/hledger-ui/Hledger/UI/ErrorScreen.hs index 216d2653b..b34ca53f7 100644 --- a/hledger-ui/Hledger/UI/ErrorScreen.hs +++ b/hledger-ui/Hledger/UI/ErrorScreen.hs @@ -3,7 +3,9 @@ {-# LANGUAGE OverloadedStrings, FlexibleContexts #-} module Hledger.UI.ErrorScreen - (screen) + (screen + ,stReloadJournalIfChanged + ) where -- import Lens.Micro ((^.)) @@ -123,3 +125,12 @@ handleErrorScreen st@AppState{ -- continue =<< handleEventLensed st someLens e handleErrorScreen _ _ = error "event handler called with wrong screen type, should not happen" +-- If journal file(s) have changed, reload the journal and regenerate all screens. +-- This is here so it can reference the error screen. +stReloadJournalIfChanged :: CliOpts -> Day -> Journal -> AppState -> IO AppState +stReloadJournalIfChanged copts d j st = do + (ej, _) <- journalReloadIfChanged copts d j + return $ case ej of + Right j' -> regenerateScreens j' d st + Left err -> screenEnter d screen{esState=err} st + diff --git a/hledger-ui/Hledger/UI/RegisterScreen.hs b/hledger-ui/Hledger/UI/RegisterScreen.hs index f4953c20f..a6d793b45 100644 --- a/hledger-ui/Hledger/UI/RegisterScreen.hs +++ b/hledger-ui/Hledger/UI/RegisterScreen.hs @@ -33,7 +33,7 @@ import Hledger.UI.UIOptions import Hledger.UI.UITypes import Hledger.UI.UIUtils import qualified Hledger.UI.TransactionScreen as TS (screen) -import qualified Hledger.UI.ErrorScreen as ES (screen) +import qualified Hledger.UI.ErrorScreen as ES (stReloadJournalIfChanged) screen = RegisterScreen{ rsState = (list "register" V.empty 1, "") @@ -231,13 +231,7 @@ handleRegisterScreen st@AppState{ case ev of Vty.EvKey (Vty.KChar 'q') [] -> halt st Vty.EvKey Vty.KEsc [] -> continue $ resetScreens d st - - Vty.EvKey (Vty.KChar 'g') [] -> do - (ej, _) <- liftIO $ journalReloadIfChanged copts d j - case ej of - Right j' -> continue $ regenerateScreens j' d st - Left err -> continue $ screenEnter d ES.screen{esState=err} st - + Vty.EvKey (Vty.KChar 'g') [] -> liftIO (ES.stReloadJournalIfChanged copts d j st) >>= continue Vty.EvKey (Vty.KChar 'E') [] -> scrollTop >> (continue $ regenerateScreens j d $ stToggleEmpty st) Vty.EvKey (Vty.KChar 'C') [] -> scrollTop >> (continue $ regenerateScreens j d $ stToggleCleared st) Vty.EvKey (Vty.KChar 'U') [] -> scrollTop >> (continue $ regenerateScreens j d $ stToggleUncleared st)