diff --git a/event_drive.go b/event_drive.go new file mode 100644 index 0000000..e1df224 --- /dev/null +++ b/event_drive.go @@ -0,0 +1,57 @@ +package proton + +import ( + "context" + + "github.com/go-resty/resty/v2" +) + +func (c *Client) GetLatestVolumeEventID(ctx context.Context, volumeID string) (string, error) { + var res struct { + EventID string + } + + if err := c.do(ctx, func(r *resty.Request) (*resty.Response, error) { + return r.SetResult(&res).Get("/drive/volumes/" + volumeID + "/events/latest") + }); err != nil { + return "", err + } + + return res.EventID, nil +} + +func (c *Client) GetVolumeEvent(ctx context.Context, volumeID, eventID string) (VolumeEvent, error) { + event, more, err := c.getVolumeEvent(ctx, volumeID, eventID) + if err != nil { + return VolumeEvent{}, err + } + + for more { + var next VolumeEvent + + next, more, err = c.getVolumeEvent(ctx, volumeID, event.EventID) + if err != nil { + return VolumeEvent{}, err + } + + event.Events = append(event.Events, next.Events...) + } + + return event, nil +} + +func (c *Client) getVolumeEvent(ctx context.Context, volumeID, eventID string) (VolumeEvent, bool, error) { + var res struct { + VolumeEvent + + More Bool + } + + if err := c.do(ctx, func(r *resty.Request) (*resty.Response, error) { + return r.SetResult(&res).Get("/drive/volumes/" + volumeID + "/events/" + eventID) + }); err != nil { + return VolumeEvent{}, false, err + } + + return res.VolumeEvent, bool(res.More), nil +} diff --git a/event_drive_types.go b/event_drive_types.go new file mode 100644 index 0000000..a15fa7f --- /dev/null +++ b/event_drive_types.go @@ -0,0 +1,30 @@ +package proton + +type VolumeEvent struct { + EventID string + + Events []LinkEvent + + Refresh Bool +} + +type LinkEvent struct { + EventID string + + EventType LinkEventType + + CreateTime int + + Data string + + Link Link +} + +type LinkEventType int + +const ( + LinkEventDelete LinkEventType = iota + LinkEventCreate + LinkEventUpdate + LinkEventUpdateMetadata +) diff --git a/link_types.go b/link_types.go index fcc7289..eb45272 100644 --- a/link_types.go +++ b/link_types.go @@ -145,10 +145,13 @@ const ( ) type RevisionMetadata struct { - ID string // Encrypted Revision ID - CreateTime int64 // Unix timestamp of the revision creation time - Size int64 // Size of the revision in bytes - State RevisionState // State of revision + ID string // Encrypted Revision ID + ClientUID string // Client UID + CreateTime int64 // Unix timestamp of the revision creation time + Size int64 // Size of the revision in bytes + ManifestSignature string // Signature of the revision manifest, signed with user's address key of the share. + SignatureEmail string // Email of the user that signed the revision. + State RevisionState // State of revision } // Revisions are only for files, they represent “versions” of files. @@ -167,18 +170,3 @@ const ( RevisionStateObsolete RevisionStateDeleted ) - -type LinkEvent struct { - EventID string // Encrypted ID of the Event - CreateTime int64 // Time stamp of the creation time of the Event - EventType LinkEventType // Type of event -} - -type LinkEventType int - -const ( - DeleteLinkEvent LinkEventType = iota - CreateLinkEvent - UpdateContentsLinkEvent - UpdateMetadataLinkEvent -) diff --git a/volume.go b/volume.go index 7625190..60d98bb 100644 --- a/volume.go +++ b/volume.go @@ -19,3 +19,17 @@ func (c *Client) ListVolumes(ctx context.Context) ([]Volume, error) { return res.Volumes, nil } + +func (c *Client) GetVolume(ctx context.Context, volumeID string) (Volume, error) { + var res struct { + Volume Volume + } + + if err := c.do(ctx, func(r *resty.Request) (*resty.Response, error) { + return r.SetResult(&res).Get("/drive/volumes/" + volumeID) + }); err != nil { + return Volume{}, err + } + + return res.Volume, nil +} diff --git a/volume_types.go b/volume_types.go index 82e1f6f..d424927 100644 --- a/volume_types.go +++ b/volume_types.go @@ -23,6 +23,6 @@ type VolumeShare struct { type VolumeState int const ( - ActiveVolumeState VolumeState = 1 - LockedVolumeState VolumeState = 3 + VolumeStateActive VolumeState = 1 + VolumeStateLocked VolumeState = 3 )