@@ -18,6 +18,7 @@ module HaskellDo.State where
18
18
19
19
import Control.Exception (try , SomeException )
20
20
import Control.Monad (when )
21
+ import Data.DateTime
21
22
22
23
import Transient.Move
23
24
@@ -52,19 +53,40 @@ _preUpdate _ appState = do
52
53
_postUpdate :: Action -> AppState -> Cloud AppState
53
54
_postUpdate _ = return
54
55
56
+ saveEvery :: Integer
57
+ saveEvery = 3 -- seconds
58
+
55
59
_update :: Action -> AppState -> Cloud AppState
56
60
_update (CodeMirrorAction action) appState = do
57
61
newCodeMirrorState <- CodeMirror. update action (codeMirrorState appState)
58
62
let newContent = CodeMirror. content newCodeMirrorState
59
- _ <- atRemote $ Compilation. update
60
- (Compilation. WriteWorkingFile newContent)
61
- (compilationState appState)
63
+
62
64
compileShortcutPressed <- localIO CodeMirror. cmdOrCtrlReturnPressed
63
- let newState = appState
64
- { codeMirrorState = newCodeMirrorState
65
- }
65
+
66
+ currentTime <- localIO getCurrentTime
67
+ let lastSave = CodeMirror. lastSave $ codeMirrorState appState
68
+
69
+ newState <- if diffSeconds currentTime lastSave > saveEvery
70
+ then do
71
+ _ <- atRemote $ Compilation. update
72
+ (Compilation. WriteWorkingFile newContent)
73
+ (compilationState appState)
74
+
75
+ return appState {
76
+ codeMirrorState = newCodeMirrorState { CodeMirror. lastSave = currentTime }
77
+ }
78
+ else
79
+ return appState {
80
+ codeMirrorState = newCodeMirrorState
81
+ }
82
+
66
83
if compileShortcutPressed
67
- then update (ToolbarAction Toolbar. Compile ) newState
84
+ then do
85
+ _ <- atRemote $ Compilation. update
86
+ (Compilation. WriteWorkingFile newContent)
87
+ (compilationState appState)
88
+
89
+ update (ToolbarAction Toolbar. Compile ) newState
68
90
else return newState
69
91
70
92
_update (ToolbarAction Toolbar. Compile ) appState = do
0 commit comments