7
7
8
8
>>> header, apps = parse_appinfo(open('/d/Steam/appcache/appinfo.vdf', 'rb'))
9
9
>>> header
10
- {'magic': b"' DV\\ x07", 'universe': 1}
10
+ {'magic': b"( DV\\ x07", 'universe': 1}
11
11
>>> next(apps)
12
12
{'appid': 5,
13
13
'size': 79,
16
16
'access_token': 0,
17
17
'sha1': b'\\ x87\\ xfaCg\\ x85\\ x80\\ r\\ xb4\\ x90Im\\ xdc}\\ xb4\\ x81\\ xeeQ\\ x8b\\ x825',
18
18
'change_number': 4603827,
19
+ 'data_sha1': b'\\ x87\\ xfaCg\\ x85\\ x80\\ r\\ xb4\\ x90Im\\ xdc}\\ xb4\\ x81\\ xeeQ\\ x8b\\ x825',
19
20
'data': {'appinfo': {'appid': 5, 'public_only': 1}}}
20
21
21
22
>>> header, pkgs = parse_packageinfo(open('/d/Steam/appcache/packageinfo.vdf', 'rb'))
@@ -52,7 +53,7 @@ def parse_appinfo(fp):
52
53
:return: (header, apps iterator)
53
54
"""
54
55
# format:
55
- # uint32 - MAGIC: "'DV\x07"
56
+ # uint32 - MAGIC: "'DV\x07" or "(DV\x07"
56
57
# uint32 - UNIVERSE: 1
57
58
# ---- repeated app sections ----
58
59
# uint32 - AppID
@@ -62,12 +63,13 @@ def parse_appinfo(fp):
62
63
# uint64 - accessToken
63
64
# 20bytes - SHA1
64
65
# uint32 - changeNumber
66
+ # 20bytes - binary_vdf SHA1 (added in "(DV\x07"
65
67
# variable - binary_vdf
66
68
# ---- end of section ---------
67
69
# uint32 - EOF: 0
68
70
69
71
magic = fp .read (4 )
70
- if magic != b"'DV\x07 " :
72
+ if magic not in ( b"'DV\x07 " , b"(DV \x07 " ) :
71
73
raise SyntaxError ("Invalid magic, got %s" % repr (magic ))
72
74
73
75
universe = uint32 .unpack (fp .read (4 ))[0 ]
@@ -87,9 +89,13 @@ def apps_iter():
87
89
'access_token' : uint64 .unpack (fp .read (8 ))[0 ],
88
90
'sha1' : fp .read (20 ),
89
91
'change_number' : uint32 .unpack (fp .read (4 ))[0 ],
90
- 'data' : binary_load (fp ),
91
92
}
92
93
94
+ if magic == b"(DV\x07 " :
95
+ app ['data_sha1' ] = fp .read (20 )
96
+
97
+ app ['data' ] = binary_load (fp )
98
+
93
99
yield app
94
100
95
101
0 commit comments