fix(archive): unable to preview (#8248)

* fix(archive): unable to preview

* fix bug
This commit is contained in:
j2rong4cn 2025-04-03 20:41:05 +08:00 committed by GitHub
parent 465dd1703d
commit 31c55a2adf
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -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 {