storj/lib/uplink-gomobile/object.go
2019-10-06 15:34:12 -07:00

97 lines
2.5 KiB
Go

// Copyright (C) 2019 Storj Labs, Inc.
// See LICENSE for copying information.
package mobile
import (
"fmt"
"time"
libuplink "storj.io/storj/lib/uplink"
"storj.io/storj/pkg/storj"
)
// ObjectInfo object metadata
type ObjectInfo struct {
Version int32
Bucket string
Path string
IsPrefix bool
Size int64
ContentType string
Created int64
Modified int64
Expires int64
metadata map[string]string
}
func newObjectInfoFromObject(object storj.Object) *ObjectInfo {
return &ObjectInfo{
Version: int32(object.Version),
Bucket: object.Bucket.Name,
Path: object.Path,
IsPrefix: object.IsPrefix,
Size: object.Size,
ContentType: object.ContentType,
Created: object.Created.UTC().UnixNano() / int64(time.Millisecond),
Modified: object.Modified.UTC().UnixNano() / int64(time.Millisecond),
Expires: object.Expires.UTC().UnixNano() / int64(time.Millisecond),
metadata: object.Metadata,
}
}
func newObjectInfoFromObjectMeta(objectMeta libuplink.ObjectMeta) *ObjectInfo {
return &ObjectInfo{
// TODO ObjectMeta doesn't have Version but storj.Object has
// Version: int32(objectMeta.Version),
Bucket: objectMeta.Bucket,
Path: objectMeta.Path,
IsPrefix: objectMeta.IsPrefix,
Size: objectMeta.Size,
ContentType: objectMeta.ContentType,
Created: objectMeta.Created.UTC().UnixNano() / int64(time.Millisecond),
Modified: objectMeta.Modified.UTC().UnixNano() / int64(time.Millisecond),
Expires: objectMeta.Expires.UTC().UnixNano() / int64(time.Millisecond),
metadata: objectMeta.Metadata,
}
}
// GetMetadata gets objects custom metadata
func (bl *ObjectInfo) GetMetadata(key string) string {
return bl.metadata[key]
}
// ObjectList represents list of objects
type ObjectList struct {
list storj.ObjectList
}
// More returns true if list request was not able to return all results
func (bl *ObjectList) More() bool {
return bl.list.More
}
// Prefix prefix for objects from list
func (bl *ObjectList) Prefix() string {
return bl.list.Prefix
}
// Bucket returns bucket name
func (bl *ObjectList) Bucket() string {
return bl.list.Bucket
}
// Length returns number of returned items
func (bl *ObjectList) Length() int {
return len(bl.list.Items)
}
// Item gets item from specific index
func (bl *ObjectList) Item(index int) (*ObjectInfo, error) {
if index < 0 && index >= len(bl.list.Items) {
return nil, fmt.Errorf("index out of range")
}
return newObjectInfoFromObject(bl.list.Items[index]), nil
}