diff --git a/main.go b/main.go index 07f8482..27e6ece 100644 --- a/main.go +++ b/main.go @@ -99,7 +99,16 @@ func main() { return nil } - download := func(ctx context.Context) (string, error) { + markDone := func(dldir, location string) error { + println("LOCATION: ", location) + // TODO(mpl): back up .lastdone before overwriting it, in case writing it fails. + if err := ioutil.WriteFile(filepath.Join(dldir, ".lastdone"), []byte(location), 0600); err != nil { + return err + } + return nil + } + + download := func(ctx context.Context, location string) (string, error) { dir := s.dlDir keyD, ok := kb.Keys['D'] if !ok { @@ -128,6 +137,7 @@ func main() { } } + var filename string started := false endTimeout := time.Now().Add(30 * time.Second) startTimeout := time.Now().Add(5 * time.Second) @@ -166,9 +176,16 @@ func main() { } if !strings.HasSuffix(fileEntries[0], ".crdownload") { // download is over - return fileEntries[0], nil + filename = fileEntries[0] + break } } + + if err := markDone(dir, location); err != nil { + return "", err + } + + return filename, nil } mvDl := func(dlFile string) func(ctx context.Context) error { @@ -184,9 +201,9 @@ func main() { } } - dlAndMove := func(ctx context.Context) error { + dlAndMove := func(ctx context.Context, location string) error { var err error - dlFile, err := download(ctx) + dlFile, err := download(ctx, location) if err != nil { return err } @@ -227,6 +244,11 @@ func main() { if N == 0 { return nil } + var location string + lookingForLastDone := true + if s.lastDone == "" { + lookingForLastDone = false + } for { if N > 0 && n >= N { break @@ -240,8 +262,19 @@ func main() { return err } } + if err := chromedp.Location(&location).Do(ctx); err != nil { + return err + } + if lookingForLastDone { + if location == s.lastDone { + lookingForLastDone = false + } + println(location, " ALREADY DONE") + continue + } + // TODO(mpl): deal with getting the very last photo to properly exit that loop when N < 0. - if err := dlAndMove(ctx); err != nil { + if err := dlAndMove(ctx, location); err != nil { return err } n++ @@ -304,6 +337,18 @@ type Session struct { parentCancel context.CancelFunc dlDir string profileDir string + lastDone string +} + +func getLastDone(dlDir string) (string, error) { + data, err := ioutil.ReadFile(filepath.Join(dlDir, ".lastdone")) + if err != nil { + if !os.IsNotExist(err) { + return "", err + } + return "", nil + } + return string(data), nil } func NewSession() (*Session, error) { @@ -327,9 +372,14 @@ func NewSession() (*Session, error) { if err := os.MkdirAll(dlDir, 0700); err != nil { return nil, err } + lastDone, err := getLastDone(dlDir) + if err != nil { + return nil, err + } s := &Session{ profileDir: dir, dlDir: dlDir, + lastDone: lastDone, } return s, nil }