Skip to content

Commit e551954

Browse files
committed
companion: Fix credentials not saved
Relates to #2216
1 parent 1c4b4d3 commit e551954

File tree

5 files changed

+63
-6
lines changed

5 files changed

+63
-6
lines changed

pyatv/protocols/companion/pairing.py

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ def __init__(self, core: Core, **kwargs):
2828
self.protocol = CompanionProtocol(self.connection, self.srp, core.service)
2929
self.pairing_procedure = CompanionPairSetupProcedure(self.protocol, self.srp)
3030
self.pin_code: Optional[str] = None
31+
self._settings = core.settings
3132
self._has_paired: bool = False
3233

3334
async def close(self) -> None:
@@ -62,6 +63,7 @@ async def finish(self) -> None:
6263
self._name,
6364
)
6465
)
66+
self._settings.protocols.companion.credentials = self.service.credentials
6567
self._has_paired = True
6668

6769
@property

pyatv/protocols/mrp/protobuf/DeviceInfoMessage.proto

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,13 @@ extend ProtocolMessage {
77
optional DeviceInfoMessage deviceInfoMessage = 20;
88
}
99

10+
message PreferredEncoding {
11+
enum Enum {
12+
Default = 0;
13+
JSON = 1;
14+
}
15+
}
16+
1017
message DeviceInfoMessage {
1118
optional string uniqueIdentifier = 1; // Example: B8D8678C-9DA9-4D29-9338-5D6B827B8063
1219
required string name = 2; // Example: Jean's iPhone
@@ -54,4 +61,9 @@ message DeviceInfoMessage {
5461
optional uint32 parentGroupContainsDiscoverableGroupLeader = 45;
5562
optional uint32 groupContainsDiscoverableGroupLeader = 46;
5663
optional uint32 lastKnownClusterType = 47;
64+
// repeated ... allClusteredDevices = 48;
65+
optional bool supportsOutputContextSync = 49;
66+
optional string computerName = 50;
67+
optional uint32 configuredClusterSize = 51;
68+
optional PreferredEncoding.Enum preferredEncoding = 52;
5769
}

pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.py

Lines changed: 7 additions & 3 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.pyi

Lines changed: 41 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -6,19 +6,44 @@ import builtins
66
import collections.abc
77
import google.protobuf.descriptor
88
import google.protobuf.internal.containers
9+
import google.protobuf.internal.enum_type_wrapper
910
import google.protobuf.internal.extension_dict
1011
import google.protobuf.message
1112
import pyatv.protocols.mrp.protobuf.Common_pb2
1213
import pyatv.protocols.mrp.protobuf.ProtocolMessage_pb2
1314
import sys
15+
import typing
1416

15-
if sys.version_info >= (3, 8):
17+
if sys.version_info >= (3, 10):
1618
import typing as typing_extensions
1719
else:
1820
import typing_extensions
1921

2022
DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
2123

24+
@typing_extensions.final
25+
class PreferredEncoding(google.protobuf.message.Message):
26+
DESCRIPTOR: google.protobuf.descriptor.Descriptor
27+
28+
class _Enum:
29+
ValueType = typing.NewType("ValueType", builtins.int)
30+
V: typing_extensions.TypeAlias = ValueType
31+
32+
class _EnumEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[PreferredEncoding._Enum.ValueType], builtins.type): # noqa: F821
33+
DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
34+
Default: PreferredEncoding._Enum.ValueType # 0
35+
JSON: PreferredEncoding._Enum.ValueType # 1
36+
37+
class Enum(_Enum, metaclass=_EnumEnumTypeWrapper): ...
38+
Default: PreferredEncoding.Enum.ValueType # 0
39+
JSON: PreferredEncoding.Enum.ValueType # 1
40+
41+
def __init__(
42+
self,
43+
) -> None: ...
44+
45+
global___PreferredEncoding = PreferredEncoding
46+
2247
@typing_extensions.final
2348
class DeviceInfoMessage(google.protobuf.message.Message):
2449
DESCRIPTOR: google.protobuf.descriptor.Descriptor
@@ -69,6 +94,10 @@ class DeviceInfoMessage(google.protobuf.message.Message):
6994
PARENTGROUPCONTAINSDISCOVERABLEGROUPLEADER_FIELD_NUMBER: builtins.int
7095
GROUPCONTAINSDISCOVERABLEGROUPLEADER_FIELD_NUMBER: builtins.int
7196
LASTKNOWNCLUSTERTYPE_FIELD_NUMBER: builtins.int
97+
SUPPORTSOUTPUTCONTEXTSYNC_FIELD_NUMBER: builtins.int
98+
COMPUTERNAME_FIELD_NUMBER: builtins.int
99+
CONFIGUREDCLUSTERSIZE_FIELD_NUMBER: builtins.int
100+
PREFERREDENCODING_FIELD_NUMBER: builtins.int
72101
uniqueIdentifier: builtins.str
73102
"""Example: B8D8678C-9DA9-4D29-9338-5D6B827B8063"""
74103
name: builtins.str
@@ -128,6 +157,11 @@ class DeviceInfoMessage(google.protobuf.message.Message):
128157
parentGroupContainsDiscoverableGroupLeader: builtins.int
129158
groupContainsDiscoverableGroupLeader: builtins.int
130159
lastKnownClusterType: builtins.int
160+
supportsOutputContextSync: builtins.bool
161+
"""repeated ... allClusteredDevices = 48;"""
162+
computerName: builtins.str
163+
configuredClusterSize: builtins.int
164+
preferredEncoding: global___PreferredEncoding.Enum.ValueType
131165
def __init__(
132166
self,
133167
*,
@@ -177,9 +211,13 @@ class DeviceInfoMessage(google.protobuf.message.Message):
177211
parentGroupContainsDiscoverableGroupLeader: builtins.int | None = ...,
178212
groupContainsDiscoverableGroupLeader: builtins.int | None = ...,
179213
lastKnownClusterType: builtins.int | None = ...,
214+
supportsOutputContextSync: builtins.bool | None = ...,
215+
computerName: builtins.str | None = ...,
216+
configuredClusterSize: builtins.int | None = ...,
217+
preferredEncoding: global___PreferredEncoding.Enum.ValueType | None = ...,
180218
) -> None: ...
181-
def HasField(self, field_name: typing_extensions.Literal["airPlayGroupID", b"airPlayGroupID", "allowsPairing", b"allowsPairing", "applicationBundleIdentifier", b"applicationBundleIdentifier", "applicationBundleVersion", b"applicationBundleVersion", "bluetoothAddress", b"bluetoothAddress", "clusterID", b"clusterID", "clusterLeaderID", b"clusterLeaderID", "clusterType", b"clusterType", "connected", b"connected", "deviceClass", b"deviceClass", "deviceUID", b"deviceUID", "groupContainsDiscoverableGroupLeader", b"groupContainsDiscoverableGroupLeader", "groupName", b"groupName", "groupUID", b"groupUID", "isAirplayActive", b"isAirplayActive", "isClusterAware", b"isClusterAware", "isGroupLeader", b"isGroupLeader", "isProxyGroupPlayer", b"isProxyGroupPlayer", "lastKnownClusterType", b"lastKnownClusterType", "lastSupportedMessageType", b"lastSupportedMessageType", "linkAgent", b"linkAgent", "localizedModelName", b"localizedModelName", "logicalDeviceCount", b"logicalDeviceCount", "managedConfigDeviceID", b"managedConfigDeviceID", "modelID", b"modelID", "name", b"name", "parentGroupContainsDiscoverableGroupLeader", b"parentGroupContainsDiscoverableGroupLeader", "protocolVersion", b"protocolVersion", "routingContextID", b"routingContextID", "senderDefaultGroupUID", b"senderDefaultGroupUID", "sharedQueueVersion", b"sharedQueueVersion", "supportsACL", b"supportsACL", "supportsExtendedMotion", b"supportsExtendedMotion", "supportsMultiplayer", b"supportsMultiplayer", "supportsSharedQueue", b"supportsSharedQueue", "supportsSystemPairing", b"supportsSystemPairing", "systemBooksApplication", b"systemBooksApplication", "systemBuildVersion", b"systemBuildVersion", "systemMediaApplication", b"systemMediaApplication", "systemPodcastApplication", b"systemPodcastApplication", "tightSyncUID", b"tightSyncUID", "tightlySyncedGroup", b"tightlySyncedGroup", "uniqueIdentifier", b"uniqueIdentifier"]) -> builtins.bool: ...
182-
def ClearField(self, field_name: typing_extensions.Literal["airPlayGroupID", b"airPlayGroupID", "airplayReceivers", b"airplayReceivers", "allowsPairing", b"allowsPairing", "applicationBundleIdentifier", b"applicationBundleIdentifier", "applicationBundleVersion", b"applicationBundleVersion", "bluetoothAddress", b"bluetoothAddress", "clusterID", b"clusterID", "clusterLeaderID", b"clusterLeaderID", "clusterType", b"clusterType", "clusteredDevices", b"clusteredDevices", "connected", b"connected", "deviceClass", b"deviceClass", "deviceUID", b"deviceUID", "groupContainsDiscoverableGroupLeader", b"groupContainsDiscoverableGroupLeader", "groupName", b"groupName", "groupUID", b"groupUID", "groupedDevices", b"groupedDevices", "isAirplayActive", b"isAirplayActive", "isClusterAware", b"isClusterAware", "isGroupLeader", b"isGroupLeader", "isProxyGroupPlayer", b"isProxyGroupPlayer", "lastKnownClusterType", b"lastKnownClusterType", "lastSupportedMessageType", b"lastSupportedMessageType", "linkAgent", b"linkAgent", "localizedModelName", b"localizedModelName", "logicalDeviceCount", b"logicalDeviceCount", "managedConfigDeviceID", b"managedConfigDeviceID", "modelID", b"modelID", "name", b"name", "parentGroupContainsDiscoverableGroupLeader", b"parentGroupContainsDiscoverableGroupLeader", "protocolVersion", b"protocolVersion", "routingContextID", b"routingContextID", "senderDefaultGroupUID", b"senderDefaultGroupUID", "sharedQueueVersion", b"sharedQueueVersion", "supportsACL", b"supportsACL", "supportsExtendedMotion", b"supportsExtendedMotion", "supportsMultiplayer", b"supportsMultiplayer", "supportsSharedQueue", b"supportsSharedQueue", "supportsSystemPairing", b"supportsSystemPairing", "systemBooksApplication", b"systemBooksApplication", "systemBuildVersion", b"systemBuildVersion", "systemMediaApplication", b"systemMediaApplication", "systemPodcastApplication", b"systemPodcastApplication", "tightSyncUID", b"tightSyncUID", "tightlySyncedGroup", b"tightlySyncedGroup", "uniqueIdentifier", b"uniqueIdentifier"]) -> None: ...
219+
def HasField(self, field_name: typing_extensions.Literal["airPlayGroupID", b"airPlayGroupID", "allowsPairing", b"allowsPairing", "applicationBundleIdentifier", b"applicationBundleIdentifier", "applicationBundleVersion", b"applicationBundleVersion", "bluetoothAddress", b"bluetoothAddress", "clusterID", b"clusterID", "clusterLeaderID", b"clusterLeaderID", "clusterType", b"clusterType", "computerName", b"computerName", "configuredClusterSize", b"configuredClusterSize", "connected", b"connected", "deviceClass", b"deviceClass", "deviceUID", b"deviceUID", "groupContainsDiscoverableGroupLeader", b"groupContainsDiscoverableGroupLeader", "groupName", b"groupName", "groupUID", b"groupUID", "isAirplayActive", b"isAirplayActive", "isClusterAware", b"isClusterAware", "isGroupLeader", b"isGroupLeader", "isProxyGroupPlayer", b"isProxyGroupPlayer", "lastKnownClusterType", b"lastKnownClusterType", "lastSupportedMessageType", b"lastSupportedMessageType", "linkAgent", b"linkAgent", "localizedModelName", b"localizedModelName", "logicalDeviceCount", b"logicalDeviceCount", "managedConfigDeviceID", b"managedConfigDeviceID", "modelID", b"modelID", "name", b"name", "parentGroupContainsDiscoverableGroupLeader", b"parentGroupContainsDiscoverableGroupLeader", "preferredEncoding", b"preferredEncoding", "protocolVersion", b"protocolVersion", "routingContextID", b"routingContextID", "senderDefaultGroupUID", b"senderDefaultGroupUID", "sharedQueueVersion", b"sharedQueueVersion", "supportsACL", b"supportsACL", "supportsExtendedMotion", b"supportsExtendedMotion", "supportsMultiplayer", b"supportsMultiplayer", "supportsOutputContextSync", b"supportsOutputContextSync", "supportsSharedQueue", b"supportsSharedQueue", "supportsSystemPairing", b"supportsSystemPairing", "systemBooksApplication", b"systemBooksApplication", "systemBuildVersion", b"systemBuildVersion", "systemMediaApplication", b"systemMediaApplication", "systemPodcastApplication", b"systemPodcastApplication", "tightSyncUID", b"tightSyncUID", "tightlySyncedGroup", b"tightlySyncedGroup", "uniqueIdentifier", b"uniqueIdentifier"]) -> builtins.bool: ...
220+
def ClearField(self, field_name: typing_extensions.Literal["airPlayGroupID", b"airPlayGroupID", "airplayReceivers", b"airplayReceivers", "allowsPairing", b"allowsPairing", "applicationBundleIdentifier", b"applicationBundleIdentifier", "applicationBundleVersion", b"applicationBundleVersion", "bluetoothAddress", b"bluetoothAddress", "clusterID", b"clusterID", "clusterLeaderID", b"clusterLeaderID", "clusterType", b"clusterType", "clusteredDevices", b"clusteredDevices", "computerName", b"computerName", "configuredClusterSize", b"configuredClusterSize", "connected", b"connected", "deviceClass", b"deviceClass", "deviceUID", b"deviceUID", "groupContainsDiscoverableGroupLeader", b"groupContainsDiscoverableGroupLeader", "groupName", b"groupName", "groupUID", b"groupUID", "groupedDevices", b"groupedDevices", "isAirplayActive", b"isAirplayActive", "isClusterAware", b"isClusterAware", "isGroupLeader", b"isGroupLeader", "isProxyGroupPlayer", b"isProxyGroupPlayer", "lastKnownClusterType", b"lastKnownClusterType", "lastSupportedMessageType", b"lastSupportedMessageType", "linkAgent", b"linkAgent", "localizedModelName", b"localizedModelName", "logicalDeviceCount", b"logicalDeviceCount", "managedConfigDeviceID", b"managedConfigDeviceID", "modelID", b"modelID", "name", b"name", "parentGroupContainsDiscoverableGroupLeader", b"parentGroupContainsDiscoverableGroupLeader", "preferredEncoding", b"preferredEncoding", "protocolVersion", b"protocolVersion", "routingContextID", b"routingContextID", "senderDefaultGroupUID", b"senderDefaultGroupUID", "sharedQueueVersion", b"sharedQueueVersion", "supportsACL", b"supportsACL", "supportsExtendedMotion", b"supportsExtendedMotion", "supportsMultiplayer", b"supportsMultiplayer", "supportsOutputContextSync", b"supportsOutputContextSync", "supportsSharedQueue", b"supportsSharedQueue", "supportsSystemPairing", b"supportsSystemPairing", "systemBooksApplication", b"systemBooksApplication", "systemBuildVersion", b"systemBuildVersion", "systemMediaApplication", b"systemMediaApplication", "systemPodcastApplication", b"systemPodcastApplication", "tightSyncUID", b"tightSyncUID", "tightlySyncedGroup", b"tightlySyncedGroup", "uniqueIdentifier", b"uniqueIdentifier"]) -> None: ...
183221

184222
global___DeviceInfoMessage = DeviceInfoMessage
185223

pyatv/protocols/mrp/protobuf/__init__.py

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -92,6 +92,7 @@
9292
from .ContentItem_pb2 import LanguageOptionGroup
9393
from .CryptoPairingMessage_pb2 import CryptoPairingMessage
9494
from .DeviceInfoMessage_pb2 import DeviceInfoMessage
95+
from .DeviceInfoMessage_pb2 import PreferredEncoding
9596
from .GenericMessage_pb2 import GenericMessage
9697
from .GetKeyboardSessionMessage_pb2 import GetKeyboardSessionMessage
9798
from .GetRemoteTextInputSessionMessage_pb2 import GetRemoteTextInputSessionMessage

0 commit comments

Comments
 (0)