@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,76 @@
1
+ # Contributor Covenant Code of Conduct
2
+
3
+ ## Our Pledge
4
+
5
+ In the interest of fostering an open and welcoming environment, we as
6
+ contributors and maintainers pledge to making participation in our project and
7
+ our community a harassment-free experience for everyone, regardless of age, body
8
+ size, disability, ethnicity, sex characteristics, gender identity and expression,
9
+ level of experience, education, socio-economic status, nationality, personal
10
+ appearance, race, religion, or sexual identity and orientation.
11
+
12
+ ## Our Standards
13
+
14
+ Examples of behavior that contributes to creating a positive environment
15
+ include:
16
+
17
+ * Using welcoming and inclusive language
18
+ * Being respectful of differing viewpoints and experiences
19
+ * Gracefully accepting constructive criticism
20
+ * Focusing on what is best for the community
21
+ * Showing empathy towards other community members
22
+
23
+ Examples of unacceptable behavior by participants include:
24
+
25
+ * The use of sexualized language or imagery and unwelcome sexual attention or
26
+ advances
27
+ * Trolling, insulting/derogatory comments, and personal or political attacks
28
+ * Public or private harassment
29
+ * Publishing others' private information, such as a physical or electronic
30
+ address, without explicit permission
31
+ * Other conduct which could reasonably be considered inappropriate in a
32
+ professional setting
33
+
34
+ ## Our Responsibilities
35
+
36
+ Project maintainers are responsible for clarifying the standards of acceptable
37
+ behavior and are expected to take appropriate and fair corrective action in
38
+ response to any instances of unacceptable behavior.
39
+
40
+ Project maintainers have the right and responsibility to remove, edit, or
41
+ reject comments, commits, code, wiki edits, issues, and other contributions
42
+ that are not aligned to this Code of Conduct, or to ban temporarily or
43
+ permanently any contributor for other behaviors that they deem inappropriate,
44
+ threatening, offensive, or harmful.
45
+
46
+ ## Scope
47
+
48
+ This Code of Conduct applies both within project spaces and in public spaces
49
+ when an individual is representing the project or its community. Examples of
50
+ representing a project or community include using an official project e-mail
51
+ address, posting via an official social media account, or acting as an appointed
52
+ representative at an online or offline event. Representation of a project may be
53
+ further defined and clarified by project maintainers.
54
+
55
+ ## Enforcement
56
+
57
+ Instances of abusive, harassing, or otherwise unacceptable behavior may be
58
+ reported by contacting the project team at pierre.staahl@gmail.com. All
59
+ complaints will be reviewed and investigated and will result in a response that
60
+ is deemed necessary and appropriate to the circumstances. The project team is
61
+ obligated to maintain confidentiality with regard to the reporter of an incident.
62
+ Further details of specific enforcement policies may be posted separately.
63
+
64
+ Project maintainers who do not follow or enforce the Code of Conduct in good
65
+ faith may face temporary or permanent repercussions as determined by other
66
+ members of the project's leadership.
67
+
68
+ ## Attribution
69
+
70
+ This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
71
+ available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
72
+
73
+ [homepage]: https://www.contributor-covenant.org
74
+
75
+ For answers to common questions about this code of conduct, see
76
+ https://www.contributor-covenant.org/faq
@@ -0,0 +1,72 @@
1
+ # Contributing
2
+
3
+ First off, thank you for showing an interest in pyatv and perhaps also contributing!
4
+ Every contribution matters and it's people like you that make pyatv great! :heart:
5
+
6
+ ## Getting Started
7
+
8
+ ### Resources to read
9
+
10
+ Make sure to read these awesome documents:
11
+
12
+ [Code of Conduct](CODE_OF_CONDUCT.md)
13
+
14
+ [FAQ](https://pyatv.readthedocs.io/en/master/faq.html)
15
+
16
+ ### Reporting a bug
17
+
18
+ If you think you have found a bug, please consider writing an issue about it. Use the "Bug" template
19
+ and be as precise as you can.
20
+
21
+ [Click here to open a new bug report](https://github.com/postlund/pyatv/issues/new?assignees=&labels=bug&template=bug_report.md&title=)
22
+
23
+ ### Requesting a new feature
24
+
25
+ New features are always cool, maybe you have some ideas or wishes? There is a template for feature
26
+ requests as well. Just create an issue and fill it out.
27
+
28
+ [Click here to request a new feature](https://github.com/postlund/pyatv/issues/new?assignees=&labels=feature&template=feature_request.md&title=)
29
+
30
+ ### Questions or ideas
31
+
32
+ If you have any questions (e.g. "how do I do this with pyatv"), you can write an issue as well. You can also
33
+ leave ideas for other kinds of improvements, like gaps in the documentation or better development tools.
34
+
35
+ [Click here to ask a general question](https://github.com/postlund/pyatv/issues/new?assignees=&labels=question&template=question-or-idea.md&title=)
36
+
37
+ ## Development
38
+
39
+ ### Getting code and setting up development environment
40
+
41
+ Getting started with development is quite simple:
42
+
43
+ ```
44
+ 1. Fork this project on GitHub
45
+ 2. git clone https://github.com/<username>/pyatv.git
46
+ 3. cd pyatv
47
+ 4. ./scripts/setup_dev_env.sh
48
+ ```
49
+
50
+ This will set everything up. To run tests, linting, etc. just run activate the virtual environment and run chickn:
51
+
52
+ ```shell
53
+ $ source bin/activate
54
+ (pyatv)$ ./scripts/chickn.py
55
+ ```
56
+
57
+ ### Pull Requests (PR)
58
+
59
+ When submitting changes, create a PR and make sure:
60
+
61
+ * You add tests for new functionality and/or bug fixes
62
+ * All tests must pass
63
+ * Do not decrease code coverage
64
+ * Add pydoc documentation and update `docs/`
65
+ * Linting passes (just run chickn)
66
+
67
+ PRs will not be merged unless all criterias are met. If you are unsure about anything, just push a PR and ask
68
+ for help in the PR itself :smile:
69
+
70
+ ### License
71
+
72
+ The MIT license is used by pyatv and by contributing, you agree that your content will be covered by that license.
@@ -0,0 +1,3 @@
1
+ # Contributors
2
+
3
+ See [this page](https://pyatv.dev/support/acknowledgements/#contributors)
@@ -0,0 +1,15 @@
1
+ FROM python:3.15.0a5-alpine
2
+ ARG VERSION
3
+
4
+ WORKDIR .
5
+ COPY dist/pyatv-${VERSION}-py3-none-any.whl .
6
+ COPY requirements/requirements.txt .
7
+
8
+ RUN apk add gcc musl-dev build-base linux-headers libffi-dev rust cargo openssl-dev git && \
9
+ pip install setuptools-rust && \
10
+ pip install -r requirements.txt && \
11
+ pip install pyatv-${VERSION}-py3-none-any.whl && \
12
+ apk del gcc musl-dev build-base linux-headers libffi-dev rust cargo openssl-dev git && \
13
+ rm pyatv-${VERSION}-py3-none-any.whl && \
14
+ rm requirements.txt && \
15
+ rm -rf /root/.cache /root/.cargo
@@ -0,0 +1,9 @@
1
+ # The MIT License (MIT)
2
+
3
+ Copyright (c) 2020 Pierre Ståhl
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
6
+
7
+ The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
8
+
9
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
@@ -0,0 +1,14 @@
1
+ include CHANGES.md
2
+ include README.md
3
+ include LICENSE.md
4
+ include CONTRIBUTORS.md
5
+ include base_versions.txt
6
+ graft pyatv
7
+ graft tests
8
+ graft docs
9
+ graft examples
10
+ global-exclude *~ __pycache__
11
+ recursive-exclude * *.py[co] .*
12
+ prune docs/vendor
13
+ prune docs/_site
14
+ prune docs/.sass-cache
@@ -0,0 +1,111 @@
1
+ A client library for Apple TV and AirPlay devices
2
+ =================================================
3
+
4
+ <img src="https://raw.githubusercontent.com/postlund/pyatv/master/docs/assets/img/logo.svg?raw=true" width="150">
5
+
6
+ ![Tests](https://github.com/postlund/pyatv/workflows/Tests/badge.svg)
7
+ ![pyatv Actions](https://api.meercode.io/badge/postlund/pyatv?type=ci-success-rate&branch=master&lastDay=30)
8
+ [![codecov](https://codecov.io/gh/postlund/pyatv/branch/master/graph/badge.svg)](https://codecov.io/gh/postlund/pyatv)
9
+ [![Code style: black](https://img.shields.io/badge/code%20style-black-000000.svg)](https://github.com/psf/black)
10
+ [![PyPi Package](https://badge.fury.io/py/pyatv.svg)](https://badge.fury.io/py/pyatv)
11
+ [![Gitpod Ready-to-Code](https://img.shields.io/badge/Gitpod-ready--to--code-blue?logo=gitpod)](https://gitpod.io/#https://github.com/postlund/pyatv)
12
+ [![Downloads](https://static.pepy.tech/badge/pyatv)](https://pepy.tech/project/pyatv)
13
+ [![PyPI pyversions](https://img.shields.io/pypi/pyversions/pyatv.svg)](https://pypi.python.org/pypi/pyatv/)
14
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
15
+
16
+ This is an asyncio python library for interacting with Apple TV and AirPlay devices. It mainly
17
+ targets Apple TVs (all generations, **including tvOS 15 and later**), but also supports audio streaming via AirPlay
18
+ to receivers like the HomePod, AirPort Express and third-party speakers. It can act as remote control to the Music
19
+ app/iTunes in macOS.
20
+
21
+ All the documentation you need is available at **[pyatv.dev](https://pyatv.dev)**.
22
+
23
+ # What can it do?
24
+
25
+ Some examples include:
26
+
27
+ * Remote control commands
28
+ * Metadata retrieval with push updates
29
+ * Stream files via AirPlay
30
+ * List and launch installed apps
31
+ * List and switch user accounts
32
+ * Add, remove or set audio output devices (e.g. HomePods)
33
+ * Keyboard support
34
+ * Persistent storage of credentials and settings
35
+
36
+ ...and lots more! A complete list is available [here](https://pyatv.dev/documentation/supported_features/).
37
+
38
+ # Great, but how do I use it?
39
+
40
+ All documentation (especially for developers) are available at [pyatv.dev](https://pyatv.dev).
41
+ It is however possible to install with `pip` and set up a new device `atvremote`:
42
+
43
+ ```raw
44
+ $ pip install pyatv
45
+ $ atvremote wizard
46
+ Looking for devices...
47
+ Found the following devices:
48
+ Name Model Address
49
+ -- ------------------------ ----------------------- -----------
50
+ 1 Receiver+ airupnp 10.0.10.200
51
+ 2 Receiver RX-V773 10.0.10.82
52
+ 3 Pierre's AirPort Express AirPort Express (gen 2) 10.0.10.168
53
+ 4 FakeATV Unknown 10.0.10.254
54
+ 5 Vardagsrum Apple TV 4K 10.0.10.81
55
+ 6 Apple TV Apple TV 3 10.0.10.83
56
+ Enter index of device to set up (q to quit): 4
57
+ Starting to set up FakeATV
58
+ Starting to pair Protocol.MRP
59
+ Enter PIN on screen: 1111
60
+ Successfully paired Protocol.MRP, moving on...
61
+ Pairing finished, trying to connect and get some metadata...
62
+ Currently playing:
63
+ Media type: Music
64
+ Device state: Playing
65
+ Title: Never Gonna Give You Up
66
+ Artist: Rick Astley
67
+ Position: 1/213s (0.0%)
68
+ Repeat: Off
69
+ Shuffle: Off
70
+ Device is now set up!
71
+ ```
72
+
73
+ After setting up a new device, other commands can be run directly:
74
+
75
+ ```raw
76
+ $ atvremote -s 10.0.10.254 playing
77
+ Media type: Music
78
+ Device state: Playing
79
+ Title: Never Gonna Give You Up
80
+ Artist: Rick Astley
81
+ Position: 1/213s (0.0%)
82
+ Repeat: Off
83
+ Shuffle: Off
84
+ $ atvremote -s 10.0.10.254 pause
85
+ $ atvremote -n FakeATV play
86
+ ```
87
+
88
+ You can also run it inside a container (x86_64, aarch64, armv7):
89
+
90
+ ```raw
91
+ docker run -it --rm --network=host ghcr.io/postlund/pyatv:0.14.0 atvremote scan
92
+ ```
93
+
94
+ The `master` tag points to latest commit on the `master` branch and `latest`
95
+ points to the latest release.
96
+
97
+ # I need to change something?
98
+
99
+ Want to help out with `pyatv`? Press the button below to get a fully prepared development environment and get started right away!
100
+
101
+ [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/#https://github.com/postlund/pyatv)
102
+
103
+ # Shortcuts to the good stuff
104
+
105
+ To save you some time, here are some shortcuts:
106
+
107
+ * [Getting started](https://pyatv.dev/documentation/getting-started/)
108
+ * [Documentation](https://pyatv.dev/documentation)
109
+ * [Development](https://pyatv.dev/development)
110
+ * [API Reference](https://pyatv.dev/api)
111
+ * [Support](https://pyatv.dev/support)
@@ -0,0 +1,13 @@
1
+ aiohttp==3.8.3,<5
2
+ async-timeout==4.0.2;python_version<'3.11'
3
+ cryptography==44.0.1
4
+ chacha20poly1305-reuseable==0.13.2
5
+ ifaddr==0.1.7
6
+ miniaudio==1.45
7
+ protobuf==6.31.1
8
+ pydantic==2.0.0
9
+ requests==2.30.0
10
+ srptools==0.2.0
11
+ tabulate==0.9.0
12
+ tinytag==1.10.0
13
+ zeroconf==0.129.0
@@ -0,0 +1,75 @@
1
+ variables:
2
+ code_dirs:
3
+ - pyatv
4
+ - tests
5
+ - examples
6
+ - scripts
7
+ pydirs:
8
+ - pyatv
9
+ - scripts
10
+ - examples
11
+ cs_exclude_words: infoms,cann,cant,asai,cafs,assertIn
12
+ requirements_file: requirements/requirements.txt
13
+ miniaudio_package: $(grep miniaudio= requirements/requirements.txt)
14
+
15
+ dependencies:
16
+ files:
17
+ - "{requirements_file}"
18
+ - requirements/requirements_docs.txt
19
+ - requirements/requirements_test.txt
20
+
21
+ pipeline:
22
+ pre:
23
+ - name: clean
24
+ run: coverage erase
25
+ - name: fixup
26
+ tags: [all, fixup]
27
+ run:
28
+ - black .
29
+ - isort {code_dirs}
30
+ - python scripts/api.py generate
31
+ - python scripts/protobuf.py --download generate
32
+ rebuild_miniaudio:
33
+ # A lot of builds on GitHub Actions result in "Illegal Instruction"
34
+ # when calling functions in miniaudio. Seemingly random and not
35
+ # always. Likely has to do with some instruction set mismatch, but
36
+ # not sure. Rebuilding miniaudio seems to improve the situation,
37
+ # so this optional step is used by the tests workflow to do that.
38
+ - name: miniaudio
39
+ tags: [all, miniaudio]
40
+ run:
41
+ - "pip uninstall -y miniaudio"
42
+ - "pip install --no-binary :all: {miniaudio_package}"
43
+ validate:
44
+ - name: pylint
45
+ run: pylint -j 0 {pydirs}
46
+ - name: api
47
+ run: python scripts/api.py verify
48
+ tags: [all, py3.8, api]
49
+ - name: protobuf
50
+ run: python scripts/protobuf.py --download verify
51
+ - name: flake8
52
+ run: flake8 --exclude=pyatv/protocols/mrp/protobuf {pydirs}
53
+ - name: black
54
+ run: black --fast --check .
55
+ - name: pydocstyle
56
+ run: pydocstyle -v --match='(?!test_).*[^pb2]\.py' {pydirs}
57
+ - name: isort
58
+ run: isort -c --diff {code_dirs}
59
+ - name: cs_docs
60
+ run: codespell -q 6 -L {cs_exclude_words} -S "lib,vendor,_site,api,assets,*~,.sass-cache,*.lock" docs
61
+ - name: cs_code
62
+ run: codespell -q 4 -L {cs_exclude_words} --skip="*.pyc,*.pyi,*~,tests/data" {pydirs} tests
63
+ - name: typing
64
+ run: mypy --python-executable "{python_executable}" --ignore-missing-imports --follow-imports=skip pyatv
65
+ - name: pytest
66
+ run: pytest -n auto --log-level=debug -q -d --timeout=30 --durations=10 --cov --cov-report=term-missing --cov-report=xml tests
67
+ post:
68
+ - name: report
69
+ run:
70
+ - coverage report
71
+ - coverage html
72
+ package:
73
+ - name: dist
74
+ run: python setup.py sdist bdist_wheel
75
+ tags: [all, package]
@@ -0,0 +1,24 @@
1
+ ---
2
+ layout: template
3
+ ---
4
+
5
+ <style type="text/css" media="screen">
6
+ .container {
7
+ margin: 10px auto;
8
+ max-width: 600px;
9
+ text-align: center;
10
+ }
11
+ h1 {
12
+ margin: 30px 0;
13
+ font-size: 4em;
14
+ line-height: 1;
15
+ letter-spacing: -1px;
16
+ }
17
+ </style>
18
+
19
+ <div class="container">
20
+ <h1>404</h1>
21
+
22
+ <p><strong>Page not found :(</strong></p>
23
+ <p>The requested page could not be found.</p>
24
+ </div>
@@ -0,0 +1 @@
1
+ pyatv.dev
@@ -0,0 +1,31 @@
1
+ source "https://rubygems.org"
2
+
3
+ # Hello! This is where you manage which Jekyll version is used to run.
4
+ # When you want to use a different version, change it below, save the
5
+ # file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
6
+ #
7
+ # bundle exec jekyll serve
8
+ #
9
+ # This will help ensure the proper Jekyll version is running.
10
+ # Happy Jekylling!
11
+
12
+ # If you want to use GitHub Pages, remove the "gem "jekyll"" above and
13
+ # uncomment the line below. To upgrade, run `bundle update github-pages`.
14
+ gem "github-pages", group: :jekyll_plugins
15
+
16
+ # If you have any plugins, put them here!
17
+ group :jekyll_plugins do
18
+ gem "jekyll-feed", "~> 0.6"
19
+ gem "jemoji"
20
+ end
21
+
22
+ # Windows does not include zoneinfo files, so bundle the tzinfo-data gem
23
+ # and associated library.
24
+ install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do
25
+ gem "tzinfo", "~> 1.2"
26
+ gem "tzinfo-data"
27
+ end
28
+
29
+ # Performance-booster for watching directories on Windows
30
+ gem "wdm", "~> 0.1.0", :install_if => Gem.win_platform?
31
+
@@ -0,0 +1,121 @@
1
+ title: pyatv
2
+ email: pierre.staahl@gmail.com
3
+ description: >- # this means to ignore newlines until "baseurl:"
4
+ a client library for Apple TV and AirPlay devices
5
+ url: "https://pyatv.dev"
6
+ baseurl: /
7
+ twitter_username: postlund
8
+ github_username: postlund
9
+
10
+ markdown: kramdown
11
+ kramdown:
12
+ parse_block_html: true
13
+ parse_span_html: true
14
+ html_to_native: true
15
+ theme: jekyll-theme-cayman
16
+ plugins:
17
+ - jekyll-feed
18
+ - jemoji
19
+
20
+ pyatv_version: "pyatv"
21
+
22
+ top_pages:
23
+ - link: /
24
+ title: Main Page
25
+ - link: /documentation/
26
+ title: Documentation
27
+ - link: /development/
28
+ title: Development
29
+ - link: /api/
30
+ title: API Reference
31
+ - link: /internals/
32
+ title: Internals
33
+ - link: /support/
34
+ title: Support
35
+
36
+ page_links:
37
+ documentation:
38
+ - link: /documentation/
39
+ title: Start
40
+ - link: /documentation/getting-started/
41
+ title: Getting Started
42
+ - link: /documentation/tutorial/
43
+ title: Tutorial
44
+ - link: /documentation/supported_features/
45
+ title: Supported Features
46
+ - link: /documentation/concepts/
47
+ title: Concepts
48
+ - link: /documentation/protocols/
49
+ title: Protocols
50
+ - link: /documentation/atvremote/
51
+ title: atvremote
52
+ - link: /documentation/atvproxy/
53
+ title: atvproxy
54
+ - link: /documentation/atvscript/
55
+ title: atvscript
56
+ - link: /documentation/atvlog/
57
+ title: atvlog
58
+ development:
59
+ - link: /development/
60
+ title: Start
61
+ - link: /development/scan_pair_and_connect/
62
+ title: Scan, Pair and Connect
63
+ - link: /development/device_info/
64
+ title: Device Information
65
+ - link: /development/control/
66
+ title: Control
67
+ - link: /development/power_management/
68
+ title: Power Management
69
+ - link: /development/features/
70
+ title: Features
71
+ - link: /development/metadata/
72
+ title: Metadata
73
+ - link: /development/listeners/
74
+ title: Listeners
75
+ - link: /development/stream/
76
+ title: Stream
77
+ - link: /development/storage/
78
+ title: Storage
79
+ - link: /development/apps/
80
+ title: Apps
81
+ - link: /development/audio/
82
+ title: Audio
83
+ - link: /development/keyboard/
84
+ title: Keyboard
85
+ - link: /development/logging/
86
+ title: Logging
87
+ - link: /development/examples/
88
+ title: Examples
89
+ internals:
90
+ - link: /internals/
91
+ title: Start
92
+ - link: /internals/design
93
+ title: Design
94
+ - link: /internals/interfaces
95
+ title: Interfaces
96
+ - link: /internals/testing
97
+ title: Testing
98
+ - link: /internals/documentation
99
+ title: Documentation
100
+ - link: /internals/submit-pr
101
+ title: Submit a PR
102
+ - link: /internals/tools
103
+ title: Tools
104
+ support:
105
+ - link: /support/
106
+ title: Start
107
+ - link: /support/migration/
108
+ title: Migration
109
+ - link: /support/scanning_issues/
110
+ title: Scanning Issues
111
+ - link: /support/troubleshooting/
112
+ title: Troubleshooting
113
+ - link: /support/faq/
114
+ title: FAQ
115
+ - link: /support/acknowledgements/
116
+ title: Acknowledgements
117
+
118
+ exclude:
119
+ - Gemfile
120
+ - Gemfile.lock
121
+ - vendor/
@@ -0,0 +1,10 @@
1
+ {%- assign module = include.i | split: "." | first -%}
2
+ {%- if module == "pyatv" -%}
3
+ {%- assign module = "" -%}
4
+ {%- assign path = "#" | append: include.i | replace: "/", "." -%}
5
+ {%- else -%}
6
+ {%- assign path = "#pyatv." | append: include.i | replace: "/", "." -%}
7
+ {%- endif -%}
8
+ {%- assign url = '/api/' | append: module | append: path | relative_url -%}
9
+ {%- assign path = include.i | replace: "/", "." -%}
10
+ {{ '<a href="URL">PATH</a>' | replace: "URL", url | replace: "PATH", path }}
@@ -0,0 +1,32 @@
1
+ ```raw
2
+ $ atvremote acan
3
+ Scan Results
4
+ ========================================
5
+ Name: Living Room
6
+ Model/SW: Apple TV 4K, tvOS 16.6 build 20M73
7
+ Address: 10.0.0.5
8
+ MAC: AA:BB:CC:DD:EE:FF
9
+ Deep Sleep: True
10
+ Identifiers:
11
+ - 01234567-89AB-CDEF-0123-4567890ABCDE
12
+ - AA:BB:CC:DD:EE:FF
13
+ - 01234567-89AB-CDEF-0123-AAAAAAAAAAAA
14
+ - AABBCCDDEEFF
15
+ Services:
16
+ - Protocol: Companion, Port: 49153, Credentials:None, Requires Password: False, Password: None, Pairing: Mandatory
17
+ - Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
18
+ - Protocol: MRP, Port: 49154, Credentials: None, Requires Password: False, Password: None, Pairing: NotNeeded (Disabled)
19
+ - Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
20
+
21
+ Name: Pierre's AirPort Express
22
+ Model/SW: AirPort Express (gen 2), AirPortOS 7.8.1
23
+ Address: 10.0.0.6
24
+ MAC: BB:BB:BB:BB:BB:BB
25
+ Deep Sleep: False
26
+ Identifiers:
27
+ - BB:BB:BB:BB:BB:BB
28
+ - BBBBBBBBBBBB
29
+ Services:
30
+ - Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: NotNeeded
31
+ - Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: NotNeeded
32
+ ```
@@ -0,0 +1,6 @@
1
+ {%- assign file = include.file -%}
2
+ {%- assign name = file | replace: "_", "\_" | replace: "../", "" -%}
3
+ {%- capture link -%}
4
+ <a href="https://github.com/postlund/pyatv/tree/master/pyatv/{{ file }}">{{ name }}</a>
5
+ {%- endcapture -%}
6
+ {{ link }}
@@ -0,0 +1,14 @@
1
+ {%- assign numbers = include.no | split: "," -%}
2
+ {%- assign output = Nil -%}
3
+ {%- for number in numbers -%}
4
+ {%- capture link -%}
5
+ <a href="https://github.com/postlund/pyatv/issues/{{ number }}">#{{ number }}</a>
6
+ {%- endcapture -%}
7
+
8
+ {%- if output == Nil -%}
9
+ {%- assign output = link -%}
10
+ {%- else -%}
11
+ {%- assign output = output | append: ", " | append: link -%}
12
+ {%- endif -%}
13
+ {%- endfor -%}
14
+ [{{ output }}]
@@ -0,0 +1,5 @@
1
+ {%- assign package = include.package -%}
2
+ {%- capture link -%}
3
+ <a href="https://pypi.org/project/{{ package }}">{{ package }}</a>
4
+ {%- endcapture -%}
5
+ {{ link }}