diff --git a/main.go b/main.go index e506bfa..a1179f8 100644 --- a/main.go +++ b/main.go @@ -20,8 +20,6 @@ import ( var startFlag = flag.String("start", "", "skip all the photos more recent than the one at that URL") -var secondDir string - func main() { flag.Parse() s, err := NewSession() @@ -47,7 +45,7 @@ func main() { }), chromedp.Navigate("https://photos.google.com/"), // chromedp.Sleep(30000*time.Millisecond), - chromedp.Sleep(15000*time.Millisecond), + chromedp.Sleep(5000*time.Millisecond), chromedp.ActionFunc(func(ctx context.Context) error { log.Printf("post-navigate") return nil @@ -190,68 +188,86 @@ func main() { } } - _, _, _ = download, navRight, navRightN + _, _, _, _ = download, navRight, navRightN, firstNav - if err := chromedp.Run(ctx, - // TODO(mpl): change dl dir for each photo, to detect it's finished downloading. - // TODO(mpl): add policy func over photo URL, which decides what we do (with?) - page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(s.dlDir), - chromedp.Navigate("https://photos.google.com/"), - chromedp.Sleep(5000*time.Millisecond), - // the `ERROR: unhandled page event *page.EventDownloadWillBegin` error does show up, but it does not actually prevent the download, so who cares? + photosList := []string{ + "https://photos.google.com/photo/AF1QipPMVPPg5TI2-cnAj-gDXYZL_7fG95jqNDCNb6WP", + "https://photos.google.com/photo/AF1QipOnmwDjAWN2yN1hTlrD8vxdfCdbA0mcoF8CNFm0", + "https://photos.google.com/photo/AF1QipPNNMjO3KT58o52V2WVzATr0zMKbmTQ-I2PPGyf", + } - chromedp.WaitReady("body", chromedp.ByQuery), - chromedp.ActionFunc(func(ctx context.Context) error { - log.Printf("body is ready") - return nil - }), - chromedp.ActionFunc(func(ctx context.Context) error { - if err := firstNav(ctx); err != nil { - return err - } - return download(ctx, s.dlDir) - }), + var currentDir string + for _, v := range photosList { + if err := chromedp.Run(ctx, + // This one here works, so why not below?? + // page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath("/Users/mpl/Downloads/pk-gphotos"), + // TODO(mpl): change dl dir for each photo, to detect it's finished downloading. + // TODO(mpl): add policy func over photo URL, which decides what we do (with?) + /* + page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(s.dlDir), + chromedp.Navigate("https://photos.google.com/"), + chromedp.Sleep(5000*time.Millisecond), + // the `ERROR: unhandled page event *page.EventDownloadWillBegin` error does show up, but it does not actually prevent the download, so who cares? - chromedp.ActionFunc(func(ctx context.Context) error { - dir, err := ioutil.TempDir(s.dlDir, "") - if err != nil { - return err - } - secondDir = dir - page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(dir) - return nil - chromedp.KeyEvent(kb.ArrowRight).Do(ctx) - chromedp.Sleep(500 * time.Millisecond).Do(ctx) - return download(ctx, dir) - }), - chromedp.Navigate("https://photos.google.com/photo/AF1QipMtEd38o-lZxDOfME7fJKKjQuNEHTe0MbhJYAIO"), - chromedp.Sleep(5000*time.Millisecond), - chromedp.ActionFunc(func(ctx context.Context) error { - return download(ctx, secondDir) - }), - /* + chromedp.WaitReady("body", chromedp.ByQuery), + chromedp.ActionFunc(func(ctx context.Context) error { + log.Printf("body is ready") + return nil + }), + chromedp.ActionFunc(func(ctx context.Context) error { + if err := firstNav(ctx); err != nil { + return err + } + return download(ctx, s.dlDir) + }), + */ chromedp.ActionFunc(func(ctx context.Context) error { - // TODO(mpl): instead of tempdir name, probably use dated name instead? dir, err := ioutil.TempDir(s.dlDir, "") if err != nil { return err } - // TODO(mpl): that does not seem to be working here. maybe we need to do it before navigating? - // Maybe if we put each nav+download into their own chromedp.Run ? - page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(dir) - // TODO(mpl): cleanup dir - if err := firstNav(ctx); err != nil { - return err - } - return download(ctx, dir) + currentDir = dir + return nil }), - navRightN(5, ctx), - */ - ); err != nil { - log.Fatal(err) + chromedp.ActionFunc(func(ctx context.Context) error { + println("CURRENTDIR: ", currentDir) + page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(currentDir) + return nil + }), + // WTF IS 2019/08/18 00:49:30 downloadPath not provided (-32000) + // maybe wrong chmod on the dir?? nope. + // page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(foo), + chromedp.Navigate(v), + chromedp.Sleep(5000*time.Millisecond), + chromedp.WaitReady("body", chromedp.ByQuery), + chromedp.ActionFunc(func(ctx context.Context) error { + return download(ctx, currentDir) + }), + /* + + chromedp.ActionFunc(func(ctx context.Context) error { + // TODO(mpl): instead of tempdir name, probably use dated name instead? + dir, err := ioutil.TempDir(s.dlDir, "") + if err != nil { + return err + } + // TODO(mpl): that does not seem to be working here. maybe we need to do it before navigating? + // Maybe if we put each nav+download into their own chromedp.Run ? + page.SetDownloadBehavior(page.SetDownloadBehaviorBehaviorAllow).WithDownloadPath(dir) + // TODO(mpl): cleanup dir + if err := firstNav(ctx); err != nil { + return err + } + return download(ctx, dir) + }), + navRightN(5, ctx), + */ + ); err != nil { + log.Fatal(err) + } + fmt.Println("OK") } - fmt.Println("OK") // Next: keys // https://github.com/chromedp/chromedp/issues/400