arlo-cleaner/rclone/copy.go

65 lines
1.6 KiB
Go
Executable File

package rclone
import (
"context"
"fmt"
"io"
"local/logb"
"local/sandbox/arlo-cleaner/config"
"path"
"time"
_ "github.com/rclone/rclone/backend/drive"
_ "github.com/rclone/rclone/backend/local"
_ "github.com/rclone/rclone/backend/s3"
"github.com/rclone/rclone/fs"
"github.com/rclone/rclone/fs/object"
)
func (rc *RClone) Context() context.Context {
return context.Background()
}
func (rc *RClone) CopyTo(r io.Reader, destination string) error {
logb.Verbosef("copy to: %v", destination)
f, err := fs.NewFs(rc.Context(), path.Dir(destination))
logb.Verbosef("got new fs: %v", err)
if err != nil {
return err
}
if info, err := f.NewObject(rc.Context(), path.Base(destination)); err == nil {
logb.Warnf("not re-uploading file to: %v: %v", destination, info)
fmt.Println("copyTo", 3)
return nil
} else {
logb.Verbosef("error listing existing object as expected: %v, %v", err, info)
}
logb.Verbosef("new obj err: %v", nil)
info := object.NewStaticObjectInfo(path.Base(destination), time.Now(), 0, true, nil, f)
logb.Infof("uploading %v", destination)
if config.DryRun {
logb.Debugf("copy to", info)
//return nil TODO
}
_, err = f.Put(rc.Context(), r, info)
return err
}
func (rc *RClone) CopyFrom(w io.Writer, source string) error {
logb.Infof("copying from %v", source)
f, err := fs.NewFs(rc.Context(), path.Dir(source))
if err != nil {
return err
}
obj, err := f.NewObject(rc.Context(), path.Base(source))
if err != nil {
return err
}
r, err := obj.Open(rc.Context())
if err != nil {
return nil
}
_, err = io.Copy(w, r)
return err
}