From c255891ef2b0b3eb91e414a926e1553099fe90d4 Mon Sep 17 00:00:00 2001 From: Aaron Rolett Date: Thu, 11 Dec 2014 19:29:49 -0800 Subject: [PATCH] Add support for file request paging to Remote::FindParentById While issuing pull requests on a few of my directories I noticed that I was missing files. Implement paging so pull requests on directories that have more than 100 files work. --- changes.go | 2 +- remote.go | 36 +++++++++++++++++++++++------------- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/changes.go b/changes.go index e57ffcde..588fbd4c 100644 --- a/changes.go +++ b/changes.go @@ -67,7 +67,7 @@ func (g *Commands) resolveChangeListRecv( var remoteChildren []*File if r != nil { - if remoteChildren, err = g.rem.FindByParentId(r.Id); err != nil { + if remoteChildren, err = g.rem.FindByParentID(r.Id, g.opts.Hidden); err != nil { return } } diff --git a/remote.go b/remote.go index 8b4d6ce9..6f9a7fad 100644 --- a/remote.go +++ b/remote.go @@ -89,21 +89,31 @@ func (r *Remote) FindByPath(p string) (file *File, err error) { return r.findByPathRecv("root", parts[1:]) } -func (r *Remote) FindByParentId(parentId string) (files []*File, err error) { - req := r.service.Files.List() - // TODO: use field selectors - req.Q(fmt.Sprintf("'%s' in parents and trashed=false", parentId)) - results, err := req.Do() - // TODO: handle paging - if err != nil { - return - } - for _, f := range results.Items { - if !strings.HasPrefix(f.Title, ".") { // ignore hidden files - files = append(files, NewRemoteFile(f)) +func (r *Remote) FindByParentID(parentID string, hidden bool) ([]*File, error) { + + pageToken := "" + var files []*File + for { + req := r.service.Files.List() + // TODO: use field selectors + req.Q(fmt.Sprintf("'%s' in parents and trashed=false", parentID)) + if pageToken != "" { + req.PageToken(pageToken) + } + results, err := req.Do() + if err != nil { + return files, err + } + for _, f := range results.Items { + if hidden || !strings.HasPrefix(f.Title, ".") { // ignore hidden files + files = append(files, NewRemoteFile(f)) + } + } + pageToken = results.NextPageToken + if pageToken == "" { + return files, err } } - return } func (r *Remote) Trash(id string) error {