summaryrefslogtreecommitdiff
path: root/haskell/src/SpaceTraders/Automation/Init.hs
diff options
context:
space:
mode:
authorJulien Dessaux2023-07-16 23:31:00 +0200
committerJulien Dessaux2023-07-17 00:15:05 +0200
commite084d260ff0439f04ab62eba7229309d79ed55c4 (patch)
treee2355a9dad8123352474cb8533d625f87fdcde0d /haskell/src/SpaceTraders/Automation/Init.hs
parent[haskell] Implemented pagination and systems list api call (diff)
downloadspacetraders-e084d260ff0439f04ab62eba7229309d79ed55c4.tar.gz
spacetraders-e084d260ff0439f04ab62eba7229309d79ed55c4.tar.bz2
spacetraders-e084d260ff0439f04ab62eba7229309d79ed55c4.zip
[haskell] Add a SpaceTradersT and handle server reset api message
Diffstat (limited to '')
-rw-r--r--haskell/src/SpaceTraders/Automation/Init.hs58
1 files changed, 58 insertions, 0 deletions
diff --git a/haskell/src/SpaceTraders/Automation/Init.hs b/haskell/src/SpaceTraders/Automation/Init.hs
new file mode 100644
index 0000000..8e90fca
--- /dev/null
+++ b/haskell/src/SpaceTraders/Automation/Init.hs
@@ -0,0 +1,58 @@
+{-# LANGUAGE OverloadedStrings #-}
+
+module SpaceTraders.Automation.Init
+ ( deinitST
+ , initST
+ ) where
+
+import Control.Exception
+import qualified Database.SQLite.Simple as S
+import qualified Data.Text as T
+import System.Directory
+
+import SpaceTraders
+import qualified SpaceTraders.APIClient.Agent as STAA
+import SpaceTraders.APIClient.Errors
+import SpaceTraders.Database
+import SpaceTraders.Database.Agents
+import SpaceTraders.Database.Contracts
+import SpaceTraders.Database.Ships
+import SpaceTraders.Database.Tokens
+
+deinitST :: Config -> IO ()
+deinitST config = do
+ close $ conn config
+
+initST :: IO Config
+initST = do
+ c <- open
+ t <- getToken c `catch` handleNoToken c
+ ma <- runSpaceTradersT STAA.myAgent (Config c t)
+ case ma of
+ Left (APIResetHappened _) -> wipe c
+ Left e -> throwIO e
+ _ -> return $ Config c t
+ where
+ handleNoToken :: S.Connection -> SomeException -> IO T.Text
+ handleNoToken c _ = register c
+
+register :: S.Connection -> IO (T.Text)
+register c = do
+ r <- STAA.register "ADYXAX" "COSMIC"
+ case r of
+ Right r' -> do
+ setAgent c $ STAA.agent r'
+ addContract c $ STAA.contract r'
+ addShip c $ STAA.ship r'
+ let t = STAA.token r'
+ setToken c $ t
+ return t
+ Left e' -> throwIO e'
+
+wipe :: S.Connection -> IO Config
+wipe c = do
+ close c
+ removeFile "spacetraders.db"
+ conn' <- open
+ t <- register conn'
+ return $ Config conn' t