package main import ( "os" "os/exec" "path/filepath" "time" ) type TrashDTO struct { TrashPath string `json:"trashPath"` Nodes []TrashNodeDTO `json:"nodes"` Entries []TrashEntryDTO `json:"entries"` } type TrashNodeDTO struct { ID string `json:"id"` Title string `json:"title"` Type string `json:"type"` FsPath string `json:"fsPath"` DeletedAt string `json:"deletedAt"` } type TrashEntryDTO struct { Name string `json:"name"` Path string `json:"path"` IsDir bool `json:"isDir"` Size int64 `json:"size"` ModifiedAt string `json:"modifiedAt"` } func (a *App) ListTrash() (*TrashDTO, error) { if err := a.requireVault(); err != nil { return nil, err } trashPath := filepath.Join(a.vault, ".verstak", "trash") deleted, err := a.nodes.ListDeleted() if err != nil { return nil, err } nodes := make([]TrashNodeDTO, 0, len(deleted)) for _, n := range deleted { deletedAt := "" if n.DeletedAt != nil { deletedAt = n.DeletedAt.Format(time.RFC3339) } nodes = append(nodes, TrashNodeDTO{ ID: n.ID, Title: n.Title, Type: n.Type, FsPath: n.FsPath, DeletedAt: deletedAt, }) } entries, err := listTrashEntries(trashPath) if err != nil { return nil, err } return &TrashDTO{TrashPath: trashPath, Nodes: nodes, Entries: entries}, nil } func listTrashEntries(trashPath string) ([]TrashEntryDTO, error) { if err := os.MkdirAll(trashPath, 0o750); err != nil { return nil, err } dirEntries, err := os.ReadDir(trashPath) if err != nil { return nil, err } out := make([]TrashEntryDTO, 0, len(dirEntries)) for _, entry := range dirEntries { info, err := entry.Info() if err != nil { continue } out = append(out, TrashEntryDTO{ Name: entry.Name(), Path: filepath.Join(trashPath, entry.Name()), IsDir: entry.IsDir(), Size: info.Size(), ModifiedAt: info.ModTime().UTC().Format(time.RFC3339), }) } return out, nil } func (a *App) OpenTrashFolder() error { if err := a.requireVault(); err != nil { return err } trashPath := filepath.Join(a.vault, ".verstak", "trash") if err := os.MkdirAll(trashPath, 0o750); err != nil { return err } return exec.Command("xdg-open", trashPath).Run() }