1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
2//
3// SPDX-License-Identifier: AGPL-3.0-or-later
4
5package cmd
6
7import (
8 "errors"
9 "fmt"
10 "os"
11
12 "git.secluded.site/np/internal/cli"
13 "git.secluded.site/np/internal/session"
14 "github.com/spf13/cobra"
15)
16
17var sCmd = &cobra.Command{
18 Use: "s",
19 Short: "Start session",
20 Long: `Start a new working-directory-scoped session`,
21 RunE: runStartSession,
22}
23
24func runStartSession(cmd *cobra.Command, args []string) error {
25 env, err := requireEnvironment()
26 if err != nil {
27 return err
28 }
29
30 ctx := cmd.Context()
31 cwd, err := os.Getwd()
32 if err != nil {
33 return fmt.Errorf("determine working directory: %w", err)
34 }
35
36 doc, err := env.SessionStore.Start(ctx, cwd)
37 if err != nil {
38 var already session.AlreadyActiveError
39 if errors.As(err, &already) {
40 return printExistingSession(cmd, env, already.Session)
41 }
42 return err
43 }
44
45 printSessionStarted(cmd, env, doc)
46 return nil
47}
48
49func printExistingSession(cmd *cobra.Command, env *cli.Environment, existing session.Document) error {
50 out := cmd.OutOrStdout()
51 _, _ = fmt.Fprintf(out, env.Localizer.T("session.start.already_active"), existing.SID, existing.DirPath)
52 _, _ = fmt.Fprintln(out, env.Localizer.T("session.start.already_active_guidance"))
53 return nil
54}
55
56func printSessionStarted(cmd *cobra.Command, env *cli.Environment, doc session.Document) {
57 out := cmd.OutOrStdout()
58 _, _ = fmt.Fprintf(out, env.Localizer.T("session.start.now_active"), doc.SID, doc.DirPath)
59
60 _, _ = fmt.Fprintln(out, env.Localizer.T("session.start.guidance"))
61}