t.go

 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}