|
package onedrive_sharelink |
|
|
|
import ( |
|
"context" |
|
"strings" |
|
"time" |
|
|
|
"github.com/alist-org/alist/v3/internal/driver" |
|
"github.com/alist-org/alist/v3/internal/errs" |
|
"github.com/alist-org/alist/v3/internal/model" |
|
"github.com/alist-org/alist/v3/pkg/cron" |
|
"github.com/alist-org/alist/v3/pkg/utils" |
|
log "github.com/sirupsen/logrus" |
|
) |
|
|
|
type OnedriveSharelink struct { |
|
model.Storage |
|
cron *cron.Cron |
|
Addition |
|
} |
|
|
|
func (d *OnedriveSharelink) Config() driver.Config { |
|
return config |
|
} |
|
|
|
func (d *OnedriveSharelink) GetAddition() driver.Additional { |
|
return &d.Addition |
|
} |
|
|
|
func (d *OnedriveSharelink) Init(ctx context.Context) error { |
|
|
|
var err error |
|
|
|
|
|
d.IsSharepoint = !strings.Contains(d.ShareLinkURL, "-my") |
|
|
|
|
|
d.cron = cron.NewCron(time.Hour * 1) |
|
d.cron.Do(func() { |
|
var err error |
|
d.Headers, err = d.getHeaders() |
|
if err != nil { |
|
log.Errorf("%+v", err) |
|
} |
|
}) |
|
|
|
|
|
d.Headers, err = d.getHeaders() |
|
if err != nil { |
|
return err |
|
} |
|
|
|
return nil |
|
} |
|
|
|
func (d *OnedriveSharelink) Drop(ctx context.Context) error { |
|
return nil |
|
} |
|
|
|
func (d *OnedriveSharelink) List(ctx context.Context, dir model.Obj, args model.ListArgs) ([]model.Obj, error) { |
|
path := dir.GetPath() |
|
files, err := d.getFiles(path) |
|
if err != nil { |
|
return nil, err |
|
} |
|
|
|
|
|
return utils.SliceConvert(files, func(src Item) (model.Obj, error) { |
|
return fileToObj(src), nil |
|
}) |
|
} |
|
|
|
func (d *OnedriveSharelink) Link(ctx context.Context, file model.Obj, args model.LinkArgs) (*model.Link, error) { |
|
|
|
uniqueId := file.GetID() |
|
|
|
uniqueId = uniqueId[1 : len(uniqueId)-1] |
|
url := d.downloadLinkPrefix + uniqueId |
|
header := d.Headers |
|
|
|
|
|
if d.HeaderTime < time.Now().Unix()-1800 { |
|
var err error |
|
log.Debug("headers are older than 30 minutes, get new headers") |
|
header, err = d.getHeaders() |
|
if err != nil { |
|
return nil, err |
|
} |
|
} |
|
|
|
return &model.Link{ |
|
URL: url, |
|
Header: header, |
|
}, nil |
|
} |
|
|
|
func (d *OnedriveSharelink) MakeDir(ctx context.Context, parentDir model.Obj, dirName string) error { |
|
|
|
return errs.NotImplement |
|
} |
|
|
|
func (d *OnedriveSharelink) Move(ctx context.Context, srcObj, dstDir model.Obj) error { |
|
|
|
return errs.NotImplement |
|
} |
|
|
|
func (d *OnedriveSharelink) Rename(ctx context.Context, srcObj model.Obj, newName string) error { |
|
|
|
return errs.NotImplement |
|
} |
|
|
|
func (d *OnedriveSharelink) Copy(ctx context.Context, srcObj, dstDir model.Obj) error { |
|
|
|
return errs.NotImplement |
|
} |
|
|
|
func (d *OnedriveSharelink) Remove(ctx context.Context, obj model.Obj) error { |
|
|
|
return errs.NotImplement |
|
} |
|
|
|
func (d *OnedriveSharelink) Put(ctx context.Context, dstDir model.Obj, stream model.FileStreamer, up driver.UpdateProgress) error { |
|
|
|
return errs.NotImplement |
|
} |
|
|
|
|
|
|
|
|
|
|
|
var _ driver.Driver = (*OnedriveSharelink)(nil) |
|
|