From c5fa53c25995c0751e38ad785f4a486deb0442af Mon Sep 17 00:00:00 2001 From: Travis Date: Thu, 11 Sep 2014 11:21:09 -0700 Subject: First attempt at uploading folders. --- cli/cli.go | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 64 insertions(+), 5 deletions(-) (limited to 'cli/cli.go') diff --git a/cli/cli.go b/cli/cli.go index 4e347fb..77d8cf1 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -136,6 +136,16 @@ func printInfo(d *gdrive.Drive, f *drive.File) { // Create folder in drive func Folder(d *gdrive.Drive, title string, parentId string, share bool) error { + info, err := makeFolder(d, title, parentId, share) + if err != nil { + return err + } + printInfo(d, info) + fmt.Printf("Folder '%s' created\n", info.Title) + return nil +} + +func makeFolder(d *gdrive.Drive, title string, parentId string, share bool) (*drive.File, error) { // File instance f := &drive.File{Title: title, MimeType: "application/vnd.google-apps.folder"} // Set parent (if provided) @@ -146,15 +156,13 @@ func Folder(d *gdrive.Drive, title string, parentId string, share bool) error { // Create folder info, err := d.Files.Insert(f).Do() if err != nil { - return fmt.Errorf("An error occurred creating the folder: %v\n", err) + return nil, fmt.Errorf("An error occurred creating the folder: %v\n", err) } // Share folder if the share flag was provided if share { Share(d, info.Id) } - printInfo(d, info) - fmt.Printf("Folder '%s' created\n", info.Title) - return nil + return info, err } // Upload file to drive @@ -163,7 +171,58 @@ func Upload(d *gdrive.Drive, input io.ReadCloser, title string, parentId string, // Use filename or 'untitled' as title if no title is specified if title == "" { if f, ok := input.(*os.File); ok && input != os.Stdin { + fi, err := f.Stat() + if err != nil { + return err + } + fmt.Println("yooo") + if fi.Mode().IsDir() { + fmt.Println("is dir yo") + // then upload the entire directory, calling Upload recursively + // make dir first + folder, err := makeFolder(d, filepath.Base(f.Name()), parentId, share) + if err != nil { + return err + } + currDir, err := os.Getwd() + if err != nil { + return err + } + + files, err := f.Readdir(0) + if err != nil { + return err + } + fmt.Println("files:", files) + // need to change dirs to get the files in the dir + err = f.Chdir() + if err != nil { + return err + } + for _, el := range files { + fmt.Println(el) + if el.IsDir() { + // todo: recursively do this, would need to keep track of parent ids for new directories + } else { + fmt.Println(el.Name()) + f2, err := os.Open(el.Name()) + if err != nil { + return err + } + fmt.Println("uploading", el.Name()) + Upload(d, f2, filepath.Base(el.Name()), folder.Id, share, mimeType, convert) + } + } + // go back to previous dir + err = os.Chdir(currDir) + if err != nil { + return err + } + return nil + } + // normal file, not a directory title = filepath.Base(f.Name()) + } else { title = "untitled" } @@ -185,7 +244,7 @@ func Upload(d *gdrive.Drive, input io.ReadCloser, title string, parentId string, if convert { fmt.Printf("Converting to Google Docs format enabled\n") } - + info, err := d.Files.Insert(f).Convert(convert).Media(input).Do() if err != nil { return fmt.Errorf("An error occurred uploading the document: %v\n", err) -- cgit v1.2.3 From ac9535b897f9f7397c7b5504f40d383513a70c99 Mon Sep 17 00:00:00 2001 From: Travis Date: Mon, 15 Sep 2014 14:33:22 -0700 Subject: Removed logging cruft. --- cli/cli.go | 6 ------ 1 file changed, 6 deletions(-) (limited to 'cli/cli.go') diff --git a/cli/cli.go b/cli/cli.go index 77d8cf1..1bf8b36 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -175,9 +175,7 @@ func Upload(d *gdrive.Drive, input io.ReadCloser, title string, parentId string, if err != nil { return err } - fmt.Println("yooo") if fi.Mode().IsDir() { - fmt.Println("is dir yo") // then upload the entire directory, calling Upload recursively // make dir first folder, err := makeFolder(d, filepath.Base(f.Name()), parentId, share) @@ -193,23 +191,19 @@ func Upload(d *gdrive.Drive, input io.ReadCloser, title string, parentId string, if err != nil { return err } - fmt.Println("files:", files) // need to change dirs to get the files in the dir err = f.Chdir() if err != nil { return err } for _, el := range files { - fmt.Println(el) if el.IsDir() { // todo: recursively do this, would need to keep track of parent ids for new directories } else { - fmt.Println(el.Name()) f2, err := os.Open(el.Name()) if err != nil { return err } - fmt.Println("uploading", el.Name()) Upload(d, f2, filepath.Base(el.Name()), folder.Id, share, mimeType, convert) } } -- cgit v1.2.3 From d415b4dfd5fa64478ed6da21ed2a85f023c9f74c Mon Sep 17 00:00:00 2001 From: Travis Date: Mon, 15 Sep 2014 14:42:12 -0700 Subject: Fix ups. --- cli/cli.go | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'cli/cli.go') diff --git a/cli/cli.go b/cli/cli.go index 1bf8b36..d67109b 100644 --- a/cli/cli.go +++ b/cli/cli.go @@ -169,16 +169,18 @@ func makeFolder(d *gdrive.Drive, title string, parentId string, share bool) (*dr func Upload(d *gdrive.Drive, input io.ReadCloser, title string, parentId string, share bool, mimeType string, convert bool) error { // Use filename or 'untitled' as title if no title is specified + f2, ok := input.(*os.File) if title == "" { - if f, ok := input.(*os.File); ok && input != os.Stdin { - fi, err := f.Stat() + if ok && input != os.Stdin { + // then find title if it's a file or upload directory if it's a directory (directory can't have a title). + fi, err := f2.Stat() if err != nil { return err } if fi.Mode().IsDir() { // then upload the entire directory, calling Upload recursively // make dir first - folder, err := makeFolder(d, filepath.Base(f.Name()), parentId, share) + folder, err := makeFolder(d, filepath.Base(f2.Name()), parentId, share) if err != nil { return err } @@ -187,12 +189,12 @@ func Upload(d *gdrive.Drive, input io.ReadCloser, title string, parentId string, return err } - files, err := f.Readdir(0) + files, err := f2.Readdir(0) if err != nil { return err } // need to change dirs to get the files in the dir - err = f.Chdir() + err = f2.Chdir() if err != nil { return err } @@ -215,7 +217,7 @@ func Upload(d *gdrive.Drive, input io.ReadCloser, title string, parentId string, return nil } // normal file, not a directory - title = filepath.Base(f.Name()) + title = filepath.Base(f2.Name()) } else { title = "untitled" -- cgit v1.2.3