65 lines
1.6 KiB
Go
Executable File
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
|
|
}
|