Skip to content

Commit d037715

Browse files
authored
Add: support multiple branches for content listing (#18)
1 parent b0c57a0 commit d037715

File tree

1 file changed

+14
-1
lines changed

1 file changed

+14
-1
lines changed

openttd_protocol/protocol/content.py

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
from ..wire.exceptions import PacketInvalidData
66
from ..wire.read import (
7+
read_string,
78
read_uint8,
89
read_uint16,
910
read_uint32,
@@ -74,6 +75,18 @@ def receive_PACKET_CONTENT_CLIENT_INFO_LIST(source, data):
7475
content_type, data = read_uint8(data)
7576
openttd_version, data = read_uint32(data)
7677

78+
# Since OpenTTD 12.0 we extended this packet to include multiple
79+
# branches and their versions, so patchpacks can filter the list
80+
# based on their version. This is indicated by sending an
81+
# openttd_version that is UINT32_MAX.
82+
branch_versions = {}
83+
if openttd_version == 0xFFFFFFFF:
84+
count, data = read_uint8(data)
85+
for _ in range(count):
86+
branch, data = read_string(data)
87+
version, data = read_string(data)
88+
branch_versions[branch] = version
89+
7790
if content_type >= ContentType.CONTENT_TYPE_END:
7891
raise PacketInvalidData("invalid ContentType", content_type)
7992

@@ -82,7 +95,7 @@ def receive_PACKET_CONTENT_CLIENT_INFO_LIST(source, data):
8295
if len(data) != 0:
8396
raise PacketInvalidData("more bytes than expected; remaining: ", len(data))
8497

85-
return {"content_type": content_type, "openttd_version": openttd_version}
98+
return {"content_type": content_type, "openttd_version": openttd_version, "branch_versions": branch_versions}
8699

87100
@staticmethod
88101
def _receive_client_info(data, count, has_content_id=False, has_content_type_and_unique_id=False, has_md5sum=False):

0 commit comments

Comments
 (0)