diff --git a/backend/pikpak/helper.go b/backend/pikpak/helper.go index ee2815d94..e6f779da9 100644 --- a/backend/pikpak/helper.go +++ b/backend/pikpak/helper.go @@ -378,11 +378,23 @@ func calcGcid(r io.Reader, size int64) (string, error) { return hex.EncodeToString(totalHash.Sum(nil)), nil } +// unWrapObjectInfo returns the underlying Object unwrapped as much as +// possible or nil even if it is an OverrideRemote +func unWrapObjectInfo(oi fs.ObjectInfo) fs.Object { + if o, ok := oi.(fs.Object); ok { + return fs.UnWrapObject(o) + } else if do, ok := oi.(*fs.OverrideRemote); ok { + // Unwrap if it is an operations.OverrideRemote + return do.UnWrap() + } + return nil +} + // calcCid calculates Cid from source // // Cid is a simplified version of Gcid func calcCid(ctx context.Context, src fs.ObjectInfo) (cid string, err error) { - srcObj := fs.UnWrapObjectInfo(src) + srcObj := unWrapObjectInfo(src) if srcObj == nil { return "", fmt.Errorf("failed to unwrap object from src: %s", src) } diff --git a/backend/pikpak/pikpak.go b/backend/pikpak/pikpak.go index 25c27f1c4..b70ecf92a 100644 --- a/backend/pikpak/pikpak.go +++ b/backend/pikpak/pikpak.go @@ -1773,7 +1773,7 @@ func (o *Object) upload(ctx context.Context, in io.Reader, src fs.ObjectInfo, wi gcid, err := o.fs.getGcid(ctx, src) if err != nil || gcid == "" { fs.Debugf(o, "calculating gcid: %v", err) - if srcObj := fs.UnWrapObjectInfo(src); srcObj != nil && srcObj.Fs().Features().IsLocal { + if srcObj := unWrapObjectInfo(src); srcObj != nil && srcObj.Fs().Features().IsLocal { // No buffering; directly calculate gcid from source rc, err := srcObj.Open(ctx) if err != nil {