@@ -6,7 +6,6 @@ import TutorialD.Interpreter.DatabaseExpr
66import TutorialD.Interpreter.TransactionGraphOperator
77import ProjectM36.Base
88import ProjectM36.TransactionGraph
9−import ProjectM36.TransactionGraph.Persist
109import Text.Parsec
1110import Text.Parsec.String
1211import Control.Monad.State
@@ -42,45 +41,50 @@ promptText (DisconnectedTransaction parentUUID _) graph = "TutorialD (" `T.appen
4241 Nothing -> T.pack (show $ transactionUUID parentTrans)
4342 Just headName -> headName
4443
45−interpret :: U.UUID -> DisconnectedTransaction -> TransactionGraph -> String -> (TutorialDOperatorResult, DisconnectedTransaction, TransactionGraph)
44+interpret :: U.UUID -> DisconnectedTransaction -> TransactionGraph -> String -> (TutorialDOperatorResult, DisconnectedTransaction, TransactionGraph, TransactionGraphWasUpdated)
4645interpret freshUUID discon@(DisconnectedTransaction parentUUID context) graph inputString = case parse interpreterParserP "" inputString of
47− Left err -> (DisplayErrorResult (T.pack $ show err), discon, graph)
48− Right (RODatabaseContextOp execOp) -> (evalRODatabaseContextOp context execOp, discon, graph)
46+ Left err -> (DisplayErrorResult (T.pack $ show err), discon, graph, False)
47+ Right (RODatabaseContextOp execOp) -> (evalRODatabaseContextOp context execOp, discon, graph, False)
4948 Right (DatabaseExprOp execOp) -> case evalDatabaseExpr True context execOp of
50− Left err -> (DisplayErrorResult $ T.pack (show err), discon, graph)
51− Right context' -> (QuietSuccessResult, DisconnectedTransaction parentUUID context', graph)
49+ Left err -> (DisplayErrorResult $ T.pack (show err), discon, graph, False)
50+ Right context' -> (QuietSuccessResult, DisconnectedTransaction parentUUID context', graph, False)
5251 Right (GraphOp execOp) -> case evalGraphOp freshUUID discon graph execOp of
53− Left err -> (DisplayErrorResult $ T.pack (show err), discon, graph)
54− Right (discon', graph', result') -> (result', discon', graph')
52+ Left err -> (DisplayErrorResult $ T.pack (show err), discon, graph, False)
53+ Right (discon', graph', result') -> (result', discon', graph', True)
54+
55+data InterpreterConfig = InterpreterConfig {
56+ persistenceStrategy :: PersistenceStrategy,
57+ databaseDirectory :: FilePath
58+ }
5559
56−reprLoop :: FilePath -> DisconnectedTransaction -> TransactionGraph -> IO ()
57−reprLoop transGraphDir currentTransaction graph = do
60+reprLoop :: InterpreterConfig -> DisconnectedTransaction -> TransactionGraph -> IO ()
61+reprLoop config currentTransaction graph = do
5862 homeDirectory <- getHomeDirectory
5963 let settings = defaultSettings {historyFile = Just (homeDirectory ++ "/.tutd_history")}
6064
6165 maybeLine <- runInputT settings $ getInputLine (T.unpack (promptText currentTransaction graph))
6266
63− let roloop = reprLoop transGraphDir currentTransaction graph
67+ let roloop = reprLoop config currentTransaction graph
6468 case maybeLine of
6569 Nothing -> return ()
6670 Just line -> do
6771 newUUID <- nextRandom
68− case interpret newUUID currentTransaction graph line of
72+ let (opResult, disconTrans, updatedGraph, graphWasUpdated) = interpret newUUID currentTransaction graph line
73+ when graphWasUpdated $ processPersistence (databaseDirectory config) (persistenceStrategy config) updatedGraph
74+ case (opResult, disconTrans, updatedGraph) of
6975 (QuitResult, _, _) -> return ()
7076 (DisplayErrorResult err, _, _) -> TIO.hPutStrLn stderr ("ERROR: " `T.append` err) >> roloop
71− (DisplayIOResult outio, updatedTrans, updatedGraph) -> do
77+ (DisplayIOResult outio, updatedTrans', updatedGraph') -> do
7278 outio
73− reprLoop transGraphDir updatedTrans updatedGraph
74− (DisplayResult out, updatedTrans, updatedGraph) -> do
79+ reprLoop config updatedTrans' updatedGraph'
80+ (DisplayResult out, updatedTrans', updatedGraph') -> do
7581 TIO.putStrLn out
82+ --assume that the DisplayResult type implies that the transaction graph was not updated
83+ reprLoop config updatedTrans' updatedGraph'
84+ (QuietSuccessResult, updatedTrans', updatedGraph') -> do
7685 --save the current transaction graph
77− transactionGraphPersist transGraphDir updatedGraph
78− reprLoop transGraphDir updatedTrans updatedGraph
79− (QuietSuccessResult, updatedTrans, updatedGraph) -> do
80− --save the current transaction graph
81− transactionGraphPersist transGraphDir updatedGraph
8286 TIO.putStrLn "Done."
83− reprLoop transGraphDir updatedTrans updatedGraph
87+ reprLoop config updatedTrans' updatedGraph'
8488
8589--used by :dumpGraph
8690{-