a.go

 1// SPDX-FileCopyrightText: Amolith <amolith@secluded.site>
 2//
 3// SPDX-License-Identifier: AGPL-3.0-or-later
 4
 5package cmd
 6
 7import (
 8	"fmt"
 9	"os"
10
11	"git.secluded.site/np/cmd/shared"
12	"github.com/spf13/cobra"
13)
14
15var aCmd = &cobra.Command{
16	Use:   "a",
17	Short: "Archive session",
18	Long:  `Archive the current session`,
19	RunE:  runArchiveSession,
20}
21
22func runArchiveSession(cmd *cobra.Command, args []string) error {
23	env, err := shared.Environment(cmd)
24	if err != nil {
25		return err
26	}
27
28	cwd, err := os.Getwd()
29	if err != nil {
30		return fmt.Errorf("determine working directory: %w", err)
31	}
32
33	// Try to get active session (without printing error message)
34	sessionDoc, found, err := env.ActiveSession(cmd.Context(), cwd)
35	if err != nil {
36		return err
37	}
38
39	if !found {
40		// Check if there's already an archived session (idempotency check)
41		archivedDoc, foundArchived, err := env.SessionStore.LatestArchivedByPath(cmd.Context(), cwd)
42		if err != nil {
43			return err
44		}
45
46		if foundArchived {
47			// Session already archived, idempotent operation
48			out := cmd.OutOrStdout()
49			_, _ = fmt.Fprintf(out, env.Localizer.T("session.archive.success"), archivedDoc.SID)
50			return nil
51		}
52
53		// No session at all (neither active nor archived)
54		_, _ = fmt.Fprintln(cmd.OutOrStdout(), env.Localizer.T("session.archive.none_active"))
55		return nil
56	}
57
58	archived, err := env.SessionStore.Archive(cmd.Context(), sessionDoc.SID)
59	if err != nil {
60		return err
61	}
62
63	out := cmd.OutOrStdout()
64	_, _ = fmt.Fprintf(out, env.Localizer.T("session.archive.success"), archived.SID)
65	return nil
66}