@bharper/atv-js 0.2.6 → 0.3.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (283) hide show
  1. package/dist/index.d.ts +15 -0
  2. package/dist/index.d.ts.map +1 -1
  3. package/dist/index.js +89 -9
  4. package/dist/index.js.map +1 -1
  5. package/dist/mdns.d.ts.map +1 -1
  6. package/dist/mdns.js +96 -11
  7. package/dist/mdns.js.map +1 -1
  8. package/examples/print-device-json.js +22 -0
  9. package/package.json +2 -3
  10. package/pyatv/.codecov.yml +38 -0
  11. package/pyatv/.github/FUNDING.yml +3 -0
  12. package/pyatv/.github/ISSUE_TEMPLATE/bug_report.yml +80 -0
  13. package/pyatv/.github/ISSUE_TEMPLATE/config.yml +1 -0
  14. package/pyatv/.github/ISSUE_TEMPLATE/feature_request.yml +22 -0
  15. package/pyatv/.github/ISSUE_TEMPLATE/implementation-proposal.yml +29 -0
  16. package/pyatv/.github/ISSUE_TEMPLATE/investigation.yml +16 -0
  17. package/pyatv/.github/ISSUE_TEMPLATE/minor-change.yml +10 -0
  18. package/pyatv/.github/ISSUE_TEMPLATE/question-or-idea.yml +11 -0
  19. package/pyatv/.github/dependabot.yml +26 -0
  20. package/pyatv/.github/workflows/codeql-analysis.yml +71 -0
  21. package/pyatv/.github/workflows/release.yml +160 -0
  22. package/pyatv/.github/workflows/tests.yml +104 -0
  23. package/pyatv/.gitpod.yml +23 -0
  24. package/pyatv/CHANGES.md +3708 -0
  25. package/pyatv/CODE_OF_CONDUCT.md +76 -0
  26. package/pyatv/CONTRIBUTING.md +72 -0
  27. package/pyatv/CONTRIBUTORS.md +3 -0
  28. package/pyatv/Dockerfile +15 -0
  29. package/pyatv/LICENSE.md +9 -0
  30. package/pyatv/MANIFEST.in +14 -0
  31. package/pyatv/README.md +111 -0
  32. package/pyatv/base_versions.txt +13 -0
  33. package/pyatv/chickn.yaml +75 -0
  34. package/pyatv/docs/404.html +24 -0
  35. package/pyatv/docs/CNAME +1 -0
  36. package/pyatv/docs/Gemfile +31 -0
  37. package/pyatv/docs/_config.yml +121 -0
  38. package/pyatv/docs/_includes/api +10 -0
  39. package/pyatv/docs/_includes/atvremote_scan +32 -0
  40. package/pyatv/docs/_includes/code +6 -0
  41. package/pyatv/docs/_includes/issue +14 -0
  42. package/pyatv/docs/_includes/pypi +5 -0
  43. package/pyatv/docs/_layouts/template.html +109 -0
  44. package/pyatv/docs/api/pyatv.conf.html +312 -0
  45. package/pyatv/docs/api/pyatv.const.html +974 -0
  46. package/pyatv/docs/api/pyatv.convert.html +106 -0
  47. package/pyatv/docs/api/pyatv.exceptions.html +489 -0
  48. package/pyatv/docs/api/pyatv.helpers.html +102 -0
  49. package/pyatv/docs/api/pyatv.html +120 -0
  50. package/pyatv/docs/api/pyatv.interface.html +2369 -0
  51. package/pyatv/docs/api/pyatv.settings.html +484 -0
  52. package/pyatv/docs/api/pyatv.storage.file_storage.html +102 -0
  53. package/pyatv/docs/api/pyatv.storage.html +186 -0
  54. package/pyatv/docs/api/pyatv.storage.memory_storage.html +83 -0
  55. package/pyatv/docs/assets/css/custom.css +19 -0
  56. package/pyatv/docs/assets/css/hljs.css +1 -0
  57. package/pyatv/docs/assets/css/normalize.css +349 -0
  58. package/pyatv/docs/assets/css/pdoc.css +287 -0
  59. package/pyatv/docs/assets/css/sanitize.css +566 -0
  60. package/pyatv/docs/assets/css/style.scss +9 -0
  61. package/pyatv/docs/assets/img/logo.svg +63 -0
  62. package/pyatv/docs/assets/js/highlight.9.12.0.min.js +3 -0
  63. package/pyatv/docs/assets/js/mermaid.8.9.2.min.js +32 -0
  64. package/pyatv/docs/assets/js/mermaid.min.js.map +1 -0
  65. package/pyatv/docs/development/apps.md +81 -0
  66. package/pyatv/docs/development/audio.md +42 -0
  67. package/pyatv/docs/development/control.md +56 -0
  68. package/pyatv/docs/development/development.md +15 -0
  69. package/pyatv/docs/development/device_info.md +36 -0
  70. package/pyatv/docs/development/examples.md +44 -0
  71. package/pyatv/docs/development/features.md +70 -0
  72. package/pyatv/docs/development/keyboard.md +51 -0
  73. package/pyatv/docs/development/listeners.md +144 -0
  74. package/pyatv/docs/development/logging.md +55 -0
  75. package/pyatv/docs/development/metadata.md +115 -0
  76. package/pyatv/docs/development/power_management.md +53 -0
  77. package/pyatv/docs/development/scan_pair_and_connect.md +331 -0
  78. package/pyatv/docs/development/services.md +9 -0
  79. package/pyatv/docs/development/storage.md +259 -0
  80. package/pyatv/docs/development/stream.md +241 -0
  81. package/pyatv/docs/development/testing.md +9 -0
  82. package/pyatv/docs/documentation/atvlog.md +64 -0
  83. package/pyatv/docs/documentation/atvproxy.md +244 -0
  84. package/pyatv/docs/documentation/atvremote.md +639 -0
  85. package/pyatv/docs/documentation/atvscript.md +275 -0
  86. package/pyatv/docs/documentation/concepts.md +168 -0
  87. package/pyatv/docs/documentation/documentation.md +130 -0
  88. package/pyatv/docs/documentation/getting_started.md +248 -0
  89. package/pyatv/docs/documentation/protocols.md +1959 -0
  90. package/pyatv/docs/documentation/supported_features.md +246 -0
  91. package/pyatv/docs/documentation/tutorial.md +1062 -0
  92. package/pyatv/docs/documentation/workspace.code-workspace +7 -0
  93. package/pyatv/docs/favicon.ico +0 -0
  94. package/pyatv/docs/index.md +109 -0
  95. package/pyatv/docs/internals/design.md +354 -0
  96. package/pyatv/docs/internals/documentation.md +84 -0
  97. package/pyatv/docs/internals/interfaces.md +95 -0
  98. package/pyatv/docs/internals/internals.md +157 -0
  99. package/pyatv/docs/internals/submit_pr.md +56 -0
  100. package/pyatv/docs/internals/testing.md +176 -0
  101. package/pyatv/docs/internals/tools.md +574 -0
  102. package/pyatv/docs/pdoc_templates/config.mako +46 -0
  103. package/pyatv/docs/pdoc_templates/html.mako +454 -0
  104. package/pyatv/docs/support/acknowledgements.md +87 -0
  105. package/pyatv/docs/support/faq.md +214 -0
  106. package/pyatv/docs/support/migration.md +138 -0
  107. package/pyatv/docs/support/scanning_issues.md +110 -0
  108. package/pyatv/docs/support/support.md +18 -0
  109. package/pyatv/docs/support/troubleshooting.md +83 -0
  110. package/pyatv/pyatv/protocols/mrp/protobuf/AudioFadeMessage.proto +13 -0
  111. package/pyatv/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.pyi +37 -0
  112. package/pyatv/pyatv/protocols/mrp/protobuf/AudioFadeResponseMessage.proto +11 -0
  113. package/pyatv/pyatv/protocols/mrp/protobuf/AudioFadeResponseMessage_pb2.pyi +32 -0
  114. package/pyatv/pyatv/protocols/mrp/protobuf/AudioFormatSettingsMessage.proto +5 -0
  115. package/pyatv/pyatv/protocols/mrp/protobuf/AudioFormatSettingsMessage_pb2.pyi +27 -0
  116. package/pyatv/pyatv/protocols/mrp/protobuf/ClientUpdatesConfigMessage.proto +16 -0
  117. package/pyatv/pyatv/protocols/mrp/protobuf/ClientUpdatesConfigMessage_pb2.pyi +44 -0
  118. package/pyatv/pyatv/protocols/mrp/protobuf/CommandInfo.proto +117 -0
  119. package/pyatv/pyatv/protocols/mrp/protobuf/CommandInfo_pb2.pyi +325 -0
  120. package/pyatv/pyatv/protocols/mrp/protobuf/CommandOptions.proto +36 -0
  121. package/pyatv/pyatv/protocols/mrp/protobuf/CommandOptions_pb2.pyi +115 -0
  122. package/pyatv/pyatv/protocols/mrp/protobuf/Common.proto +79 -0
  123. package/pyatv/pyatv/protocols/mrp/protobuf/Common_pb2.pyi +228 -0
  124. package/pyatv/pyatv/protocols/mrp/protobuf/ConfigureConnectionMessage.proto +11 -0
  125. package/pyatv/pyatv/protocols/mrp/protobuf/ConfigureConnectionMessage_pb2.pyi +32 -0
  126. package/pyatv/pyatv/protocols/mrp/protobuf/ContentItem.proto +27 -0
  127. package/pyatv/pyatv/protocols/mrp/protobuf/ContentItemMetadata.proto +213 -0
  128. package/pyatv/pyatv/protocols/mrp/protobuf/ContentItemMetadata_pb2.pyi +630 -0
  129. package/pyatv/pyatv/protocols/mrp/protobuf/ContentItem_pb2.pyi +94 -0
  130. package/pyatv/pyatv/protocols/mrp/protobuf/CryptoPairingMessage.proto +15 -0
  131. package/pyatv/pyatv/protocols/mrp/protobuf/CryptoPairingMessage_pb2.pyi +46 -0
  132. package/pyatv/pyatv/protocols/mrp/protobuf/DeviceInfoMessage.proto +69 -0
  133. package/pyatv/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.pyi +226 -0
  134. package/pyatv/pyatv/protocols/mrp/protobuf/GenericMessage.proto +12 -0
  135. package/pyatv/pyatv/protocols/mrp/protobuf/GenericMessage_pb2.pyi +35 -0
  136. package/pyatv/pyatv/protocols/mrp/protobuf/GetKeyboardSessionMessage.proto +11 -0
  137. package/pyatv/pyatv/protocols/mrp/protobuf/GetKeyboardSessionMessage_pb2.pyi +26 -0
  138. package/pyatv/pyatv/protocols/mrp/protobuf/GetRemoteTextInputSessionMessage.proto +10 -0
  139. package/pyatv/pyatv/protocols/mrp/protobuf/GetRemoteTextInputSessionMessage_pb2.pyi +26 -0
  140. package/pyatv/pyatv/protocols/mrp/protobuf/GetVolumeMessage.proto +11 -0
  141. package/pyatv/pyatv/protocols/mrp/protobuf/GetVolumeMessage_pb2.pyi +32 -0
  142. package/pyatv/pyatv/protocols/mrp/protobuf/GetVolumeResultMessage.proto +11 -0
  143. package/pyatv/pyatv/protocols/mrp/protobuf/GetVolumeResultMessage_pb2.pyi +32 -0
  144. package/pyatv/pyatv/protocols/mrp/protobuf/KeyboardMessage.proto +88 -0
  145. package/pyatv/pyatv/protocols/mrp/protobuf/KeyboardMessage_pb2.pyi +261 -0
  146. package/pyatv/pyatv/protocols/mrp/protobuf/LanguageOption.proto +9 -0
  147. package/pyatv/pyatv/protocols/mrp/protobuf/LanguageOption_pb2.pyi +42 -0
  148. package/pyatv/pyatv/protocols/mrp/protobuf/ModifyOutputContextRequestMessage.proto +23 -0
  149. package/pyatv/pyatv/protocols/mrp/protobuf/ModifyOutputContextRequestMessage_pb2.pyi +86 -0
  150. package/pyatv/pyatv/protocols/mrp/protobuf/NotificationMessage.proto +12 -0
  151. package/pyatv/pyatv/protocols/mrp/protobuf/NotificationMessage_pb2.pyi +38 -0
  152. package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingClient.proto +12 -0
  153. package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingClient_pb2.pyi +49 -0
  154. package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingInfo.proto +24 -0
  155. package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingInfo_pb2.pyi +79 -0
  156. package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingPlayer.proto +11 -0
  157. package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingPlayer_pb2.pyi +45 -0
  158. package/pyatv/pyatv/protocols/mrp/protobuf/Origin.proto +17 -0
  159. package/pyatv/pyatv/protocols/mrp/protobuf/OriginClientPropertiesMessage.proto +11 -0
  160. package/pyatv/pyatv/protocols/mrp/protobuf/OriginClientPropertiesMessage_pb2.pyi +32 -0
  161. package/pyatv/pyatv/protocols/mrp/protobuf/Origin_pb2.pyi +63 -0
  162. package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueue.proto +15 -0
  163. package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueCapabilities.proto +7 -0
  164. package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueCapabilities_pb2.pyi +33 -0
  165. package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueContext.proto +5 -0
  166. package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueContext_pb2.pyi +27 -0
  167. package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueRequestMessage.proto +29 -0
  168. package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueRequestMessage_pb2.pyi +87 -0
  169. package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueue_pb2.pyi +53 -0
  170. package/pyatv/pyatv/protocols/mrp/protobuf/PlayerClientPropertiesMessage.proto +13 -0
  171. package/pyatv/pyatv/protocols/mrp/protobuf/PlayerClientPropertiesMessage_pb2.pyi +37 -0
  172. package/pyatv/pyatv/protocols/mrp/protobuf/PlayerPath.proto +11 -0
  173. package/pyatv/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.pyi +39 -0
  174. package/pyatv/pyatv/protocols/mrp/protobuf/ProtocolMessage.proto +171 -0
  175. package/pyatv/pyatv/protocols/mrp/protobuf/ProtocolMessage_pb2.pyi +377 -0
  176. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterForGameControllerEventsMessage.proto +18 -0
  177. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterForGameControllerEventsMessage_pb2.pyi +54 -0
  178. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterHIDDeviceMessage.proto +12 -0
  179. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterHIDDeviceMessage_pb2.pyi +34 -0
  180. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterHIDDeviceResultMessage.proto +12 -0
  181. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterHIDDeviceResultMessage_pb2.pyi +35 -0
  182. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterVoiceInputDeviceMessage.proto +12 -0
  183. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterVoiceInputDeviceMessage_pb2.pyi +34 -0
  184. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterVoiceInputDeviceResponseMessage.proto +12 -0
  185. package/pyatv/pyatv/protocols/mrp/protobuf/RegisterVoiceInputDeviceResponseMessage_pb2.pyi +35 -0
  186. package/pyatv/pyatv/protocols/mrp/protobuf/RemoteTextInputMessage.proto +13 -0
  187. package/pyatv/pyatv/protocols/mrp/protobuf/RemoteTextInputMessage_pb2.pyi +38 -0
  188. package/pyatv/pyatv/protocols/mrp/protobuf/RemoveClientMessage.proto +12 -0
  189. package/pyatv/pyatv/protocols/mrp/protobuf/RemoveClientMessage_pb2.pyi +34 -0
  190. package/pyatv/pyatv/protocols/mrp/protobuf/RemoveEndpointsMessage.proto +11 -0
  191. package/pyatv/pyatv/protocols/mrp/protobuf/RemoveEndpointsMessage_pb2.pyi +34 -0
  192. package/pyatv/pyatv/protocols/mrp/protobuf/RemoveOutputDevicesMessage.proto +12 -0
  193. package/pyatv/pyatv/protocols/mrp/protobuf/RemoveOutputDevicesMessage_pb2.pyi +38 -0
  194. package/pyatv/pyatv/protocols/mrp/protobuf/RemovePlayerMessage.proto +12 -0
  195. package/pyatv/pyatv/protocols/mrp/protobuf/RemovePlayerMessage_pb2.pyi +34 -0
  196. package/pyatv/pyatv/protocols/mrp/protobuf/SendButtonEventMessage.proto +13 -0
  197. package/pyatv/pyatv/protocols/mrp/protobuf/SendButtonEventMessage_pb2.pyi +38 -0
  198. package/pyatv/pyatv/protocols/mrp/protobuf/SendCommandMessage.proto +16 -0
  199. package/pyatv/pyatv/protocols/mrp/protobuf/SendCommandMessage_pb2.pyi +43 -0
  200. package/pyatv/pyatv/protocols/mrp/protobuf/SendCommandResultMessage.proto +100 -0
  201. package/pyatv/pyatv/protocols/mrp/protobuf/SendCommandResultMessage_pb2.pyi +286 -0
  202. package/pyatv/pyatv/protocols/mrp/protobuf/SendHIDEventMessage.proto +41 -0
  203. package/pyatv/pyatv/protocols/mrp/protobuf/SendHIDEventMessage_pb2.pyi +63 -0
  204. package/pyatv/pyatv/protocols/mrp/protobuf/SendPackedVirtualTouchEventMessage.proto +24 -0
  205. package/pyatv/pyatv/protocols/mrp/protobuf/SendPackedVirtualTouchEventMessage_pb2.pyi +64 -0
  206. package/pyatv/pyatv/protocols/mrp/protobuf/SendVoiceInputMessage.proto +38 -0
  207. package/pyatv/pyatv/protocols/mrp/protobuf/SendVoiceInputMessage_pb2.pyi +134 -0
  208. package/pyatv/pyatv/protocols/mrp/protobuf/SetArtworkMessage.proto +11 -0
  209. package/pyatv/pyatv/protocols/mrp/protobuf/SetArtworkMessage_pb2.pyi +32 -0
  210. package/pyatv/pyatv/protocols/mrp/protobuf/SetConnectionStateMessage.proto +18 -0
  211. package/pyatv/pyatv/protocols/mrp/protobuf/SetConnectionStateMessage_pb2.pyi +54 -0
  212. package/pyatv/pyatv/protocols/mrp/protobuf/SetDefaultSupportedCommandsMessage.proto +28 -0
  213. package/pyatv/pyatv/protocols/mrp/protobuf/SetDefaultSupportedCommandsMessage_pb2.pyi +74 -0
  214. package/pyatv/pyatv/protocols/mrp/protobuf/SetDiscoveryModeMessage.proto +12 -0
  215. package/pyatv/pyatv/protocols/mrp/protobuf/SetDiscoveryModeMessage_pb2.pyi +35 -0
  216. package/pyatv/pyatv/protocols/mrp/protobuf/SetHiliteModeMessage.proto +11 -0
  217. package/pyatv/pyatv/protocols/mrp/protobuf/SetHiliteModeMessage_pb2.pyi +32 -0
  218. package/pyatv/pyatv/protocols/mrp/protobuf/SetNowPlayingClientMessage.proto +12 -0
  219. package/pyatv/pyatv/protocols/mrp/protobuf/SetNowPlayingClientMessage_pb2.pyi +34 -0
  220. package/pyatv/pyatv/protocols/mrp/protobuf/SetNowPlayingPlayerMessage.proto +12 -0
  221. package/pyatv/pyatv/protocols/mrp/protobuf/SetNowPlayingPlayerMessage_pb2.pyi +34 -0
  222. package/pyatv/pyatv/protocols/mrp/protobuf/SetRecordingStateMessage.proto +17 -0
  223. package/pyatv/pyatv/protocols/mrp/protobuf/SetRecordingStateMessage_pb2.pyi +54 -0
  224. package/pyatv/pyatv/protocols/mrp/protobuf/SetStateMessage.proto +27 -0
  225. package/pyatv/pyatv/protocols/mrp/protobuf/SetStateMessage_pb2.pyi +72 -0
  226. package/pyatv/pyatv/protocols/mrp/protobuf/SetVolumeMessage.proto +12 -0
  227. package/pyatv/pyatv/protocols/mrp/protobuf/SetVolumeMessage_pb2.pyi +35 -0
  228. package/pyatv/pyatv/protocols/mrp/protobuf/SupportedCommands.proto +7 -0
  229. package/pyatv/pyatv/protocols/mrp/protobuf/SupportedCommands_pb2.pyi +30 -0
  230. package/pyatv/pyatv/protocols/mrp/protobuf/TextInputMessage.proto +23 -0
  231. package/pyatv/pyatv/protocols/mrp/protobuf/TextInputMessage_pb2.pyi +76 -0
  232. package/pyatv/pyatv/protocols/mrp/protobuf/TransactionKey.proto +6 -0
  233. package/pyatv/pyatv/protocols/mrp/protobuf/TransactionKey_pb2.pyi +30 -0
  234. package/pyatv/pyatv/protocols/mrp/protobuf/TransactionMessage.proto +15 -0
  235. package/pyatv/pyatv/protocols/mrp/protobuf/TransactionMessage_pb2.pyi +42 -0
  236. package/pyatv/pyatv/protocols/mrp/protobuf/TransactionPacket.proto +11 -0
  237. package/pyatv/pyatv/protocols/mrp/protobuf/TransactionPacket_pb2.pyi +41 -0
  238. package/pyatv/pyatv/protocols/mrp/protobuf/TransactionPackets.proto +7 -0
  239. package/pyatv/pyatv/protocols/mrp/protobuf/TransactionPackets_pb2.pyi +30 -0
  240. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateClientMessage.proto +12 -0
  241. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateClientMessage_pb2.pyi +34 -0
  242. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateContentItemArtworkMessage.proto +14 -0
  243. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateContentItemArtworkMessage_pb2.pyi +41 -0
  244. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateContentItemMessage.proto +14 -0
  245. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateContentItemMessage_pb2.pyi +41 -0
  246. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateEndPointsMessage.proto +25 -0
  247. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateEndPointsMessage_pb2.pyi +74 -0
  248. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateOutputDeviceMessage.proto +88 -0
  249. package/pyatv/pyatv/protocols/mrp/protobuf/UpdateOutputDeviceMessage_pb2.pyi +277 -0
  250. package/pyatv/pyatv/protocols/mrp/protobuf/UpdatePlayerPath.proto +12 -0
  251. package/pyatv/pyatv/protocols/mrp/protobuf/UpdatePlayerPath_pb2.pyi +34 -0
  252. package/pyatv/pyatv/protocols/mrp/protobuf/VirtualTouchDeviceDescriptorMessage.proto +8 -0
  253. package/pyatv/pyatv/protocols/mrp/protobuf/VirtualTouchDeviceDescriptorMessage_pb2.pyi +36 -0
  254. package/pyatv/pyatv/protocols/mrp/protobuf/VoiceInputDeviceDescriptorMessage.proto +8 -0
  255. package/pyatv/pyatv/protocols/mrp/protobuf/VoiceInputDeviceDescriptorMessage_pb2.pyi +35 -0
  256. package/pyatv/pyatv/protocols/mrp/protobuf/VolumeControlAvailabilityMessage.proto +23 -0
  257. package/pyatv/pyatv/protocols/mrp/protobuf/VolumeControlAvailabilityMessage_pb2.pyi +71 -0
  258. package/pyatv/pyatv/protocols/mrp/protobuf/VolumeControlCapabilitiesDidChangeMessage.proto +14 -0
  259. package/pyatv/pyatv/protocols/mrp/protobuf/VolumeControlCapabilitiesDidChangeMessage_pb2.pyi +40 -0
  260. package/pyatv/pyatv/protocols/mrp/protobuf/VolumeDidChangeMessage.proto +13 -0
  261. package/pyatv/pyatv/protocols/mrp/protobuf/VolumeDidChangeMessage_pb2.pyi +38 -0
  262. package/pyatv/pyatv/protocols/mrp/protobuf/WakeDeviceMessage.proto +11 -0
  263. package/pyatv/pyatv/protocols/mrp/protobuf/WakeDeviceMessage_pb2.pyi +26 -0
  264. package/pyatv/pyatv/py.typed +0 -0
  265. package/pyatv/pylintrc +49 -0
  266. package/pyatv/pyproject.toml +74 -0
  267. package/pyatv/requirements/requirements.txt +14 -0
  268. package/pyatv/requirements/requirements_docs.txt +2 -0
  269. package/pyatv/requirements/requirements_test.txt +20 -0
  270. package/pyatv/scripts/build_docs.sh +17 -0
  271. package/pyatv/scripts/setup_dev_env.sh +83 -0
  272. package/pyatv/setup.cfg +14 -0
  273. package/pyatv/tests/data/README +23 -0
  274. package/pyatv/tests/data/audio_10_frames.wav +0 -0
  275. package/pyatv/tests/data/audio_1_packet_metadata.wav +0 -0
  276. package/pyatv/tests/data/audio_3_packets.wav +0 -0
  277. package/pyatv/tests/data/only_metadata.wav +0 -0
  278. package/pyatv/tests/data/only_title.wav +0 -0
  279. package/pyatv/tests/data/static_3sec.ogg +0 -0
  280. package/pyatv/tests/data/testfile.txt +1 -0
  281. package/pyatv/tests/support/pyatv.code-workspace +14 -0
  282. package/src/index.ts +122 -8
  283. package/src/mdns.ts +64 -11
@@ -0,0 +1,88 @@
1
+ syntax = "proto2";
2
+
3
+ import "pyatv/protocols/mrp/protobuf/ProtocolMessage.proto";
4
+ import "pyatv/protocols/mrp/protobuf/Common.proto";
5
+
6
+
7
+ extend ProtocolMessage {
8
+ optional UpdateOutputDeviceMessage updateOutputDeviceMessage = 69;
9
+ }
10
+
11
+ message AVOutputDeviceSourceInfo {
12
+ optional string routingContextUID = 1;
13
+ optional bool multipleBuiltInDevices = 2;
14
+ }
15
+
16
+ message AVOutputDeviceDescriptor {
17
+ optional string name = 1;
18
+ optional string uniqueIdentifier = 2;
19
+ optional string groupID = 3;
20
+ optional string modelID = 4;
21
+ optional bytes macAddress = 5;
22
+ optional bool canAccessRemoteAssets = 6;
23
+ optional bool isRemoteControllable = 7;
24
+ optional bool isGroupLeader = 8;
25
+ optional bool isGroupable = 9;
26
+ optional DeviceType.Enum deviceType = 10;
27
+ optional DeviceSubType.Enum deviceSubType = 11;
28
+ optional bytes modelSpecificInfoData = 12;
29
+ optional float batteryLevel = 13;
30
+ optional bool isLocalDevice = 14;
31
+ optional bool supportsExternalScreen = 15;
32
+ optional bool requiresAuthorization = 16;
33
+ optional bool shouldForceRemoteControlabillity = 17;
34
+ optional AVOutputDeviceSourceInfo sourceInfo = 18;
35
+ optional bool isDeviceGroupable = 19;
36
+ optional bool canRelayCommunicationChannel = 20;
37
+ optional string logicalDeviceID = 21;
38
+ optional bool isProxyGroupPlayer = 22;
39
+ optional string firmwareVersion = 23;
40
+ optional float volume = 24;
41
+ optional bool isVolumeControlAvailable = 25;
42
+ optional bool canAccessAppleMusic = 26;
43
+ optional bool canAccessiCloudMusicLibrary = 27;
44
+ optional bool groupContainsGroupLeader = 28;
45
+ optional bool supportsBufferedAirPlay = 29;
46
+ optional bool canPlayEncryptedProgressiveDownloadAssets = 30;
47
+ optional bool canFetchMediaDataFromSender = 31;
48
+ optional bool resentsOptimizedUserInterfaceWhenPlayingFetchedAudioOnlyAssets = 32;
49
+ optional bool isAirPlayReceiverSessionActive = 33;
50
+ optional string parentGroupIdentifier = 34;
51
+ optional bool parentGroupContainsDiscoverableLeader = 35;
52
+ optional bool isAddedToHomeKit = 36;
53
+ optional int32 volumeCapabilities = 37;
54
+ optional string bluetoothID = 38;
55
+ optional bool supportsHAP = 39;
56
+ optional bool usingJSONProtocol = 40;
57
+ repeated AVOutputDeviceDescriptor clusterCompositions = 41;
58
+ optional uint32 clusterType = 42;
59
+ optional string primaryUID = 43;
60
+ optional uint32 configuredClusterSize = 44;
61
+ optional bool supportsRapportRemoteControlTransport = 45;
62
+ optional string currentBluetoothListeningMode = 46;
63
+ repeated string availableBluetoothListeningModes = 47;
64
+ repeated bool supportsMultiplayer = 48;
65
+ optional bool producesLowFidelityAudio = 49;
66
+ optional int32 hostDeviceClass = 50;
67
+ optional string airPlayGroupID = 51;
68
+ optional bool supportsSharePlayHandoff = 52;
69
+ optional float distance = 53;
70
+ optional bool discoveredOnSameInfra = 54;
71
+ repeated AVOutputDeviceDescriptor activatedClusterMembers = 55;
72
+ repeated bool pickable = 56;
73
+ optional int32 transportType = 57;
74
+ optional string clusterID = 58;
75
+ optional bool isClusterLeader = 59;
76
+ optional bool isAppleAccessory = 60;
77
+ optional string parentUniqueIdentifier = 61;
78
+ optional string roomID = 62;
79
+ optional string roomName = 63;
80
+ repeated AVOutputDeviceDescriptor allClusterMembers = 64;
81
+ optional bool engageOnClusterActivate = 67;
82
+ }
83
+
84
+ message UpdateOutputDeviceMessage {
85
+ repeated AVOutputDeviceDescriptor outputDevices = 1;
86
+ optional string endpointUID = 2;
87
+ repeated AVOutputDeviceDescriptor clusterAwareOutputDevices = 3;
88
+ }
@@ -0,0 +1,277 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+
6
+ import builtins
7
+ import collections.abc
8
+ import google.protobuf.descriptor
9
+ import google.protobuf.internal.containers
10
+ import google.protobuf.internal.extension_dict
11
+ import google.protobuf.message
12
+ import pyatv.protocols.mrp.protobuf.Common_pb2
13
+ import pyatv.protocols.mrp.protobuf.ProtocolMessage_pb2
14
+ import typing
15
+
16
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
17
+
18
+ @typing.final
19
+ class AVOutputDeviceSourceInfo(google.protobuf.message.Message):
20
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
21
+
22
+ ROUTINGCONTEXTUID_FIELD_NUMBER: builtins.int
23
+ MULTIPLEBUILTINDEVICES_FIELD_NUMBER: builtins.int
24
+ routingContextUID: builtins.str
25
+ multipleBuiltInDevices: builtins.bool
26
+ def __init__(
27
+ self,
28
+ *,
29
+ routingContextUID: builtins.str | None = ...,
30
+ multipleBuiltInDevices: builtins.bool | None = ...,
31
+ ) -> None: ...
32
+ def HasField(self, field_name: typing.Literal["multipleBuiltInDevices", b"multipleBuiltInDevices", "routingContextUID", b"routingContextUID"]) -> builtins.bool: ...
33
+ def ClearField(self, field_name: typing.Literal["multipleBuiltInDevices", b"multipleBuiltInDevices", "routingContextUID", b"routingContextUID"]) -> None: ...
34
+
35
+ global___AVOutputDeviceSourceInfo = AVOutputDeviceSourceInfo
36
+
37
+ @typing.final
38
+ class AVOutputDeviceDescriptor(google.protobuf.message.Message):
39
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
40
+
41
+ NAME_FIELD_NUMBER: builtins.int
42
+ UNIQUEIDENTIFIER_FIELD_NUMBER: builtins.int
43
+ GROUPID_FIELD_NUMBER: builtins.int
44
+ MODELID_FIELD_NUMBER: builtins.int
45
+ MACADDRESS_FIELD_NUMBER: builtins.int
46
+ CANACCESSREMOTEASSETS_FIELD_NUMBER: builtins.int
47
+ ISREMOTECONTROLLABLE_FIELD_NUMBER: builtins.int
48
+ ISGROUPLEADER_FIELD_NUMBER: builtins.int
49
+ ISGROUPABLE_FIELD_NUMBER: builtins.int
50
+ DEVICETYPE_FIELD_NUMBER: builtins.int
51
+ DEVICESUBTYPE_FIELD_NUMBER: builtins.int
52
+ MODELSPECIFICINFODATA_FIELD_NUMBER: builtins.int
53
+ BATTERYLEVEL_FIELD_NUMBER: builtins.int
54
+ ISLOCALDEVICE_FIELD_NUMBER: builtins.int
55
+ SUPPORTSEXTERNALSCREEN_FIELD_NUMBER: builtins.int
56
+ REQUIRESAUTHORIZATION_FIELD_NUMBER: builtins.int
57
+ SHOULDFORCEREMOTECONTROLABILLITY_FIELD_NUMBER: builtins.int
58
+ SOURCEINFO_FIELD_NUMBER: builtins.int
59
+ ISDEVICEGROUPABLE_FIELD_NUMBER: builtins.int
60
+ CANRELAYCOMMUNICATIONCHANNEL_FIELD_NUMBER: builtins.int
61
+ LOGICALDEVICEID_FIELD_NUMBER: builtins.int
62
+ ISPROXYGROUPPLAYER_FIELD_NUMBER: builtins.int
63
+ FIRMWAREVERSION_FIELD_NUMBER: builtins.int
64
+ VOLUME_FIELD_NUMBER: builtins.int
65
+ ISVOLUMECONTROLAVAILABLE_FIELD_NUMBER: builtins.int
66
+ CANACCESSAPPLEMUSIC_FIELD_NUMBER: builtins.int
67
+ CANACCESSICLOUDMUSICLIBRARY_FIELD_NUMBER: builtins.int
68
+ GROUPCONTAINSGROUPLEADER_FIELD_NUMBER: builtins.int
69
+ SUPPORTSBUFFEREDAIRPLAY_FIELD_NUMBER: builtins.int
70
+ CANPLAYENCRYPTEDPROGRESSIVEDOWNLOADASSETS_FIELD_NUMBER: builtins.int
71
+ CANFETCHMEDIADATAFROMSENDER_FIELD_NUMBER: builtins.int
72
+ RESENTSOPTIMIZEDUSERINTERFACEWHENPLAYINGFETCHEDAUDIOONLYASSETS_FIELD_NUMBER: builtins.int
73
+ ISAIRPLAYRECEIVERSESSIONACTIVE_FIELD_NUMBER: builtins.int
74
+ PARENTGROUPIDENTIFIER_FIELD_NUMBER: builtins.int
75
+ PARENTGROUPCONTAINSDISCOVERABLELEADER_FIELD_NUMBER: builtins.int
76
+ ISADDEDTOHOMEKIT_FIELD_NUMBER: builtins.int
77
+ VOLUMECAPABILITIES_FIELD_NUMBER: builtins.int
78
+ BLUETOOTHID_FIELD_NUMBER: builtins.int
79
+ SUPPORTSHAP_FIELD_NUMBER: builtins.int
80
+ USINGJSONPROTOCOL_FIELD_NUMBER: builtins.int
81
+ CLUSTERCOMPOSITIONS_FIELD_NUMBER: builtins.int
82
+ CLUSTERTYPE_FIELD_NUMBER: builtins.int
83
+ PRIMARYUID_FIELD_NUMBER: builtins.int
84
+ CONFIGUREDCLUSTERSIZE_FIELD_NUMBER: builtins.int
85
+ SUPPORTSRAPPORTREMOTECONTROLTRANSPORT_FIELD_NUMBER: builtins.int
86
+ CURRENTBLUETOOTHLISTENINGMODE_FIELD_NUMBER: builtins.int
87
+ AVAILABLEBLUETOOTHLISTENINGMODES_FIELD_NUMBER: builtins.int
88
+ SUPPORTSMULTIPLAYER_FIELD_NUMBER: builtins.int
89
+ PRODUCESLOWFIDELITYAUDIO_FIELD_NUMBER: builtins.int
90
+ HOSTDEVICECLASS_FIELD_NUMBER: builtins.int
91
+ AIRPLAYGROUPID_FIELD_NUMBER: builtins.int
92
+ SUPPORTSSHAREPLAYHANDOFF_FIELD_NUMBER: builtins.int
93
+ DISTANCE_FIELD_NUMBER: builtins.int
94
+ DISCOVEREDONSAMEINFRA_FIELD_NUMBER: builtins.int
95
+ ACTIVATEDCLUSTERMEMBERS_FIELD_NUMBER: builtins.int
96
+ PICKABLE_FIELD_NUMBER: builtins.int
97
+ TRANSPORTTYPE_FIELD_NUMBER: builtins.int
98
+ CLUSTERID_FIELD_NUMBER: builtins.int
99
+ ISCLUSTERLEADER_FIELD_NUMBER: builtins.int
100
+ ISAPPLEACCESSORY_FIELD_NUMBER: builtins.int
101
+ PARENTUNIQUEIDENTIFIER_FIELD_NUMBER: builtins.int
102
+ ROOMID_FIELD_NUMBER: builtins.int
103
+ ROOMNAME_FIELD_NUMBER: builtins.int
104
+ ALLCLUSTERMEMBERS_FIELD_NUMBER: builtins.int
105
+ ENGAGEONCLUSTERACTIVATE_FIELD_NUMBER: builtins.int
106
+ name: builtins.str
107
+ uniqueIdentifier: builtins.str
108
+ groupID: builtins.str
109
+ modelID: builtins.str
110
+ macAddress: builtins.bytes
111
+ canAccessRemoteAssets: builtins.bool
112
+ isRemoteControllable: builtins.bool
113
+ isGroupLeader: builtins.bool
114
+ isGroupable: builtins.bool
115
+ deviceType: pyatv.protocols.mrp.protobuf.Common_pb2.DeviceType.Enum.ValueType
116
+ deviceSubType: pyatv.protocols.mrp.protobuf.Common_pb2.DeviceSubType.Enum.ValueType
117
+ modelSpecificInfoData: builtins.bytes
118
+ batteryLevel: builtins.float
119
+ isLocalDevice: builtins.bool
120
+ supportsExternalScreen: builtins.bool
121
+ requiresAuthorization: builtins.bool
122
+ shouldForceRemoteControlabillity: builtins.bool
123
+ isDeviceGroupable: builtins.bool
124
+ canRelayCommunicationChannel: builtins.bool
125
+ logicalDeviceID: builtins.str
126
+ isProxyGroupPlayer: builtins.bool
127
+ firmwareVersion: builtins.str
128
+ volume: builtins.float
129
+ isVolumeControlAvailable: builtins.bool
130
+ canAccessAppleMusic: builtins.bool
131
+ canAccessiCloudMusicLibrary: builtins.bool
132
+ groupContainsGroupLeader: builtins.bool
133
+ supportsBufferedAirPlay: builtins.bool
134
+ canPlayEncryptedProgressiveDownloadAssets: builtins.bool
135
+ canFetchMediaDataFromSender: builtins.bool
136
+ resentsOptimizedUserInterfaceWhenPlayingFetchedAudioOnlyAssets: builtins.bool
137
+ isAirPlayReceiverSessionActive: builtins.bool
138
+ parentGroupIdentifier: builtins.str
139
+ parentGroupContainsDiscoverableLeader: builtins.bool
140
+ isAddedToHomeKit: builtins.bool
141
+ volumeCapabilities: builtins.int
142
+ bluetoothID: builtins.str
143
+ supportsHAP: builtins.bool
144
+ usingJSONProtocol: builtins.bool
145
+ clusterType: builtins.int
146
+ primaryUID: builtins.str
147
+ configuredClusterSize: builtins.int
148
+ supportsRapportRemoteControlTransport: builtins.bool
149
+ currentBluetoothListeningMode: builtins.str
150
+ producesLowFidelityAudio: builtins.bool
151
+ hostDeviceClass: builtins.int
152
+ airPlayGroupID: builtins.str
153
+ supportsSharePlayHandoff: builtins.bool
154
+ distance: builtins.float
155
+ discoveredOnSameInfra: builtins.bool
156
+ transportType: builtins.int
157
+ clusterID: builtins.str
158
+ isClusterLeader: builtins.bool
159
+ isAppleAccessory: builtins.bool
160
+ parentUniqueIdentifier: builtins.str
161
+ roomID: builtins.str
162
+ roomName: builtins.str
163
+ engageOnClusterActivate: builtins.bool
164
+ @property
165
+ def sourceInfo(self) -> global___AVOutputDeviceSourceInfo: ...
166
+ @property
167
+ def clusterCompositions(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___AVOutputDeviceDescriptor]: ...
168
+ @property
169
+ def availableBluetoothListeningModes(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.str]: ...
170
+ @property
171
+ def supportsMultiplayer(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.bool]: ...
172
+ @property
173
+ def activatedClusterMembers(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___AVOutputDeviceDescriptor]: ...
174
+ @property
175
+ def pickable(self) -> google.protobuf.internal.containers.RepeatedScalarFieldContainer[builtins.bool]: ...
176
+ @property
177
+ def allClusterMembers(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___AVOutputDeviceDescriptor]: ...
178
+ def __init__(
179
+ self,
180
+ *,
181
+ name: builtins.str | None = ...,
182
+ uniqueIdentifier: builtins.str | None = ...,
183
+ groupID: builtins.str | None = ...,
184
+ modelID: builtins.str | None = ...,
185
+ macAddress: builtins.bytes | None = ...,
186
+ canAccessRemoteAssets: builtins.bool | None = ...,
187
+ isRemoteControllable: builtins.bool | None = ...,
188
+ isGroupLeader: builtins.bool | None = ...,
189
+ isGroupable: builtins.bool | None = ...,
190
+ deviceType: pyatv.protocols.mrp.protobuf.Common_pb2.DeviceType.Enum.ValueType | None = ...,
191
+ deviceSubType: pyatv.protocols.mrp.protobuf.Common_pb2.DeviceSubType.Enum.ValueType | None = ...,
192
+ modelSpecificInfoData: builtins.bytes | None = ...,
193
+ batteryLevel: builtins.float | None = ...,
194
+ isLocalDevice: builtins.bool | None = ...,
195
+ supportsExternalScreen: builtins.bool | None = ...,
196
+ requiresAuthorization: builtins.bool | None = ...,
197
+ shouldForceRemoteControlabillity: builtins.bool | None = ...,
198
+ sourceInfo: global___AVOutputDeviceSourceInfo | None = ...,
199
+ isDeviceGroupable: builtins.bool | None = ...,
200
+ canRelayCommunicationChannel: builtins.bool | None = ...,
201
+ logicalDeviceID: builtins.str | None = ...,
202
+ isProxyGroupPlayer: builtins.bool | None = ...,
203
+ firmwareVersion: builtins.str | None = ...,
204
+ volume: builtins.float | None = ...,
205
+ isVolumeControlAvailable: builtins.bool | None = ...,
206
+ canAccessAppleMusic: builtins.bool | None = ...,
207
+ canAccessiCloudMusicLibrary: builtins.bool | None = ...,
208
+ groupContainsGroupLeader: builtins.bool | None = ...,
209
+ supportsBufferedAirPlay: builtins.bool | None = ...,
210
+ canPlayEncryptedProgressiveDownloadAssets: builtins.bool | None = ...,
211
+ canFetchMediaDataFromSender: builtins.bool | None = ...,
212
+ resentsOptimizedUserInterfaceWhenPlayingFetchedAudioOnlyAssets: builtins.bool | None = ...,
213
+ isAirPlayReceiverSessionActive: builtins.bool | None = ...,
214
+ parentGroupIdentifier: builtins.str | None = ...,
215
+ parentGroupContainsDiscoverableLeader: builtins.bool | None = ...,
216
+ isAddedToHomeKit: builtins.bool | None = ...,
217
+ volumeCapabilities: builtins.int | None = ...,
218
+ bluetoothID: builtins.str | None = ...,
219
+ supportsHAP: builtins.bool | None = ...,
220
+ usingJSONProtocol: builtins.bool | None = ...,
221
+ clusterCompositions: collections.abc.Iterable[global___AVOutputDeviceDescriptor] | None = ...,
222
+ clusterType: builtins.int | None = ...,
223
+ primaryUID: builtins.str | None = ...,
224
+ configuredClusterSize: builtins.int | None = ...,
225
+ supportsRapportRemoteControlTransport: builtins.bool | None = ...,
226
+ currentBluetoothListeningMode: builtins.str | None = ...,
227
+ availableBluetoothListeningModes: collections.abc.Iterable[builtins.str] | None = ...,
228
+ supportsMultiplayer: collections.abc.Iterable[builtins.bool] | None = ...,
229
+ producesLowFidelityAudio: builtins.bool | None = ...,
230
+ hostDeviceClass: builtins.int | None = ...,
231
+ airPlayGroupID: builtins.str | None = ...,
232
+ supportsSharePlayHandoff: builtins.bool | None = ...,
233
+ distance: builtins.float | None = ...,
234
+ discoveredOnSameInfra: builtins.bool | None = ...,
235
+ activatedClusterMembers: collections.abc.Iterable[global___AVOutputDeviceDescriptor] | None = ...,
236
+ pickable: collections.abc.Iterable[builtins.bool] | None = ...,
237
+ transportType: builtins.int | None = ...,
238
+ clusterID: builtins.str | None = ...,
239
+ isClusterLeader: builtins.bool | None = ...,
240
+ isAppleAccessory: builtins.bool | None = ...,
241
+ parentUniqueIdentifier: builtins.str | None = ...,
242
+ roomID: builtins.str | None = ...,
243
+ roomName: builtins.str | None = ...,
244
+ allClusterMembers: collections.abc.Iterable[global___AVOutputDeviceDescriptor] | None = ...,
245
+ engageOnClusterActivate: builtins.bool | None = ...,
246
+ ) -> None: ...
247
+ def HasField(self, field_name: typing.Literal["airPlayGroupID", b"airPlayGroupID", "batteryLevel", b"batteryLevel", "bluetoothID", b"bluetoothID", "canAccessAppleMusic", b"canAccessAppleMusic", "canAccessRemoteAssets", b"canAccessRemoteAssets", "canAccessiCloudMusicLibrary", b"canAccessiCloudMusicLibrary", "canFetchMediaDataFromSender", b"canFetchMediaDataFromSender", "canPlayEncryptedProgressiveDownloadAssets", b"canPlayEncryptedProgressiveDownloadAssets", "canRelayCommunicationChannel", b"canRelayCommunicationChannel", "clusterID", b"clusterID", "clusterType", b"clusterType", "configuredClusterSize", b"configuredClusterSize", "currentBluetoothListeningMode", b"currentBluetoothListeningMode", "deviceSubType", b"deviceSubType", "deviceType", b"deviceType", "discoveredOnSameInfra", b"discoveredOnSameInfra", "distance", b"distance", "engageOnClusterActivate", b"engageOnClusterActivate", "firmwareVersion", b"firmwareVersion", "groupContainsGroupLeader", b"groupContainsGroupLeader", "groupID", b"groupID", "hostDeviceClass", b"hostDeviceClass", "isAddedToHomeKit", b"isAddedToHomeKit", "isAirPlayReceiverSessionActive", b"isAirPlayReceiverSessionActive", "isAppleAccessory", b"isAppleAccessory", "isClusterLeader", b"isClusterLeader", "isDeviceGroupable", b"isDeviceGroupable", "isGroupLeader", b"isGroupLeader", "isGroupable", b"isGroupable", "isLocalDevice", b"isLocalDevice", "isProxyGroupPlayer", b"isProxyGroupPlayer", "isRemoteControllable", b"isRemoteControllable", "isVolumeControlAvailable", b"isVolumeControlAvailable", "logicalDeviceID", b"logicalDeviceID", "macAddress", b"macAddress", "modelID", b"modelID", "modelSpecificInfoData", b"modelSpecificInfoData", "name", b"name", "parentGroupContainsDiscoverableLeader", b"parentGroupContainsDiscoverableLeader", "parentGroupIdentifier", b"parentGroupIdentifier", "parentUniqueIdentifier", b"parentUniqueIdentifier", "primaryUID", b"primaryUID", "producesLowFidelityAudio", b"producesLowFidelityAudio", "requiresAuthorization", b"requiresAuthorization", "resentsOptimizedUserInterfaceWhenPlayingFetchedAudioOnlyAssets", b"resentsOptimizedUserInterfaceWhenPlayingFetchedAudioOnlyAssets", "roomID", b"roomID", "roomName", b"roomName", "shouldForceRemoteControlabillity", b"shouldForceRemoteControlabillity", "sourceInfo", b"sourceInfo", "supportsBufferedAirPlay", b"supportsBufferedAirPlay", "supportsExternalScreen", b"supportsExternalScreen", "supportsHAP", b"supportsHAP", "supportsRapportRemoteControlTransport", b"supportsRapportRemoteControlTransport", "supportsSharePlayHandoff", b"supportsSharePlayHandoff", "transportType", b"transportType", "uniqueIdentifier", b"uniqueIdentifier", "usingJSONProtocol", b"usingJSONProtocol", "volume", b"volume", "volumeCapabilities", b"volumeCapabilities"]) -> builtins.bool: ...
248
+ def ClearField(self, field_name: typing.Literal["activatedClusterMembers", b"activatedClusterMembers", "airPlayGroupID", b"airPlayGroupID", "allClusterMembers", b"allClusterMembers", "availableBluetoothListeningModes", b"availableBluetoothListeningModes", "batteryLevel", b"batteryLevel", "bluetoothID", b"bluetoothID", "canAccessAppleMusic", b"canAccessAppleMusic", "canAccessRemoteAssets", b"canAccessRemoteAssets", "canAccessiCloudMusicLibrary", b"canAccessiCloudMusicLibrary", "canFetchMediaDataFromSender", b"canFetchMediaDataFromSender", "canPlayEncryptedProgressiveDownloadAssets", b"canPlayEncryptedProgressiveDownloadAssets", "canRelayCommunicationChannel", b"canRelayCommunicationChannel", "clusterCompositions", b"clusterCompositions", "clusterID", b"clusterID", "clusterType", b"clusterType", "configuredClusterSize", b"configuredClusterSize", "currentBluetoothListeningMode", b"currentBluetoothListeningMode", "deviceSubType", b"deviceSubType", "deviceType", b"deviceType", "discoveredOnSameInfra", b"discoveredOnSameInfra", "distance", b"distance", "engageOnClusterActivate", b"engageOnClusterActivate", "firmwareVersion", b"firmwareVersion", "groupContainsGroupLeader", b"groupContainsGroupLeader", "groupID", b"groupID", "hostDeviceClass", b"hostDeviceClass", "isAddedToHomeKit", b"isAddedToHomeKit", "isAirPlayReceiverSessionActive", b"isAirPlayReceiverSessionActive", "isAppleAccessory", b"isAppleAccessory", "isClusterLeader", b"isClusterLeader", "isDeviceGroupable", b"isDeviceGroupable", "isGroupLeader", b"isGroupLeader", "isGroupable", b"isGroupable", "isLocalDevice", b"isLocalDevice", "isProxyGroupPlayer", b"isProxyGroupPlayer", "isRemoteControllable", b"isRemoteControllable", "isVolumeControlAvailable", b"isVolumeControlAvailable", "logicalDeviceID", b"logicalDeviceID", "macAddress", b"macAddress", "modelID", b"modelID", "modelSpecificInfoData", b"modelSpecificInfoData", "name", b"name", "parentGroupContainsDiscoverableLeader", b"parentGroupContainsDiscoverableLeader", "parentGroupIdentifier", b"parentGroupIdentifier", "parentUniqueIdentifier", b"parentUniqueIdentifier", "pickable", b"pickable", "primaryUID", b"primaryUID", "producesLowFidelityAudio", b"producesLowFidelityAudio", "requiresAuthorization", b"requiresAuthorization", "resentsOptimizedUserInterfaceWhenPlayingFetchedAudioOnlyAssets", b"resentsOptimizedUserInterfaceWhenPlayingFetchedAudioOnlyAssets", "roomID", b"roomID", "roomName", b"roomName", "shouldForceRemoteControlabillity", b"shouldForceRemoteControlabillity", "sourceInfo", b"sourceInfo", "supportsBufferedAirPlay", b"supportsBufferedAirPlay", "supportsExternalScreen", b"supportsExternalScreen", "supportsHAP", b"supportsHAP", "supportsMultiplayer", b"supportsMultiplayer", "supportsRapportRemoteControlTransport", b"supportsRapportRemoteControlTransport", "supportsSharePlayHandoff", b"supportsSharePlayHandoff", "transportType", b"transportType", "uniqueIdentifier", b"uniqueIdentifier", "usingJSONProtocol", b"usingJSONProtocol", "volume", b"volume", "volumeCapabilities", b"volumeCapabilities"]) -> None: ...
249
+
250
+ global___AVOutputDeviceDescriptor = AVOutputDeviceDescriptor
251
+
252
+ @typing.final
253
+ class UpdateOutputDeviceMessage(google.protobuf.message.Message):
254
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
255
+
256
+ OUTPUTDEVICES_FIELD_NUMBER: builtins.int
257
+ ENDPOINTUID_FIELD_NUMBER: builtins.int
258
+ CLUSTERAWAREOUTPUTDEVICES_FIELD_NUMBER: builtins.int
259
+ endpointUID: builtins.str
260
+ @property
261
+ def outputDevices(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___AVOutputDeviceDescriptor]: ...
262
+ @property
263
+ def clusterAwareOutputDevices(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[global___AVOutputDeviceDescriptor]: ...
264
+ def __init__(
265
+ self,
266
+ *,
267
+ outputDevices: collections.abc.Iterable[global___AVOutputDeviceDescriptor] | None = ...,
268
+ endpointUID: builtins.str | None = ...,
269
+ clusterAwareOutputDevices: collections.abc.Iterable[global___AVOutputDeviceDescriptor] | None = ...,
270
+ ) -> None: ...
271
+ def HasField(self, field_name: typing.Literal["endpointUID", b"endpointUID"]) -> builtins.bool: ...
272
+ def ClearField(self, field_name: typing.Literal["clusterAwareOutputDevices", b"clusterAwareOutputDevices", "endpointUID", b"endpointUID", "outputDevices", b"outputDevices"]) -> None: ...
273
+
274
+ global___UpdateOutputDeviceMessage = UpdateOutputDeviceMessage
275
+
276
+ UPDATEOUTPUTDEVICEMESSAGE_FIELD_NUMBER: builtins.int
277
+ updateOutputDeviceMessage: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[pyatv.protocols.mrp.protobuf.ProtocolMessage_pb2.ProtocolMessage, global___UpdateOutputDeviceMessage]
@@ -0,0 +1,12 @@
1
+ syntax = "proto2";
2
+
3
+ import "pyatv/protocols/mrp/protobuf/ProtocolMessage.proto";
4
+ import "pyatv/protocols/mrp/protobuf/PlayerPath.proto";
5
+
6
+ extend ProtocolMessage {
7
+ optional UpdatePlayerMessage updatePlayerMessage = 62;
8
+ }
9
+
10
+ message UpdatePlayerMessage {
11
+ optional PlayerPath playerPath = 1;
12
+ }
@@ -0,0 +1,34 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+
6
+ import builtins
7
+ import google.protobuf.descriptor
8
+ import google.protobuf.internal.extension_dict
9
+ import google.protobuf.message
10
+ import pyatv.protocols.mrp.protobuf.PlayerPath_pb2
11
+ import pyatv.protocols.mrp.protobuf.ProtocolMessage_pb2
12
+ import typing
13
+
14
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
15
+
16
+ @typing.final
17
+ class UpdatePlayerMessage(google.protobuf.message.Message):
18
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
19
+
20
+ PLAYERPATH_FIELD_NUMBER: builtins.int
21
+ @property
22
+ def playerPath(self) -> pyatv.protocols.mrp.protobuf.PlayerPath_pb2.PlayerPath: ...
23
+ def __init__(
24
+ self,
25
+ *,
26
+ playerPath: pyatv.protocols.mrp.protobuf.PlayerPath_pb2.PlayerPath | None = ...,
27
+ ) -> None: ...
28
+ def HasField(self, field_name: typing.Literal["playerPath", b"playerPath"]) -> builtins.bool: ...
29
+ def ClearField(self, field_name: typing.Literal["playerPath", b"playerPath"]) -> None: ...
30
+
31
+ global___UpdatePlayerMessage = UpdatePlayerMessage
32
+
33
+ UPDATEPLAYERMESSAGE_FIELD_NUMBER: builtins.int
34
+ updatePlayerMessage: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[pyatv.protocols.mrp.protobuf.ProtocolMessage_pb2.ProtocolMessage, global___UpdatePlayerMessage]
@@ -0,0 +1,8 @@
1
+ syntax = "proto2";
2
+
3
+ message VirtualTouchDeviceDescriptor {
4
+ optional bool absolute = 1;
5
+ optional bool integratedDisplay = 2;
6
+ optional float screenSizeWidth = 3;
7
+ optional float screenSizeHeight = 4;
8
+ }
@@ -0,0 +1,36 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+
6
+ import builtins
7
+ import google.protobuf.descriptor
8
+ import google.protobuf.message
9
+ import typing
10
+
11
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
12
+
13
+ @typing.final
14
+ class VirtualTouchDeviceDescriptor(google.protobuf.message.Message):
15
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
16
+
17
+ ABSOLUTE_FIELD_NUMBER: builtins.int
18
+ INTEGRATEDDISPLAY_FIELD_NUMBER: builtins.int
19
+ SCREENSIZEWIDTH_FIELD_NUMBER: builtins.int
20
+ SCREENSIZEHEIGHT_FIELD_NUMBER: builtins.int
21
+ absolute: builtins.bool
22
+ integratedDisplay: builtins.bool
23
+ screenSizeWidth: builtins.float
24
+ screenSizeHeight: builtins.float
25
+ def __init__(
26
+ self,
27
+ *,
28
+ absolute: builtins.bool | None = ...,
29
+ integratedDisplay: builtins.bool | None = ...,
30
+ screenSizeWidth: builtins.float | None = ...,
31
+ screenSizeHeight: builtins.float | None = ...,
32
+ ) -> None: ...
33
+ def HasField(self, field_name: typing.Literal["absolute", b"absolute", "integratedDisplay", b"integratedDisplay", "screenSizeHeight", b"screenSizeHeight", "screenSizeWidth", b"screenSizeWidth"]) -> builtins.bool: ...
34
+ def ClearField(self, field_name: typing.Literal["absolute", b"absolute", "integratedDisplay", b"integratedDisplay", "screenSizeHeight", b"screenSizeHeight", "screenSizeWidth", b"screenSizeWidth"]) -> None: ...
35
+
36
+ global___VirtualTouchDeviceDescriptor = VirtualTouchDeviceDescriptor
@@ -0,0 +1,8 @@
1
+ syntax = "proto2";
2
+
3
+ import "pyatv/protocols/mrp/protobuf/AudioFormatSettingsMessage.proto";
4
+
5
+ message VoiceInputDeviceDescriptor {
6
+ optional AudioFormatSettings defaultFormat = 1;
7
+ repeated AudioFormatSettings supportedFormats = 2;
8
+ }
@@ -0,0 +1,35 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+
6
+ import builtins
7
+ import collections.abc
8
+ import google.protobuf.descriptor
9
+ import google.protobuf.internal.containers
10
+ import google.protobuf.message
11
+ import pyatv.protocols.mrp.protobuf.AudioFormatSettingsMessage_pb2
12
+ import typing
13
+
14
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
15
+
16
+ @typing.final
17
+ class VoiceInputDeviceDescriptor(google.protobuf.message.Message):
18
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
19
+
20
+ DEFAULTFORMAT_FIELD_NUMBER: builtins.int
21
+ SUPPORTEDFORMATS_FIELD_NUMBER: builtins.int
22
+ @property
23
+ def defaultFormat(self) -> pyatv.protocols.mrp.protobuf.AudioFormatSettingsMessage_pb2.AudioFormatSettings: ...
24
+ @property
25
+ def supportedFormats(self) -> google.protobuf.internal.containers.RepeatedCompositeFieldContainer[pyatv.protocols.mrp.protobuf.AudioFormatSettingsMessage_pb2.AudioFormatSettings]: ...
26
+ def __init__(
27
+ self,
28
+ *,
29
+ defaultFormat: pyatv.protocols.mrp.protobuf.AudioFormatSettingsMessage_pb2.AudioFormatSettings | None = ...,
30
+ supportedFormats: collections.abc.Iterable[pyatv.protocols.mrp.protobuf.AudioFormatSettingsMessage_pb2.AudioFormatSettings] | None = ...,
31
+ ) -> None: ...
32
+ def HasField(self, field_name: typing.Literal["defaultFormat", b"defaultFormat"]) -> builtins.bool: ...
33
+ def ClearField(self, field_name: typing.Literal["defaultFormat", b"defaultFormat", "supportedFormats", b"supportedFormats"]) -> None: ...
34
+
35
+ global___VoiceInputDeviceDescriptor = VoiceInputDeviceDescriptor
@@ -0,0 +1,23 @@
1
+ syntax = "proto2";
2
+
3
+ import "pyatv/protocols/mrp/protobuf/ProtocolMessage.proto";
4
+
5
+ extend ProtocolMessage {
6
+ optional VolumeControlAvailabilityMessage volumeControlAvailabilityMessage = 22;
7
+ }
8
+
9
+ message VolumeCapabilities {
10
+ // This is really a bitmap but protobuf has no type for that, so lets just add a "Both"
11
+ // option since only two values exist anyway
12
+ enum Enum {
13
+ None = 0;
14
+ Relative = 1;
15
+ Absolute = 2;
16
+ Both = 3;
17
+ }
18
+ }
19
+
20
+ message VolumeControlAvailabilityMessage {
21
+ optional bool volumeControlAvailable = 1;
22
+ optional VolumeCapabilities.Enum volumeCapabilities = 2;
23
+ }
@@ -0,0 +1,71 @@
1
+ """
2
+ @generated by mypy-protobuf. Do not edit manually!
3
+ isort:skip_file
4
+ """
5
+
6
+ import builtins
7
+ import google.protobuf.descriptor
8
+ import google.protobuf.internal.enum_type_wrapper
9
+ import google.protobuf.internal.extension_dict
10
+ import google.protobuf.message
11
+ import pyatv.protocols.mrp.protobuf.ProtocolMessage_pb2
12
+ import sys
13
+ import typing
14
+
15
+ if sys.version_info >= (3, 10):
16
+ import typing as typing_extensions
17
+ else:
18
+ import typing_extensions
19
+
20
+ DESCRIPTOR: google.protobuf.descriptor.FileDescriptor
21
+
22
+ @typing.final
23
+ class VolumeCapabilities(google.protobuf.message.Message):
24
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
25
+
26
+ class _Enum:
27
+ ValueType = typing.NewType("ValueType", builtins.int)
28
+ V: typing_extensions.TypeAlias = ValueType
29
+
30
+ class _EnumEnumTypeWrapper(google.protobuf.internal.enum_type_wrapper._EnumTypeWrapper[VolumeCapabilities._Enum.ValueType], builtins.type):
31
+ DESCRIPTOR: google.protobuf.descriptor.EnumDescriptor
32
+ Relative: VolumeCapabilities._Enum.ValueType # 1
33
+ Absolute: VolumeCapabilities._Enum.ValueType # 2
34
+ Both: VolumeCapabilities._Enum.ValueType # 3
35
+
36
+ class Enum(_Enum, metaclass=_EnumEnumTypeWrapper):
37
+ """This is really a bitmap but protobuf has no type for that, so lets just add a "Both"
38
+ option since only two values exist anyway
39
+ """
40
+
41
+ Relative: VolumeCapabilities.Enum.ValueType # 1
42
+ Absolute: VolumeCapabilities.Enum.ValueType # 2
43
+ Both: VolumeCapabilities.Enum.ValueType # 3
44
+
45
+ def __init__(
46
+ self,
47
+ ) -> None: ...
48
+
49
+ global___VolumeCapabilities = VolumeCapabilities
50
+
51
+ @typing.final
52
+ class VolumeControlAvailabilityMessage(google.protobuf.message.Message):
53
+ DESCRIPTOR: google.protobuf.descriptor.Descriptor
54
+
55
+ VOLUMECONTROLAVAILABLE_FIELD_NUMBER: builtins.int
56
+ VOLUMECAPABILITIES_FIELD_NUMBER: builtins.int
57
+ volumeControlAvailable: builtins.bool
58
+ volumeCapabilities: global___VolumeCapabilities.Enum.ValueType
59
+ def __init__(
60
+ self,
61
+ *,
62
+ volumeControlAvailable: builtins.bool | None = ...,
63
+ volumeCapabilities: global___VolumeCapabilities.Enum.ValueType | None = ...,
64
+ ) -> None: ...
65
+ def HasField(self, field_name: typing.Literal["volumeCapabilities", b"volumeCapabilities", "volumeControlAvailable", b"volumeControlAvailable"]) -> builtins.bool: ...
66
+ def ClearField(self, field_name: typing.Literal["volumeCapabilities", b"volumeCapabilities", "volumeControlAvailable", b"volumeControlAvailable"]) -> None: ...
67
+
68
+ global___VolumeControlAvailabilityMessage = VolumeControlAvailabilityMessage
69
+
70
+ VOLUMECONTROLAVAILABILITYMESSAGE_FIELD_NUMBER: builtins.int
71
+ volumeControlAvailabilityMessage: google.protobuf.internal.extension_dict._ExtensionFieldDescriptor[pyatv.protocols.mrp.protobuf.ProtocolMessage_pb2.ProtocolMessage, global___VolumeControlAvailabilityMessage]
@@ -0,0 +1,14 @@
1
+ syntax = "proto2";
2
+
3
+ import "pyatv/protocols/mrp/protobuf/ProtocolMessage.proto";
4
+ import "pyatv/protocols/mrp/protobuf/VolumeControlAvailabilityMessage.proto";
5
+
6
+ extend ProtocolMessage {
7
+ optional VolumeControlCapabilitiesDidChangeMessage volumeControlCapabilitiesDidChangeMessage = 68;
8
+ }
9
+
10
+ message VolumeControlCapabilitiesDidChangeMessage {
11
+ optional VolumeControlAvailabilityMessage capabilities = 1;
12
+ optional string endpointUID = 3;
13
+ optional string outputDeviceUID = 4;
14
+ }