diff --git a/src/asses/one.go b/src/asses/one.go index 2785219..7ad908b 100644 --- a/src/asses/one.go +++ b/src/asses/one.go @@ -2,9 +2,42 @@ package asses import ( "context" + "crypto/md5" + "encoding/base64" "io" + "math/rand" + "os" + "time" ) func One(ctx context.Context, p string) error { + if last, err := checkLast(ctx, p); err != nil { + return err + } else if last.T.IsZero() { + } else if cksum, err := cksum(ctx, p); err != nil { + return err + } else if cksum != last.Cksum { + } else if time.Since(last.T) < 20+time.Duration(rand.Int()%10)*24*time.Hour { + return nil + } + return io.EOF + + cksum, err := cksum(ctx, p) + if err != nil { + return err + } + return checked(ctx, p, cksum) +} + +func cksum(ctx context.Context, p string) (string, error) { + f, err := os.Open(p) + if err != nil { + return "", err + } + defer f.Close() + + hasher := md5.New() + _, err = io.Copy(hasher, f) + return base64.StdEncoding.EncodeToString(hasher.Sum(nil)), err }