aboutsummaryrefslogtreecommitdiffstats
path: root/drive
diff options
context:
space:
mode:
authorjeff.yin2019-11-12 11:29:05 +0800
committerTeddy Wing2023-03-27 19:31:17 +0200
commit92d09a94cdd8c2f78bd9615b5eefd635c369fd87 (patch)
tree4b2dc6a7fd6c817efdc5d00e1b209e9bdda24a36 /drive
parent8b463b2b53fa43270681f8b829f073fd60ab0b7b (diff)
downloadgdrive-master.tar.bz2
support teamdrivesHEADmaster
Diffstat (limited to 'drive')
-rw-r--r--drive/delete.go6
-rw-r--r--drive/download.go13
-rw-r--r--drive/export.go2
-rw-r--r--drive/info.go5
-rw-r--r--drive/list.go12
-rw-r--r--drive/mkdir.go5
-rw-r--r--drive/sync.go11
-rw-r--r--drive/sync_download.go9
-rw-r--r--drive/sync_upload.go19
-rw-r--r--drive/update.go7
-rw-r--r--drive/upload.go9
11 files changed, 57 insertions, 41 deletions
diff --git a/drive/delete.go b/drive/delete.go
index 314672c..5b412a8 100644
--- a/drive/delete.go
+++ b/drive/delete.go
@@ -12,7 +12,7 @@ type DeleteArgs struct {
}
func (self *Drive) Delete(args DeleteArgs) error {
- f, err := self.service.Files.Get(args.Id).Fields("name", "mimeType").Do()
+ f, err := self.service.Files.Get(args.Id).SupportsAllDrives(true).Fields("name", "mimeType").Do()
if err != nil {
return fmt.Errorf("Failed to get file: %s", err)
}
@@ -21,7 +21,7 @@ func (self *Drive) Delete(args DeleteArgs) error {
return fmt.Errorf("'%s' is a directory, use the 'recursive' flag to delete directories", f.Name)
}
- err = self.service.Files.Delete(args.Id).Do()
+ err = self.service.Files.Delete(args.Id).SupportsAllDrives(true).Do()
if err != nil {
return fmt.Errorf("Failed to delete file: %s", err)
}
@@ -31,7 +31,7 @@ func (self *Drive) Delete(args DeleteArgs) error {
}
func (self *Drive) deleteFile(fileId string) error {
- err := self.service.Files.Delete(fileId).Do()
+ err := self.service.Files.Delete(fileId).SupportsAllDrives(true).Do()
if err != nil {
return fmt.Errorf("Failed to delete file: %s", err)
}
diff --git a/drive/download.go b/drive/download.go
index e4a4141..795d4b6 100644
--- a/drive/download.go
+++ b/drive/download.go
@@ -29,7 +29,7 @@ func (self *Drive) Download(args DownloadArgs) error {
return self.downloadRecursive(args)
}
- f, err := self.service.Files.Get(args.Id).Fields("id", "name", "size", "mimeType", "md5Checksum").Do()
+ f, err := self.service.Files.Get(args.Id).SupportsAllDrives(true).Fields("id", "name", "size", "mimeType", "md5Checksum").Do()
if err != nil {
return fmt.Errorf("Failed to get file: %s", err)
}
@@ -108,7 +108,8 @@ func (self *Drive) DownloadQuery(args DownloadQueryArgs) error {
}
func (self *Drive) downloadRecursive(args DownloadArgs) error {
- f, err := self.service.Files.Get(args.Id).Fields("id", "name", "size", "mimeType", "md5Checksum").Do()
+ fmt.Println("jeff_debug downloadRecursive")
+ f, err := self.service.Files.Get(args.Id).SupportsAllDrives(true).Fields("id", "name", "size", "mimeType", "md5Checksum").Do()
if err != nil {
return fmt.Errorf("Failed to get file: %s", err)
}
@@ -126,8 +127,8 @@ func (self *Drive) downloadRecursive(args DownloadArgs) error {
func (self *Drive) downloadBinary(f *drive.File, args DownloadArgs) (int64, int64, error) {
// Get timeout reader wrapper and context
timeoutReaderWrapper, ctx := getTimeoutReaderWrapperContext(args.Timeout)
-
- res, err := self.service.Files.Get(f.Id).Context(ctx).Download()
+ fmt.Println("jeff_debug downloadBinary")
+ res, err := self.service.Files.Get(f.Id).SupportsAllDrives(true).Context(ctx).Download()
if err != nil {
if isTimeoutError(err) {
return 0, 0, fmt.Errorf("Failed to download file: timeout, no data was transferred for %v", args.Timeout)
@@ -140,6 +141,7 @@ func (self *Drive) downloadBinary(f *drive.File, args DownloadArgs) (int64, int6
// Path to file
fpath := filepath.Join(args.Path, f.Name)
+ fmt.Println("fpath:", fpath)
if !args.Stdout {
fmt.Fprintf(args.Out, "Downloading %s -> %s\n", f.Name, fpath)
@@ -197,6 +199,8 @@ func (self *Drive) saveFile(args saveFileArgs) (int64, int64, error) {
// Download to tmp file
tmpPath := args.fpath + ".incomplete"
+ fmt.Println("tmpPath:", tmpPath)
+
// Create new file
outFile, err := os.Create(tmpPath)
if err != nil {
@@ -224,6 +228,7 @@ func (self *Drive) saveFile(args saveFileArgs) (int64, int64, error) {
}
func (self *Drive) downloadDirectory(parent *drive.File, args DownloadArgs) error {
+ fmt.Println("jeff_debug downloadDirectory")
listArgs := listAllFilesArgs{
query: fmt.Sprintf("'%s' in parents", parent.Id),
fields: []googleapi.Field{"nextPageToken", "files(id,name)"},
diff --git a/drive/export.go b/drive/export.go
index a09594e..92a44a0 100644
--- a/drive/export.go
+++ b/drive/export.go
@@ -26,7 +26,7 @@ type ExportArgs struct {
}
func (self *Drive) Export(args ExportArgs) error {
- f, err := self.service.Files.Get(args.Id).Fields("name", "mimeType").Do()
+ f, err := self.service.Files.Get(args.Id).SupportsTeamDrives(true).Fields("name", "mimeType").Do()
if err != nil {
return fmt.Errorf("Failed to get file: %s", err)
}
diff --git a/drive/info.go b/drive/info.go
index c6f4471..2a1a20c 100644
--- a/drive/info.go
+++ b/drive/info.go
@@ -2,8 +2,9 @@ package drive
import (
"fmt"
- "google.golang.org/api/drive/v3"
"io"
+
+ "google.golang.org/api/drive/v3"
)
type FileInfoArgs struct {
@@ -13,7 +14,7 @@ type FileInfoArgs struct {
}
func (self *Drive) Info(args FileInfoArgs) error {
- f, err := self.service.Files.Get(args.Id).Fields("id", "name", "size", "createdTime", "modifiedTime", "md5Checksum", "mimeType", "parents", "shared", "description", "webContentLink", "webViewLink").Do()
+ f, err := self.service.Files.Get(args.Id).SupportsAllDrives(true).Fields("id", "name", "size", "createdTime", "modifiedTime", "md5Checksum", "mimeType", "parents", "shared", "description", "webContentLink", "webViewLink").Do()
if err != nil {
return fmt.Errorf("Failed to get file: %s", err)
}
diff --git a/drive/list.go b/drive/list.go
index ab8aca5..ff52ef5 100644
--- a/drive/list.go
+++ b/drive/list.go
@@ -2,11 +2,12 @@ package drive
import (
"fmt"
+ "io"
+ "text/tabwriter"
+
"golang.org/x/net/context"
"google.golang.org/api/drive/v3"
"google.golang.org/api/googleapi"
- "io"
- "text/tabwriter"
)
type ListFilesArgs struct {
@@ -73,10 +74,13 @@ func (self *Drive) listAllFiles(args listAllFilesArgs) ([]*drive.File, error) {
}
controlledStop := fmt.Errorf("Controlled stop")
-
- err := self.service.Files.List().Q(args.query).Fields(args.fields...).OrderBy(args.sortOrder).PageSize(pageSize).Pages(context.TODO(), func(fl *drive.FileList) error {
+ fmt.Println(args.query)
+ err := self.service.Files.List().Corpora("allDrives").IncludeItemsFromAllDrives(true).SupportsAllDrives(true).Q(args.query).Fields(args.fields...).OrderBy(args.sortOrder).PageSize(pageSize).Pages(context.TODO(), func(fl *drive.FileList) error {
files = append(files, fl.Files...)
+ fmt.Println("jeff_debug listAllFiles")
+ fmt.Println(fl.Files)
+ fmt.Println(files)
// Stop when we have all the files we need
if args.maxFiles > 0 && len(files) >= int(args.maxFiles) {
return controlledStop
diff --git a/drive/mkdir.go b/drive/mkdir.go
index 05d5191..1fabef0 100644
--- a/drive/mkdir.go
+++ b/drive/mkdir.go
@@ -2,8 +2,9 @@ package drive
import (
"fmt"
- "google.golang.org/api/drive/v3"
"io"
+
+ "google.golang.org/api/drive/v3"
)
const DirectoryMimeType = "application/vnd.google-apps.folder"
@@ -35,7 +36,7 @@ func (self *Drive) mkdir(args MkdirArgs) (*drive.File, error) {
dstFile.Parents = args.Parents
// Create directory
- f, err := self.service.Files.Create(dstFile).Do()
+ f, err := self.service.Files.Create(dstFile).SupportsAllDrives(true).Do()
if err != nil {
return nil, fmt.Errorf("Failed to create directory: %s", err)
}
diff --git a/drive/sync.go b/drive/sync.go
index 4b2d08b..55192db 100644
--- a/drive/sync.go
+++ b/drive/sync.go
@@ -2,16 +2,17 @@ package drive
import (
"fmt"
- "github.com/sabhiram/go-gitignore"
- "github.com/soniakeys/graph"
- "google.golang.org/api/drive/v3"
- "google.golang.org/api/googleapi"
"io"
"os"
"path/filepath"
"strings"
"text/tabwriter"
"time"
+
+ "github.com/sabhiram/go-gitignore"
+ "github.com/soniakeys/graph"
+ "google.golang.org/api/drive/v3"
+ "google.golang.org/api/googleapi"
)
const DefaultIgnoreFile = ".gdriveignore"
@@ -86,7 +87,7 @@ func (self *Drive) prepareSyncFiles(localPath string, root *drive.File, cmp File
}
func (self *Drive) isSyncFile(id string) (bool, error) {
- f, err := self.service.Files.Get(id).Fields("appProperties").Do()
+ f, err := self.service.Files.Get(id).SupportsAllDrives(true).Fields("appProperties").Do()
if err != nil {
return false, fmt.Errorf("Failed to get file: %s", err)
}
diff --git a/drive/sync_download.go b/drive/sync_download.go
index 58cd49c..9a88b61 100644
--- a/drive/sync_download.go
+++ b/drive/sync_download.go
@@ -3,13 +3,14 @@ package drive
import (
"bytes"
"fmt"
- "google.golang.org/api/drive/v3"
- "google.golang.org/api/googleapi"
"io"
"os"
"path/filepath"
"sort"
"time"
+
+ "google.golang.org/api/drive/v3"
+ "google.golang.org/api/googleapi"
)
type DownloadSyncArgs struct {
@@ -85,7 +86,7 @@ func (self *Drive) DownloadSync(args DownloadSyncArgs) error {
func (self *Drive) getSyncRoot(rootId string) (*drive.File, error) {
fields := []googleapi.Field{"id", "name", "mimeType", "appProperties"}
- f, err := self.service.Files.Get(rootId).Fields(fields...).Do()
+ f, err := self.service.Files.Get(rootId).SupportsAllDrives(true).Fields(fields...).Do()
if err != nil {
return nil, fmt.Errorf("Failed to find root dir: %s", err)
}
@@ -191,7 +192,7 @@ func (self *Drive) downloadRemoteFile(id, fpath string, args DownloadSyncArgs, t
// Get timeout reader wrapper and context
timeoutReaderWrapper, ctx := getTimeoutReaderWrapperContext(args.Timeout)
- res, err := self.service.Files.Get(id).Context(ctx).Download()
+ res, err := self.service.Files.Get(id).SupportsAllDrives(true).Context(ctx).Download()
if err != nil {
if isBackendOrRateLimitError(err) && try < MaxErrorRetries {
exponentialBackoffSleep(try)
diff --git a/drive/sync_upload.go b/drive/sync_upload.go
index f1e43a4..bd2b76d 100644
--- a/drive/sync_upload.go
+++ b/drive/sync_upload.go
@@ -3,13 +3,14 @@ package drive
import (
"bytes"
"fmt"
- "google.golang.org/api/drive/v3"
- "google.golang.org/api/googleapi"
"io"
"os"
"path/filepath"
"sort"
"time"
+
+ "google.golang.org/api/drive/v3"
+ "google.golang.org/api/googleapi"
)
type UploadSyncArgs struct {
@@ -96,7 +97,7 @@ func (self *Drive) UploadSync(args UploadSyncArgs) error {
func (self *Drive) prepareSyncRoot(args UploadSyncArgs) (*drive.File, error) {
fields := []googleapi.Field{"id", "name", "mimeType", "appProperties"}
- f, err := self.service.Files.Get(args.RootId).Fields(fields...).Do()
+ f, err := self.service.Files.Get(args.RootId).SupportsAllDrives(true).Fields(fields...).Do()
if err != nil {
return nil, fmt.Errorf("Failed to find root dir: %s", err)
}
@@ -128,7 +129,7 @@ func (self *Drive) prepareSyncRoot(args UploadSyncArgs) (*drive.File, error) {
AppProperties: map[string]string{"sync": "true", "syncRoot": "true"},
}
- f, err = self.service.Files.Update(f.Id, dstFile).Fields(fields...).Do()
+ f, err = self.service.Files.Update(f.Id, dstFile).SupportsAllDrives(true).Fields(fields...).Do()
if err != nil {
return nil, fmt.Errorf("Failed to update root directory: %s", err)
}
@@ -268,7 +269,7 @@ func (self *Drive) createMissingRemoteDir(args createMissingRemoteDirArgs) (*dri
return dstFile, nil
}
- f, err := self.service.Files.Create(dstFile).Do()
+ f, err := self.service.Files.Create(dstFile).SupportsAllDrives(true).Do()
if err != nil {
if isBackendOrRateLimitError(err) && args.try < MaxErrorRetries {
exponentialBackoffSleep(args.try)
@@ -311,7 +312,7 @@ func (self *Drive) uploadMissingFile(parentId string, lf *LocalFile, args Upload
// Wrap reader in timeout reader
reader, ctx := getTimeoutReaderContext(progressReader, args.Timeout)
- _, err = self.service.Files.Create(dstFile).Fields("id", "name", "size", "md5Checksum").Context(ctx).Media(reader, chunkSize).Do()
+ _, err = self.service.Files.Create(dstFile).SupportsAllDrives(true).Fields("id", "name", "size", "md5Checksum").Context(ctx).Media(reader, chunkSize).Do()
if err != nil {
if isBackendOrRateLimitError(err) && try < MaxErrorRetries {
exponentialBackoffSleep(try)
@@ -352,7 +353,7 @@ func (self *Drive) updateChangedFile(cf *changedFile, args UploadSyncArgs, try i
// Wrap reader in timeout reader
reader, ctx := getTimeoutReaderContext(progressReader, args.Timeout)
- _, err = self.service.Files.Update(cf.remote.file.Id, dstFile).Context(ctx).Media(reader, chunkSize).Do()
+ _, err = self.service.Files.Update(cf.remote.file.Id, dstFile).SupportsAllDrives(true).Context(ctx).Media(reader, chunkSize).Do()
if err != nil {
if isBackendOrRateLimitError(err) && try < MaxErrorRetries {
exponentialBackoffSleep(try)
@@ -373,7 +374,7 @@ func (self *Drive) deleteRemoteFile(rf *RemoteFile, args UploadSyncArgs, try int
return nil
}
- err := self.service.Files.Delete(rf.file.Id).Do()
+ err := self.service.Files.Delete(rf.file.Id).SupportsAllDrives(true).Do()
if err != nil {
if isBackendOrRateLimitError(err) && try < MaxErrorRetries {
exponentialBackoffSleep(try)
@@ -389,7 +390,7 @@ func (self *Drive) deleteRemoteFile(rf *RemoteFile, args UploadSyncArgs, try int
func (self *Drive) dirIsEmpty(id string) (bool, error) {
query := fmt.Sprintf("'%s' in parents", id)
- fileList, err := self.service.Files.List().Q(query).Do()
+ fileList, err := self.service.Files.List().Corpora("allDrives").IncludeItemsFromAllDrives(true).SupportsAllDrives(true).Q(query).Do()
if err != nil {
return false, fmt.Errorf("Empty dir check failed: ", err)
}
diff --git a/drive/update.go b/drive/update.go
index f496f52..0d397e5 100644
--- a/drive/update.go
+++ b/drive/update.go
@@ -2,12 +2,13 @@ package drive
import (
"fmt"
- "google.golang.org/api/drive/v3"
- "google.golang.org/api/googleapi"
"io"
"mime"
"path/filepath"
"time"
+
+ "google.golang.org/api/drive/v3"
+ "google.golang.org/api/googleapi"
)
type UpdateArgs struct {
@@ -64,7 +65,7 @@ func (self *Drive) Update(args UpdateArgs) error {
fmt.Fprintf(args.Out, "Uploading %s\n", args.Path)
started := time.Now()
- f, err := self.service.Files.Update(args.Id, dstFile).Fields("id", "name", "size").Context(ctx).Media(reader, chunkSize).Do()
+ f, err := self.service.Files.Update(args.Id, dstFile).SupportsAllDrives(true).Fields("id", "name", "size").Context(ctx).Media(reader, chunkSize).Do()
if err != nil {
if isTimeoutError(err) {
return fmt.Errorf("Failed to upload file: timeout, no data was transferred for %v", args.Timeout)
diff --git a/drive/upload.go b/drive/upload.go
index a4482e2..6b7889a 100644
--- a/drive/upload.go
+++ b/drive/upload.go
@@ -2,13 +2,14 @@ package drive
import (
"fmt"
- "google.golang.org/api/drive/v3"
- "google.golang.org/api/googleapi"
"io"
"mime"
"os"
"path/filepath"
"time"
+
+ "google.golang.org/api/drive/v3"
+ "google.golang.org/api/googleapi"
)
type UploadArgs struct {
@@ -184,7 +185,7 @@ func (self *Drive) uploadFile(args UploadArgs) (*drive.File, int64, error) {
fmt.Fprintf(args.Out, "Uploading %s\n", args.Path)
started := time.Now()
- f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size", "md5Checksum", "webContentLink").Context(ctx).Media(reader, chunkSize).Do()
+ f, err := self.service.Files.Create(dstFile).SupportsAllDrives(true).Fields("id", "name", "size", "md5Checksum", "webContentLink").Context(ctx).Media(reader, chunkSize).Do()
if err != nil {
if isTimeoutError(err) {
return nil, 0, fmt.Errorf("Failed to upload file: timeout, no data was transferred for %v", args.Timeout)
@@ -239,7 +240,7 @@ func (self *Drive) UploadStream(args UploadStreamArgs) error {
fmt.Fprintf(args.Out, "Uploading %s\n", dstFile.Name)
started := time.Now()
- f, err := self.service.Files.Create(dstFile).Fields("id", "name", "size", "webContentLink").Context(ctx).Media(reader, chunkSize).Do()
+ f, err := self.service.Files.Create(dstFile).SupportsAllDrives(true).Fields("id", "name", "size", "webContentLink").Context(ctx).Media(reader, chunkSize).Do()
if err != nil {
if isTimeoutError(err) {
return fmt.Errorf("Failed to upload file: timeout, no data was transferred for %v", args.Timeout)