rclone/vendor/storj.io/common/storj/metainfo.go
Caleb Case e7bd392a69 backend/tardigrade: Upgrade to uplink v1.0.6
This fixes an important bug with listing that affects users with more
than 500 objects in a listing operation.
2020-05-29 18:00:08 +01:00

82 lines
1.9 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package storj
// ListDirection specifies listing direction.
type ListDirection int8
const (
// Before lists backwards from cursor, without cursor [NOT SUPPORTED].
Before = ListDirection(-2)
// Backward lists backwards from cursor, including cursor [NOT SUPPORTED].
Backward = ListDirection(-1)
// Forward lists forwards from cursor, including cursor.
Forward = ListDirection(1)
// After lists forwards from cursor, without cursor.
After = ListDirection(2)
)
// ListOptions lists objects.
type ListOptions struct {
Prefix Path
Cursor Path // Cursor is relative to Prefix, full path is Prefix + Cursor
Delimiter rune
Recursive bool
Direction ListDirection
Limit int
}
// ObjectList is a list of objects.
type ObjectList struct {
Bucket string
Prefix Path
More bool
// Items paths are relative to Prefix
// To get the full path use list.Prefix + list.Items[0].Path
Items []Object
}
// NextPage returns options for listing the next page.
func (opts ListOptions) NextPage(list ObjectList) ListOptions {
if !list.More || len(list.Items) == 0 {
return ListOptions{}
}
return ListOptions{
Prefix: opts.Prefix,
Cursor: list.Items[len(list.Items)-1].Path,
Delimiter: opts.Delimiter,
Recursive: opts.Recursive,
Direction: After,
Limit: opts.Limit,
}
}
// BucketListOptions lists objects.
type BucketListOptions struct {
Cursor string
Direction ListDirection
Limit int
}
// BucketList is a list of buckets.
type BucketList struct {
More bool
Items []Bucket
}
// NextPage returns options for listing the next page.
func (opts BucketListOptions) NextPage(list BucketList) BucketListOptions {
if !list.More || len(list.Items) == 0 {
return BucketListOptions{}
}
return BucketListOptions{
Cursor: list.Items[len(list.Items)-1].Name,
Direction: After,
Limit: opts.Limit,
}
}