source: code/trunk/partage-trash/partage-trash.go@ 55

Last change on this file since 55 was 55, checked in by dev, 4 years ago

Provide more info with partage-trash verbose mode

File size: 1.7 KB
Line 
1package main
2
3import (
4 "log"
5 "flag"
6 "os"
7 "time"
8 "path/filepath"
9 "encoding/json"
10
11 "github.com/dustin/go-humanize"
12)
13
14type metadata struct {
15 Filename string
16 Size int64
17 Expiry int64
18}
19
20var conf struct {
21 filepath string
22 metapath string
23}
24
25var verbose bool
26var count int64
27var deleted int64
28var size int64
29
30func readmeta(filename string) (metadata, error) {
31 j, err := os.ReadFile(filename)
32 if err != nil {
33 return metadata{}, err
34 }
35
36 var meta metadata
37 err = json.Unmarshal(j, &meta)
38 if err != nil {
39 return metadata{}, err
40 }
41
42 return meta, nil
43}
44
45func checkexpiry(path string, info os.FileInfo, err error) error {
46 if filepath.Ext(path) != ".json" {
47 return nil
48 }
49 meta, err := readmeta(path)
50 if err != nil {
51 log.Fatal(err)
52 }
53
54 now := time.Now().Unix()
55
56 count++
57
58 if meta.Expiry > 0 && now >= meta.Expiry {
59 if verbose {
60 expiration := humanize.Time(time.Unix(meta.Expiry, 0))
61 log.Printf("%s/%s: expired %s\n", conf.filepath, meta.Filename, expiration)
62 }
63 os.Remove(conf.filepath + "/" + meta.Filename)
64 os.Remove(path)
65 deleted++
66 return nil
67 } else {
68 if verbose {
69 expiration := humanize.Time(time.Unix(meta.Expiry, 0))
70 log.Printf("%s/%s: expire %s\n", conf.filepath, meta.Filename, expiration)
71 }
72 size += meta.Size
73 }
74
75 return nil
76}
77
78func main() {
79 flag.BoolVar(&verbose, "v", false, "Verbose logging")
80 flag.StringVar(&conf.filepath, "f", "./files", "Directory containing files")
81 flag.StringVar(&conf.metapath, "m", "./meta", "Directory containing metadata")
82
83 flag.Parse()
84
85 err := filepath.Walk(conf.metapath, checkexpiry)
86 if err != nil {
87 log.Fatal(err)
88 }
89
90 if verbose && count > 0 {
91 log.Printf("%d/%d file(s) deleted (remaining: %s)", deleted, count, humanize.IBytes(uint64(size)))
92 }
93}
Note: See TracBrowser for help on using the repository browser.