2022-01-03 12:06:36 +00:00
|
|
|
package operate
|
|
|
|
|
|
|
|
import (
|
|
|
|
"github.com/Xhofe/alist/drivers/base"
|
|
|
|
"github.com/Xhofe/alist/model"
|
|
|
|
"github.com/Xhofe/alist/utils"
|
2022-01-14 10:19:58 +00:00
|
|
|
log "github.com/sirupsen/logrus"
|
2022-01-27 15:48:29 +00:00
|
|
|
"runtime/debug"
|
2022-01-03 12:06:36 +00:00
|
|
|
)
|
|
|
|
|
2022-01-28 03:04:56 +00:00
|
|
|
func Path(driver base.Driver, account *model.Account, path string) (*model.File, []model.File, error) {
|
|
|
|
return driver.Path(path, account)
|
|
|
|
}
|
|
|
|
|
|
|
|
func Files(driver base.Driver, account *model.Account, path string) ([]model.File, error) {
|
|
|
|
_, files, err := Path(driver, account, path)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if files == nil {
|
|
|
|
return nil, base.ErrNotFolder
|
|
|
|
}
|
|
|
|
return files, nil
|
|
|
|
}
|
|
|
|
|
|
|
|
func File(driver base.Driver, account *model.Account, path string) (*model.File, error) {
|
|
|
|
file, _, err := Path(driver, account, path)
|
|
|
|
if err != nil {
|
|
|
|
return nil, err
|
|
|
|
}
|
|
|
|
if file == nil {
|
|
|
|
return nil, base.ErrNotFolder
|
|
|
|
}
|
|
|
|
return file, nil
|
|
|
|
}
|
|
|
|
|
2022-01-03 12:06:36 +00:00
|
|
|
func MakeDir(driver base.Driver, account *model.Account, path string, clearCache bool) error {
|
2022-01-20 11:58:25 +00:00
|
|
|
log.Debugf("mkdir: %s", path)
|
2022-01-03 12:06:36 +00:00
|
|
|
err := driver.MakeDir(path, account)
|
|
|
|
if err == nil && clearCache {
|
|
|
|
_ = base.DeleteCache(utils.Dir(path), account)
|
|
|
|
}
|
2022-01-14 10:19:58 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Errorf("mkdir error: %s", err.Error())
|
|
|
|
}
|
2022-01-03 12:06:36 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func Move(driver base.Driver, account *model.Account, src, dst string, clearCache bool) error {
|
2022-01-20 11:58:25 +00:00
|
|
|
log.Debugf("move %s to %s", src, dst)
|
2022-01-03 12:06:36 +00:00
|
|
|
rename := false
|
|
|
|
if utils.Dir(src) == utils.Dir(dst) {
|
|
|
|
rename = true
|
|
|
|
}
|
|
|
|
var err error
|
|
|
|
if rename {
|
|
|
|
err = driver.Rename(src, dst, account)
|
|
|
|
} else {
|
|
|
|
err = driver.Move(src, dst, account)
|
|
|
|
}
|
|
|
|
if err == nil && clearCache {
|
|
|
|
_ = base.DeleteCache(utils.Dir(src), account)
|
|
|
|
if !rename {
|
|
|
|
_ = base.DeleteCache(utils.Dir(dst), account)
|
|
|
|
}
|
|
|
|
}
|
2022-01-14 10:19:58 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Errorf("move error: %s", err.Error())
|
|
|
|
}
|
2022-01-03 12:06:36 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func Copy(driver base.Driver, account *model.Account, src, dst string, clearCache bool) error {
|
2022-01-20 11:58:25 +00:00
|
|
|
log.Debugf("copy %s to %s", src, dst)
|
2022-01-03 12:06:36 +00:00
|
|
|
err := driver.Copy(src, dst, account)
|
|
|
|
if err == nil && clearCache {
|
|
|
|
_ = base.DeleteCache(utils.Dir(dst), account)
|
|
|
|
}
|
2022-01-14 10:19:58 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Errorf("copy error: %s", err.Error())
|
|
|
|
}
|
2022-01-03 12:06:36 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func Delete(driver base.Driver, account *model.Account, path string, clearCache bool) error {
|
2022-01-20 11:58:25 +00:00
|
|
|
log.Debugf("delete %s", path)
|
2022-01-03 12:06:36 +00:00
|
|
|
err := driver.Delete(path, account)
|
|
|
|
if err == nil && clearCache {
|
|
|
|
_ = base.DeleteCache(utils.Dir(path), account)
|
|
|
|
}
|
2022-01-14 10:19:58 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Errorf("delete error: %s", err.Error())
|
|
|
|
}
|
2022-01-03 12:06:36 +00:00
|
|
|
return err
|
|
|
|
}
|
|
|
|
|
|
|
|
func Upload(driver base.Driver, account *model.Account, file *model.FileStream, clearCache bool) error {
|
2022-01-08 13:29:00 +00:00
|
|
|
defer func() {
|
|
|
|
_ = file.Close()
|
|
|
|
}()
|
2022-01-03 12:06:36 +00:00
|
|
|
err := driver.Upload(file, account)
|
|
|
|
if err == nil && clearCache {
|
|
|
|
_ = base.DeleteCache(file.ParentPath, account)
|
|
|
|
}
|
2022-01-14 10:19:58 +00:00
|
|
|
if err != nil {
|
|
|
|
log.Errorf("upload error: %s", err.Error())
|
|
|
|
}
|
2022-01-27 15:48:29 +00:00
|
|
|
debug.FreeOSMemory()
|
2022-01-03 12:06:36 +00:00
|
|
|
return err
|
|
|
|
}
|