Skip to content

Commit 31c55a2

Browse files
authored
fix(archive): unable to preview (#8248)
* fix(archive): unable to preview * fix bug
1 parent 465dd17 commit 31c55a2

File tree

1 file changed

+25
-22
lines changed

1 file changed

+25
-22
lines changed

internal/archive/tool/helper.go

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -29,7 +29,6 @@ type ArchiveReader interface {
2929
func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree) {
3030
encrypted := false
3131
dirMap := make(map[string]*model.ObjectTree)
32-
dirMap["."] = &model.ObjectTree{}
3332
for _, file := range r.Files() {
3433
if encrypt, ok := file.(CanEncryptSubFile); ok && encrypt.IsEncrypted() {
3534
encrypted = true
@@ -44,7 +43,7 @@ func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree
4443
dir = stdpath.Dir(name)
4544
dirObj = dirMap[dir]
4645
if dirObj == nil {
47-
isNewFolder = true
46+
isNewFolder = dir != "."
4847
dirObj = &model.ObjectTree{}
4948
dirObj.IsFolder = true
5049
dirObj.Name = stdpath.Base(dir)
@@ -60,41 +59,45 @@ func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree
6059
dir = strings.TrimSuffix(name, "/")
6160
dirObj = dirMap[dir]
6261
if dirObj == nil {
63-
isNewFolder = true
62+
isNewFolder = dir != "."
6463
dirObj = &model.ObjectTree{}
6564
dirMap[dir] = dirObj
6665
}
6766
dirObj.IsFolder = true
6867
dirObj.Name = stdpath.Base(dir)
6968
dirObj.Modified = file.FileInfo().ModTime()
70-
dirObj.Children = make([]model.ObjTree, 0)
7169
}
7270
if isNewFolder {
7371
// 将 文件夹 添加到 父文件夹
74-
dir = stdpath.Dir(dir)
75-
pDirObj := dirMap[dir]
76-
if pDirObj != nil {
77-
pDirObj.Children = append(pDirObj.Children, dirObj)
78-
continue
79-
}
80-
72+
// 考虑压缩包仅记录文件的路径,不记录文件夹
73+
// 循环创建所有父文件夹
74+
parentDir := stdpath.Dir(dir)
8175
for {
82-
// 考虑压缩包仅记录文件的路径,不记录文件夹
83-
pDirObj = &model.ObjectTree{}
84-
pDirObj.IsFolder = true
85-
pDirObj.Name = stdpath.Base(dir)
86-
pDirObj.Modified = file.FileInfo().ModTime()
87-
dirMap[dir] = pDirObj
88-
pDirObj.Children = append(pDirObj.Children, dirObj)
89-
dir = stdpath.Dir(dir)
90-
if dirMap[dir] != nil {
76+
parentDirObj := dirMap[parentDir]
77+
if parentDirObj == nil {
78+
parentDirObj = &model.ObjectTree{}
79+
if parentDir != "." {
80+
parentDirObj.IsFolder = true
81+
parentDirObj.Name = stdpath.Base(parentDir)
82+
parentDirObj.Modified = file.FileInfo().ModTime()
83+
}
84+
dirMap[parentDir] = parentDirObj
85+
}
86+
parentDirObj.Children = append(parentDirObj.Children, dirObj)
87+
88+
parentDir = stdpath.Dir(parentDir)
89+
if dirMap[parentDir] != nil {
9190
break
9291
}
93-
dirObj = pDirObj
92+
dirObj = parentDirObj
9493
}
9594
}
9695
}
97-
return encrypted, dirMap["."].GetChildren()
96+
if len(dirMap) > 0 {
97+
return encrypted, dirMap["."].GetChildren()
98+
} else {
99+
return encrypted, nil
100+
}
98101
}
99102

100103
func MakeModelObj(file os.FileInfo) *model.Object {

0 commit comments

Comments
 (0)