summaryrefslogtreecommitdiff
path: root/Omni/Task
diff options
context:
space:
mode:
Diffstat (limited to 'Omni/Task')
-rw-r--r--Omni/Task/Core.hs13
1 files changed, 9 insertions, 4 deletions
diff --git a/Omni/Task/Core.hs b/Omni/Task/Core.hs
index 6285ef7..140d7dc 100644
--- a/Omni/Task/Core.hs
+++ b/Omni/Task/Core.hs
@@ -5,7 +5,6 @@
module Omni.Task.Core where
import Alpha
-import Control.Monad ((>>=))
import Data.Aeson (FromJSON, ToJSON, decode, encode)
import qualified Data.Aeson as Aeson
import qualified Data.Aeson.KeyMap as KM
@@ -210,20 +209,26 @@ updateTaskStatus tid newStatus = do
TIO.writeFile tasksFile ""
traverse_ saveTask updatedTasks
--- List tasks, optionally filtered by type or parent
-listTasks :: Maybe TaskType -> Maybe Text -> IO [Task]
-listTasks maybeType maybeParent = do
+-- List tasks, optionally filtered by type, parent, status, or namespace
+listTasks :: Maybe TaskType -> Maybe Text -> Maybe Status -> Maybe Text -> IO [Task]
+listTasks maybeType maybeParent maybeStatus maybeNamespace = do
tasks <- loadTasks
let filtered =
tasks
|> filterByType maybeType
|> filterByParent maybeParent
+ |> filterByStatus maybeStatus
+ |> filterByNamespace maybeNamespace
pure filtered
where
filterByType Nothing ts = ts
filterByType (Just typ) ts = filter (\t -> taskType t == typ) ts
filterByParent Nothing ts = ts
filterByParent (Just pid) ts = filter (\t -> taskParent t == Just pid) ts
+ filterByStatus Nothing ts = ts
+ filterByStatus (Just status) ts = filter (\t -> taskStatus t == status) ts
+ filterByNamespace Nothing ts = ts
+ filterByNamespace (Just ns) ts = filter (\t -> taskNamespace t == Just ns) ts
-- Get ready tasks (not blocked by dependencies)
getReadyTasks :: IO [Task]