about summary refs log tree commit diff
path: root/users/grfn/xanthous/src/Xanthous/App.hs
diff options
context:
space:
mode:
Diffstat (limited to 'users/grfn/xanthous/src/Xanthous/App.hs')
-rw-r--r--users/grfn/xanthous/src/Xanthous/App.hs53
1 files changed, 28 insertions, 25 deletions
diff --git a/users/grfn/xanthous/src/Xanthous/App.hs b/users/grfn/xanthous/src/Xanthous/App.hs
index 9318c71347..78f9e76775 100644
--- a/users/grfn/xanthous/src/Xanthous/App.hs
+++ b/users/grfn/xanthous/src/Xanthous/App.hs
@@ -332,31 +332,34 @@ handleCommand Fire = do
       let enemies = los >>= \(_, es) -> toList $ headMay es
       in enemies ^? folded . below _SomeEntity
 
-handleCommand Save = do
-  -- TODO default save locations / config file?
-  use savefile >>= \case
-    Just filepath ->
-      stringPromptWithDefault_
-        ["save", "location"]
-        Cancellable
-        (pack filepath)
-        promptCallback
-    Nothing -> prompt_ @'StringPrompt ["save", "location"] Cancellable promptCallback
-  continue
-  where
-    promptCallback :: PromptResult 'StringPrompt -> AppM ()
-    promptCallback (StringResult filename) = do
-      sf <- use savefile
-      exists <- liftIO . doesFileExist $ unpack filename
-      if exists && sf /= Just (unpack filename)
-      then confirm ["save", "overwrite"] (object ["filename" A..= filename])
-          $ doSave filename
-      else doSave filename
-    doSave filename = do
-      src <- gets saveGame
-      lift . liftIO $ do
-        writeFile (unpack filename) $ toStrict src
-        exitSuccess
+handleCommand Save =
+  view (config . disableSaving) >>= \case
+    True -> say_ ["save", "disabled"] >> continue
+    False -> do
+      -- TODO default save locations / config file?
+      use savefile >>= \case
+        Just filepath ->
+          stringPromptWithDefault_
+            ["save", "location"]
+            Cancellable
+            (pack filepath)
+            promptCallback
+        Nothing -> prompt_ @'StringPrompt ["save", "location"] Cancellable promptCallback
+      continue
+      where
+        promptCallback :: PromptResult 'StringPrompt -> AppM ()
+        promptCallback (StringResult filename) = do
+          sf <- use savefile
+          exists <- liftIO . doesFileExist $ unpack filename
+          if exists && sf /= Just (unpack filename)
+          then confirm ["save", "overwrite"] (object ["filename" A..= filename])
+              $ doSave filename
+          else doSave filename
+        doSave filename = do
+          src <- gets saveGame
+          lift . liftIO $ do
+            writeFile (unpack filename) $ toStrict src
+            exitSuccess
 
 handleCommand GoUp = do
   hasStairs <- uses entitiesAtCharacter $ elem (SomeEntity UpStaircase)