internal/cli/prune.go (view raw)
1package cli
2
3import (
4 "context"
5 "fmt"
6
7 "github.com/spf13/cobra"
8)
9
10// PruneMails prunes orphaned mails and returns the count of pruned messages.
11func (c *Command) PruneMails(ctx context.Context) (int, error) {
12 targets, err := c.db.GetPrunableTargets(ctx)
13 if err != nil {
14 return 0, err
15 }
16
17 count := 0
18 for _, target := range targets {
19 err = c.persistence.RemoveBlob(target.BlobHash)
20 if err != nil {
21 return count, err
22 }
23 err = c.db.DeleteMessage(ctx, target.MessageID)
24 if err != nil {
25 return count, err
26 }
27 count++
28 }
29
30 return count, nil
31}
32
33func (c *Command) pruneMails(cmd *cobra.Command, _ []string) error {
34 fmt.Println("Pruning in progress...")
35
36 count, err := c.clientPruneMails(cmd.Context())
37 if err != nil {
38 return err
39 }
40
41 fmt.Printf("Pruning complete. %d messages pruned.\n", count)
42 return nil
43}