diff options
Diffstat (limited to 'drive')
| -rw-r--r-- | drive/files.go | 5 | ||||
| -rw-r--r-- | drive/permissions.go | 47 | ||||
| -rw-r--r-- | drive/types.go | 9 |
3 files changed, 57 insertions, 4 deletions
diff --git a/drive/files.go b/drive/files.go index 8a5c7f4..b6eed04 100644 --- a/drive/files.go +++ b/drive/files.go @@ -12,6 +12,7 @@ import ( const DirectoryMimeType = "application/vnd.google-apps.folder" + func (self *Drive) List(args ListFilesArgs) { fileList, err := self.service.Files.List().PageSize(args.MaxFiles).Q(args.Query).Fields("nextPageToken", "files(id,name,size,createdTime)").Do() errorF(err, "Failed listing files: %s\n", err) @@ -136,7 +137,3 @@ func (self *Drive) Mkdir(args MkdirArgs) { // self.Share(TODO) //} } - -//func newFile(args UploadFileArgs) *drive.File { -// -//} diff --git a/drive/permissions.go b/drive/permissions.go new file mode 100644 index 0000000..1e2c004 --- /dev/null +++ b/drive/permissions.go @@ -0,0 +1,47 @@ +package drive + +import ( + "fmt" + "google.golang.org/api/drive/v3" +) + + +func (self *Drive) Share(args ShareArgs) { + if args.Revoke { + err := self.deletePermissions(args) + errorF(err, "Failed delete permissions: %s", err) + } + + permission := &drive.Permission{ + AllowFileDiscovery: args.Discoverable, + Role: args.Role, + Type: args.Type, + EmailAddress: args.Email, + } + + p, err := self.service.Permissions.Create(args.FileId, permission).Do() + errorF(err, "Failed share file: %s", err) + + fmt.Println(p) +} + +func (self *Drive) deletePermissions(args ShareArgs) error { + permList, err := self.service.Permissions.List(args.FileId).Do() + if err != nil { + return err + } + + for _, p := range permList.Permissions { + // Skip owner permissions + if p.Role == "owner" { + continue + } + + err := self.service.Permissions.Delete(args.FileId, p.Id).Do() + if err != nil { + return err + } + } + + return nil +} diff --git a/drive/types.go b/drive/types.go index 6fa2f3a..f252dde 100644 --- a/drive/types.go +++ b/drive/types.go @@ -58,6 +58,15 @@ type MkdirArgs struct { Share bool } +type ShareArgs struct { + FileId string + Role string + Type string + Email string + Discoverable bool + Revoke bool +} + type PrintFileListArgs struct { Files []*drive.File NameWidth int |
