summaryrefslogtreecommitdiff
path: root/Omni/Task
diff options
context:
space:
mode:
Diffstat (limited to 'Omni/Task')
-rw-r--r--Omni/Task/Core.hs33
1 files changed, 20 insertions, 13 deletions
diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs
index a68f37b..d1d92d5 100644
--- a/Omni/Task/Core.hs
+++ b/Omni/Task/Core.hs
@@ -19,8 +19,9 @@ import qualified Database.SQLite.Simple.FromField as SQL
import qualified Database.SQLite.Simple.Ok as SQLOk
import qualified Database.SQLite.Simple.ToField as SQL
import GHC.Generics ()
-import System.Directory (createDirectoryIfMissing, doesFileExist)
+import System.Directory (XdgDirectory (..), createDirectoryIfMissing, doesFileExist, getXdgDirectory)
import System.Environment (lookupEnv)
+import System.FilePath (takeDirectory, (</>))
import System.IO.Unsafe (unsafePerformIO)
import Web.HttpApiData (FromHttpApiData (..))
@@ -116,14 +117,18 @@ instance FromJSON RetryContext
-- HTTP API Instances (for Servant query params)
instance FromHttpApiData Status where
- parseQueryParam t = case readMaybe (T.unpack t) of
- Just s -> Right s
- Nothing -> Left ("Invalid status: " <> t)
+ parseQueryParam t
+ | T.null t = Left ""
+ | otherwise = case readMaybe (T.unpack t) of
+ Just s -> Right s
+ Nothing -> Left ("Invalid status: " <> t)
instance FromHttpApiData Priority where
- parseQueryParam t = case readMaybe (T.unpack t) of
- Just p -> Right p
- Nothing -> Left ("Invalid priority: " <> t)
+ parseQueryParam t
+ | T.null t = Left ""
+ | otherwise = case readMaybe (T.unpack t) of
+ Just p -> Right p
+ Nothing -> Left ("Invalid priority: " <> t)
-- SQLite Instances
@@ -235,11 +240,12 @@ getTasksDbPath :: IO FilePath
getTasksDbPath = do
customPath <- lookupEnv "TASK_DB_PATH"
testMode <- lookupEnv "TASK_TEST_MODE"
- let path = case (testMode, customPath) of
- (Just "1", _) -> "_/tmp/tasks-test.db" -- Test mode uses cabdir
- (_, Just p) -> p -- Custom path for production
- _ -> "_/tmp/tasks.db" -- Default uses cabdir
- pure path
+ case (testMode, customPath) of
+ (Just "1", _) -> pure "_/tmp/tasks-test.db"
+ (_, Just p) -> pure p
+ _ -> do
+ xdgData <- getXdgDirectory XdgData "jr"
+ pure (xdgData </> "jr.db")
-- DB Helper
withDb :: (SQL.Connection -> IO a) -> IO a
@@ -252,7 +258,8 @@ withDb action = do
-- Initialize the task database
initTaskDb :: IO ()
initTaskDb = do
- createDirectoryIfMissing True "_/tmp"
+ dbPath <- getTasksDbPath
+ createDirectoryIfMissing True (takeDirectory dbPath)
withDb <| \conn -> do
SQL.execute_
conn