@@ -9,16 +9,15 @@ class WebFile(File.File):
9
9
10
10
files -- list of all files in the WebFile
11
11
"""
12
-
13
- def __init__ (self , reader : EndianBinaryReader , parent : File , name = None ):
14
- """Constructor Method
15
- """
16
- super ().__init__ (parent = parent , name = name )
17
-
12
+
13
+ def __init__ (self , reader : EndianBinaryReader , parent : File , name = None , ** kwargs ):
14
+ """Constructor Method"""
15
+ super ().__init__ (parent = parent , name = name , ** kwargs )
16
+
18
17
# check compression
19
18
magic = reader .read_bytes (2 )
20
19
reader .Position = 0
21
-
20
+
22
21
if magic == CompressionHelper .GZIP_MAGIC :
23
22
self .packer = "gzip"
24
23
data = CompressionHelper .decompress_gzip (reader .bytes )
@@ -34,49 +33,49 @@ def __init__(self, reader: EndianBinaryReader, parent: File, name=None):
34
33
else :
35
34
self .packer = "none"
36
35
reader .endian = "<"
37
-
36
+
38
37
# signature check
39
38
signature = reader .read_string_to_null ()
40
39
if signature != "UnityWebData1.0" :
41
40
return
42
41
self .signature = signature
43
-
42
+
44
43
# read header -> contains file headers
45
44
head_length = reader .read_int ()
46
-
45
+
47
46
files = []
48
47
while reader .Position < head_length :
49
48
offset = reader .read_int ()
50
49
length = reader .read_int ()
51
50
path_length = reader .read_int ()
52
51
name = bytes (reader .read_bytes (path_length )).decode ("utf-8" )
53
52
files .append (File .DirectoryInfo (name , offset , length ))
54
-
53
+
55
54
self .read_files (reader , files )
56
-
55
+
57
56
def save (
58
- self ,
59
- files : dict = None ,
60
- packer : str = "none" ,
61
- signature : str = "UnityWebData1.0" ,
57
+ self ,
58
+ files : dict = None ,
59
+ packer : str = "none" ,
60
+ signature : str = "UnityWebData1.0" ,
62
61
) -> bytes :
63
62
# solve defaults
64
63
if not files :
65
64
files = self .files
66
65
if not packer :
67
66
packer = self .packer
68
-
67
+
69
68
# get raw data
70
69
files = {
71
70
name : f .bytes if isinstance (f , EndianBinaryReader ) else f .save ()
72
71
for name , f in files .items ()
73
72
}
74
-
73
+
75
74
# create writer
76
75
writer = EndianBinaryWriter (endian = "<" )
77
76
# signature
78
77
writer .write_string_to_null (signature )
79
-
78
+
80
79
# data offset
81
80
offset = sum (
82
81
[
@@ -88,9 +87,9 @@ def save(
88
87
4 , # offset int
89
88
]
90
89
)
91
-
90
+
92
91
writer .write_int (offset )
93
-
92
+
94
93
# 1. file headers
95
94
for name , data in files .items ():
96
95
# offset
@@ -103,15 +102,14 @@ def save(
103
102
enc_path = name .encode ("utf-8" )
104
103
writer .write_int (len (enc_path ))
105
104
writer .write (enc_path )
106
-
105
+
107
106
# 2. file data
108
107
for data in files .values ():
109
108
writer .write (data )
110
-
109
+
111
110
if packer == "gzip" :
112
111
return CompressionHelper .compress_gzip (writer .bytes )
113
112
elif packer == "brotli" :
114
113
return CompressionHelper .compress_brotli (writer .bytes )
115
114
else :
116
115
return writer .bytes
117
-
0 commit comments