@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,2369 @@
1
+ ---
2
+ layout: template
3
+ title: API - pyatv.interface
4
+ permalink: /api/interface/
5
+ link_group: api
6
+ ---
7
+ <nav id="sidebar">
8
+ <h1>Index</h1>
9
+ <div class="toc">
10
+ <ul></ul>
11
+ </div>
12
+ <ul id="index">
13
+ <li><h3>Super-module</h3>
14
+ <ul>
15
+ <li><code><a title="pyatv" href="..">pyatv</a></code></li>
16
+ </ul>
17
+ </li>
18
+ <li><h3><a href="#header-functions">Functions</a></h3>
19
+ <ul class="">
20
+ <li><code><a title="pyatv.interface.retrieve_commands" href="#pyatv.interface.retrieve_commands">retrieve_commands</a></code></li>
21
+ </ul>
22
+ </li>
23
+ <li><h3><a href="#header-classes">Classes</a></h3>
24
+ <ul>
25
+ <li>
26
+ <h4><code><a title="pyatv.interface.App" href="#pyatv.interface.App">App</a></code></h4>
27
+ <ul class="">
28
+ <li><code><a title="pyatv.interface.App.identifier" href="#pyatv.interface.App.identifier">identifier</a></code></li>
29
+ <li><code><a title="pyatv.interface.App.name" href="#pyatv.interface.App.name">name</a></code></li>
30
+ </ul>
31
+ </li>
32
+ <li>
33
+ <h4><code><a title="pyatv.interface.AppleTV" href="#pyatv.interface.AppleTV">AppleTV</a></code></h4>
34
+ <ul class="two-column">
35
+ <li><code><a title="pyatv.interface.AppleTV.apps" href="#pyatv.interface.AppleTV.apps">apps</a></code></li>
36
+ <li><code><a title="pyatv.interface.AppleTV.audio" href="#pyatv.interface.AppleTV.audio">audio</a></code></li>
37
+ <li><code><a title="pyatv.interface.AppleTV.close" href="#pyatv.interface.AppleTV.close">close</a></code></li>
38
+ <li><code><a title="pyatv.interface.AppleTV.connect" href="#pyatv.interface.AppleTV.connect">connect</a></code></li>
39
+ <li><code><a title="pyatv.interface.AppleTV.device_info" href="#pyatv.interface.AppleTV.device_info">device_info</a></code></li>
40
+ <li><code><a title="pyatv.interface.AppleTV.features" href="#pyatv.interface.AppleTV.features">features</a></code></li>
41
+ <li><code><a title="pyatv.interface.AppleTV.keyboard" href="#pyatv.interface.AppleTV.keyboard">keyboard</a></code></li>
42
+ <li><code><a title="pyatv.interface.AppleTV.metadata" href="#pyatv.interface.AppleTV.metadata">metadata</a></code></li>
43
+ <li><code><a title="pyatv.interface.AppleTV.power" href="#pyatv.interface.AppleTV.power">power</a></code></li>
44
+ <li><code><a title="pyatv.interface.AppleTV.push_updater" href="#pyatv.interface.AppleTV.push_updater">push_updater</a></code></li>
45
+ <li><code><a title="pyatv.interface.AppleTV.remote_control" href="#pyatv.interface.AppleTV.remote_control">remote_control</a></code></li>
46
+ <li><code><a title="pyatv.interface.AppleTV.service" href="#pyatv.interface.AppleTV.service">service</a></code></li>
47
+ <li><code><a title="pyatv.interface.AppleTV.settings" href="#pyatv.interface.AppleTV.settings">settings</a></code></li>
48
+ <li><code><a title="pyatv.interface.AppleTV.stream" href="#pyatv.interface.AppleTV.stream">stream</a></code></li>
49
+ <li><code><a title="pyatv.interface.AppleTV.touch" href="#pyatv.interface.AppleTV.touch">touch</a></code></li>
50
+ <li><code><a title="pyatv.interface.AppleTV.user_accounts" href="#pyatv.interface.AppleTV.user_accounts">user_accounts</a></code></li>
51
+ </ul>
52
+ </li>
53
+ <li>
54
+ <h4><code><a title="pyatv.interface.Apps" href="#pyatv.interface.Apps">Apps</a></code></h4>
55
+ <ul class="">
56
+ <li><code><a title="pyatv.interface.Apps.app_list" href="#pyatv.interface.Apps.app_list">app_list</a></code></li>
57
+ <li><code><a title="pyatv.interface.Apps.launch_app" href="#pyatv.interface.Apps.launch_app">launch_app</a></code></li>
58
+ </ul>
59
+ </li>
60
+ <li>
61
+ <h4><code><a title="pyatv.interface.ArtworkInfo" href="#pyatv.interface.ArtworkInfo">ArtworkInfo</a></code></h4>
62
+ <ul class="">
63
+ <li><code><a title="pyatv.interface.ArtworkInfo.bytes" href="#pyatv.interface.ArtworkInfo.bytes">bytes</a></code></li>
64
+ <li><code><a title="pyatv.interface.ArtworkInfo.height" href="#pyatv.interface.ArtworkInfo.height">height</a></code></li>
65
+ <li><code><a title="pyatv.interface.ArtworkInfo.mimetype" href="#pyatv.interface.ArtworkInfo.mimetype">mimetype</a></code></li>
66
+ <li><code><a title="pyatv.interface.ArtworkInfo.width" href="#pyatv.interface.ArtworkInfo.width">width</a></code></li>
67
+ </ul>
68
+ </li>
69
+ <li>
70
+ <h4><code><a title="pyatv.interface.Audio" href="#pyatv.interface.Audio">Audio</a></code></h4>
71
+ <ul class="">
72
+ <li><code><a title="pyatv.interface.Audio.add_output_devices" href="#pyatv.interface.Audio.add_output_devices">add_output_devices</a></code></li>
73
+ <li><code><a title="pyatv.interface.Audio.output_devices" href="#pyatv.interface.Audio.output_devices">output_devices</a></code></li>
74
+ <li><code><a title="pyatv.interface.Audio.remove_output_devices" href="#pyatv.interface.Audio.remove_output_devices">remove_output_devices</a></code></li>
75
+ <li><code><a title="pyatv.interface.Audio.set_output_devices" href="#pyatv.interface.Audio.set_output_devices">set_output_devices</a></code></li>
76
+ <li><code><a title="pyatv.interface.Audio.set_volume" href="#pyatv.interface.Audio.set_volume">set_volume</a></code></li>
77
+ <li><code><a title="pyatv.interface.Audio.volume" href="#pyatv.interface.Audio.volume">volume</a></code></li>
78
+ <li><code><a title="pyatv.interface.Audio.volume_down" href="#pyatv.interface.Audio.volume_down">volume_down</a></code></li>
79
+ <li><code><a title="pyatv.interface.Audio.volume_up" href="#pyatv.interface.Audio.volume_up">volume_up</a></code></li>
80
+ </ul>
81
+ </li>
82
+ <li>
83
+ <h4><code><a title="pyatv.interface.AudioListener" href="#pyatv.interface.AudioListener">AudioListener</a></code></h4>
84
+ <ul class="">
85
+ <li><code><a title="pyatv.interface.AudioListener.outputdevices_update" href="#pyatv.interface.AudioListener.outputdevices_update">outputdevices_update</a></code></li>
86
+ <li><code><a title="pyatv.interface.AudioListener.volume_update" href="#pyatv.interface.AudioListener.volume_update">volume_update</a></code></li>
87
+ </ul>
88
+ </li>
89
+ <li>
90
+ <h4><code><a title="pyatv.interface.BaseConfig" href="#pyatv.interface.BaseConfig">BaseConfig</a></code></h4>
91
+ <ul class="two-column">
92
+ <li><code><a title="pyatv.interface.BaseConfig.add_service" href="#pyatv.interface.BaseConfig.add_service">add_service</a></code></li>
93
+ <li><code><a title="pyatv.interface.BaseConfig.address" href="#pyatv.interface.BaseConfig.address">address</a></code></li>
94
+ <li><code><a title="pyatv.interface.BaseConfig.all_identifiers" href="#pyatv.interface.BaseConfig.all_identifiers">all_identifiers</a></code></li>
95
+ <li><code><a title="pyatv.interface.BaseConfig.apply" href="#pyatv.interface.BaseConfig.apply">apply</a></code></li>
96
+ <li><code><a title="pyatv.interface.BaseConfig.deep_sleep" href="#pyatv.interface.BaseConfig.deep_sleep">deep_sleep</a></code></li>
97
+ <li><code><a title="pyatv.interface.BaseConfig.device_info" href="#pyatv.interface.BaseConfig.device_info">device_info</a></code></li>
98
+ <li><code><a title="pyatv.interface.BaseConfig.get_service" href="#pyatv.interface.BaseConfig.get_service">get_service</a></code></li>
99
+ <li><code><a title="pyatv.interface.BaseConfig.identifier" href="#pyatv.interface.BaseConfig.identifier">identifier</a></code></li>
100
+ <li><code><a title="pyatv.interface.BaseConfig.main_service" href="#pyatv.interface.BaseConfig.main_service">main_service</a></code></li>
101
+ <li><code><a title="pyatv.interface.BaseConfig.name" href="#pyatv.interface.BaseConfig.name">name</a></code></li>
102
+ <li><code><a title="pyatv.interface.BaseConfig.properties" href="#pyatv.interface.BaseConfig.properties">properties</a></code></li>
103
+ <li><code><a title="pyatv.interface.BaseConfig.ready" href="#pyatv.interface.BaseConfig.ready">ready</a></code></li>
104
+ <li><code><a title="pyatv.interface.BaseConfig.services" href="#pyatv.interface.BaseConfig.services">services</a></code></li>
105
+ <li><code><a title="pyatv.interface.BaseConfig.set_credentials" href="#pyatv.interface.BaseConfig.set_credentials">set_credentials</a></code></li>
106
+ </ul>
107
+ </li>
108
+ <li>
109
+ <h4><code><a title="pyatv.interface.BaseService" href="#pyatv.interface.BaseService">BaseService</a></code></h4>
110
+ <ul class="two-column">
111
+ <li><code><a title="pyatv.interface.BaseService.apply" href="#pyatv.interface.BaseService.apply">apply</a></code></li>
112
+ <li><code><a title="pyatv.interface.BaseService.enabled" href="#pyatv.interface.BaseService.enabled">enabled</a></code></li>
113
+ <li><code><a title="pyatv.interface.BaseService.identifier" href="#pyatv.interface.BaseService.identifier">identifier</a></code></li>
114
+ <li><code><a title="pyatv.interface.BaseService.merge" href="#pyatv.interface.BaseService.merge">merge</a></code></li>
115
+ <li><code><a title="pyatv.interface.BaseService.pairing" href="#pyatv.interface.BaseService.pairing">pairing</a></code></li>
116
+ <li><code><a title="pyatv.interface.BaseService.port" href="#pyatv.interface.BaseService.port">port</a></code></li>
117
+ <li><code><a title="pyatv.interface.BaseService.properties" href="#pyatv.interface.BaseService.properties">properties</a></code></li>
118
+ <li><code><a title="pyatv.interface.BaseService.protocol" href="#pyatv.interface.BaseService.protocol">protocol</a></code></li>
119
+ <li><code><a title="pyatv.interface.BaseService.requires_password" href="#pyatv.interface.BaseService.requires_password">requires_password</a></code></li>
120
+ <li><code><a title="pyatv.interface.BaseService.settings" href="#pyatv.interface.BaseService.settings">settings</a></code></li>
121
+ </ul>
122
+ </li>
123
+ <li>
124
+ <h4><code><a title="pyatv.interface.DeviceInfo" href="#pyatv.interface.DeviceInfo">DeviceInfo</a></code></h4>
125
+ <ul class="two-column">
126
+ <li><code><a title="pyatv.interface.DeviceInfo.OUTPUT_DEVICE_ID" href="#pyatv.interface.DeviceInfo.OUTPUT_DEVICE_ID">OUTPUT_DEVICE_ID</a></code></li>
127
+ <li><code><a title="pyatv.interface.DeviceInfo.build_number" href="#pyatv.interface.DeviceInfo.build_number">build_number</a></code></li>
128
+ <li><code><a title="pyatv.interface.DeviceInfo.mac" href="#pyatv.interface.DeviceInfo.mac">mac</a></code></li>
129
+ <li><code><a title="pyatv.interface.DeviceInfo.model" href="#pyatv.interface.DeviceInfo.model">model</a></code></li>
130
+ <li><code><a title="pyatv.interface.DeviceInfo.model_str" href="#pyatv.interface.DeviceInfo.model_str">model_str</a></code></li>
131
+ <li><code><a title="pyatv.interface.DeviceInfo.operating_system" href="#pyatv.interface.DeviceInfo.operating_system">operating_system</a></code></li>
132
+ <li><code><a title="pyatv.interface.DeviceInfo.output_device_id" href="#pyatv.interface.DeviceInfo.output_device_id">output_device_id</a></code></li>
133
+ <li><code><a title="pyatv.interface.DeviceInfo.raw_model" href="#pyatv.interface.DeviceInfo.raw_model">raw_model</a></code></li>
134
+ <li><code><a title="pyatv.interface.DeviceInfo.version" href="#pyatv.interface.DeviceInfo.version">version</a></code></li>
135
+ </ul>
136
+ </li>
137
+ <li>
138
+ <h4><code><a title="pyatv.interface.DeviceListener" href="#pyatv.interface.DeviceListener">DeviceListener</a></code></h4>
139
+ <ul class="">
140
+ <li><code><a title="pyatv.interface.DeviceListener.connection_closed" href="#pyatv.interface.DeviceListener.connection_closed">connection_closed</a></code></li>
141
+ <li><code><a title="pyatv.interface.DeviceListener.connection_lost" href="#pyatv.interface.DeviceListener.connection_lost">connection_lost</a></code></li>
142
+ </ul>
143
+ </li>
144
+ <li>
145
+ <h4><code><a title="pyatv.interface.FeatureInfo" href="#pyatv.interface.FeatureInfo">FeatureInfo</a></code></h4>
146
+ <ul class="">
147
+ <li><code><a title="pyatv.interface.FeatureInfo.options" href="#pyatv.interface.FeatureInfo.options">options</a></code></li>
148
+ <li><code><a title="pyatv.interface.FeatureInfo.state" href="#pyatv.interface.FeatureInfo.state">state</a></code></li>
149
+ </ul>
150
+ </li>
151
+ <li>
152
+ <h4><code><a title="pyatv.interface.Features" href="#pyatv.interface.Features">Features</a></code></h4>
153
+ <ul class="">
154
+ <li><code><a title="pyatv.interface.Features.all_features" href="#pyatv.interface.Features.all_features">all_features</a></code></li>
155
+ <li><code><a title="pyatv.interface.Features.get_feature" href="#pyatv.interface.Features.get_feature">get_feature</a></code></li>
156
+ <li><code><a title="pyatv.interface.Features.in_state" href="#pyatv.interface.Features.in_state">in_state</a></code></li>
157
+ </ul>
158
+ </li>
159
+ <li>
160
+ <h4><code><a title="pyatv.interface.Keyboard" href="#pyatv.interface.Keyboard">Keyboard</a></code></h4>
161
+ <ul class="">
162
+ <li><code><a title="pyatv.interface.Keyboard.text_append" href="#pyatv.interface.Keyboard.text_append">text_append</a></code></li>
163
+ <li><code><a title="pyatv.interface.Keyboard.text_clear" href="#pyatv.interface.Keyboard.text_clear">text_clear</a></code></li>
164
+ <li><code><a title="pyatv.interface.Keyboard.text_focus_state" href="#pyatv.interface.Keyboard.text_focus_state">text_focus_state</a></code></li>
165
+ <li><code><a title="pyatv.interface.Keyboard.text_get" href="#pyatv.interface.Keyboard.text_get">text_get</a></code></li>
166
+ <li><code><a title="pyatv.interface.Keyboard.text_set" href="#pyatv.interface.Keyboard.text_set">text_set</a></code></li>
167
+ </ul>
168
+ </li>
169
+ <li>
170
+ <h4><code><a title="pyatv.interface.KeyboardListener" href="#pyatv.interface.KeyboardListener">KeyboardListener</a></code></h4>
171
+ <ul class="">
172
+ <li><code><a title="pyatv.interface.KeyboardListener.focusstate_update" href="#pyatv.interface.KeyboardListener.focusstate_update">focusstate_update</a></code></li>
173
+ </ul>
174
+ </li>
175
+ <li>
176
+ <h4><code><a title="pyatv.interface.MediaMetadata" href="#pyatv.interface.MediaMetadata">MediaMetadata</a></code></h4>
177
+ <ul class="">
178
+ <li><code><a title="pyatv.interface.MediaMetadata.album" href="#pyatv.interface.MediaMetadata.album">album</a></code></li>
179
+ <li><code><a title="pyatv.interface.MediaMetadata.artist" href="#pyatv.interface.MediaMetadata.artist">artist</a></code></li>
180
+ <li><code><a title="pyatv.interface.MediaMetadata.artwork" href="#pyatv.interface.MediaMetadata.artwork">artwork</a></code></li>
181
+ <li><code><a title="pyatv.interface.MediaMetadata.duration" href="#pyatv.interface.MediaMetadata.duration">duration</a></code></li>
182
+ <li><code><a title="pyatv.interface.MediaMetadata.title" href="#pyatv.interface.MediaMetadata.title">title</a></code></li>
183
+ </ul>
184
+ </li>
185
+ <li>
186
+ <h4><code><a title="pyatv.interface.Metadata" href="#pyatv.interface.Metadata">Metadata</a></code></h4>
187
+ <ul class="">
188
+ <li><code><a title="pyatv.interface.Metadata.app" href="#pyatv.interface.Metadata.app">app</a></code></li>
189
+ <li><code><a title="pyatv.interface.Metadata.artwork" href="#pyatv.interface.Metadata.artwork">artwork</a></code></li>
190
+ <li><code><a title="pyatv.interface.Metadata.artwork_id" href="#pyatv.interface.Metadata.artwork_id">artwork_id</a></code></li>
191
+ <li><code><a title="pyatv.interface.Metadata.device_id" href="#pyatv.interface.Metadata.device_id">device_id</a></code></li>
192
+ <li><code><a title="pyatv.interface.Metadata.playing" href="#pyatv.interface.Metadata.playing">playing</a></code></li>
193
+ </ul>
194
+ </li>
195
+ <li>
196
+ <h4><code><a title="pyatv.interface.OutputDevice" href="#pyatv.interface.OutputDevice">OutputDevice</a></code></h4>
197
+ <ul class="">
198
+ <li><code><a title="pyatv.interface.OutputDevice.identifier" href="#pyatv.interface.OutputDevice.identifier">identifier</a></code></li>
199
+ <li><code><a title="pyatv.interface.OutputDevice.name" href="#pyatv.interface.OutputDevice.name">name</a></code></li>
200
+ </ul>
201
+ </li>
202
+ <li>
203
+ <h4><code><a title="pyatv.interface.PairingHandler" href="#pyatv.interface.PairingHandler">PairingHandler</a></code></h4>
204
+ <ul class="two-column">
205
+ <li><code><a title="pyatv.interface.PairingHandler.begin" href="#pyatv.interface.PairingHandler.begin">begin</a></code></li>
206
+ <li><code><a title="pyatv.interface.PairingHandler.close" href="#pyatv.interface.PairingHandler.close">close</a></code></li>
207
+ <li><code><a title="pyatv.interface.PairingHandler.device_provides_pin" href="#pyatv.interface.PairingHandler.device_provides_pin">device_provides_pin</a></code></li>
208
+ <li><code><a title="pyatv.interface.PairingHandler.finish" href="#pyatv.interface.PairingHandler.finish">finish</a></code></li>
209
+ <li><code><a title="pyatv.interface.PairingHandler.has_paired" href="#pyatv.interface.PairingHandler.has_paired">has_paired</a></code></li>
210
+ <li><code><a title="pyatv.interface.PairingHandler.pin" href="#pyatv.interface.PairingHandler.pin">pin</a></code></li>
211
+ <li><code><a title="pyatv.interface.PairingHandler.service" href="#pyatv.interface.PairingHandler.service">service</a></code></li>
212
+ </ul>
213
+ </li>
214
+ <li>
215
+ <h4><code><a title="pyatv.interface.Playing" href="#pyatv.interface.Playing">Playing</a></code></h4>
216
+ <ul class="">
217
+ <li><code><a title="pyatv.interface.Playing.album" href="#pyatv.interface.Playing.album">album</a></code></li>
218
+ <li><code><a title="pyatv.interface.Playing.artist" href="#pyatv.interface.Playing.artist">artist</a></code></li>
219
+ <li><code><a title="pyatv.interface.Playing.content_identifier" href="#pyatv.interface.Playing.content_identifier">content_identifier</a></code></li>
220
+ <li><code><a title="pyatv.interface.Playing.device_state" href="#pyatv.interface.Playing.device_state">device_state</a></code></li>
221
+ <li><code><a title="pyatv.interface.Playing.episode_number" href="#pyatv.interface.Playing.episode_number">episode_number</a></code></li>
222
+ <li><code><a title="pyatv.interface.Playing.genre" href="#pyatv.interface.Playing.genre">genre</a></code></li>
223
+ <li><code><a title="pyatv.interface.Playing.hash" href="#pyatv.interface.Playing.hash">hash</a></code></li>
224
+ <li><code><a title="pyatv.interface.Playing.itunes_store_identifier" href="#pyatv.interface.Playing.itunes_store_identifier">itunes_store_identifier</a></code></li>
225
+ <li><code><a title="pyatv.interface.Playing.media_type" href="#pyatv.interface.Playing.media_type">media_type</a></code></li>
226
+ <li><code><a title="pyatv.interface.Playing.position" href="#pyatv.interface.Playing.position">position</a></code></li>
227
+ <li><code><a title="pyatv.interface.Playing.repeat" href="#pyatv.interface.Playing.repeat">repeat</a></code></li>
228
+ <li><code><a title="pyatv.interface.Playing.season_number" href="#pyatv.interface.Playing.season_number">season_number</a></code></li>
229
+ <li><code><a title="pyatv.interface.Playing.series_name" href="#pyatv.interface.Playing.series_name">series_name</a></code></li>
230
+ <li><code><a title="pyatv.interface.Playing.shuffle" href="#pyatv.interface.Playing.shuffle">shuffle</a></code></li>
231
+ <li><code><a title="pyatv.interface.Playing.title" href="#pyatv.interface.Playing.title">title</a></code></li>
232
+ <li><code><a title="pyatv.interface.Playing.total_time" href="#pyatv.interface.Playing.total_time">total_time</a></code></li>
233
+ </ul>
234
+ </li>
235
+ <li>
236
+ <h4><code><a title="pyatv.interface.Power" href="#pyatv.interface.Power">Power</a></code></h4>
237
+ <ul class="">
238
+ <li><code><a title="pyatv.interface.Power.power_state" href="#pyatv.interface.Power.power_state">power_state</a></code></li>
239
+ <li><code><a title="pyatv.interface.Power.turn_off" href="#pyatv.interface.Power.turn_off">turn_off</a></code></li>
240
+ <li><code><a title="pyatv.interface.Power.turn_on" href="#pyatv.interface.Power.turn_on">turn_on</a></code></li>
241
+ </ul>
242
+ </li>
243
+ <li>
244
+ <h4><code><a title="pyatv.interface.PowerListener" href="#pyatv.interface.PowerListener">PowerListener</a></code></h4>
245
+ <ul class="">
246
+ <li><code><a title="pyatv.interface.PowerListener.powerstate_update" href="#pyatv.interface.PowerListener.powerstate_update">powerstate_update</a></code></li>
247
+ </ul>
248
+ </li>
249
+ <li>
250
+ <h4><code><a title="pyatv.interface.PushListener" href="#pyatv.interface.PushListener">PushListener</a></code></h4>
251
+ <ul class="">
252
+ <li><code><a title="pyatv.interface.PushListener.playstatus_error" href="#pyatv.interface.PushListener.playstatus_error">playstatus_error</a></code></li>
253
+ <li><code><a title="pyatv.interface.PushListener.playstatus_update" href="#pyatv.interface.PushListener.playstatus_update">playstatus_update</a></code></li>
254
+ </ul>
255
+ </li>
256
+ <li>
257
+ <h4><code><a title="pyatv.interface.PushUpdater" href="#pyatv.interface.PushUpdater">PushUpdater</a></code></h4>
258
+ <ul class="">
259
+ <li><code><a title="pyatv.interface.PushUpdater.active" href="#pyatv.interface.PushUpdater.active">active</a></code></li>
260
+ <li><code><a title="pyatv.interface.PushUpdater.start" href="#pyatv.interface.PushUpdater.start">start</a></code></li>
261
+ <li><code><a title="pyatv.interface.PushUpdater.stop" href="#pyatv.interface.PushUpdater.stop">stop</a></code></li>
262
+ </ul>
263
+ </li>
264
+ <li>
265
+ <h4><code><a title="pyatv.interface.RemoteControl" href="#pyatv.interface.RemoteControl">RemoteControl</a></code></h4>
266
+ <ul class="two-column">
267
+ <li><code><a title="pyatv.interface.RemoteControl.channel_down" href="#pyatv.interface.RemoteControl.channel_down">channel_down</a></code></li>
268
+ <li><code><a title="pyatv.interface.RemoteControl.channel_up" href="#pyatv.interface.RemoteControl.channel_up">channel_up</a></code></li>
269
+ <li><code><a title="pyatv.interface.RemoteControl.down" href="#pyatv.interface.RemoteControl.down">down</a></code></li>
270
+ <li><code><a title="pyatv.interface.RemoteControl.home" href="#pyatv.interface.RemoteControl.home">home</a></code></li>
271
+ <li><code><a title="pyatv.interface.RemoteControl.home_hold" href="#pyatv.interface.RemoteControl.home_hold">home_hold</a></code></li>
272
+ <li><code><a title="pyatv.interface.RemoteControl.left" href="#pyatv.interface.RemoteControl.left">left</a></code></li>
273
+ <li><code><a title="pyatv.interface.RemoteControl.menu" href="#pyatv.interface.RemoteControl.menu">menu</a></code></li>
274
+ <li><code><a title="pyatv.interface.RemoteControl.next" href="#pyatv.interface.RemoteControl.next">next</a></code></li>
275
+ <li><code><a title="pyatv.interface.RemoteControl.pause" href="#pyatv.interface.RemoteControl.pause">pause</a></code></li>
276
+ <li><code><a title="pyatv.interface.RemoteControl.play" href="#pyatv.interface.RemoteControl.play">play</a></code></li>
277
+ <li><code><a title="pyatv.interface.RemoteControl.play_pause" href="#pyatv.interface.RemoteControl.play_pause">play_pause</a></code></li>
278
+ <li><code><a title="pyatv.interface.RemoteControl.previous" href="#pyatv.interface.RemoteControl.previous">previous</a></code></li>
279
+ <li><code><a title="pyatv.interface.RemoteControl.right" href="#pyatv.interface.RemoteControl.right">right</a></code></li>
280
+ <li><code><a title="pyatv.interface.RemoteControl.screensaver" href="#pyatv.interface.RemoteControl.screensaver">screensaver</a></code></li>
281
+ <li><code><a title="pyatv.interface.RemoteControl.select" href="#pyatv.interface.RemoteControl.select">select</a></code></li>
282
+ <li><code><a title="pyatv.interface.RemoteControl.set_position" href="#pyatv.interface.RemoteControl.set_position">set_position</a></code></li>
283
+ <li><code><a title="pyatv.interface.RemoteControl.set_repeat" href="#pyatv.interface.RemoteControl.set_repeat">set_repeat</a></code></li>
284
+ <li><code><a title="pyatv.interface.RemoteControl.set_shuffle" href="#pyatv.interface.RemoteControl.set_shuffle">set_shuffle</a></code></li>
285
+ <li><code><a title="pyatv.interface.RemoteControl.skip_backward" href="#pyatv.interface.RemoteControl.skip_backward">skip_backward</a></code></li>
286
+ <li><code><a title="pyatv.interface.RemoteControl.skip_forward" href="#pyatv.interface.RemoteControl.skip_forward">skip_forward</a></code></li>
287
+ <li><code><a title="pyatv.interface.RemoteControl.stop" href="#pyatv.interface.RemoteControl.stop">stop</a></code></li>
288
+ <li><code><a title="pyatv.interface.RemoteControl.suspend" href="#pyatv.interface.RemoteControl.suspend">suspend</a></code></li>
289
+ <li><code><a title="pyatv.interface.RemoteControl.top_menu" href="#pyatv.interface.RemoteControl.top_menu">top_menu</a></code></li>
290
+ <li><code><a title="pyatv.interface.RemoteControl.up" href="#pyatv.interface.RemoteControl.up">up</a></code></li>
291
+ <li><code><a title="pyatv.interface.RemoteControl.volume_down" href="#pyatv.interface.RemoteControl.volume_down">volume_down</a></code></li>
292
+ <li><code><a title="pyatv.interface.RemoteControl.volume_up" href="#pyatv.interface.RemoteControl.volume_up">volume_up</a></code></li>
293
+ <li><code><a title="pyatv.interface.RemoteControl.wakeup" href="#pyatv.interface.RemoteControl.wakeup">wakeup</a></code></li>
294
+ </ul>
295
+ </li>
296
+ <li>
297
+ <h4><code><a title="pyatv.interface.Storage" href="#pyatv.interface.Storage">Storage</a></code></h4>
298
+ <ul class="two-column">
299
+ <li><code><a title="pyatv.interface.Storage.get_settings" href="#pyatv.interface.Storage.get_settings">get_settings</a></code></li>
300
+ <li><code><a title="pyatv.interface.Storage.load" href="#pyatv.interface.Storage.load">load</a></code></li>
301
+ <li><code><a title="pyatv.interface.Storage.remove_settings" href="#pyatv.interface.Storage.remove_settings">remove_settings</a></code></li>
302
+ <li><code><a title="pyatv.interface.Storage.save" href="#pyatv.interface.Storage.save">save</a></code></li>
303
+ <li><code><a title="pyatv.interface.Storage.settings" href="#pyatv.interface.Storage.settings">settings</a></code></li>
304
+ <li><code><a title="pyatv.interface.Storage.update_settings" href="#pyatv.interface.Storage.update_settings">update_settings</a></code></li>
305
+ </ul>
306
+ </li>
307
+ <li>
308
+ <h4><code><a title="pyatv.interface.Stream" href="#pyatv.interface.Stream">Stream</a></code></h4>
309
+ <ul class="">
310
+ <li><code><a title="pyatv.interface.Stream.close" href="#pyatv.interface.Stream.close">close</a></code></li>
311
+ <li><code><a title="pyatv.interface.Stream.play_url" href="#pyatv.interface.Stream.play_url">play_url</a></code></li>
312
+ <li><code><a title="pyatv.interface.Stream.stream_file" href="#pyatv.interface.Stream.stream_file">stream_file</a></code></li>
313
+ </ul>
314
+ </li>
315
+ <li>
316
+ <h4><code><a title="pyatv.interface.TouchGestures" href="#pyatv.interface.TouchGestures">TouchGestures</a></code></h4>
317
+ <ul class="">
318
+ <li><code><a title="pyatv.interface.TouchGestures.action" href="#pyatv.interface.TouchGestures.action">action</a></code></li>
319
+ <li><code><a title="pyatv.interface.TouchGestures.click" href="#pyatv.interface.TouchGestures.click">click</a></code></li>
320
+ <li><code><a title="pyatv.interface.TouchGestures.swipe" href="#pyatv.interface.TouchGestures.swipe">swipe</a></code></li>
321
+ </ul>
322
+ </li>
323
+ <li>
324
+ <h4><code><a title="pyatv.interface.UserAccount" href="#pyatv.interface.UserAccount">UserAccount</a></code></h4>
325
+ <ul class="">
326
+ <li><code><a title="pyatv.interface.UserAccount.identifier" href="#pyatv.interface.UserAccount.identifier">identifier</a></code></li>
327
+ <li><code><a title="pyatv.interface.UserAccount.name" href="#pyatv.interface.UserAccount.name">name</a></code></li>
328
+ </ul>
329
+ </li>
330
+ <li>
331
+ <h4><code><a title="pyatv.interface.UserAccounts" href="#pyatv.interface.UserAccounts">UserAccounts</a></code></h4>
332
+ <ul class="">
333
+ <li><code><a title="pyatv.interface.UserAccounts.account_list" href="#pyatv.interface.UserAccounts.account_list">account_list</a></code></li>
334
+ <li><code><a title="pyatv.interface.UserAccounts.switch_account" href="#pyatv.interface.UserAccounts.switch_account">switch_account</a></code></li>
335
+ </ul>
336
+ </li>
337
+ </ul>
338
+ </li>
339
+ </ul>
340
+ </nav>
341
+ <article id="content">
342
+ <header>
343
+ <h1 class="title">Module <code>pyatv.interface</code></h1>
344
+ </header>
345
+ <section id="section-intro">
346
+ <p>Public interface exposed by library.</p>
347
+ <p>This module contains all the interfaces that represents a generic Apple TV device and
348
+ all its features.</p>
349
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1-L1586" class="git-link">Browse git</a></div>
350
+ </section>
351
+ <section>
352
+ </section>
353
+ <section>
354
+ </section>
355
+ <section>
356
+ <h2 class="section-title" id="header-functions">Functions</h2>
357
+ <dl>
358
+ <dt id="pyatv.interface.retrieve_commands">
359
+ <code class="name flex">
360
+ <span>def <span class="ident">retrieve_commands</span></span>(<span>obj: object)</span>
361
+ </code>
362
+ </dt>
363
+ <dd>
364
+ <section class="desc"><p>Retrieve all commands and help texts from an API object.</p></section>
365
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L127-L138" class="git-link">Browse git</a></div>
366
+ </dd>
367
+ </dl>
368
+ </section>
369
+ <section>
370
+ <h2 class="section-title" id="header-classes">Classes</h2>
371
+ <dl>
372
+ <dt id="pyatv.interface.App"><code class="flex name class">
373
+ <span>class <span class="ident">App</span></span>
374
+ <span>(</span><span>name: str | None, identifier: str)</span>
375
+ </code></dt>
376
+ <dd>
377
+ <section class="desc"><p>Information about an app.</p>
378
+ <p>Initialize a new App instance.</p></section>
379
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L693-L719" class="git-link">Browse git</a></div>
380
+ <h3>Instance variables</h3>
381
+ <dl>
382
+ <dt id="pyatv.interface.App.identifier"><code class="name">var <span class="ident">identifier</span> -> str</code></dt>
383
+ <dd>
384
+ <section class="desc"><p>Return a unique bundle id for the app.</p></section>
385
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L706-L709" class="git-link">Browse git</a></div>
386
+ </dd>
387
+ <dt id="pyatv.interface.App.name"><code class="name">var <span class="ident">name</span> -> str | None</code></dt>
388
+ <dd>
389
+ <section class="desc"><p>User friendly name of app.</p></section>
390
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L701-L704" class="git-link">Browse git</a></div>
391
+ </dd>
392
+ </dl>
393
+ </dd>
394
+ <dt id="pyatv.interface.AppleTV"><code class="flex name class">
395
+ <span>class <span class="ident">AppleTV</span></span>
396
+ <span>(</span><span>max_calls: int = 0)</span>
397
+ </code></dt>
398
+ <dd>
399
+ <section class="desc"><p>Base class representing an Apple TV.</p>
400
+ <p>Listener interface: <code>pyatv.interfaces.DeviceListener</code></p>
401
+ <p>Initialize a new StateProducer instance.</p></section>
402
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1501-L1586" class="git-link">Browse git</a></div>
403
+ <h3>Ancestors</h3>
404
+ <ul class="hlist">
405
+ <li>abc.ABC</li>
406
+ <li>pyatv.support.state_producer.StateProducer</li>
407
+ <li>typing.Generic</li>
408
+ </ul>
409
+ <h3>Subclasses</h3>
410
+ <ul class="hlist">
411
+ <li>pyatv.core.facade.FacadeAppleTV</li>
412
+ </ul>
413
+ <h3>Instance variables</h3>
414
+ <dl>
415
+ <dt id="pyatv.interface.AppleTV.apps"><code class="name">var <span class="ident">apps</span> -> <a title="pyatv.interface.Apps" href="#pyatv.interface.Apps">Apps</a></code></dt>
416
+ <dd>
417
+ <section class="desc"><p>Return apps interface.</p></section>
418
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1563-L1566" class="git-link">Browse git</a></div>
419
+ </dd>
420
+ <dt id="pyatv.interface.AppleTV.audio"><code class="name">var <span class="ident">audio</span> -> <a title="pyatv.interface.Audio" href="#pyatv.interface.Audio">Audio</a></code></dt>
421
+ <dd>
422
+ <section class="desc"><p>Return audio interface.</p></section>
423
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1573-L1576" class="git-link">Browse git</a></div>
424
+ </dd>
425
+ <dt id="pyatv.interface.AppleTV.device_info"><code class="name">var <span class="ident">device_info</span> -> <a title="pyatv.interface.DeviceInfo" href="#pyatv.interface.DeviceInfo">DeviceInfo</a></code></dt>
426
+ <dd>
427
+ <section class="desc"><p>Return API for device information.</p></section>
428
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1523-L1526" class="git-link">Browse git</a></div>
429
+ </dd>
430
+ <dt id="pyatv.interface.AppleTV.features"><code class="name">var <span class="ident">features</span> -> <a title="pyatv.interface.Features" href="#pyatv.interface.Features">Features</a></code></dt>
431
+ <dd>
432
+ <section class="desc"><p>Return features interface.</p></section>
433
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1558-L1561" class="git-link">Browse git</a></div>
434
+ </dd>
435
+ <dt id="pyatv.interface.AppleTV.keyboard"><code class="name">var <span class="ident">keyboard</span> -> <a title="pyatv.interface.Keyboard" href="#pyatv.interface.Keyboard">Keyboard</a></code></dt>
436
+ <dd>
437
+ <section class="desc"><p>Return keyboard interface.</p></section>
438
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1578-L1581" class="git-link">Browse git</a></div>
439
+ </dd>
440
+ <dt id="pyatv.interface.AppleTV.metadata"><code class="name">var <span class="ident">metadata</span> -> <a title="pyatv.interface.Metadata" href="#pyatv.interface.Metadata">Metadata</a></code></dt>
441
+ <dd>
442
+ <section class="desc"><p>Return API for retrieving metadata from the Apple TV.</p></section>
443
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1538-L1541" class="git-link">Browse git</a></div>
444
+ </dd>
445
+ <dt id="pyatv.interface.AppleTV.power"><code class="name">var <span class="ident">power</span> -> <a title="pyatv.interface.Power" href="#pyatv.interface.Power">Power</a></code></dt>
446
+ <dd>
447
+ <section class="desc"><p>Return API for power management.</p></section>
448
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1553-L1556" class="git-link">Browse git</a></div>
449
+ </dd>
450
+ <dt id="pyatv.interface.AppleTV.push_updater"><code class="name">var <span class="ident">push_updater</span> -> <a title="pyatv.interface.PushUpdater" href="#pyatv.interface.PushUpdater">PushUpdater</a></code></dt>
451
+ <dd>
452
+ <section class="desc"><p>Return API for handling push update from the Apple TV.</p></section>
453
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1543-L1546" class="git-link">Browse git</a></div>
454
+ </dd>
455
+ <dt id="pyatv.interface.AppleTV.remote_control"><code class="name">var <span class="ident">remote_control</span> -> <a title="pyatv.interface.RemoteControl" href="#pyatv.interface.RemoteControl">RemoteControl</a></code></dt>
456
+ <dd>
457
+ <section class="desc"><p>Return API for controlling the Apple TV.</p></section>
458
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1533-L1536" class="git-link">Browse git</a></div>
459
+ </dd>
460
+ <dt id="pyatv.interface.AppleTV.service"><code class="name">var <span class="ident">service</span> -> <a title="pyatv.interface.BaseService" href="#pyatv.interface.BaseService">BaseService</a></code></dt>
461
+ <dd>
462
+ <section class="desc"><p>Return service used to connect to the Apple TV.</p></section>
463
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1528-L1531" class="git-link">Browse git</a></div>
464
+ </dd>
465
+ <dt id="pyatv.interface.AppleTV.settings"><code class="name">var <span class="ident">settings</span> -> <a title="pyatv.settings.Settings" href="../settings#pyatv.settings.Settings">Settings</a></code></dt>
466
+ <dd>
467
+ <section class="desc"><p>Return device settings used by pyatv.</p></section>
468
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1518-L1521" class="git-link">Browse git</a></div>
469
+ </dd>
470
+ <dt id="pyatv.interface.AppleTV.stream"><code class="name">var <span class="ident">stream</span> -> <a title="pyatv.interface.Stream" href="#pyatv.interface.Stream">Stream</a></code></dt>
471
+ <dd>
472
+ <section class="desc"><p>Return API for streaming media.</p></section>
473
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1548-L1551" class="git-link">Browse git</a></div>
474
+ </dd>
475
+ <dt id="pyatv.interface.AppleTV.touch"><code class="name">var <span class="ident">touch</span> -> <a title="pyatv.interface.TouchGestures" href="#pyatv.interface.TouchGestures">TouchGestures</a></code></dt>
476
+ <dd>
477
+ <section class="desc"><p>Return touch gestures interface.</p></section>
478
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1583-L1586" class="git-link">Browse git</a></div>
479
+ </dd>
480
+ <dt id="pyatv.interface.AppleTV.user_accounts"><code class="name">var <span class="ident">user_accounts</span> -> <a title="pyatv.interface.UserAccounts" href="#pyatv.interface.UserAccounts">UserAccounts</a></code></dt>
481
+ <dd>
482
+ <section class="desc"><p>Return user accounts interface.</p></section>
483
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1568-L1571" class="git-link">Browse git</a></div>
484
+ </dd>
485
+ </dl>
486
+ <h3>Methods</h3>
487
+ <dl>
488
+ <dt id="pyatv.interface.AppleTV.close">
489
+ <code class="name flex">
490
+ <span>def <span class="ident">close</span></span>(<span>self) -> Set[_asyncio.Task]</span>
491
+ </code>
492
+ </dt>
493
+ <dd>
494
+ <section class="desc"><p>Close connection and release allocated resources.</p></section>
495
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1514-L1516" class="git-link">Browse git</a></div>
496
+ </dd>
497
+ <dt id="pyatv.interface.AppleTV.connect">
498
+ <code class="name flex">
499
+ <span>async def <span class="ident">connect</span></span>(<span>self) -> None</span>
500
+ </code>
501
+ </dt>
502
+ <dd>
503
+ <section class="desc"><p>Initiate connection to device.</p>
504
+ <p>No need to call it yourself, it's done automatically.</p></section>
505
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1507-L1512" class="git-link">Browse git</a></div>
506
+ </dd>
507
+ </dl>
508
+ </dd>
509
+ <dt id="pyatv.interface.Apps"><code class="flex name class">
510
+ <span>class <span class="ident">Apps</span></span>
511
+ </code></dt>
512
+ <dd>
513
+ <section class="desc"><p>Base class for app handling.</p></section>
514
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L722-L733" class="git-link">Browse git</a></div>
515
+ <h3>Subclasses</h3>
516
+ <ul class="hlist">
517
+ <li>pyatv.core.facade.FacadeApps</li>
518
+ <li>pyatv.protocols.companion.CompanionApps</li>
519
+ </ul>
520
+ <h3>Methods</h3>
521
+ <dl>
522
+ <dt id="pyatv.interface.Apps.app_list">
523
+ <code class="name flex">
524
+ <span>async def <span class="ident">app_list</span></span>(<span>self) -> List[<a title="pyatv.interface.App" href="#pyatv.interface.App">App</a>]</span>
525
+ </code>
526
+ </dt>
527
+ <dd>
528
+ <div class="api_feature">
529
+ <span>Feature: <a title="pyatv.const.FeatureName.AppList" href="/api/const#pyatv.const.FeatureName.AppList">FeatureName.AppList</a>,</span>
530
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
531
+ </div>
532
+ <section class="desc"><p>Fetch a list of apps that can be launched.</p></section>
533
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L725-L728" class="git-link">Browse git</a></div>
534
+ </dd>
535
+ <dt id="pyatv.interface.Apps.launch_app">
536
+ <code class="name flex">
537
+ <span>async def <span class="ident">launch_app</span></span>(<span>self, bundle_id_or_url: str) -> None</span>
538
+ </code>
539
+ </dt>
540
+ <dd>
541
+ <div class="api_feature">
542
+ <span>Feature: <a title="pyatv.const.FeatureName.LaunchApp" href="/api/const#pyatv.const.FeatureName.LaunchApp">FeatureName.LaunchApp</a>,</span>
543
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
544
+ </div>
545
+ <section class="desc"><p>Launch an app based on bundle ID or URL.</p></section>
546
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L730-L733" class="git-link">Browse git</a></div>
547
+ </dd>
548
+ </dl>
549
+ </dd>
550
+ <dt id="pyatv.interface.ArtworkInfo"><code class="flex name class">
551
+ <span>class <span class="ident">ArtworkInfo</span></span>
552
+ <span>(</span><span>bytes: bytes, mimetype: str, width: int, height: int)</span>
553
+ </code></dt>
554
+ <dd>
555
+ <section class="desc"><p>Artwork information.</p></section>
556
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L65-L71" class="git-link">Browse git</a></div>
557
+ <h3>Ancestors</h3>
558
+ <ul class="hlist">
559
+ <li>builtins.tuple</li>
560
+ </ul>
561
+ <h3>Instance variables</h3>
562
+ <dl>
563
+ <dt id="pyatv.interface.ArtworkInfo.bytes"><code class="name">var <span class="ident">bytes</span> -> bytes</code></dt>
564
+ <dd>
565
+ <section class="desc"><p>Alias for field number 0</p></section>
566
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L65-L71" class="git-link">Browse git</a></div>
567
+ </dd>
568
+ <dt id="pyatv.interface.ArtworkInfo.height"><code class="name">var <span class="ident">height</span> -> int</code></dt>
569
+ <dd>
570
+ <section class="desc"><p>Alias for field number 3</p></section>
571
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L65-L71" class="git-link">Browse git</a></div>
572
+ </dd>
573
+ <dt id="pyatv.interface.ArtworkInfo.mimetype"><code class="name">var <span class="ident">mimetype</span> -> str</code></dt>
574
+ <dd>
575
+ <section class="desc"><p>Alias for field number 1</p></section>
576
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L65-L71" class="git-link">Browse git</a></div>
577
+ </dd>
578
+ <dt id="pyatv.interface.ArtworkInfo.width"><code class="name">var <span class="ident">width</span> -> int</code></dt>
579
+ <dd>
580
+ <section class="desc"><p>Alias for field number 2</p></section>
581
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L65-L71" class="git-link">Browse git</a></div>
582
+ </dd>
583
+ </dl>
584
+ </dd>
585
+ <dt id="pyatv.interface.Audio"><code class="flex name class">
586
+ <span>class <span class="ident">Audio</span></span>
587
+ <span>(</span><span>max_calls: int = 0)</span>
588
+ </code></dt>
589
+ <dd>
590
+ <section class="desc"><p>Base class for audio functionality.</p>
591
+ <p>Volume level is managed in percent where 0 is muted and 100 is max volume.</p>
592
+ <p>Listener interface: <code>pyatv.interfaces.AudioListener</code></p>
593
+ <p>Initialize a new StateProducer instance.</p></section>
594
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1151-L1220" class="git-link">Browse git</a></div>
595
+ <h3>Ancestors</h3>
596
+ <ul class="hlist">
597
+ <li>abc.ABC</li>
598
+ <li>pyatv.support.state_producer.StateProducer</li>
599
+ <li>typing.Generic</li>
600
+ </ul>
601
+ <h3>Subclasses</h3>
602
+ <ul class="hlist">
603
+ <li>pyatv.core.facade.FacadeAudio</li>
604
+ <li>pyatv.protocols.companion.CompanionAudio</li>
605
+ <li>pyatv.protocols.dmap.DmapAudio</li>
606
+ <li>pyatv.protocols.mrp.MrpAudio</li>
607
+ <li>pyatv.protocols.raop.RaopAudio</li>
608
+ </ul>
609
+ <h3>Instance variables</h3>
610
+ <dl>
611
+ <dt id="pyatv.interface.Audio.output_devices"><code class="name">var <span class="ident">output_devices</span> -> List[<a title="pyatv.interface.OutputDevice" href="#pyatv.interface.OutputDevice">OutputDevice</a>]</code></dt>
612
+ <dd>
613
+ <section class="desc"><p>Return current list of output device IDs.</p></section>
614
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1201-L1205" class="git-link">Browse git</a></div>
615
+ </dd>
616
+ <dt id="pyatv.interface.Audio.volume"><code class="name">var <span class="ident">volume</span> -> float</code></dt>
617
+ <dd>
618
+ <section class="desc"><p>Return current volume level.</p>
619
+ <p>Range is in percent, i.e. [0.0-100.0].</p></section>
620
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1160-L1167" class="git-link">Browse git</a></div>
621
+ </dd>
622
+ </dl>
623
+ <h3>Methods</h3>
624
+ <dl>
625
+ <dt id="pyatv.interface.Audio.add_output_devices">
626
+ <code class="name flex">
627
+ <span>async def <span class="ident">add_output_devices</span></span>(<span>self, *devices: List[str]) -> None</span>
628
+ </code>
629
+ </dt>
630
+ <dd>
631
+ <div class="api_feature">
632
+ <span>Feature: <a title="pyatv.const.FeatureName.AddOutputDevices" href="/api/const#pyatv.const.FeatureName.AddOutputDevices">FeatureName.AddOutputDevices</a>,</span>
633
+ <span>Supported by: <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
634
+ </div>
635
+ <section class="desc"><p>Add output devices.</p></section>
636
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1207-L1210" class="git-link">Browse git</a></div>
637
+ </dd>
638
+ <dt id="pyatv.interface.Audio.remove_output_devices">
639
+ <code class="name flex">
640
+ <span>async def <span class="ident">remove_output_devices</span></span>(<span>self, *devices: List[str]) -> None</span>
641
+ </code>
642
+ </dt>
643
+ <dd>
644
+ <div class="api_feature">
645
+ <span>Feature: <a title="pyatv.const.FeatureName.RemoveOutputDevices" href="/api/const#pyatv.const.FeatureName.RemoveOutputDevices">FeatureName.RemoveOutputDevices</a>,</span>
646
+ <span>Supported by: <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
647
+ </div>
648
+ <section class="desc"><p>Remove output devices.</p></section>
649
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1212-L1215" class="git-link">Browse git</a></div>
650
+ </dd>
651
+ <dt id="pyatv.interface.Audio.set_output_devices">
652
+ <code class="name flex">
653
+ <span>async def <span class="ident">set_output_devices</span></span>(<span>self, *devices: List[str]) -> None</span>
654
+ </code>
655
+ </dt>
656
+ <dd>
657
+ <div class="api_feature">
658
+ <span>Feature: <a title="pyatv.const.FeatureName.SetOutputDevices" href="/api/const#pyatv.const.FeatureName.SetOutputDevices">FeatureName.SetOutputDevices</a>,</span>
659
+ <span>Supported by: <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
660
+ </div>
661
+ <section class="desc"><p>Set output devices.</p></section>
662
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1217-L1220" class="git-link">Browse git</a></div>
663
+ </dd>
664
+ <dt id="pyatv.interface.Audio.set_volume">
665
+ <code class="name flex">
666
+ <span>async def <span class="ident">set_volume</span></span>(<span>self, level: float) -> None</span>
667
+ </code>
668
+ </dt>
669
+ <dd>
670
+ <div class="api_feature">
671
+ <span>Feature: <a title="pyatv.const.FeatureName.SetVolume" href="/api/const#pyatv.const.FeatureName.SetVolume">FeatureName.SetVolume</a>,</span>
672
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a>, <a title="pyatv.const.Protocol.RAOP" href="/api/const#pyatv.const.Protocol.RAOP">Protocol.RAOP</a></span>
673
+ </div>
674
+ <section class="desc"><p>Change current volume level.</p>
675
+ <p>Range is in percent, i.e. [0.0-100.0].</p></section>
676
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1169-L1175" class="git-link">Browse git</a></div>
677
+ </dd>
678
+ <dt id="pyatv.interface.Audio.volume_down">
679
+ <code class="name flex">
680
+ <span>async def <span class="ident">volume_down</span></span>(<span>self) -> None</span>
681
+ </code>
682
+ </dt>
683
+ <dd>
684
+ <div class="api_feature">
685
+ <span>Feature: <a title="pyatv.const.FeatureName.VolumeDown" href="/api/const#pyatv.const.FeatureName.VolumeDown">FeatureName.VolumeDown</a>,</span>
686
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a>, <a title="pyatv.const.Protocol.RAOP" href="/api/const#pyatv.const.Protocol.RAOP">Protocol.RAOP</a></span>
687
+ </div>
688
+ <section class="desc"><p>Decrease volume by one step.</p>
689
+ <p>Step size is device dependent, but usually around 2.5% of the total volume
690
+ range. It is not necessarily linear.</p>
691
+ <p>Call will block until volume change has been acknowledged by the device (when
692
+ possible and supported).</p></section>
693
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1189-L1199" class="git-link">Browse git</a></div>
694
+ </dd>
695
+ <dt id="pyatv.interface.Audio.volume_up">
696
+ <code class="name flex">
697
+ <span>async def <span class="ident">volume_up</span></span>(<span>self) -> None</span>
698
+ </code>
699
+ </dt>
700
+ <dd>
701
+ <div class="api_feature">
702
+ <span>Feature: <a title="pyatv.const.FeatureName.VolumeUp" href="/api/const#pyatv.const.FeatureName.VolumeUp">FeatureName.VolumeUp</a>,</span>
703
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a>, <a title="pyatv.const.Protocol.RAOP" href="/api/const#pyatv.const.Protocol.RAOP">Protocol.RAOP</a></span>
704
+ </div>
705
+ <section class="desc"><p>Increase volume by one step.</p>
706
+ <p>Step size is device dependent, but usually around 2,5% of the total volume
707
+ range. It is not necessarily linear.</p>
708
+ <p>Call will block until volume change has been acknowledged by the device (when
709
+ possible and supported).</p></section>
710
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1177-L1187" class="git-link">Browse git</a></div>
711
+ </dd>
712
+ </dl>
713
+ </dd>
714
+ <dt id="pyatv.interface.AudioListener"><code class="flex name class">
715
+ <span>class <span class="ident">AudioListener</span></span>
716
+ </code></dt>
717
+ <dd>
718
+ <section class="desc"><p>Listener interface for audio updates.</p></section>
719
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1135-L1148" class="git-link">Browse git</a></div>
720
+ <h3>Ancestors</h3>
721
+ <ul class="hlist">
722
+ <li>abc.ABC</li>
723
+ </ul>
724
+ <h3>Subclasses</h3>
725
+ <ul class="hlist">
726
+ <li>pyatv.scripts.atvscript.AudioPrinter</li>
727
+ </ul>
728
+ <h3>Methods</h3>
729
+ <dl>
730
+ <dt id="pyatv.interface.AudioListener.outputdevices_update">
731
+ <code class="name flex">
732
+ <span>def <span class="ident">outputdevices_update</span></span>(<span>self, old_devices: List[<a title="pyatv.interface.OutputDevice" href="#pyatv.interface.OutputDevice">OutputDevice</a>], new_devices: List[<a title="pyatv.interface.OutputDevice" href="#pyatv.interface.OutputDevice">OutputDevice</a>]) -> None</span>
733
+ </code>
734
+ </dt>
735
+ <dd>
736
+ <section class="desc"><p>Output devices were updated.</p></section>
737
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1143-L1148" class="git-link">Browse git</a></div>
738
+ </dd>
739
+ <dt id="pyatv.interface.AudioListener.volume_update">
740
+ <code class="name flex">
741
+ <span>def <span class="ident">volume_update</span></span>(<span>self, old_level: float, new_level: float) -> None</span>
742
+ </code>
743
+ </dt>
744
+ <dd>
745
+ <section class="desc"><p>Device volume was updated.</p></section>
746
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1138-L1141" class="git-link">Browse git</a></div>
747
+ </dd>
748
+ </dl>
749
+ </dd>
750
+ <dt id="pyatv.interface.BaseConfig"><code class="flex name class">
751
+ <span>class <span class="ident">BaseConfig</span></span>
752
+ <span>(</span><span>properties: Mapping[str, Mapping[str, Any]])</span>
753
+ </code></dt>
754
+ <dd>
755
+ <section class="desc"><p>Representation of a device configuration.</p>
756
+ <p>An instance of this class represents a single device. A device can have
757
+ several services depending on the protocols it supports, e.g. DMAP or
758
+ AirPlay.</p>
759
+ <p>Initialize a new BaseConfig instance.</p></section>
760
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1307-L1454" class="git-link">Browse git</a></div>
761
+ <h3>Ancestors</h3>
762
+ <ul class="hlist">
763
+ <li>abc.ABC</li>
764
+ </ul>
765
+ <h3>Subclasses</h3>
766
+ <ul class="hlist">
767
+ <li><a title="pyatv.conf.AppleTV" href="../conf#pyatv.conf.AppleTV">AppleTV</a></li>
768
+ </ul>
769
+ <h3>Instance variables</h3>
770
+ <dl>
771
+ <dt id="pyatv.interface.BaseConfig.address"><code class="name">var <span class="ident">address</span> -> ipaddress.IPv4Address</code></dt>
772
+ <dd>
773
+ <section class="desc"><p>IP address of device.</p></section>
774
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1319-L1322" class="git-link">Browse git</a></div>
775
+ </dd>
776
+ <dt id="pyatv.interface.BaseConfig.all_identifiers"><code class="name">var <span class="ident">all_identifiers</span> -> List[str]</code></dt>
777
+ <dd>
778
+ <section class="desc"><p>Return all unique identifiers for this device.</p></section>
779
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1387-L1390" class="git-link">Browse git</a></div>
780
+ </dd>
781
+ <dt id="pyatv.interface.BaseConfig.deep_sleep"><code class="name">var <span class="ident">deep_sleep</span> -> bool</code></dt>
782
+ <dd>
783
+ <section class="desc"><p>If device is in deep sleep.</p></section>
784
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1329-L1332" class="git-link">Browse git</a></div>
785
+ </dd>
786
+ <dt id="pyatv.interface.BaseConfig.device_info"><code class="name">var <span class="ident">device_info</span> -> <a title="pyatv.interface.DeviceInfo" href="#pyatv.interface.DeviceInfo">DeviceInfo</a></code></dt>
787
+ <dd>
788
+ <section class="desc"><p>Return general device information.</p></section>
789
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1339-L1342" class="git-link">Browse git</a></div>
790
+ </dd>
791
+ <dt id="pyatv.interface.BaseConfig.identifier"><code class="name">var <span class="ident">identifier</span> -> str | None</code></dt>
792
+ <dd>
793
+ <section class="desc"><p>Return the main identifier associated with this device.</p></section>
794
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1372-L1385" class="git-link">Browse git</a></div>
795
+ </dd>
796
+ <dt id="pyatv.interface.BaseConfig.name"><code class="name">var <span class="ident">name</span> -> str</code></dt>
797
+ <dd>
798
+ <section class="desc"><p>Name of device.</p></section>
799
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1324-L1327" class="git-link">Browse git</a></div>
800
+ </dd>
801
+ <dt id="pyatv.interface.BaseConfig.properties"><code class="name">var <span class="ident">properties</span> -> Mapping[str, Mapping[str, str]]</code></dt>
802
+ <dd>
803
+ <section class="desc"><p>Return Zeroconf properties.</p></section>
804
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1359-L1362" class="git-link">Browse git</a></div>
805
+ </dd>
806
+ <dt id="pyatv.interface.BaseConfig.ready"><code class="name">var <span class="ident">ready</span> -> bool</code></dt>
807
+ <dd>
808
+ <section class="desc"><p>Return if configuration is ready, (at least one service with identifier).</p></section>
809
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1364-L1370" class="git-link">Browse git</a></div>
810
+ </dd>
811
+ <dt id="pyatv.interface.BaseConfig.services"><code class="name">var <span class="ident">services</span> -> List[<a title="pyatv.interface.BaseService" href="#pyatv.interface.BaseService">BaseService</a>]</code></dt>
812
+ <dd>
813
+ <section class="desc"><p>Return all supported services.</p></section>
814
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1334-L1337" class="git-link">Browse git</a></div>
815
+ </dd>
816
+ </dl>
817
+ <h3>Methods</h3>
818
+ <dl>
819
+ <dt id="pyatv.interface.BaseConfig.add_service">
820
+ <code class="name flex">
821
+ <span>def <span class="ident">add_service</span></span>(<span>self, service: <a title="pyatv.interface.BaseService" href="#pyatv.interface.BaseService">BaseService</a>) -> None</span>
822
+ </code>
823
+ </dt>
824
+ <dd>
825
+ <section class="desc"><p>Add a new service.</p>
826
+ <p>If the service already exists, it will be merged.</p></section>
827
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1344-L1349" class="git-link">Browse git</a></div>
828
+ </dd>
829
+ <dt id="pyatv.interface.BaseConfig.apply">
830
+ <code class="name flex">
831
+ <span>def <span class="ident">apply</span></span>(<span>self, settings: <a title="pyatv.settings.Settings" href="../settings#pyatv.settings.Settings">Settings</a>) -> None</span>
832
+ </code>
833
+ </dt>
834
+ <dd>
835
+ <section class="desc"><p>Apply settings to configuration.</p></section>
836
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1415-L1427" class="git-link">Browse git</a></div>
837
+ </dd>
838
+ <dt id="pyatv.interface.BaseConfig.get_service">
839
+ <code class="name flex">
840
+ <span>def <span class="ident">get_service</span></span>(<span>self, protocol: <a title="pyatv.const.Protocol" href="../const#pyatv.const.Protocol">Protocol</a>) -> <a title="pyatv.interface.BaseService" href="#pyatv.interface.BaseService">BaseService</a> | None</span>
841
+ </code>
842
+ </dt>
843
+ <dd>
844
+ <section class="desc"><p>Look up a service based on protocol.</p>
845
+ <p>If a service with the specified protocol is not available, None is
846
+ returned.</p></section>
847
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1351-L1357" class="git-link">Browse git</a></div>
848
+ </dd>
849
+ <dt id="pyatv.interface.BaseConfig.main_service">
850
+ <code class="name flex">
851
+ <span>def <span class="ident">main_service</span></span>(<span>self, protocol: <a title="pyatv.const.Protocol" href="../const#pyatv.const.Protocol">Protocol</a> | None = None) -> <a title="pyatv.interface.BaseService" href="#pyatv.interface.BaseService">BaseService</a></span>
852
+ </code>
853
+ </dt>
854
+ <dd>
855
+ <section class="desc"><p>Return suggested service used to establish connection.</p></section>
856
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1392-L1405" class="git-link">Browse git</a></div>
857
+ </dd>
858
+ <dt id="pyatv.interface.BaseConfig.set_credentials">
859
+ <code class="name flex">
860
+ <span>def <span class="ident">set_credentials</span></span>(<span>self, protocol: <a title="pyatv.const.Protocol" href="../const#pyatv.const.Protocol">Protocol</a>, credentials: str) -> bool</span>
861
+ </code>
862
+ </dt>
863
+ <dd>
864
+ <section class="desc"><p>Set credentials for a protocol if it exists.</p></section>
865
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1407-L1413" class="git-link">Browse git</a></div>
866
+ </dd>
867
+ </dl>
868
+ </dd>
869
+ <dt id="pyatv.interface.BaseService"><code class="flex name class">
870
+ <span>class <span class="ident">BaseService</span></span>
871
+ <span>(</span><span>identifier: str | None, protocol: <a title="pyatv.const.Protocol" href="../const#pyatv.const.Protocol">Protocol</a>, port: int, properties: Mapping[str, str] | None, credentials: str | None = None, password: str | None = None, enabled: bool = True)</span>
872
+ </code></dt>
873
+ <dd>
874
+ <section class="desc"><p>Base class for protocol services.</p>
875
+ <p>Initialize a new BaseService.</p></section>
876
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L141-L242" class="git-link">Browse git</a></div>
877
+ <h3>Ancestors</h3>
878
+ <ul class="hlist">
879
+ <li>abc.ABC</li>
880
+ </ul>
881
+ <h3>Subclasses</h3>
882
+ <ul class="hlist">
883
+ <li><a title="pyatv.conf.ManualService" href="../conf#pyatv.conf.ManualService">ManualService</a></li>
884
+ <li>pyatv.core.MutableService</li>
885
+ </ul>
886
+ <h3>Instance variables</h3>
887
+ <dl>
888
+ <dt id="pyatv.interface.BaseService.enabled"><code class="name">var <span class="ident">enabled</span> -> bool</code></dt>
889
+ <dd>
890
+ <section class="desc"><p>Return True if service is enabled.</p></section>
891
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L178-L181" class="git-link">Browse git</a></div>
892
+ </dd>
893
+ <dt id="pyatv.interface.BaseService.identifier"><code class="name">var <span class="ident">identifier</span> -> str | None</code></dt>
894
+ <dd>
895
+ <section class="desc"><p>Return unique identifier associated with this service.</p></section>
896
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L163-L166" class="git-link">Browse git</a></div>
897
+ </dd>
898
+ <dt id="pyatv.interface.BaseService.pairing"><code class="name">var <span class="ident">pairing</span> -> <a title="pyatv.const.PairingRequirement" href="../const#pyatv.const.PairingRequirement">PairingRequirement</a></code></dt>
899
+ <dd>
900
+ <section class="desc"><p>Return if pairing is required by service.</p></section>
901
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L193-L196" class="git-link">Browse git</a></div>
902
+ </dd>
903
+ <dt id="pyatv.interface.BaseService.port"><code class="name">var <span class="ident">port</span> -> int</code></dt>
904
+ <dd>
905
+ <section class="desc"><p>Return service port number.</p></section>
906
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L173-L176" class="git-link">Browse git</a></div>
907
+ </dd>
908
+ <dt id="pyatv.interface.BaseService.properties"><code class="name">var <span class="ident">properties</span> -> Mapping[str, str]</code></dt>
909
+ <dd>
910
+ <section class="desc"><p>Return service Zeroconf properties.</p></section>
911
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L198-L201" class="git-link">Browse git</a></div>
912
+ </dd>
913
+ <dt id="pyatv.interface.BaseService.protocol"><code class="name">var <span class="ident">protocol</span> -> <a title="pyatv.const.Protocol" href="../const#pyatv.const.Protocol">Protocol</a></code></dt>
914
+ <dd>
915
+ <section class="desc"><p>Return protocol type.</p></section>
916
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L168-L171" class="git-link">Browse git</a></div>
917
+ </dd>
918
+ <dt id="pyatv.interface.BaseService.requires_password"><code class="name">var <span class="ident">requires_password</span> -> bool</code></dt>
919
+ <dd>
920
+ <section class="desc"><p>Return if a password is required to access service.</p></section>
921
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L188-L191" class="git-link">Browse git</a></div>
922
+ </dd>
923
+ </dl>
924
+ <h3>Methods</h3>
925
+ <dl>
926
+ <dt id="pyatv.interface.BaseService.apply">
927
+ <code class="name flex">
928
+ <span>def <span class="ident">apply</span></span>(<span>self, settings: Mapping[str, Any]) -> None</span>
929
+ </code>
930
+ </dt>
931
+ <dd>
932
+ <section class="desc"><p>Apply settings to service.</p>
933
+ <p>Expects the same format as returned by settings() method. Unknown properties
934
+ are silently ignored. Settings with a None value are also ignore (keeps
935
+ original value).</p></section>
936
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L219-L227" class="git-link">Browse git</a></div>
937
+ </dd>
938
+ <dt id="pyatv.interface.BaseService.merge">
939
+ <code class="name flex">
940
+ <span>def <span class="ident">merge</span></span>(<span>self, other) -> None</span>
941
+ </code>
942
+ </dt>
943
+ <dd>
944
+ <section class="desc"><p>Merge with other service of same type.</p>
945
+ <p>Merge will only include credentials, password and properties.</p></section>
946
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L203-L210" class="git-link">Browse git</a></div>
947
+ </dd>
948
+ <dt id="pyatv.interface.BaseService.settings">
949
+ <code class="name flex">
950
+ <span>def <span class="ident">settings</span></span>(<span>self) -> Mapping[str, Any]</span>
951
+ </code>
952
+ </dt>
953
+ <dd>
954
+ <section class="desc"><p>Return settings and their values.</p></section>
955
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L212-L217" class="git-link">Browse git</a></div>
956
+ </dd>
957
+ </dl>
958
+ </dd>
959
+ <dt id="pyatv.interface.DeviceInfo"><code class="flex name class">
960
+ <span>class <span class="ident">DeviceInfo</span></span>
961
+ <span>(</span><span>device_info: Mapping[str, Any])</span>
962
+ </code></dt>
963
+ <dd>
964
+ <section class="desc"><p>General information about device.</p>
965
+ <p>Initialize a new DeviceInfo instance.</p></section>
966
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L942-L1068" class="git-link">Browse git</a></div>
967
+ <h3>Class variables</h3>
968
+ <dl>
969
+ <dt id="pyatv.interface.DeviceInfo.OUTPUT_DEVICE_ID"><code class="name">var <span class="ident">OUTPUT_DEVICE_ID</span></code></dt>
970
+ <dd>
971
+ <section class="desc"></section>
972
+ </dd>
973
+ </dl>
974
+ <h3>Instance variables</h3>
975
+ <dl>
976
+ <dt id="pyatv.interface.DeviceInfo.build_number"><code class="name">var <span class="ident">build_number</span> -> str | None</code></dt>
977
+ <dd>
978
+ <section class="desc"><p>Operating system build number, e.g. 17K795.</p></section>
979
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1007-L1010" class="git-link">Browse git</a></div>
980
+ </dd>
981
+ <dt id="pyatv.interface.DeviceInfo.mac"><code class="name">var <span class="ident">mac</span> -> str | None</code></dt>
982
+ <dd>
983
+ <section class="desc"><p>Device MAC address.</p></section>
984
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1039-L1042" class="git-link">Browse git</a></div>
985
+ </dd>
986
+ <dt id="pyatv.interface.DeviceInfo.model"><code class="name">var <span class="ident">model</span> -> <a title="pyatv.const.DeviceModel" href="../const#pyatv.const.DeviceModel">DeviceModel</a></code></dt>
987
+ <dd>
988
+ <section class="desc"><p>Hardware model name, e.g. 3, 4 or 4K.</p></section>
989
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1012-L1015" class="git-link">Browse git</a></div>
990
+ </dd>
991
+ <dt id="pyatv.interface.DeviceInfo.model_str"><code class="name">var <span class="ident">model_str</span> -> str</code></dt>
992
+ <dd>
993
+ <section class="desc"><p>Return model name as string.</p>
994
+ <p>This property will return the model name as a string and fallback to <code>raw_model</code>
995
+ if it is not available.</p></section>
996
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1026-L1037" class="git-link">Browse git</a></div>
997
+ </dd>
998
+ <dt id="pyatv.interface.DeviceInfo.operating_system"><code class="name">var <span class="ident">operating_system</span> -> <a title="pyatv.const.OperatingSystem" href="../const#pyatv.const.OperatingSystem">OperatingSystem</a></code></dt>
999
+ <dd>
1000
+ <section class="desc"><p>Operating system running on device.</p></section>
1001
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L973-L993" class="git-link">Browse git</a></div>
1002
+ </dd>
1003
+ <dt id="pyatv.interface.DeviceInfo.output_device_id"><code class="name">var <span class="ident">output_device_id</span> -> str | None</code></dt>
1004
+ <dd>
1005
+ <section class="desc"><p>Output device identifier.</p></section>
1006
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1044-L1047" class="git-link">Browse git</a></div>
1007
+ </dd>
1008
+ <dt id="pyatv.interface.DeviceInfo.raw_model"><code class="name">var <span class="ident">raw_model</span> -> str | None</code></dt>
1009
+ <dd>
1010
+ <section class="desc"><p>Return raw model description.</p>
1011
+ <p>If <code><a title="pyatv.interface.DeviceInfo.model" href="#pyatv.interface.DeviceInfo.model">DeviceInfo.model</a></code> returns <code><a title="pyatv.const.DeviceModel.Unknown" href="../const#pyatv.const.DeviceModel.Unknown">DeviceModel.Unknown</a></code>
1012
+ then this property contains the raw model string (if any is available).</p></section>
1013
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1017-L1024" class="git-link">Browse git</a></div>
1014
+ </dd>
1015
+ <dt id="pyatv.interface.DeviceInfo.version"><code class="name">var <span class="ident">version</span> -> str | None</code></dt>
1016
+ <dd>
1017
+ <section class="desc"><p>Operating system version.</p></section>
1018
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L995-L1005" class="git-link">Browse git</a></div>
1019
+ </dd>
1020
+ </dl>
1021
+ </dd>
1022
+ <dt id="pyatv.interface.DeviceListener"><code class="flex name class">
1023
+ <span>class <span class="ident">DeviceListener</span></span>
1024
+ </code></dt>
1025
+ <dd>
1026
+ <section class="desc"><p>Listener interface for generic device updates.</p></section>
1027
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L894-L905" class="git-link">Browse git</a></div>
1028
+ <h3>Ancestors</h3>
1029
+ <ul class="hlist">
1030
+ <li>abc.ABC</li>
1031
+ </ul>
1032
+ <h3>Subclasses</h3>
1033
+ <ul class="hlist">
1034
+ <li>pyatv.scripts.atvremote.DeviceListener</li>
1035
+ <li>pyatv.scripts.atvscript.DevicePrinter</li>
1036
+ </ul>
1037
+ <h3>Methods</h3>
1038
+ <dl>
1039
+ <dt id="pyatv.interface.DeviceListener.connection_closed">
1040
+ <code class="name flex">
1041
+ <span>def <span class="ident">connection_closed</span></span>(<span>self) -> None</span>
1042
+ </code>
1043
+ </dt>
1044
+ <dd>
1045
+ <section class="desc"><p>Device connection was (intentionally) closed.</p></section>
1046
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L902-L905" class="git-link">Browse git</a></div>
1047
+ </dd>
1048
+ <dt id="pyatv.interface.DeviceListener.connection_lost">
1049
+ <code class="name flex">
1050
+ <span>def <span class="ident">connection_lost</span></span>(<span>self, exception: Exception) -> None</span>
1051
+ </code>
1052
+ </dt>
1053
+ <dd>
1054
+ <section class="desc"><p>Device was unexpectedly disconnected.</p></section>
1055
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L897-L900" class="git-link">Browse git</a></div>
1056
+ </dd>
1057
+ </dl>
1058
+ </dd>
1059
+ <dt id="pyatv.interface.FeatureInfo"><code class="flex name class">
1060
+ <span>class <span class="ident">FeatureInfo</span></span>
1061
+ <span>(</span><span>state: <a title="pyatv.const.FeatureState" href="../const#pyatv.const.FeatureState">FeatureState</a>, options: Dict[str, object] | None = {})</span>
1062
+ </code></dt>
1063
+ <dd>
1064
+ <section class="desc"><p>Feature state and options.</p></section>
1065
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L86-L90" class="git-link">Browse git</a></div>
1066
+ <h3>Ancestors</h3>
1067
+ <ul class="hlist">
1068
+ <li>builtins.tuple</li>
1069
+ </ul>
1070
+ <h3>Instance variables</h3>
1071
+ <dl>
1072
+ <dt id="pyatv.interface.FeatureInfo.options"><code class="name">var <span class="ident">options</span> -> Dict[str, object] | None</code></dt>
1073
+ <dd>
1074
+ <section class="desc"><p>Alias for field number 1</p></section>
1075
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L86-L90" class="git-link">Browse git</a></div>
1076
+ </dd>
1077
+ <dt id="pyatv.interface.FeatureInfo.state"><code class="name">var <span class="ident">state</span> -> <a title="pyatv.const.FeatureState" href="../const#pyatv.const.FeatureState">FeatureState</a></code></dt>
1078
+ <dd>
1079
+ <section class="desc"><p>Alias for field number 0</p></section>
1080
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L86-L90" class="git-link">Browse git</a></div>
1081
+ </dd>
1082
+ </dl>
1083
+ </dd>
1084
+ <dt id="pyatv.interface.Features"><code class="flex name class">
1085
+ <span>class <span class="ident">Features</span></span>
1086
+ </code></dt>
1087
+ <dd>
1088
+ <section class="desc"><p>Base class for supported feature functionality.</p></section>
1089
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1071-L1103" class="git-link">Browse git</a></div>
1090
+ <h3>Subclasses</h3>
1091
+ <ul class="hlist">
1092
+ <li>pyatv.core.facade.FacadeFeatures</li>
1093
+ <li>pyatv.protocols.airplay.AirPlayFeatures</li>
1094
+ <li>pyatv.protocols.companion.CompanionFeatures</li>
1095
+ <li>pyatv.protocols.dmap.DmapFeatures</li>
1096
+ <li>pyatv.protocols.mrp.MrpFeatures</li>
1097
+ <li>pyatv.protocols.raop.RaopFeatures</li>
1098
+ </ul>
1099
+ <h3>Methods</h3>
1100
+ <dl>
1101
+ <dt id="pyatv.interface.Features.all_features">
1102
+ <code class="name flex">
1103
+ <span>def <span class="ident">all_features</span></span>(<span>self, include_unsupported=False) -> Dict[<a title="pyatv.const.FeatureName" href="../const#pyatv.const.FeatureName">FeatureName</a>, <a title="pyatv.interface.FeatureInfo" href="#pyatv.interface.FeatureInfo">FeatureInfo</a>]</span>
1104
+ </code>
1105
+ </dt>
1106
+ <dd>
1107
+ <section class="desc"><p>Return state of all features.</p></section>
1108
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1078-L1085" class="git-link">Browse git</a></div>
1109
+ </dd>
1110
+ <dt id="pyatv.interface.Features.get_feature">
1111
+ <code class="name flex">
1112
+ <span>def <span class="ident">get_feature</span></span>(<span>self, feature_name: <a title="pyatv.const.FeatureName" href="../const#pyatv.const.FeatureName">FeatureName</a>) -> <a title="pyatv.interface.FeatureInfo" href="#pyatv.interface.FeatureInfo">FeatureInfo</a></span>
1113
+ </code>
1114
+ </dt>
1115
+ <dd>
1116
+ <section class="desc"><p>Return current state of a feature.</p></section>
1117
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1074-L1076" class="git-link">Browse git</a></div>
1118
+ </dd>
1119
+ <dt id="pyatv.interface.Features.in_state">
1120
+ <code class="name flex">
1121
+ <span>def <span class="ident">in_state</span></span>(<span>self, states: List[<a title="pyatv.const.FeatureState" href="../const#pyatv.const.FeatureState">FeatureState</a>] | <a title="pyatv.const.FeatureState" href="../const#pyatv.const.FeatureState">FeatureState</a>, *feature_names: <a title="pyatv.const.FeatureName" href="../const#pyatv.const.FeatureName">FeatureName</a>) -> bool</span>
1122
+ </code>
1123
+ </dt>
1124
+ <dd>
1125
+ <section class="desc"><p>Return if features are in a specific state.</p>
1126
+ <p>This method will return True if all given features are in the state specified
1127
+ by "states". If "states" is a list of states, it is enough for the feature to be
1128
+ in one of the listed states.</p></section>
1129
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1087-L1103" class="git-link">Browse git</a></div>
1130
+ </dd>
1131
+ </dl>
1132
+ </dd>
1133
+ <dt id="pyatv.interface.Keyboard"><code class="flex name class">
1134
+ <span>class <span class="ident">Keyboard</span></span>
1135
+ <span>(</span><span>max_calls: int = 0)</span>
1136
+ </code></dt>
1137
+ <dd>
1138
+ <section class="desc"><p>Base class for keyboard handling.</p>
1139
+ <p>Listener
1140
+ interface: <code>pyatv.interfaces.KeyboardListener</code></p>
1141
+ <p>Initialize a new StateProducer instance.</p></section>
1142
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1234-L1265" class="git-link">Browse git</a></div>
1143
+ <h3>Ancestors</h3>
1144
+ <ul class="hlist">
1145
+ <li>abc.ABC</li>
1146
+ <li>pyatv.support.state_producer.StateProducer</li>
1147
+ <li>typing.Generic</li>
1148
+ </ul>
1149
+ <h3>Subclasses</h3>
1150
+ <ul class="hlist">
1151
+ <li>pyatv.core.facade.FacadeKeyboard</li>
1152
+ <li>pyatv.protocols.companion.CompanionKeyboard</li>
1153
+ </ul>
1154
+ <h3>Instance variables</h3>
1155
+ <dl>
1156
+ <dt id="pyatv.interface.Keyboard.text_focus_state"><code class="name">var <span class="ident">text_focus_state</span> -> <a title="pyatv.const.KeyboardFocusState" href="../const#pyatv.const.KeyboardFocusState">KeyboardFocusState</a></code></dt>
1157
+ <dd>
1158
+ <section class="desc"><p>Return keyboard focus state.</p></section>
1159
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1241-L1245" class="git-link">Browse git</a></div>
1160
+ </dd>
1161
+ </dl>
1162
+ <h3>Methods</h3>
1163
+ <dl>
1164
+ <dt id="pyatv.interface.Keyboard.text_append">
1165
+ <code class="name flex">
1166
+ <span>async def <span class="ident">text_append</span></span>(<span>self, text: str) -> None</span>
1167
+ </code>
1168
+ </dt>
1169
+ <dd>
1170
+ <div class="api_feature">
1171
+ <span>Feature: <a title="pyatv.const.FeatureName.TextAppend" href="/api/const#pyatv.const.FeatureName.TextAppend">FeatureName.TextAppend</a>,</span>
1172
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
1173
+ </div>
1174
+ <section class="desc"><p>Input text into virtual keyboard.</p></section>
1175
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1257-L1260" class="git-link">Browse git</a></div>
1176
+ </dd>
1177
+ <dt id="pyatv.interface.Keyboard.text_clear">
1178
+ <code class="name flex">
1179
+ <span>async def <span class="ident">text_clear</span></span>(<span>self) -> None</span>
1180
+ </code>
1181
+ </dt>
1182
+ <dd>
1183
+ <div class="api_feature">
1184
+ <span>Feature: <a title="pyatv.const.FeatureName.TextClear" href="/api/const#pyatv.const.FeatureName.TextClear">FeatureName.TextClear</a>,</span>
1185
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
1186
+ </div>
1187
+ <section class="desc"><p>Clear virtual keyboard text.</p></section>
1188
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1252-L1255" class="git-link">Browse git</a></div>
1189
+ </dd>
1190
+ <dt id="pyatv.interface.Keyboard.text_get">
1191
+ <code class="name flex">
1192
+ <span>async def <span class="ident">text_get</span></span>(<span>self) -> str | None</span>
1193
+ </code>
1194
+ </dt>
1195
+ <dd>
1196
+ <div class="api_feature">
1197
+ <span>Feature: <a title="pyatv.const.FeatureName.TextGet" href="/api/const#pyatv.const.FeatureName.TextGet">FeatureName.TextGet</a>,</span>
1198
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
1199
+ </div>
1200
+ <section class="desc"><p>Get current virtual keyboard text.</p></section>
1201
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1247-L1250" class="git-link">Browse git</a></div>
1202
+ </dd>
1203
+ <dt id="pyatv.interface.Keyboard.text_set">
1204
+ <code class="name flex">
1205
+ <span>async def <span class="ident">text_set</span></span>(<span>self, text: str) -> None</span>
1206
+ </code>
1207
+ </dt>
1208
+ <dd>
1209
+ <div class="api_feature">
1210
+ <span>Feature: <a title="pyatv.const.FeatureName.TextSet" href="/api/const#pyatv.const.FeatureName.TextSet">FeatureName.TextSet</a>,</span>
1211
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
1212
+ </div>
1213
+ <section class="desc"><p>Replace text in virtual keyboard.</p></section>
1214
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1262-L1265" class="git-link">Browse git</a></div>
1215
+ </dd>
1216
+ </dl>
1217
+ </dd>
1218
+ <dt id="pyatv.interface.KeyboardListener"><code class="flex name class">
1219
+ <span>class <span class="ident">KeyboardListener</span></span>
1220
+ </code></dt>
1221
+ <dd>
1222
+ <section class="desc"><p>Listener interface for keyboard updates.</p></section>
1223
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1223-L1231" class="git-link">Browse git</a></div>
1224
+ <h3>Ancestors</h3>
1225
+ <ul class="hlist">
1226
+ <li>abc.ABC</li>
1227
+ </ul>
1228
+ <h3>Subclasses</h3>
1229
+ <ul class="hlist">
1230
+ <li>pyatv.scripts.atvscript.KeyboardPrinter</li>
1231
+ </ul>
1232
+ <h3>Methods</h3>
1233
+ <dl>
1234
+ <dt id="pyatv.interface.KeyboardListener.focusstate_update">
1235
+ <code class="name flex">
1236
+ <span>def <span class="ident">focusstate_update</span></span>(<span>self, old_state: <a title="pyatv.const.KeyboardFocusState" href="../const#pyatv.const.KeyboardFocusState">KeyboardFocusState</a>, new_state: <a title="pyatv.const.KeyboardFocusState" href="../const#pyatv.const.KeyboardFocusState">KeyboardFocusState</a>) -> None</span>
1237
+ </code>
1238
+ </dt>
1239
+ <dd>
1240
+ <section class="desc"><p>Keyboard focus state was updated.</p></section>
1241
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1226-L1231" class="git-link">Browse git</a></div>
1242
+ </dd>
1243
+ </dl>
1244
+ </dd>
1245
+ <dt id="pyatv.interface.MediaMetadata"><code class="flex name class">
1246
+ <span>class <span class="ident">MediaMetadata</span></span>
1247
+ <span>(</span><span>title: str | None = None, artist: str | None = None, album: str | None = None, artwork: bytes | None = None, duration: float | None = None)</span>
1248
+ </code></dt>
1249
+ <dd>
1250
+ <section class="desc"><p>Container for media (e.g. audio or video) metadata.</p></section>
1251
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L74-L83" class="git-link">Browse git</a></div>
1252
+ <h3>Instance variables</h3>
1253
+ <dl>
1254
+ <dt id="pyatv.interface.MediaMetadata.album"><code class="name">var <span class="ident">album</span> -> str | None</code></dt>
1255
+ <dd>
1256
+ <section class="desc"></section>
1257
+ </dd>
1258
+ <dt id="pyatv.interface.MediaMetadata.artist"><code class="name">var <span class="ident">artist</span> -> str | None</code></dt>
1259
+ <dd>
1260
+ <section class="desc"></section>
1261
+ </dd>
1262
+ <dt id="pyatv.interface.MediaMetadata.artwork"><code class="name">var <span class="ident">artwork</span> -> bytes | None</code></dt>
1263
+ <dd>
1264
+ <section class="desc"></section>
1265
+ </dd>
1266
+ <dt id="pyatv.interface.MediaMetadata.duration"><code class="name">var <span class="ident">duration</span> -> float | None</code></dt>
1267
+ <dd>
1268
+ <section class="desc"></section>
1269
+ </dd>
1270
+ <dt id="pyatv.interface.MediaMetadata.title"><code class="name">var <span class="ident">title</span> -> str | None</code></dt>
1271
+ <dd>
1272
+ <section class="desc"></section>
1273
+ </dd>
1274
+ </dl>
1275
+ </dd>
1276
+ <dt id="pyatv.interface.Metadata"><code class="flex name class">
1277
+ <span>class <span class="ident">Metadata</span></span>
1278
+ </code></dt>
1279
+ <dd>
1280
+ <section class="desc"><p>Base class for retrieving metadata from an Apple TV.</p></section>
1281
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L779-L819" class="git-link">Browse git</a></div>
1282
+ <h3>Subclasses</h3>
1283
+ <ul class="hlist">
1284
+ <li>pyatv.core.facade.FacadeMetadata</li>
1285
+ <li>pyatv.protocols.dmap.DmapMetadata</li>
1286
+ <li>pyatv.protocols.mrp.MrpMetadata</li>
1287
+ <li>pyatv.protocols.raop.RaopMetadata</li>
1288
+ </ul>
1289
+ <h3>Instance variables</h3>
1290
+ <dl>
1291
+ <dt id="pyatv.interface.Metadata.app"><code class="name">var <span class="ident">app</span> -> <a title="pyatv.interface.App" href="#pyatv.interface.App">App</a> | None</code></dt>
1292
+ <dd>
1293
+ <section class="desc"><p>Return information about current app playing something.</p>
1294
+ <p>Do note that this property returns which app is currently playing something and
1295
+ not which app is currently active. If nothing is playing, the corresponding
1296
+ feature will be unavailable.</p></section>
1297
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L810-L819" class="git-link">Browse git</a></div>
1298
+ </dd>
1299
+ <dt id="pyatv.interface.Metadata.artwork_id"><code class="name">var <span class="ident">artwork_id</span> -> str</code></dt>
1300
+ <dd>
1301
+ <section class="desc"><p>Return a unique identifier for current artwork.</p></section>
1302
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L801-L804" class="git-link">Browse git</a></div>
1303
+ </dd>
1304
+ <dt id="pyatv.interface.Metadata.device_id"><code class="name">var <span class="ident">device_id</span> -> str | None</code></dt>
1305
+ <dd>
1306
+ <section class="desc"><p>Return a unique identifier for current device.</p></section>
1307
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L782-L785" class="git-link">Browse git</a></div>
1308
+ </dd>
1309
+ </dl>
1310
+ <h3>Methods</h3>
1311
+ <dl>
1312
+ <dt id="pyatv.interface.Metadata.artwork">
1313
+ <code class="name flex">
1314
+ <span>async def <span class="ident">artwork</span></span>(<span>self, width: int | None = 512, height: int | None = None) -> <a title="pyatv.interface.ArtworkInfo" href="#pyatv.interface.ArtworkInfo">ArtworkInfo</a> | None</span>
1315
+ </code>
1316
+ </dt>
1317
+ <dd>
1318
+ <div class="api_feature">
1319
+ <span>Feature: <a title="pyatv.const.FeatureName.Artwork" href="/api/const#pyatv.const.FeatureName.Artwork">FeatureName.Artwork</a>,</span>
1320
+ <span>Supported by: <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1321
+ </div>
1322
+ <section class="desc"><p>Return artwork for what is currently playing (or None).</p>
1323
+ <p>The parameters "width" and "height" makes it possible to request artwork of a
1324
+ specific size. This is just a request, the device might impose restrictions and
1325
+ return artwork of a different size. Set both parameters to None to request
1326
+ default size. Set one of them and let the other one be None to keep original
1327
+ aspect ratio.</p></section>
1328
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L787-L799" class="git-link">Browse git</a></div>
1329
+ </dd>
1330
+ <dt id="pyatv.interface.Metadata.playing">
1331
+ <code class="name flex">
1332
+ <span>async def <span class="ident">playing</span></span>(<span>self) -> <a title="pyatv.interface.Playing" href="#pyatv.interface.Playing">Playing</a></span>
1333
+ </code>
1334
+ </dt>
1335
+ <dd>
1336
+ <section class="desc"><p>Return what is currently playing.</p></section>
1337
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L806-L808" class="git-link">Browse git</a></div>
1338
+ </dd>
1339
+ </dl>
1340
+ </dd>
1341
+ <dt id="pyatv.interface.OutputDevice"><code class="flex name class">
1342
+ <span>class <span class="ident">OutputDevice</span></span>
1343
+ <span>(</span><span>name: str | None, identifier: str)</span>
1344
+ </code></dt>
1345
+ <dd>
1346
+ <section class="desc"><p>Information about an output device.</p>
1347
+ <p>Initialize a new OutputDevice instance.</p></section>
1348
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1106-L1132" class="git-link">Browse git</a></div>
1349
+ <h3>Instance variables</h3>
1350
+ <dl>
1351
+ <dt id="pyatv.interface.OutputDevice.identifier"><code class="name">var <span class="ident">identifier</span> -> str</code></dt>
1352
+ <dd>
1353
+ <section class="desc"><p>Return a unique id for the output device.</p></section>
1354
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1119-L1122" class="git-link">Browse git</a></div>
1355
+ </dd>
1356
+ <dt id="pyatv.interface.OutputDevice.name"><code class="name">var <span class="ident">name</span> -> str | None</code></dt>
1357
+ <dd>
1358
+ <section class="desc"><p>User friendly name of output device.</p></section>
1359
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1114-L1117" class="git-link">Browse git</a></div>
1360
+ </dd>
1361
+ </dl>
1362
+ </dd>
1363
+ <dt id="pyatv.interface.PairingHandler"><code class="flex name class">
1364
+ <span>class <span class="ident">PairingHandler</span></span>
1365
+ <span>(</span><span>session_manager: pyatv.support.http.ClientSessionManager, service: <a title="pyatv.interface.BaseService" href="#pyatv.interface.BaseService">BaseService</a>)</span>
1366
+ </code></dt>
1367
+ <dd>
1368
+ <section class="desc"><p>Base class for API used to pair with an Apple TV.</p>
1369
+ <p>Initialize a new instance of PairingHandler.</p></section>
1370
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L245-L289" class="git-link">Browse git</a></div>
1371
+ <h3>Ancestors</h3>
1372
+ <ul class="hlist">
1373
+ <li>abc.ABC</li>
1374
+ </ul>
1375
+ <h3>Subclasses</h3>
1376
+ <ul class="hlist">
1377
+ <li>pyatv.protocols.airplay.pairing.AirPlayPairingHandler</li>
1378
+ <li>pyatv.protocols.companion.pairing.CompanionPairingHandler</li>
1379
+ <li>pyatv.protocols.dmap.pairing.DmapPairingHandler</li>
1380
+ <li>pyatv.protocols.mrp.pairing.MrpPairingHandler</li>
1381
+ </ul>
1382
+ <h3>Instance variables</h3>
1383
+ <dl>
1384
+ <dt id="pyatv.interface.PairingHandler.device_provides_pin"><code class="name">var <span class="ident">device_provides_pin</span> -> bool</code></dt>
1385
+ <dd>
1386
+ <section class="desc"><p>Return True if remote device presents PIN code, else False.</p></section>
1387
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L270-L273" class="git-link">Browse git</a></div>
1388
+ </dd>
1389
+ <dt id="pyatv.interface.PairingHandler.has_paired"><code class="name">var <span class="ident">has_paired</span> -> bool</code></dt>
1390
+ <dd>
1391
+ <section class="desc"><p>If a successful pairing has been performed.</p>
1392
+ <p>The value will be reset when stop() is called.</p></section>
1393
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L275-L281" class="git-link">Browse git</a></div>
1394
+ </dd>
1395
+ <dt id="pyatv.interface.PairingHandler.service"><code class="name">var <span class="ident">service</span> -> <a title="pyatv.interface.BaseService" href="#pyatv.interface.BaseService">BaseService</a></code></dt>
1396
+ <dd>
1397
+ <section class="desc"><p>Return service used for pairing.</p></section>
1398
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L257-L260" class="git-link">Browse git</a></div>
1399
+ </dd>
1400
+ </dl>
1401
+ <h3>Methods</h3>
1402
+ <dl>
1403
+ <dt id="pyatv.interface.PairingHandler.begin">
1404
+ <code class="name flex">
1405
+ <span>async def <span class="ident">begin</span></span>(<span>self) -> None</span>
1406
+ </code>
1407
+ </dt>
1408
+ <dd>
1409
+ <section class="desc"><p>Start pairing process.</p></section>
1410
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L283-L285" class="git-link">Browse git</a></div>
1411
+ </dd>
1412
+ <dt id="pyatv.interface.PairingHandler.close">
1413
+ <code class="name flex">
1414
+ <span>async def <span class="ident">close</span></span>(<span>self) -> None</span>
1415
+ </code>
1416
+ </dt>
1417
+ <dd>
1418
+ <section class="desc"><p>Call to free allocated resources after pairing.</p></section>
1419
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L262-L264" class="git-link">Browse git</a></div>
1420
+ </dd>
1421
+ <dt id="pyatv.interface.PairingHandler.finish">
1422
+ <code class="name flex">
1423
+ <span>async def <span class="ident">finish</span></span>(<span>self) -> None</span>
1424
+ </code>
1425
+ </dt>
1426
+ <dd>
1427
+ <section class="desc"><p>Stop pairing process.</p></section>
1428
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L287-L289" class="git-link">Browse git</a></div>
1429
+ </dd>
1430
+ <dt id="pyatv.interface.PairingHandler.pin">
1431
+ <code class="name flex">
1432
+ <span>def <span class="ident">pin</span></span>(<span>self, pin) -> None</span>
1433
+ </code>
1434
+ </dt>
1435
+ <dd>
1436
+ <section class="desc"><p>Pin code used for pairing.</p></section>
1437
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L266-L268" class="git-link">Browse git</a></div>
1438
+ </dd>
1439
+ </dl>
1440
+ </dd>
1441
+ <dt id="pyatv.interface.Playing"><code class="flex name class">
1442
+ <span>class <span class="ident">Playing</span></span>
1443
+ <span>(</span><span>media_type: <a title="pyatv.const.MediaType" href="../const#pyatv.const.MediaType">MediaType</a> = MediaType.Unknown, device_state: <a title="pyatv.const.DeviceState" href="../const#pyatv.const.DeviceState">DeviceState</a> = DeviceState.Idle, title: str | None = None, artist: str | None = None, album: str | None = None, genre: str | None = None, total_time: int | None = None, position: int | None = None, shuffle: <a title="pyatv.const.ShuffleState" href="../const#pyatv.const.ShuffleState">ShuffleState</a> | None = None, repeat: <a title="pyatv.const.RepeatState" href="../const#pyatv.const.RepeatState">RepeatState</a> | None = None, hash: str | None = None, series_name: str | None = None, season_number: int | None = None, episode_number: int | None = None, content_identifier: str | None = None, itunes_store_identifier: int | None = None)</span>
1444
+ </code></dt>
1445
+ <dd>
1446
+ <section class="desc"><p>Base class for retrieving what is currently playing.</p>
1447
+ <p>Initialize a new Playing instance.</p></section>
1448
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L459-L690" class="git-link">Browse git</a></div>
1449
+ <h3>Ancestors</h3>
1450
+ <ul class="hlist">
1451
+ <li>abc.ABC</li>
1452
+ </ul>
1453
+ <h3>Instance variables</h3>
1454
+ <dl>
1455
+ <dt id="pyatv.interface.Playing.album"><code class="name">var <span class="ident">album</span> -> str | None</code></dt>
1456
+ <dd>
1457
+ <section class="desc"><p>Album of the currently playing song.</p></section>
1458
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L626-L630" class="git-link">Browse git</a></div>
1459
+ </dd>
1460
+ <dt id="pyatv.interface.Playing.artist"><code class="name">var <span class="ident">artist</span> -> str | None</code></dt>
1461
+ <dd>
1462
+ <section class="desc"><p>Artist of the currently playing song.</p></section>
1463
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L620-L624" class="git-link">Browse git</a></div>
1464
+ </dd>
1465
+ <dt id="pyatv.interface.Playing.content_identifier"><code class="name">var <span class="ident">content_identifier</span> -> str | None</code></dt>
1466
+ <dd>
1467
+ <section class="desc"><p>Content identifier (app specific).</p></section>
1468
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L680-L684" class="git-link">Browse git</a></div>
1469
+ </dd>
1470
+ <dt id="pyatv.interface.Playing.device_state"><code class="name">var <span class="ident">device_state</span> -> <a title="pyatv.const.DeviceState" href="../const#pyatv.const.DeviceState">DeviceState</a></code></dt>
1471
+ <dd>
1472
+ <section class="desc"><p>Device state, e.g. playing or paused.</p></section>
1473
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L609-L612" class="git-link">Browse git</a></div>
1474
+ </dd>
1475
+ <dt id="pyatv.interface.Playing.episode_number"><code class="name">var <span class="ident">episode_number</span> -> int | None</code></dt>
1476
+ <dd>
1477
+ <section class="desc"><p>Episode number of TV series.</p></section>
1478
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L674-L678" class="git-link">Browse git</a></div>
1479
+ </dd>
1480
+ <dt id="pyatv.interface.Playing.genre"><code class="name">var <span class="ident">genre</span> -> str | None</code></dt>
1481
+ <dd>
1482
+ <section class="desc"><p>Genre of the currently playing song.</p></section>
1483
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L632-L636" class="git-link">Browse git</a></div>
1484
+ </dd>
1485
+ <dt id="pyatv.interface.Playing.hash"><code class="name">var <span class="ident">hash</span> -> str</code></dt>
1486
+ <dd>
1487
+ <section class="desc"><p>Create a unique hash for what is currently playing.</p>
1488
+ <p>The hash is based on title, artist, album and total time. It should
1489
+ always be the same for the same content, but it is not guaranteed.</p></section>
1490
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L591-L602" class="git-link">Browse git</a></div>
1491
+ </dd>
1492
+ <dt id="pyatv.interface.Playing.itunes_store_identifier"><code class="name">var <span class="ident">itunes_store_identifier</span> -> int | None</code></dt>
1493
+ <dd>
1494
+ <section class="desc"><p>Itunes Store identifier.</p></section>
1495
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L686-L690" class="git-link">Browse git</a></div>
1496
+ </dd>
1497
+ <dt id="pyatv.interface.Playing.media_type"><code class="name">var <span class="ident">media_type</span> -> <a title="pyatv.const.MediaType" href="../const#pyatv.const.MediaType">MediaType</a></code></dt>
1498
+ <dd>
1499
+ <section class="desc"><p>Type of media is currently playing, e.g. video, music.</p></section>
1500
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L604-L607" class="git-link">Browse git</a></div>
1501
+ </dd>
1502
+ <dt id="pyatv.interface.Playing.position"><code class="name">var <span class="ident">position</span> -> int | None</code></dt>
1503
+ <dd>
1504
+ <section class="desc"><p>Position in the playing media (seconds).</p></section>
1505
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L644-L648" class="git-link">Browse git</a></div>
1506
+ </dd>
1507
+ <dt id="pyatv.interface.Playing.repeat"><code class="name">var <span class="ident">repeat</span> -> <a title="pyatv.const.RepeatState" href="../const#pyatv.const.RepeatState">RepeatState</a> | None</code></dt>
1508
+ <dd>
1509
+ <section class="desc"><p>Repeat mode.</p></section>
1510
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L656-L660" class="git-link">Browse git</a></div>
1511
+ </dd>
1512
+ <dt id="pyatv.interface.Playing.season_number"><code class="name">var <span class="ident">season_number</span> -> int | None</code></dt>
1513
+ <dd>
1514
+ <section class="desc"><p>Season number of TV series.</p></section>
1515
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L668-L672" class="git-link">Browse git</a></div>
1516
+ </dd>
1517
+ <dt id="pyatv.interface.Playing.series_name"><code class="name">var <span class="ident">series_name</span> -> str | None</code></dt>
1518
+ <dd>
1519
+ <section class="desc"><p>Title of TV series.</p></section>
1520
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L662-L666" class="git-link">Browse git</a></div>
1521
+ </dd>
1522
+ <dt id="pyatv.interface.Playing.shuffle"><code class="name">var <span class="ident">shuffle</span> -> <a title="pyatv.const.ShuffleState" href="../const#pyatv.const.ShuffleState">ShuffleState</a> | None</code></dt>
1523
+ <dd>
1524
+ <section class="desc"><p>If shuffle is enabled or not.</p></section>
1525
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L650-L654" class="git-link">Browse git</a></div>
1526
+ </dd>
1527
+ <dt id="pyatv.interface.Playing.title"><code class="name">var <span class="ident">title</span> -> str | None</code></dt>
1528
+ <dd>
1529
+ <section class="desc"><p>Title of the current media, e.g. movie or song name.</p></section>
1530
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L614-L618" class="git-link">Browse git</a></div>
1531
+ </dd>
1532
+ <dt id="pyatv.interface.Playing.total_time"><code class="name">var <span class="ident">total_time</span> -> int | None</code></dt>
1533
+ <dd>
1534
+ <section class="desc"><p>Total play time in seconds.</p></section>
1535
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L638-L642" class="git-link">Browse git</a></div>
1536
+ </dd>
1537
+ </dl>
1538
+ </dd>
1539
+ <dt id="pyatv.interface.Power"><code class="flex name class">
1540
+ <span>class <span class="ident">Power</span></span>
1541
+ <span>(</span><span>max_calls: int = 0)</span>
1542
+ </code></dt>
1543
+ <dd>
1544
+ <section class="desc"><p>Base class for retrieving power state from an Apple TV.</p>
1545
+ <p>Listener interface: <code>pyatv.interfaces.PowerListener</code></p>
1546
+ <p>Initialize a new StateProducer instance.</p></section>
1547
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L919-L939" class="git-link">Browse git</a></div>
1548
+ <h3>Ancestors</h3>
1549
+ <ul class="hlist">
1550
+ <li>abc.ABC</li>
1551
+ <li>pyatv.support.state_producer.StateProducer</li>
1552
+ <li>typing.Generic</li>
1553
+ </ul>
1554
+ <h3>Subclasses</h3>
1555
+ <ul class="hlist">
1556
+ <li>pyatv.core.facade.FacadePower</li>
1557
+ <li>pyatv.protocols.companion.CompanionPower</li>
1558
+ <li>pyatv.protocols.mrp.MrpPower</li>
1559
+ </ul>
1560
+ <h3>Instance variables</h3>
1561
+ <dl>
1562
+ <dt id="pyatv.interface.Power.power_state"><code class="name">var <span class="ident">power_state</span> -> <a title="pyatv.const.PowerState" href="../const#pyatv.const.PowerState">PowerState</a></code></dt>
1563
+ <dd>
1564
+ <section class="desc"><p>Return device power state.</p></section>
1565
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L925-L929" class="git-link">Browse git</a></div>
1566
+ </dd>
1567
+ </dl>
1568
+ <h3>Methods</h3>
1569
+ <dl>
1570
+ <dt id="pyatv.interface.Power.turn_off">
1571
+ <code class="name flex">
1572
+ <span>async def <span class="ident">turn_off</span></span>(<span>self, await_new_state: bool = False) -> None</span>
1573
+ </code>
1574
+ </dt>
1575
+ <dd>
1576
+ <div class="api_feature">
1577
+ <span>Feature: <a title="pyatv.const.FeatureName.TurnOff" href="/api/const#pyatv.const.FeatureName.TurnOff">FeatureName.TurnOff</a>,</span>
1578
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1579
+ </div>
1580
+ <section class="desc"><p>Turn device off.</p></section>
1581
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L936-L939" class="git-link">Browse git</a></div>
1582
+ </dd>
1583
+ <dt id="pyatv.interface.Power.turn_on">
1584
+ <code class="name flex">
1585
+ <span>async def <span class="ident">turn_on</span></span>(<span>self, await_new_state: bool = False) -> None</span>
1586
+ </code>
1587
+ </dt>
1588
+ <dd>
1589
+ <div class="api_feature">
1590
+ <span>Feature: <a title="pyatv.const.FeatureName.TurnOn" href="/api/const#pyatv.const.FeatureName.TurnOn">FeatureName.TurnOn</a>,</span>
1591
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1592
+ </div>
1593
+ <section class="desc"><p>Turn device on.</p></section>
1594
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L931-L934" class="git-link">Browse git</a></div>
1595
+ </dd>
1596
+ </dl>
1597
+ </dd>
1598
+ <dt id="pyatv.interface.PowerListener"><code class="flex name class">
1599
+ <span>class <span class="ident">PowerListener</span></span>
1600
+ </code></dt>
1601
+ <dd>
1602
+ <section class="desc"><p>Listener interface for power updates.</p></section>
1603
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L908-L916" class="git-link">Browse git</a></div>
1604
+ <h3>Ancestors</h3>
1605
+ <ul class="hlist">
1606
+ <li>abc.ABC</li>
1607
+ </ul>
1608
+ <h3>Subclasses</h3>
1609
+ <ul class="hlist">
1610
+ <li>pyatv.core.facade.FacadePower</li>
1611
+ <li>pyatv.scripts.atvremote.PowerListener</li>
1612
+ <li>pyatv.scripts.atvscript.PowerPrinter</li>
1613
+ </ul>
1614
+ <h3>Methods</h3>
1615
+ <dl>
1616
+ <dt id="pyatv.interface.PowerListener.powerstate_update">
1617
+ <code class="name flex">
1618
+ <span>def <span class="ident">powerstate_update</span></span>(<span>self, old_state: <a title="pyatv.const.PowerState" href="../const#pyatv.const.PowerState">PowerState</a>, new_state: <a title="pyatv.const.PowerState" href="../const#pyatv.const.PowerState">PowerState</a>) -> None</span>
1619
+ </code>
1620
+ </dt>
1621
+ <dd>
1622
+ <section class="desc"><p>Device power state was updated.</p></section>
1623
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L911-L916" class="git-link">Browse git</a></div>
1624
+ </dd>
1625
+ </dl>
1626
+ </dd>
1627
+ <dt id="pyatv.interface.PushListener"><code class="flex name class">
1628
+ <span>class <span class="ident">PushListener</span></span>
1629
+ </code></dt>
1630
+ <dd>
1631
+ <section class="desc"><p>Listener interface for push updates.</p></section>
1632
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L822-L831" class="git-link">Browse git</a></div>
1633
+ <h3>Ancestors</h3>
1634
+ <ul class="hlist">
1635
+ <li>abc.ABC</li>
1636
+ </ul>
1637
+ <h3>Subclasses</h3>
1638
+ <ul class="hlist">
1639
+ <li>pyatv.core.facade.FacadePushUpdater</li>
1640
+ <li>pyatv.scripts.atvremote.PushListener</li>
1641
+ <li>pyatv.scripts.atvscript.PushPrinter</li>
1642
+ </ul>
1643
+ <h3>Methods</h3>
1644
+ <dl>
1645
+ <dt id="pyatv.interface.PushListener.playstatus_error">
1646
+ <code class="name flex">
1647
+ <span>def <span class="ident">playstatus_error</span></span>(<span>self, updater, exception: Exception) -> None</span>
1648
+ </code>
1649
+ </dt>
1650
+ <dd>
1651
+ <section class="desc"><p>Inform about an error when updating play status.</p></section>
1652
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L829-L831" class="git-link">Browse git</a></div>
1653
+ </dd>
1654
+ <dt id="pyatv.interface.PushListener.playstatus_update">
1655
+ <code class="name flex">
1656
+ <span>def <span class="ident">playstatus_update</span></span>(<span>self, updater, playstatus: <a title="pyatv.interface.Playing" href="#pyatv.interface.Playing">Playing</a>) -> None</span>
1657
+ </code>
1658
+ </dt>
1659
+ <dd>
1660
+ <section class="desc"><p>Inform about changes to what is currently playing.</p></section>
1661
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L825-L827" class="git-link">Browse git</a></div>
1662
+ </dd>
1663
+ </dl>
1664
+ </dd>
1665
+ <dt id="pyatv.interface.PushUpdater"><code class="flex name class">
1666
+ <span>class <span class="ident">PushUpdater</span></span>
1667
+ <span>(</span><span>max_calls: int = 0)</span>
1668
+ </code></dt>
1669
+ <dd>
1670
+ <section class="desc"><p>Base class for push/async updates from an Apple TV.</p>
1671
+ <p>A <code><a title="pyatv.interface.PushUpdater" href="#pyatv.interface.PushUpdater">PushUpdater</a></code> shall only publish update in case the state
1672
+ actually changes.</p>
1673
+ <p>Listener interface: <code><a title="pyatv.interface.PushListener" href="#pyatv.interface.PushListener">PushListener</a></code>.</p>
1674
+ <p>Initialize a new StateProducer instance.</p></section>
1675
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L834-L861" class="git-link">Browse git</a></div>
1676
+ <h3>Ancestors</h3>
1677
+ <ul class="hlist">
1678
+ <li>abc.ABC</li>
1679
+ <li>pyatv.support.state_producer.StateProducer</li>
1680
+ <li>typing.Generic</li>
1681
+ </ul>
1682
+ <h3>Subclasses</h3>
1683
+ <ul class="hlist">
1684
+ <li>pyatv.core.AbstractPushUpdater</li>
1685
+ <li>pyatv.core.facade.FacadePushUpdater</li>
1686
+ </ul>
1687
+ <h3>Instance variables</h3>
1688
+ <dl>
1689
+ <dt id="pyatv.interface.PushUpdater.active"><code class="name">var <span class="ident">active</span> -> bool</code></dt>
1690
+ <dd>
1691
+ <section class="desc"><p>Return if push updater has been started.</p></section>
1692
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L843-L847" class="git-link">Browse git</a></div>
1693
+ </dd>
1694
+ </dl>
1695
+ <h3>Methods</h3>
1696
+ <dl>
1697
+ <dt id="pyatv.interface.PushUpdater.start">
1698
+ <code class="name flex">
1699
+ <span>def <span class="ident">start</span></span>(<span>self, initial_delay: int = 0) -> None</span>
1700
+ </code>
1701
+ </dt>
1702
+ <dd>
1703
+ <div class="api_feature">
1704
+ <span>Feature: <a title="pyatv.const.FeatureName.PushUpdates" href="/api/const#pyatv.const.FeatureName.PushUpdates">FeatureName.PushUpdates</a>,</span>
1705
+ <span>Supported by: </span>
1706
+ </div>
1707
+ <section class="desc"><p>Begin to listen to updates.</p>
1708
+ <p>If an error occurs, start must be called again.</p></section>
1709
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L849-L856" class="git-link">Browse git</a></div>
1710
+ </dd>
1711
+ <dt id="pyatv.interface.PushUpdater.stop">
1712
+ <code class="name flex">
1713
+ <span>def <span class="ident">stop</span></span>(<span>self) -> None</span>
1714
+ </code>
1715
+ </dt>
1716
+ <dd>
1717
+ <section class="desc"><p>No longer forward updates to listener.</p></section>
1718
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L858-L861" class="git-link">Browse git</a></div>
1719
+ </dd>
1720
+ </dl>
1721
+ </dd>
1722
+ <dt id="pyatv.interface.RemoteControl"><code class="flex name class">
1723
+ <span>class <span class="ident">RemoteControl</span></span>
1724
+ </code></dt>
1725
+ <dd>
1726
+ <section class="desc"><p>Base class for API used to control an Apple TV.</p></section>
1727
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L292-L455" class="git-link">Browse git</a></div>
1728
+ <h3>Subclasses</h3>
1729
+ <ul class="hlist">
1730
+ <li>pyatv.core.facade.FacadeRemoteControl</li>
1731
+ <li>pyatv.protocols.airplay.AirPlayRemoteControl</li>
1732
+ <li>pyatv.protocols.companion.CompanionRemoteControl</li>
1733
+ <li>pyatv.protocols.dmap.DmapRemoteControl</li>
1734
+ <li>pyatv.protocols.mrp.MrpRemoteControl</li>
1735
+ <li>pyatv.protocols.raop.RaopRemoteControl</li>
1736
+ </ul>
1737
+ <h3>Methods</h3>
1738
+ <dl>
1739
+ <dt id="pyatv.interface.RemoteControl.channel_down">
1740
+ <code class="name flex">
1741
+ <span>async def <span class="ident">channel_down</span></span>(<span>self) -> None</span>
1742
+ </code>
1743
+ </dt>
1744
+ <dd>
1745
+ <div class="api_feature">
1746
+ <span>Feature: <a title="pyatv.const.FeatureName.ChannelDown" href="/api/const#pyatv.const.FeatureName.ChannelDown">FeatureName.ChannelDown</a>,</span>
1747
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
1748
+ </div>
1749
+ <section class="desc"><p>Select previous channel.</p></section>
1750
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L447-L450" class="git-link">Browse git</a></div>
1751
+ </dd>
1752
+ <dt id="pyatv.interface.RemoteControl.channel_up">
1753
+ <code class="name flex">
1754
+ <span>async def <span class="ident">channel_up</span></span>(<span>self) -> None</span>
1755
+ </code>
1756
+ </dt>
1757
+ <dd>
1758
+ <div class="api_feature">
1759
+ <span>Feature: <a title="pyatv.const.FeatureName.ChannelUp" href="/api/const#pyatv.const.FeatureName.ChannelUp">FeatureName.ChannelUp</a>,</span>
1760
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
1761
+ </div>
1762
+ <section class="desc"><p>Select next channel.</p></section>
1763
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L442-L445" class="git-link">Browse git</a></div>
1764
+ </dd>
1765
+ <dt id="pyatv.interface.RemoteControl.down">
1766
+ <code class="name flex">
1767
+ <span>async def <span class="ident">down</span></span>(<span>self, action: <a title="pyatv.const.InputAction" href="../const#pyatv.const.InputAction">InputAction</a> = InputAction.SingleTap) -> None</span>
1768
+ </code>
1769
+ </dt>
1770
+ <dd>
1771
+ <div class="api_feature">
1772
+ <span>Feature: <a title="pyatv.const.FeatureName.Down" href="/api/const#pyatv.const.FeatureName.Down">FeatureName.Down</a>,</span>
1773
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1774
+ </div>
1775
+ <section class="desc"><p>Press key down.</p></section>
1776
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L301-L304" class="git-link">Browse git</a></div>
1777
+ </dd>
1778
+ <dt id="pyatv.interface.RemoteControl.home">
1779
+ <code class="name flex">
1780
+ <span>async def <span class="ident">home</span></span>(<span>self, action: <a title="pyatv.const.InputAction" href="../const#pyatv.const.InputAction">InputAction</a> = InputAction.SingleTap) -> None</span>
1781
+ </code>
1782
+ </dt>
1783
+ <dd>
1784
+ <div class="api_feature">
1785
+ <span>Feature: <a title="pyatv.const.FeatureName.Home" href="/api/const#pyatv.const.FeatureName.Home">FeatureName.Home</a>,</span>
1786
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1787
+ </div>
1788
+ <section class="desc"><p>Press key home.</p></section>
1789
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L372-L375" class="git-link">Browse git</a></div>
1790
+ </dd>
1791
+ <dt id="pyatv.interface.RemoteControl.home_hold">
1792
+ <code class="name flex">
1793
+ <span>async def <span class="ident">home_hold</span></span>(<span>self) -> None</span>
1794
+ </code>
1795
+ </dt>
1796
+ <dd>
1797
+ <div class="api_feature">
1798
+ <span>Feature: <a title="pyatv.const.FeatureName.HomeHold" href="/api/const#pyatv.const.FeatureName.HomeHold">FeatureName.HomeHold</a>,</span>
1799
+ <span>Supported by: <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1800
+ </div>
1801
+ <section class="desc"><p>Hold key home.</p></section>
1802
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L377-L382" class="git-link">Browse git</a></div>
1803
+ </dd>
1804
+ <dt id="pyatv.interface.RemoteControl.left">
1805
+ <code class="name flex">
1806
+ <span>async def <span class="ident">left</span></span>(<span>self, action: <a title="pyatv.const.InputAction" href="../const#pyatv.const.InputAction">InputAction</a> = InputAction.SingleTap) -> None</span>
1807
+ </code>
1808
+ </dt>
1809
+ <dd>
1810
+ <div class="api_feature">
1811
+ <span>Feature: <a title="pyatv.const.FeatureName.Left" href="/api/const#pyatv.const.FeatureName.Left">FeatureName.Left</a>,</span>
1812
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1813
+ </div>
1814
+ <section class="desc"><p>Press key left.</p></section>
1815
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L306-L309" class="git-link">Browse git</a></div>
1816
+ </dd>
1817
+ <dt id="pyatv.interface.RemoteControl.menu">
1818
+ <code class="name flex">
1819
+ <span>async def <span class="ident">menu</span></span>(<span>self, action: <a title="pyatv.const.InputAction" href="../const#pyatv.const.InputAction">InputAction</a> = InputAction.SingleTap) -> None</span>
1820
+ </code>
1821
+ </dt>
1822
+ <dd>
1823
+ <div class="api_feature">
1824
+ <span>Feature: <a title="pyatv.const.FeatureName.Menu" href="/api/const#pyatv.const.FeatureName.Menu">FeatureName.Menu</a>,</span>
1825
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1826
+ </div>
1827
+ <section class="desc"><p>Press key menu.</p></section>
1828
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L351-L354" class="git-link">Browse git</a></div>
1829
+ </dd>
1830
+ <dt id="pyatv.interface.RemoteControl.next">
1831
+ <code class="name flex">
1832
+ <span>async def <span class="ident">next</span></span>(<span>self) -> None</span>
1833
+ </code>
1834
+ </dt>
1835
+ <dd>
1836
+ <div class="api_feature">
1837
+ <span>Feature: <a title="pyatv.const.FeatureName.Next" href="/api/const#pyatv.const.FeatureName.Next">FeatureName.Next</a>,</span>
1838
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1839
+ </div>
1840
+ <section class="desc"><p>Press key next.</p></section>
1841
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L336-L339" class="git-link">Browse git</a></div>
1842
+ </dd>
1843
+ <dt id="pyatv.interface.RemoteControl.pause">
1844
+ <code class="name flex">
1845
+ <span>async def <span class="ident">pause</span></span>(<span>self) -> None</span>
1846
+ </code>
1847
+ </dt>
1848
+ <dd>
1849
+ <div class="api_feature">
1850
+ <span>Feature: <a title="pyatv.const.FeatureName.Pause" href="/api/const#pyatv.const.FeatureName.Pause">FeatureName.Pause</a>,</span>
1851
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a>, <a title="pyatv.const.Protocol.RAOP" href="/api/const#pyatv.const.Protocol.RAOP">Protocol.RAOP</a></span>
1852
+ </div>
1853
+ <section class="desc"><p>Press key pause.</p></section>
1854
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L326-L329" class="git-link">Browse git</a></div>
1855
+ </dd>
1856
+ <dt id="pyatv.interface.RemoteControl.play">
1857
+ <code class="name flex">
1858
+ <span>async def <span class="ident">play</span></span>(<span>self) -> None</span>
1859
+ </code>
1860
+ </dt>
1861
+ <dd>
1862
+ <div class="api_feature">
1863
+ <span>Feature: <a title="pyatv.const.FeatureName.Play" href="/api/const#pyatv.const.FeatureName.Play">FeatureName.Play</a>,</span>
1864
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1865
+ </div>
1866
+ <section class="desc"><p>Press key play.</p></section>
1867
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L316-L319" class="git-link">Browse git</a></div>
1868
+ </dd>
1869
+ <dt id="pyatv.interface.RemoteControl.play_pause">
1870
+ <code class="name flex">
1871
+ <span>async def <span class="ident">play_pause</span></span>(<span>self) -> None</span>
1872
+ </code>
1873
+ </dt>
1874
+ <dd>
1875
+ <div class="api_feature">
1876
+ <span>Feature: <a title="pyatv.const.FeatureName.PlayPause" href="/api/const#pyatv.const.FeatureName.PlayPause">FeatureName.PlayPause</a>,</span>
1877
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1878
+ </div>
1879
+ <section class="desc"><p>Toggle between play and pause.</p></section>
1880
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L321-L324" class="git-link">Browse git</a></div>
1881
+ </dd>
1882
+ <dt id="pyatv.interface.RemoteControl.previous">
1883
+ <code class="name flex">
1884
+ <span>async def <span class="ident">previous</span></span>(<span>self) -> None</span>
1885
+ </code>
1886
+ </dt>
1887
+ <dd>
1888
+ <div class="api_feature">
1889
+ <span>Feature: <a title="pyatv.const.FeatureName.Previous" href="/api/const#pyatv.const.FeatureName.Previous">FeatureName.Previous</a>,</span>
1890
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1891
+ </div>
1892
+ <section class="desc"><p>Press key previous.</p></section>
1893
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L341-L344" class="git-link">Browse git</a></div>
1894
+ </dd>
1895
+ <dt id="pyatv.interface.RemoteControl.right">
1896
+ <code class="name flex">
1897
+ <span>async def <span class="ident">right</span></span>(<span>self, action: <a title="pyatv.const.InputAction" href="../const#pyatv.const.InputAction">InputAction</a> = InputAction.SingleTap) -> None</span>
1898
+ </code>
1899
+ </dt>
1900
+ <dd>
1901
+ <div class="api_feature">
1902
+ <span>Feature: <a title="pyatv.const.FeatureName.Right" href="/api/const#pyatv.const.FeatureName.Right">FeatureName.Right</a>,</span>
1903
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1904
+ </div>
1905
+ <section class="desc"><p>Press key right.</p></section>
1906
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L311-L314" class="git-link">Browse git</a></div>
1907
+ </dd>
1908
+ <dt id="pyatv.interface.RemoteControl.screensaver">
1909
+ <code class="name flex">
1910
+ <span>async def <span class="ident">screensaver</span></span>(<span>self) -> None</span>
1911
+ </code>
1912
+ </dt>
1913
+ <dd>
1914
+ <div class="api_feature">
1915
+ <span>Feature: <a title="pyatv.const.FeatureName.Screensaver" href="/api/const#pyatv.const.FeatureName.Screensaver">FeatureName.Screensaver</a>,</span>
1916
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
1917
+ </div>
1918
+ <section class="desc"><p>Activate screen saver..</p></section>
1919
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L452-L455" class="git-link">Browse git</a></div>
1920
+ </dd>
1921
+ <dt id="pyatv.interface.RemoteControl.select">
1922
+ <code class="name flex">
1923
+ <span>async def <span class="ident">select</span></span>(<span>self, action: <a title="pyatv.const.InputAction" href="../const#pyatv.const.InputAction">InputAction</a> = InputAction.SingleTap) -> None</span>
1924
+ </code>
1925
+ </dt>
1926
+ <dd>
1927
+ <div class="api_feature">
1928
+ <span>Feature: <a title="pyatv.const.FeatureName.Select" href="/api/const#pyatv.const.FeatureName.Select">FeatureName.Select</a>,</span>
1929
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1930
+ </div>
1931
+ <section class="desc"><p>Press key select.</p></section>
1932
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L346-L349" class="git-link">Browse git</a></div>
1933
+ </dd>
1934
+ <dt id="pyatv.interface.RemoteControl.set_position">
1935
+ <code class="name flex">
1936
+ <span>async def <span class="ident">set_position</span></span>(<span>self, pos: int) -> None</span>
1937
+ </code>
1938
+ </dt>
1939
+ <dd>
1940
+ <div class="api_feature">
1941
+ <span>Feature: <a title="pyatv.const.FeatureName.SetPosition" href="/api/const#pyatv.const.FeatureName.SetPosition">FeatureName.SetPosition</a>,</span>
1942
+ <span>Supported by: <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1943
+ </div>
1944
+ <section class="desc"><p>Seek in the current playing media.</p></section>
1945
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L427-L430" class="git-link">Browse git</a></div>
1946
+ </dd>
1947
+ <dt id="pyatv.interface.RemoteControl.set_repeat">
1948
+ <code class="name flex">
1949
+ <span>async def <span class="ident">set_repeat</span></span>(<span>self, repeat_state: <a title="pyatv.const.RepeatState" href="../const#pyatv.const.RepeatState">RepeatState</a>) -> None</span>
1950
+ </code>
1951
+ </dt>
1952
+ <dd>
1953
+ <div class="api_feature">
1954
+ <span>Feature: <a title="pyatv.const.FeatureName.SetRepeat" href="/api/const#pyatv.const.FeatureName.SetRepeat">FeatureName.SetRepeat</a>,</span>
1955
+ <span>Supported by: <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1956
+ </div>
1957
+ <section class="desc"><p>Change repeat state.</p></section>
1958
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L437-L440" class="git-link">Browse git</a></div>
1959
+ </dd>
1960
+ <dt id="pyatv.interface.RemoteControl.set_shuffle">
1961
+ <code class="name flex">
1962
+ <span>async def <span class="ident">set_shuffle</span></span>(<span>self, shuffle_state: <a title="pyatv.const.ShuffleState" href="../const#pyatv.const.ShuffleState">ShuffleState</a>) -> None</span>
1963
+ </code>
1964
+ </dt>
1965
+ <dd>
1966
+ <div class="api_feature">
1967
+ <span>Feature: <a title="pyatv.const.FeatureName.SetShuffle" href="/api/const#pyatv.const.FeatureName.SetShuffle">FeatureName.SetShuffle</a>,</span>
1968
+ <span>Supported by: <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1969
+ </div>
1970
+ <section class="desc"><p>Change shuffle mode to on or off.</p></section>
1971
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L432-L435" class="git-link">Browse git</a></div>
1972
+ </dd>
1973
+ <dt id="pyatv.interface.RemoteControl.skip_backward">
1974
+ <code class="name flex">
1975
+ <span>async def <span class="ident">skip_backward</span></span>(<span>self, time_interval: float = 0.0) -> None</span>
1976
+ </code>
1977
+ </dt>
1978
+ <dd>
1979
+ <div class="api_feature">
1980
+ <span>Feature: <a title="pyatv.const.FeatureName.SkipBackward" href="/api/const#pyatv.const.FeatureName.SkipBackward">FeatureName.SkipBackward</a>,</span>
1981
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1982
+ </div>
1983
+ <section class="desc"><p>Skip backward a time interval.</p>
1984
+ <p>If time_interval is not positive or not present, a default or app-chosen
1985
+ time interval is used, which is typically 10, 15, 30, etc. seconds.</p></section>
1986
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L418-L425" class="git-link">Browse git</a></div>
1987
+ </dd>
1988
+ <dt id="pyatv.interface.RemoteControl.skip_forward">
1989
+ <code class="name flex">
1990
+ <span>async def <span class="ident">skip_forward</span></span>(<span>self, time_interval: float = 0.0) -> None</span>
1991
+ </code>
1992
+ </dt>
1993
+ <dd>
1994
+ <div class="api_feature">
1995
+ <span>Feature: <a title="pyatv.const.FeatureName.SkipForward" href="/api/const#pyatv.const.FeatureName.SkipForward">FeatureName.SkipForward</a>,</span>
1996
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
1997
+ </div>
1998
+ <section class="desc"><p>Skip forward a time interval.</p>
1999
+ <p>If time_interval is not positive or not present, a default or app-chosen
2000
+ time interval is used, which is typically 10, 15, 30, etc. seconds.</p></section>
2001
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L405-L416" class="git-link">Browse git</a></div>
2002
+ </dd>
2003
+ <dt id="pyatv.interface.RemoteControl.stop">
2004
+ <code class="name flex">
2005
+ <span>async def <span class="ident">stop</span></span>(<span>self) -> None</span>
2006
+ </code>
2007
+ </dt>
2008
+ <dd>
2009
+ <div class="api_feature">
2010
+ <span>Feature: <a title="pyatv.const.FeatureName.Stop" href="/api/const#pyatv.const.FeatureName.Stop">FeatureName.Stop</a>,</span>
2011
+ <span>Supported by: <a title="pyatv.const.Protocol.AirPlay" href="/api/const#pyatv.const.Protocol.AirPlay">Protocol.AirPlay</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a>, <a title="pyatv.const.Protocol.RAOP" href="/api/const#pyatv.const.Protocol.RAOP">Protocol.RAOP</a></span>
2012
+ </div>
2013
+ <section class="desc"><p>Press key stop.</p></section>
2014
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L331-L334" class="git-link">Browse git</a></div>
2015
+ </dd>
2016
+ <dt id="pyatv.interface.RemoteControl.suspend">
2017
+ <code class="name flex">
2018
+ <span>async def <span class="ident">suspend</span></span>(<span>self) -> None</span>
2019
+ </code>
2020
+ </dt>
2021
+ <dd>
2022
+ <div class="api_feature">
2023
+ <span>Feature: <a title="pyatv.const.FeatureName.Suspend" href="/api/const#pyatv.const.FeatureName.Suspend">FeatureName.Suspend</a>,</span>
2024
+ <span>Supported by: <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
2025
+ </div>
2026
+ <section class="desc"><p>Suspend the device.</p>
2027
+ <p><strong>DEPRECATED: Use <code><a title="pyatv.interface.Power.turn_off" href="#pyatv.interface.Power.turn_off">Power.turn_off()</a></code> instead.</strong></p></section>
2028
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L389-L395" class="git-link">Browse git</a></div>
2029
+ </dd>
2030
+ <dt id="pyatv.interface.RemoteControl.top_menu">
2031
+ <code class="name flex">
2032
+ <span>async def <span class="ident">top_menu</span></span>(<span>self) -> None</span>
2033
+ </code>
2034
+ </dt>
2035
+ <dd>
2036
+ <div class="api_feature">
2037
+ <span>Feature: <a title="pyatv.const.FeatureName.TopMenu" href="/api/const#pyatv.const.FeatureName.TopMenu">FeatureName.TopMenu</a>,</span>
2038
+ <span>Supported by: <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
2039
+ </div>
2040
+ <section class="desc"><p>Go to main menu (long press menu).</p></section>
2041
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L384-L387" class="git-link">Browse git</a></div>
2042
+ </dd>
2043
+ <dt id="pyatv.interface.RemoteControl.up">
2044
+ <code class="name flex">
2045
+ <span>async def <span class="ident">up</span></span>(<span>self, action: <a title="pyatv.const.InputAction" href="../const#pyatv.const.InputAction">InputAction</a> = InputAction.SingleTap) -> None</span>
2046
+ </code>
2047
+ </dt>
2048
+ <dd>
2049
+ <div class="api_feature">
2050
+ <span>Feature: <a title="pyatv.const.FeatureName.Up" href="/api/const#pyatv.const.FeatureName.Up">FeatureName.Up</a>,</span>
2051
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
2052
+ </div>
2053
+ <section class="desc"><p>Press key up.</p></section>
2054
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L296-L299" class="git-link">Browse git</a></div>
2055
+ </dd>
2056
+ <dt id="pyatv.interface.RemoteControl.volume_down">
2057
+ <code class="name flex">
2058
+ <span>async def <span class="ident">volume_down</span></span>(<span>self) -> None</span>
2059
+ </code>
2060
+ </dt>
2061
+ <dd>
2062
+ <div class="api_feature">
2063
+ <span>Feature: <a title="pyatv.const.FeatureName.VolumeDown" href="/api/const#pyatv.const.FeatureName.VolumeDown">FeatureName.VolumeDown</a>,</span>
2064
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a>, <a title="pyatv.const.Protocol.RAOP" href="/api/const#pyatv.const.Protocol.RAOP">Protocol.RAOP</a></span>
2065
+ </div>
2066
+ <section class="desc"><p>Press key volume down.</p>
2067
+ <p><strong>DEPRECATED: Use <code><a title="pyatv.interface.Audio.volume_down" href="#pyatv.interface.Audio.volume_down">Audio.volume_down()</a></code> instead.</strong></p></section>
2068
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L364-L370" class="git-link">Browse git</a></div>
2069
+ </dd>
2070
+ <dt id="pyatv.interface.RemoteControl.volume_up">
2071
+ <code class="name flex">
2072
+ <span>async def <span class="ident">volume_up</span></span>(<span>self) -> None</span>
2073
+ </code>
2074
+ </dt>
2075
+ <dd>
2076
+ <div class="api_feature">
2077
+ <span>Feature: <a title="pyatv.const.FeatureName.VolumeUp" href="/api/const#pyatv.const.FeatureName.VolumeUp">FeatureName.VolumeUp</a>,</span>
2078
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a>, <a title="pyatv.const.Protocol.DMAP" href="/api/const#pyatv.const.Protocol.DMAP">Protocol.DMAP</a>, <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a>, <a title="pyatv.const.Protocol.RAOP" href="/api/const#pyatv.const.Protocol.RAOP">Protocol.RAOP</a></span>
2079
+ </div>
2080
+ <section class="desc"><p>Press key volume up.</p>
2081
+ <p><strong>DEPRECATED: Use <code><a title="pyatv.interface.Audio.volume_up" href="#pyatv.interface.Audio.volume_up">Audio.volume_up()</a></code> instead.</strong></p></section>
2082
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L356-L362" class="git-link">Browse git</a></div>
2083
+ </dd>
2084
+ <dt id="pyatv.interface.RemoteControl.wakeup">
2085
+ <code class="name flex">
2086
+ <span>async def <span class="ident">wakeup</span></span>(<span>self) -> None</span>
2087
+ </code>
2088
+ </dt>
2089
+ <dd>
2090
+ <div class="api_feature">
2091
+ <span>Feature: <a title="pyatv.const.FeatureName.WakeUp" href="/api/const#pyatv.const.FeatureName.WakeUp">FeatureName.WakeUp</a>,</span>
2092
+ <span>Supported by: <a title="pyatv.const.Protocol.MRP" href="/api/const#pyatv.const.Protocol.MRP">Protocol.MRP</a></span>
2093
+ </div>
2094
+ <section class="desc"><p>Wake up the device.</p>
2095
+ <p><strong>DEPRECATED: Use <code><a title="pyatv.interface.Power.turn_on" href="#pyatv.interface.Power.turn_on">Power.turn_on()</a></code> instead.</strong></p></section>
2096
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L397-L403" class="git-link">Browse git</a></div>
2097
+ </dd>
2098
+ </dl>
2099
+ </dd>
2100
+ <dt id="pyatv.interface.Storage"><code class="flex name class">
2101
+ <span>class <span class="ident">Storage</span></span>
2102
+ </code></dt>
2103
+ <dd>
2104
+ <section class="desc"><p>Base class for storage modules.</p></section>
2105
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1457-L1498" class="git-link">Browse git</a></div>
2106
+ <h3>Ancestors</h3>
2107
+ <ul class="hlist">
2108
+ <li>abc.ABC</li>
2109
+ </ul>
2110
+ <h3>Subclasses</h3>
2111
+ <ul class="hlist">
2112
+ <li><a title="pyatv.storage.AbstractStorage" href="../storage/#pyatv.storage.AbstractStorage">AbstractStorage</a></li>
2113
+ </ul>
2114
+ <h3>Instance variables</h3>
2115
+ <dl>
2116
+ <dt id="pyatv.interface.Storage.settings"><code class="name">var <span class="ident">settings</span> -> Sequence[<a title="pyatv.settings.Settings" href="../settings#pyatv.settings.Settings">Settings</a>]</code></dt>
2117
+ <dd>
2118
+ <section class="desc"><p>Return settings for all devices.</p></section>
2119
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1460-L1463" class="git-link">Browse git</a></div>
2120
+ </dd>
2121
+ </dl>
2122
+ <h3>Methods</h3>
2123
+ <dl>
2124
+ <dt id="pyatv.interface.Storage.get_settings">
2125
+ <code class="name flex">
2126
+ <span>async def <span class="ident">get_settings</span></span>(<span>self, config: <a title="pyatv.interface.BaseConfig" href="#pyatv.interface.BaseConfig">BaseConfig</a>) -> <a title="pyatv.settings.Settings" href="../settings#pyatv.settings.Settings">Settings</a></span>
2127
+ </code>
2128
+ </dt>
2129
+ <dd>
2130
+ <section class="desc"><p>Return settings for a specific configuration (device).</p>
2131
+ <p>The returned Settings object is a reference to an object in the storage module.
2132
+ Changes made can/will be written back to the storage in case "save" is called.</p>
2133
+ <p>If no settings exists for the current configuration, new settings are created
2134
+ automatically and returned. If the configuration does not contain any valid
2135
+ identitiers, DeviceIdMissingError will be raised.</p></section>
2136
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1473-L1483" class="git-link">Browse git</a></div>
2137
+ </dd>
2138
+ <dt id="pyatv.interface.Storage.load">
2139
+ <code class="name flex">
2140
+ <span>async def <span class="ident">load</span></span>(<span>self) -> None</span>
2141
+ </code>
2142
+ </dt>
2143
+ <dd>
2144
+ <section class="desc"><p>Load settings from active storage.</p></section>
2145
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1469-L1471" class="git-link">Browse git</a></div>
2146
+ </dd>
2147
+ <dt id="pyatv.interface.Storage.remove_settings">
2148
+ <code class="name flex">
2149
+ <span>async def <span class="ident">remove_settings</span></span>(<span>self, settings: <a title="pyatv.settings.Settings" href="../settings#pyatv.settings.Settings">Settings</a>) -> bool</span>
2150
+ </code>
2151
+ </dt>
2152
+ <dd>
2153
+ <section class="desc"><p>Remove settings from storage.</p>
2154
+ <p>Returns True if settings were removed, otherwise False.</p></section>
2155
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1485-L1490" class="git-link">Browse git</a></div>
2156
+ </dd>
2157
+ <dt id="pyatv.interface.Storage.save">
2158
+ <code class="name flex">
2159
+ <span>async def <span class="ident">save</span></span>(<span>self) -> None</span>
2160
+ </code>
2161
+ </dt>
2162
+ <dd>
2163
+ <section class="desc"><p>Save settings to active storage.</p></section>
2164
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1465-L1467" class="git-link">Browse git</a></div>
2165
+ </dd>
2166
+ <dt id="pyatv.interface.Storage.update_settings">
2167
+ <code class="name flex">
2168
+ <span>async def <span class="ident">update_settings</span></span>(<span>self, config: <a title="pyatv.interface.BaseConfig" href="#pyatv.interface.BaseConfig">BaseConfig</a>) -> None</span>
2169
+ </code>
2170
+ </dt>
2171
+ <dd>
2172
+ <section class="desc"><p>Update settings based on config.</p>
2173
+ <p>This method extracts settings from a configuration and writes them back to
2174
+ the storage.</p></section>
2175
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1492-L1498" class="git-link">Browse git</a></div>
2176
+ </dd>
2177
+ </dl>
2178
+ </dd>
2179
+ <dt id="pyatv.interface.Stream"><code class="flex name class">
2180
+ <span>class <span class="ident">Stream</span></span>
2181
+ </code></dt>
2182
+ <dd>
2183
+ <section class="desc"><p>Base class for stream functionality.</p></section>
2184
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L864-L891" class="git-link">Browse git</a></div>
2185
+ <h3>Subclasses</h3>
2186
+ <ul class="hlist">
2187
+ <li>pyatv.core.facade.FacadeStream</li>
2188
+ <li>pyatv.protocols.airplay.AirPlayStream</li>
2189
+ <li>pyatv.protocols.raop.RaopStream</li>
2190
+ </ul>
2191
+ <h3>Methods</h3>
2192
+ <dl>
2193
+ <dt id="pyatv.interface.Stream.close">
2194
+ <code class="name flex">
2195
+ <span>def <span class="ident">close</span></span>(<span>self) -> None</span>
2196
+ </code>
2197
+ </dt>
2198
+ <dd>
2199
+ <section class="desc"><p>Close connection and release allocated resources.</p></section>
2200
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L867-L869" class="git-link">Browse git</a></div>
2201
+ </dd>
2202
+ <dt id="pyatv.interface.Stream.play_url">
2203
+ <code class="name flex">
2204
+ <span>async def <span class="ident">play_url</span></span>(<span>self, url: str, **kwargs) -> None</span>
2205
+ </code>
2206
+ </dt>
2207
+ <dd>
2208
+ <div class="api_feature">
2209
+ <span>Feature: <a title="pyatv.const.FeatureName.PlayUrl" href="/api/const#pyatv.const.FeatureName.PlayUrl">FeatureName.PlayUrl</a>,</span>
2210
+ <span>Supported by: <a title="pyatv.const.Protocol.AirPlay" href="/api/const#pyatv.const.Protocol.AirPlay">Protocol.AirPlay</a></span>
2211
+ </div>
2212
+ <section class="desc"><p>Play media from an URL on the device.</p></section>
2213
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L871-L874" class="git-link">Browse git</a></div>
2214
+ </dd>
2215
+ <dt id="pyatv.interface.Stream.stream_file">
2216
+ <code class="name flex">
2217
+ <span>async def <span class="ident">stream_file</span></span>(<span>self, file: str | io.BufferedIOBase | asyncio.streams.StreamReader, /, metadata: <a title="pyatv.interface.MediaMetadata" href="#pyatv.interface.MediaMetadata">MediaMetadata</a> | None = None, override_missing_metadata: bool = False, **kwargs) -> None</span>
2218
+ </code>
2219
+ </dt>
2220
+ <dd>
2221
+ <div class="api_feature">
2222
+ <span>Feature: <a title="pyatv.const.FeatureName.StreamFile" href="/api/const#pyatv.const.FeatureName.StreamFile">FeatureName.StreamFile</a>,</span>
2223
+ <span>Supported by: <a title="pyatv.const.Protocol.RAOP" href="/api/const#pyatv.const.Protocol.RAOP">Protocol.RAOP</a></span>
2224
+ </div>
2225
+ <section class="desc"><p>Stream local or remote file to device.</p>
2226
+ <p>Supports either local file paths or a HTTP(s) address.</p>
2227
+ <p>INCUBATING METHOD - MIGHT CHANGE IN THE FUTURE!</p></section>
2228
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L876-L891" class="git-link">Browse git</a></div>
2229
+ </dd>
2230
+ </dl>
2231
+ </dd>
2232
+ <dt id="pyatv.interface.TouchGestures"><code class="flex name class">
2233
+ <span>class <span class="ident">TouchGestures</span></span>
2234
+ </code></dt>
2235
+ <dd>
2236
+ <section class="desc"><p>Base class for touch gestures.</p></section>
2237
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1268-L1304" class="git-link">Browse git</a></div>
2238
+ <h3>Ancestors</h3>
2239
+ <ul class="hlist">
2240
+ <li>abc.ABC</li>
2241
+ </ul>
2242
+ <h3>Subclasses</h3>
2243
+ <ul class="hlist">
2244
+ <li>pyatv.core.facade.FacadeTouchGestures</li>
2245
+ <li>pyatv.protocols.companion.CompanionTouchGestures</li>
2246
+ </ul>
2247
+ <h3>Methods</h3>
2248
+ <dl>
2249
+ <dt id="pyatv.interface.TouchGestures.action">
2250
+ <code class="name flex">
2251
+ <span>async def <span class="ident">action</span></span>(<span>self, x: int, y: int, mode: <a title="pyatv.const.TouchAction" href="../const#pyatv.const.TouchAction">TouchAction</a>) -> None</span>
2252
+ </code>
2253
+ </dt>
2254
+ <dd>
2255
+ <div class="api_feature">
2256
+ <span>Feature: <a title="pyatv.const.FeatureName.TouchAction" href="/api/const#pyatv.const.FeatureName.TouchAction">FeatureName.TouchAction</a>,</span>
2257
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
2258
+ </div>
2259
+ <section class="desc"><p>Generate a touch event to x,y coordinates (in range [0,1000]).</p>
2260
+ <p>:param x: x coordinate
2261
+ :param y: y coordinate
2262
+ :param mode: touch mode (1: press, 3: hold, 4: release)</p></section>
2263
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1288-L1296" class="git-link">Browse git</a></div>
2264
+ </dd>
2265
+ <dt id="pyatv.interface.TouchGestures.click">
2266
+ <code class="name flex">
2267
+ <span>async def <span class="ident">click</span></span>(<span>self, action: <a title="pyatv.const.InputAction" href="../const#pyatv.const.InputAction">InputAction</a>)</span>
2268
+ </code>
2269
+ </dt>
2270
+ <dd>
2271
+ <div class="api_feature">
2272
+ <span>Feature: <a title="pyatv.const.FeatureName.TouchClick" href="/api/const#pyatv.const.FeatureName.TouchClick">FeatureName.TouchClick</a>,</span>
2273
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
2274
+ </div>
2275
+ <section class="desc"><p>Send a touch click.</p>
2276
+ <p>:param action: action mode single tap (0), double tap (1), or hold (2)</p></section>
2277
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1298-L1304" class="git-link">Browse git</a></div>
2278
+ </dd>
2279
+ <dt id="pyatv.interface.TouchGestures.swipe">
2280
+ <code class="name flex">
2281
+ <span>async def <span class="ident">swipe</span></span>(<span>self, start_x: int, start_y: int, end_x: int, end_y: int, duration_ms: int) -> None</span>
2282
+ </code>
2283
+ </dt>
2284
+ <dd>
2285
+ <div class="api_feature">
2286
+ <span>Feature: <a title="pyatv.const.FeatureName.Swipe" href="/api/const#pyatv.const.FeatureName.Swipe">FeatureName.Swipe</a>,</span>
2287
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
2288
+ </div>
2289
+ <section class="desc"><p>Generate a swipe gesture.</p>
2290
+ <p>From start to end x,y coordinates (in range [0,1000])
2291
+ in a given time (in milliseconds).</p>
2292
+ <p>:param start_x: Start x coordinate
2293
+ :param start_y: Start y coordinate
2294
+ :param end_x: End x coordinate
2295
+ :param end_y: Endi x coordinate
2296
+ :param duration_ms: Time in milliseconds to reach the end coordinates</p></section>
2297
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L1271-L1286" class="git-link">Browse git</a></div>
2298
+ </dd>
2299
+ </dl>
2300
+ </dd>
2301
+ <dt id="pyatv.interface.UserAccount"><code class="flex name class">
2302
+ <span>class <span class="ident">UserAccount</span></span>
2303
+ <span>(</span><span>name: str, identifier: str)</span>
2304
+ </code></dt>
2305
+ <dd>
2306
+ <section class="desc"><p>Information about a user account.</p>
2307
+ <p>Initialize a new UserAccount instance.</p></section>
2308
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L736-L762" class="git-link">Browse git</a></div>
2309
+ <h3>Instance variables</h3>
2310
+ <dl>
2311
+ <dt id="pyatv.interface.UserAccount.identifier"><code class="name">var <span class="ident">identifier</span> -> str</code></dt>
2312
+ <dd>
2313
+ <section class="desc"><p>Return a unique id for the account.</p></section>
2314
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L749-L752" class="git-link">Browse git</a></div>
2315
+ </dd>
2316
+ <dt id="pyatv.interface.UserAccount.name"><code class="name">var <span class="ident">name</span> -> str | None</code></dt>
2317
+ <dd>
2318
+ <section class="desc"><p>User name.</p></section>
2319
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L744-L747" class="git-link">Browse git</a></div>
2320
+ </dd>
2321
+ </dl>
2322
+ </dd>
2323
+ <dt id="pyatv.interface.UserAccounts"><code class="flex name class">
2324
+ <span>class <span class="ident">UserAccounts</span></span>
2325
+ </code></dt>
2326
+ <dd>
2327
+ <section class="desc"><p>Base class for account handling.</p></section>
2328
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L765-L776" class="git-link">Browse git</a></div>
2329
+ <h3>Subclasses</h3>
2330
+ <ul class="hlist">
2331
+ <li>pyatv.core.facade.FacadeUserAccounts</li>
2332
+ <li>pyatv.protocols.companion.CompanionUserAccounts</li>
2333
+ </ul>
2334
+ <h3>Methods</h3>
2335
+ <dl>
2336
+ <dt id="pyatv.interface.UserAccounts.account_list">
2337
+ <code class="name flex">
2338
+ <span>async def <span class="ident">account_list</span></span>(<span>self) -> List[<a title="pyatv.interface.UserAccount" href="#pyatv.interface.UserAccount">UserAccount</a>]</span>
2339
+ </code>
2340
+ </dt>
2341
+ <dd>
2342
+ <div class="api_feature">
2343
+ <span>Feature: <a title="pyatv.const.FeatureName.AccountList" href="/api/const#pyatv.const.FeatureName.AccountList">FeatureName.AccountList</a>,</span>
2344
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
2345
+ </div>
2346
+ <section class="desc"><p>Fetch a list of user accounts that can be switched.</p></section>
2347
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L768-L771" class="git-link">Browse git</a></div>
2348
+ </dd>
2349
+ <dt id="pyatv.interface.UserAccounts.switch_account">
2350
+ <code class="name flex">
2351
+ <span>async def <span class="ident">switch_account</span></span>(<span>self, account_id: str) -> None</span>
2352
+ </code>
2353
+ </dt>
2354
+ <dd>
2355
+ <div class="api_feature">
2356
+ <span>Feature: <a title="pyatv.const.FeatureName.SwitchAccount" href="/api/const#pyatv.const.FeatureName.SwitchAccount">FeatureName.SwitchAccount</a>,</span>
2357
+ <span>Supported by: <a title="pyatv.const.Protocol.Companion" href="/api/const#pyatv.const.Protocol.Companion">Protocol.Companion</a></span>
2358
+ </div>
2359
+ <section class="desc"><p>Switch user account by account ID.</p></section>
2360
+ <div class="git-link-div"><a href="https://github.com/postlund/pyatv/blob/master/pyatv/interface.py#L773-L776" class="git-link">Browse git</a></div>
2361
+ </dd>
2362
+ </dl>
2363
+ </dd>
2364
+ </dl>
2365
+ </section>
2366
+ </article>
2367
+ <footer id="footer">
2368
+ <p>Generated by <a href="https://pdoc3.github.io/pdoc"><cite>pdoc</cite>.</p>
2369
+ </footer>