fix(archive): unable to preview (#8248)
* fix(archive): unable to preview * fix bug
This commit is contained in:
parent
465dd1703d
commit
31c55a2adf
@ -29,7 +29,6 @@ type ArchiveReader interface {
|
|||||||
func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree) {
|
func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree) {
|
||||||
encrypted := false
|
encrypted := false
|
||||||
dirMap := make(map[string]*model.ObjectTree)
|
dirMap := make(map[string]*model.ObjectTree)
|
||||||
dirMap["."] = &model.ObjectTree{}
|
|
||||||
for _, file := range r.Files() {
|
for _, file := range r.Files() {
|
||||||
if encrypt, ok := file.(CanEncryptSubFile); ok && encrypt.IsEncrypted() {
|
if encrypt, ok := file.(CanEncryptSubFile); ok && encrypt.IsEncrypted() {
|
||||||
encrypted = true
|
encrypted = true
|
||||||
@ -44,7 +43,7 @@ func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree
|
|||||||
dir = stdpath.Dir(name)
|
dir = stdpath.Dir(name)
|
||||||
dirObj = dirMap[dir]
|
dirObj = dirMap[dir]
|
||||||
if dirObj == nil {
|
if dirObj == nil {
|
||||||
isNewFolder = true
|
isNewFolder = dir != "."
|
||||||
dirObj = &model.ObjectTree{}
|
dirObj = &model.ObjectTree{}
|
||||||
dirObj.IsFolder = true
|
dirObj.IsFolder = true
|
||||||
dirObj.Name = stdpath.Base(dir)
|
dirObj.Name = stdpath.Base(dir)
|
||||||
@ -60,41 +59,45 @@ func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree
|
|||||||
dir = strings.TrimSuffix(name, "/")
|
dir = strings.TrimSuffix(name, "/")
|
||||||
dirObj = dirMap[dir]
|
dirObj = dirMap[dir]
|
||||||
if dirObj == nil {
|
if dirObj == nil {
|
||||||
isNewFolder = true
|
isNewFolder = dir != "."
|
||||||
dirObj = &model.ObjectTree{}
|
dirObj = &model.ObjectTree{}
|
||||||
dirMap[dir] = dirObj
|
dirMap[dir] = dirObj
|
||||||
}
|
}
|
||||||
dirObj.IsFolder = true
|
dirObj.IsFolder = true
|
||||||
dirObj.Name = stdpath.Base(dir)
|
dirObj.Name = stdpath.Base(dir)
|
||||||
dirObj.Modified = file.FileInfo().ModTime()
|
dirObj.Modified = file.FileInfo().ModTime()
|
||||||
dirObj.Children = make([]model.ObjTree, 0)
|
|
||||||
}
|
}
|
||||||
if isNewFolder {
|
if isNewFolder {
|
||||||
// 将 文件夹 添加到 父文件夹
|
// 将 文件夹 添加到 父文件夹
|
||||||
dir = stdpath.Dir(dir)
|
// 考虑压缩包仅记录文件的路径,不记录文件夹
|
||||||
pDirObj := dirMap[dir]
|
// 循环创建所有父文件夹
|
||||||
if pDirObj != nil {
|
parentDir := stdpath.Dir(dir)
|
||||||
pDirObj.Children = append(pDirObj.Children, dirObj)
|
|
||||||
continue
|
|
||||||
}
|
|
||||||
|
|
||||||
for {
|
for {
|
||||||
// 考虑压缩包仅记录文件的路径,不记录文件夹
|
parentDirObj := dirMap[parentDir]
|
||||||
pDirObj = &model.ObjectTree{}
|
if parentDirObj == nil {
|
||||||
pDirObj.IsFolder = true
|
parentDirObj = &model.ObjectTree{}
|
||||||
pDirObj.Name = stdpath.Base(dir)
|
if parentDir != "." {
|
||||||
pDirObj.Modified = file.FileInfo().ModTime()
|
parentDirObj.IsFolder = true
|
||||||
dirMap[dir] = pDirObj
|
parentDirObj.Name = stdpath.Base(parentDir)
|
||||||
pDirObj.Children = append(pDirObj.Children, dirObj)
|
parentDirObj.Modified = file.FileInfo().ModTime()
|
||||||
dir = stdpath.Dir(dir)
|
}
|
||||||
if dirMap[dir] != nil {
|
dirMap[parentDir] = parentDirObj
|
||||||
|
}
|
||||||
|
parentDirObj.Children = append(parentDirObj.Children, dirObj)
|
||||||
|
|
||||||
|
parentDir = stdpath.Dir(parentDir)
|
||||||
|
if dirMap[parentDir] != nil {
|
||||||
break
|
break
|
||||||
}
|
}
|
||||||
dirObj = pDirObj
|
dirObj = parentDirObj
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return encrypted, dirMap["."].GetChildren()
|
if len(dirMap) > 0 {
|
||||||
|
return encrypted, dirMap["."].GetChildren()
|
||||||
|
} else {
|
||||||
|
return encrypted, nil
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
func MakeModelObj(file os.FileInfo) *model.Object {
|
func MakeModelObj(file os.FileInfo) *model.Object {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user