diff options
| author | Petter Rasmussen | 2016-01-16 23:19:16 +0100 | 
|---|---|---|
| committer | Petter Rasmussen | 2016-01-16 23:19:16 +0100 | 
| commit | 9eeb5957fb489f5b8ace9b55f653ae92b75c9acb (patch) | |
| tree | d26ac62ff85cf055fc5d1626d4f7d61a927bf2c7 | |
| parent | 6e25407d7c1dde508f144802a2147d7c5abd6322 (diff) | |
| download | gdrive-9eeb5957fb489f5b8ace9b55f653ae92b75c9acb.tar.bz2 | |
Implemented file info
| -rw-r--r-- | drive/files.go | 10 | ||||
| -rw-r--r-- | drive/print.go | 69 | ||||
| -rw-r--r-- | drive/types.go | 20 | ||||
| -rw-r--r-- | gdrive.go | 2 | ||||
| -rw-r--r-- | handlers.go | 10 | 
5 files changed, 110 insertions, 1 deletions
| diff --git a/drive/files.go b/drive/files.go index 138202a..f1a4b97 100644 --- a/drive/files.go +++ b/drive/files.go @@ -103,6 +103,16 @@ func (self *Drive) Upload(args UploadFileArgs) {      //}  } +func (self *Drive) Info(args FileInfoArgs) { +    f, err := self.service.Files.Get(args.Id).Fields("id", "name", "size", "createdTime", "modifiedTime", "md5Checksum", "mimeType", "parents", "shared", "description").Do() +    errorF(err, "Failed to get file: %s", err) + +    PrintFileInfo(PrintFileInfoArgs{ +        File: f, +        SizeInBytes: args.SizeInBytes, +    }) +} +  //func newFile(args UploadFileArgs) *drive.File {  //  //} diff --git a/drive/print.go b/drive/print.go new file mode 100644 index 0000000..5473690 --- /dev/null +++ b/drive/print.go @@ -0,0 +1,69 @@ +package drive + +import ( +    "fmt" +    "strings" +    "strconv" +    "time" +) + + +func PrintFileInfo(args PrintFileInfoArgs) { +    f := args.File + +    items := []kv{ +        kv{"Id", f.Id}, +        kv{"Name", f.Name}, +        kv{"Description", f.Description}, +        kv{"Mime", f.MimeType}, +        kv{"Size", formatSize(f.Size, args.SizeInBytes)}, +        kv{"Created", formatDatetime(f.CreatedTime)}, +        kv{"Modified", formatDatetime(f.ModifiedTime)}, +        kv{"Md5sum", f.Md5Checksum}, +        kv{"Shared", formatBool(f.Shared)}, +        kv{"Parents", formatList(f.Parents)}, +    } + +    for _, item := range items { +        if item.value() != "" { +            fmt.Printf("%s: %s\n", item.key(), item.value()) +        } +    } +} + + +func formatList(a []string) string { +    return strings.Join(a, ", ") +} + +func formatSize(bytes int64, forceBytes bool) string { +    if forceBytes { +        return fmt.Sprintf("%v B", bytes) +    } + +    units := []string{"B", "KB", "MB", "GB", "TB", "PB"} + +    var i int +    value := float64(bytes) + +    for value > 1000 { +        value /= 1000 +        i++ +    } +    return fmt.Sprintf("%.1f %s", value, units[i]) +} + +func formatBool(b bool) string { +    return strings.Title(strconv.FormatBool(b)) +} + +func formatDatetime(iso string) string { +    t, err := time.Parse(time.RFC3339, iso) +    if err != nil { +        return iso +    } +    local := t.Local() +    year, month, day := local.Date() +    hour, min, sec := local.Clock() +    return fmt.Sprintf("%04d-%02d-%02d %02d:%02d:%02d", year, month, day, hour, min, sec) +} diff --git a/drive/types.go b/drive/types.go index 6c1bd14..ecf92a1 100644 --- a/drive/types.go +++ b/drive/types.go @@ -45,3 +45,23 @@ type UploadFileArgs struct {      Stdin bool      Share bool  } + +type FileInfoArgs struct { +    Id string +    SizeInBytes bool +} + +type PrintFileInfoArgs struct { +    File *drive.File +    SizeInBytes bool +} + +type kv [2]string + +func (self kv) key() string { +    return self[0] +} + +func (self kv) value() string { +    return self[1] +} @@ -142,7 +142,7 @@ func main() {          &cli.Handler{              Pattern: "[global options] info [options] <id>",              Description: "Show file info", -            Callback: handler, +            Callback: infoHandler,              Flags: cli.Flags{                  "global options": globalFlags,                  "options": []cli.Flag{ diff --git a/handlers.go b/handlers.go index 426f089..f681a2d 100644 --- a/handlers.go +++ b/handlers.go @@ -47,6 +47,16 @@ func uploadHandler(ctx cli.Context) {      })  } +func infoHandler(ctx cli.Context) { +    args := ctx.Args() +    gdrive := newDrive() + +    gdrive.Info(drive.FileInfoArgs{ +        Id: args.String("id"), +        SizeInBytes: args.Bool("sizeInBytes"), +    }) +} +  func deleteHandler(ctx cli.Context) {      fmt.Println("Deleting...")  } | 
