mirror of
https://github.com/halejohn/Cloudreve.git
synced 2026-01-26 09:34:57 +08:00
Feat: re-save shared folder to user's space
This commit is contained in:
@@ -13,7 +13,7 @@ var (
|
||||
ErrIllegalObjectName = errors.New("目标名称非法")
|
||||
ErrClientCanceled = errors.New("客户端取消操作")
|
||||
ErrInsertFileRecord = serializer.NewError(serializer.CodeDBError, "无法插入文件记录", nil)
|
||||
ErrFileExisted = serializer.NewError(serializer.CodeObjectExist, "同名文件已存在", nil)
|
||||
ErrFileExisted = serializer.NewError(serializer.CodeObjectExist, "同名文件或目录已存在", nil)
|
||||
ErrFolderExisted = serializer.NewError(serializer.CodeObjectExist, "同名目录已存在", nil)
|
||||
ErrPathNotExist = serializer.NewError(404, "路径不存在", nil)
|
||||
ErrObjectNotExist = serializer.NewError(404, "文件不存在", nil)
|
||||
|
||||
@@ -76,6 +76,8 @@ type FileSystem struct {
|
||||
FileTarget []model.File
|
||||
// 当前正在处理的目录对象
|
||||
DirTarget []model.Folder
|
||||
// 相对根目录
|
||||
Root *model.Folder
|
||||
|
||||
/*
|
||||
钩子函数
|
||||
@@ -107,6 +109,7 @@ func (fs *FileSystem) reset() {
|
||||
fs.Policy = nil
|
||||
fs.Hooks = nil
|
||||
fs.Handler = nil
|
||||
fs.Root = nil
|
||||
}
|
||||
|
||||
// NewFileSystem 初始化一个文件系统
|
||||
|
||||
@@ -377,22 +377,24 @@ func (fs *FileSystem) SaveTo(ctx context.Context, path string) error {
|
||||
return ErrPathNotExist
|
||||
}
|
||||
|
||||
// TODO 列目录
|
||||
var (
|
||||
totalSize uint64
|
||||
err error
|
||||
)
|
||||
|
||||
// 计算要复制的总大小
|
||||
var totalSize uint64
|
||||
for _, file := range fs.FileTarget {
|
||||
totalSize += file.Size
|
||||
if len(fs.DirTarget) > 0 {
|
||||
totalSize, err = fs.DirTarget[0].CopyFolderTo(fs.DirTarget[0].ID, folder)
|
||||
} else {
|
||||
parent := model.Folder{
|
||||
OwnerID: fs.FileTarget[0].UserID,
|
||||
}
|
||||
parent.ID = fs.FileTarget[0].FolderID
|
||||
totalSize, err = parent.MoveOrCopyFileTo([]uint{fs.FileTarget[0].ID}, folder, true)
|
||||
}
|
||||
|
||||
// 扣除用户容量
|
||||
if !fs.User.IncreaseStorage(totalSize) {
|
||||
return ErrInsufficientCapacity
|
||||
}
|
||||
|
||||
err := folder.CopyChildFrom(fs.DirTarget, fs.FileTarget)
|
||||
fs.User.IncreaseStorageWithoutCheck(totalSize)
|
||||
if err != nil {
|
||||
fs.User.DeductionStorage(totalSize)
|
||||
return ErrFileExisted.WithError(err)
|
||||
}
|
||||
|
||||
|
||||
@@ -23,9 +23,9 @@ func (fs *FileSystem) IsPathExist(path string) (bool, *model.Folder) {
|
||||
// TODO:测试新增
|
||||
var currentFolder *model.Folder
|
||||
|
||||
// 如果已设定目录对象,则从给定目录向下遍历
|
||||
if len(fs.DirTarget) > 0 {
|
||||
currentFolder = &fs.DirTarget[0]
|
||||
// 如果已设定跟目录对象,则从给定目录向下遍历
|
||||
if fs.Root != nil {
|
||||
currentFolder = fs.Root
|
||||
}
|
||||
|
||||
for _, folderName := range pathList {
|
||||
|
||||
Reference in New Issue
Block a user