drive: fix move and copy from TeamDrive to GDrive
This commit is contained in:
parent
45df37f55f
commit
2657d70567
1 changed files with 26 additions and 2 deletions
|
@ -1877,11 +1877,16 @@ func (f *Fs) Copy(src fs.Object, remote string) (fs.Object, error) {
|
||||||
return nil, err
|
return nil, err
|
||||||
}
|
}
|
||||||
|
|
||||||
|
supportTeamDrives, err := f.ShouldSupportTeamDrives(src)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
var info *drive.File
|
var info *drive.File
|
||||||
err = f.pacer.Call(func() (bool, error) {
|
err = f.pacer.Call(func() (bool, error) {
|
||||||
info, err = f.svc.Files.Copy(srcObj.id, createInfo).
|
info, err = f.svc.Files.Copy(srcObj.id, createInfo).
|
||||||
Fields(partialFields).
|
Fields(partialFields).
|
||||||
SupportsTeamDrives(f.isTeamDrive).
|
SupportsTeamDrives(supportTeamDrives).
|
||||||
KeepRevisionForever(f.opt.KeepRevisionForever).
|
KeepRevisionForever(f.opt.KeepRevisionForever).
|
||||||
Do()
|
Do()
|
||||||
return shouldRetry(err)
|
return shouldRetry(err)
|
||||||
|
@ -2025,6 +2030,11 @@ func (f *Fs) Move(src fs.Object, remote string) (fs.Object, error) {
|
||||||
dstParents := strings.Join(dstInfo.Parents, ",")
|
dstParents := strings.Join(dstInfo.Parents, ",")
|
||||||
dstInfo.Parents = nil
|
dstInfo.Parents = nil
|
||||||
|
|
||||||
|
supportTeamDrives, err := f.ShouldSupportTeamDrives(src)
|
||||||
|
if err != nil {
|
||||||
|
return nil, err
|
||||||
|
}
|
||||||
|
|
||||||
// Do the move
|
// Do the move
|
||||||
var info *drive.File
|
var info *drive.File
|
||||||
err = f.pacer.Call(func() (bool, error) {
|
err = f.pacer.Call(func() (bool, error) {
|
||||||
|
@ -2032,7 +2042,7 @@ func (f *Fs) Move(src fs.Object, remote string) (fs.Object, error) {
|
||||||
RemoveParents(srcParentID).
|
RemoveParents(srcParentID).
|
||||||
AddParents(dstParents).
|
AddParents(dstParents).
|
||||||
Fields(partialFields).
|
Fields(partialFields).
|
||||||
SupportsTeamDrives(f.isTeamDrive).
|
SupportsTeamDrives(supportTeamDrives).
|
||||||
Do()
|
Do()
|
||||||
return shouldRetry(err)
|
return shouldRetry(err)
|
||||||
})
|
})
|
||||||
|
@ -2043,6 +2053,20 @@ func (f *Fs) Move(src fs.Object, remote string) (fs.Object, error) {
|
||||||
return f.newObjectWithInfo(remote, info)
|
return f.newObjectWithInfo(remote, info)
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// ShouldSupportTeamDrives returns the request should support TeamDrives
|
||||||
|
func (f *Fs) ShouldSupportTeamDrives(src fs.Object) (bool, error) {
|
||||||
|
srcIsTeamDrive := false
|
||||||
|
if srcFs, ok := src.Fs().(*Fs); ok {
|
||||||
|
srcIsTeamDrive = srcFs.isTeamDrive
|
||||||
|
}
|
||||||
|
|
||||||
|
if f.isTeamDrive {
|
||||||
|
return true, nil
|
||||||
|
}
|
||||||
|
|
||||||
|
return srcIsTeamDrive, nil
|
||||||
|
}
|
||||||
|
|
||||||
// PublicLink adds a "readable by anyone with link" permission on the given file or folder.
|
// PublicLink adds a "readable by anyone with link" permission on the given file or folder.
|
||||||
func (f *Fs) PublicLink(remote string) (link string, err error) {
|
func (f *Fs) PublicLink(remote string) (link string, err error) {
|
||||||
id, err := f.dirCache.FindDir(remote, false)
|
id, err := f.dirCache.FindDir(remote, false)
|
||||||
|
|
Loading…
Reference in a new issue