aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPetter Rasmussen2016-02-06 23:59:15 +0100
committerPetter Rasmussen2016-02-07 00:00:18 +0100
commit1226727a2edb372fb4daf449e62dcd7fb72b7370 (patch)
tree20db6d724652e08a4f1a8dd3038f33afa593a76c
parent0ede2d49e12ddc3a6c2f270f2a74fb938c821e12 (diff)
downloadgdrive-1226727a2edb372fb4daf449e62dcd7fb72b7370.tar.bz2
Add sync list command
-rw-r--r--drive/sync_list.go44
-rw-r--r--gdrive.go16
-rw-r--r--handlers_drive.go9
3 files changed, 69 insertions, 0 deletions
diff --git a/drive/sync_list.go b/drive/sync_list.go
new file mode 100644
index 0000000..beb644e
--- /dev/null
+++ b/drive/sync_list.go
@@ -0,0 +1,44 @@
+package drive
+
+import (
+ "fmt"
+ "io"
+ "text/tabwriter"
+ "google.golang.org/api/googleapi"
+ "google.golang.org/api/drive/v3"
+)
+
+type ListSyncArgs struct {
+ Out io.Writer
+ SkipHeader bool
+}
+
+func (self *Drive) ListSync(args ListSyncArgs) error {
+ query := fmt.Sprintf("appProperties has {key='isSyncRoot' and value='true'}")
+ fields := []googleapi.Field{"nextPageToken", "files(id,name,mimeType,createdTime)"}
+ files, err := self.listAllFiles(query, fields)
+ if err != nil {
+ return err
+ }
+ printSyncDirectories(files, args)
+ return nil
+}
+
+func printSyncDirectories(files []*drive.File, args ListSyncArgs) {
+ w := new(tabwriter.Writer)
+ w.Init(args.Out, 0, 0, 3, ' ', 0)
+
+ if !args.SkipHeader {
+ fmt.Fprintln(w, "Id\tName\tCreated")
+ }
+
+ for _, f := range files {
+ fmt.Fprintf(w, "%s\t%s\t%s\n",
+ f.Id,
+ f.Name,
+ formatDatetime(f.CreatedTime),
+ )
+ }
+
+ w.Flush()
+}
diff --git a/gdrive.go b/gdrive.go
index 41e6a54..d906ada 100644
--- a/gdrive.go
+++ b/gdrive.go
@@ -337,6 +337,22 @@ func main() {
},
},
&cli.Handler{
+ Pattern: "[global] sync list [options]",
+ Description: "List all syncable directories on drive",
+ Callback: listSyncHandler,
+ FlagGroups: cli.FlagGroups{
+ cli.NewFlagGroup("global", globalFlags...),
+ cli.NewFlagGroup("options",
+ cli.BoolFlag{
+ Name: "skipHeader",
+ Patterns: []string{"--no-header"},
+ Description: "Dont print the header",
+ OmitValue: true,
+ },
+ ),
+ },
+ },
+ &cli.Handler{
Pattern: "[global] sync download [options] <id> <path>",
Description: "Sync drive directory to local directory",
Callback: downloadSyncHandler,
diff --git a/handlers_drive.go b/handlers_drive.go
index 714493c..71f5201 100644
--- a/handlers_drive.go
+++ b/handlers_drive.go
@@ -230,6 +230,15 @@ func deleteHandler(ctx cli.Context) {
checkErr(err)
}
+func listSyncHandler(ctx cli.Context) {
+ args := ctx.Args()
+ err := newDrive(args).ListSync(drive.ListSyncArgs{
+ Out: os.Stdout,
+ SkipHeader: args.Bool("skipHeader"),
+ })
+ checkErr(err)
+}
+
func deleteRevisionHandler(ctx cli.Context) {
args := ctx.Args()
err := newDrive(args).DeleteRevision(drive.DeleteRevisionArgs{