// list the objects into the function supplied // // This does a flat listing of all the files in the drive func (f *Fs) list(dir string, fn listFn) error { //request files list. list is divided into pages. We send request for each page //items per page is limited by limit //TODO may be add config parameter for the items per page limit var limit uint32 = 1000 // max number of object per request var itemsCount uint32 //number of items per page in response var offset uint32 //for the next page of request // yandex disk api request options var opt yandex.FlatFileListRequestOptions opt.Limit = &limit opt.Offset = &offset prefix := f.diskRoot if dir != "" { prefix += dir + "/" } //query each page of list until itemCount is less then limit for { //send request info, err := f.yd.NewFlatFileListRequest(opt).Exec() if err != nil { return err } itemsCount = uint32(len(info.Items)) //list files for _, item := range info.Items { // filter file list and get only files we need if strings.HasPrefix(item.Path, prefix) { //trim root folder from filename var name = strings.TrimPrefix(item.Path, f.diskRoot) err = fn(name, &item, false) if err != nil { return err } } } //offset for the next page of items offset += itemsCount //check if we reached end of list if itemsCount < limit { break } } return nil }
// list the objects into the function supplied // // If directories is set it only sends directories func (f *Fs) list(directories bool, fn func(string, yandex.ResourceInfoResponse)) { //request files list. list is divided into pages. We send request for each page //items per page is limited by limit //TODO may be add config parameter for the items per page limit var limit uint32 = 1000 // max number of object per request var itemsCount uint32 //number of items per page in response var offset uint32 //for the next page of request // yandex disk api request options var opt yandex.FlatFileListRequestOptions opt.Limit = &limit opt.Offset = &offset //query each page of list until itemCount is less then limit for { //send request info, err := f.yd.NewFlatFileListRequest(opt).Exec() if err != nil { fs.Stats.Error() fs.ErrorLog(f, "Couldn't list: %s", err) return } itemsCount = uint32(len(info.Items)) //list files for _, item := range info.Items { // filter file list and get only files we need if strings.HasPrefix(item.Path, f.diskRoot) { //trim root folder from filename var name = strings.TrimPrefix(item.Path, f.diskRoot) fn(name, item) } } //offset for the next page of items offset += itemsCount //check if we reached end of list if itemsCount < limit { break } } }