@@ -29,7 +29,6 @@ type ArchiveReader interface {
29
29
func GenerateMetaTreeFromFolderTraversal (r ArchiveReader ) (bool , []model.ObjTree ) {
30
30
encrypted := false
31
31
dirMap := make (map [string ]* model.ObjectTree )
32
- dirMap ["." ] = & model.ObjectTree {}
33
32
for _ , file := range r .Files () {
34
33
if encrypt , ok := file .(CanEncryptSubFile ); ok && encrypt .IsEncrypted () {
35
34
encrypted = true
@@ -44,7 +43,7 @@ func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree
44
43
dir = stdpath .Dir (name )
45
44
dirObj = dirMap [dir ]
46
45
if dirObj == nil {
47
- isNewFolder = true
46
+ isNewFolder = dir != "."
48
47
dirObj = & model.ObjectTree {}
49
48
dirObj .IsFolder = true
50
49
dirObj .Name = stdpath .Base (dir )
@@ -60,41 +59,45 @@ func GenerateMetaTreeFromFolderTraversal(r ArchiveReader) (bool, []model.ObjTree
60
59
dir = strings .TrimSuffix (name , "/" )
61
60
dirObj = dirMap [dir ]
62
61
if dirObj == nil {
63
- isNewFolder = true
62
+ isNewFolder = dir != "."
64
63
dirObj = & model.ObjectTree {}
65
64
dirMap [dir ] = dirObj
66
65
}
67
66
dirObj .IsFolder = true
68
67
dirObj .Name = stdpath .Base (dir )
69
68
dirObj .Modified = file .FileInfo ().ModTime ()
70
- dirObj .Children = make ([]model.ObjTree , 0 )
71
69
}
72
70
if isNewFolder {
73
71
// 将 文件夹 添加到 父文件夹
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 )
81
75
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 {
91
90
break
92
91
}
93
- dirObj = pDirObj
92
+ dirObj = parentDirObj
94
93
}
95
94
}
96
95
}
97
- return encrypted , dirMap ["." ].GetChildren ()
96
+ if len (dirMap ) > 0 {
97
+ return encrypted , dirMap ["." ].GetChildren ()
98
+ } else {
99
+ return encrypted , nil
100
+ }
98
101
}
99
102
100
103
func MakeModelObj (file os.FileInfo ) * model.Object {
0 commit comments