1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
2//
3// SPDX-License-Identifier: AGPL-3.0-or-later
4
5package t
6
7import (
8 "fmt"
9
10 "git.secluded.site/np/cmd/shared"
11 "git.secluded.site/np/internal/cli"
12 "git.secluded.site/np/internal/task"
13 "github.com/spf13/cobra"
14)
15
16var TCmd = &cobra.Command{
17 Use: "t",
18 Short: "Task commands",
19 Long: `Manage session tasks`,
20 RunE: runListTasks,
21}
22
23func init() {
24 TCmd.Flags().StringP("status", "s", "all", "Filter tasks by status (pending, in_progress, completed, all, etc.)")
25}
26
27func runListTasks(cmd *cobra.Command, _ []string) error {
28 env, err := shared.Environment(cmd)
29 if err != nil {
30 return err
31 }
32
33 sessionDoc, found, err := shared.ActiveSession(cmd, env)
34 if err != nil {
35 return err
36 }
37 if !found {
38 return nil
39 }
40
41 statusFlag, err := cmd.Flags().GetString("status")
42 if err != nil {
43 return err
44 }
45
46 var statusFilter task.Status
47 if statusFlag != "" && statusFlag != "all" {
48 statusFilter, err = task.ParseStatus(statusFlag)
49 if err != nil {
50 _, _ = fmt.Fprintf(cmd.OutOrStdout(), env.Localizer.T("task.list.invalid_status"), statusFlag)
51 return nil
52 }
53 }
54
55 tasks, err := env.LoadTasksByStatus(cmd.Context(), sessionDoc.SID, statusFilter)
56 if err != nil {
57 return err
58 }
59
60 _, _ = fmt.Fprint(cmd.OutOrStdout(), cli.RenderTasksOnly(tasks, env.Localizer))
61 return nil
62}