s.go

 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}