@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,3708 @@
1
+ # CHANGES
2
+
3
+ ## 0.16.1 Uter (2025-07-12)
4
+
5
+ Hey-ho, minor release (finally) that should fix:
6
+
7
+ * Connection issues with tvOS 18.4+
8
+ * Warnings related to protobuf
9
+
10
+ **Changes:**
11
+
12
+ *Protocol: AirPlay:*
13
+
14
+ ```
15
+ e27164ba airplay: Add setting for MRP tunnel
16
+ ```
17
+
18
+ *Protocol: Companion:*
19
+
20
+ ```
21
+ 607c5e0c companion: Use static id for _i in _systemInfo
22
+ ```
23
+
24
+ *Other:*
25
+
26
+ ```
27
+ 5b1ec5d7 deps: Bump protbuf generated messages
28
+ f75e718b deps: Bump protobuf to 30.2
29
+ d711126e deps: Set cryptography 44.0.1 as base version
30
+ 9c221d18 cq: Fix issues with new black
31
+ 2e20e41b cq: Fix some spelling issues
32
+ 93707a9d favor companion protocol for power state
33
+ cc615074 Fix typo, expand acronym at first use
34
+ ```
35
+
36
+ **All changes:**
37
+
38
+ ```
39
+ 6f1a6bd0 build(deps): Bump pytest from 8.3.5 to 8.4.1 in /requirements
40
+ f532a9e3 build(deps): Bump cryptography from 45.0.4 to 45.0.5 in /requirements
41
+ 4d93611a build(deps): Bump pytest-cov from 6.1.1 to 6.2.1 in /requirements
42
+ 4b65ed9a build(deps): Bump flake8 from 7.2.0 to 7.3.0 in /requirements
43
+ bca12f6b build(deps): Bump mypy from 1.15.0 to 1.16.1 in /requirements
44
+ c4fa39fa build(deps): Bump types-requests in /requirements
45
+ 607c5e0c companion: Use static id for _i in _systemInfo
46
+ 16285cf9 build(deps): Bump protobuf from 6.31.0 to 6.31.1 in /base_versions.txt
47
+ 5b1ec5d7 deps: Bump protbuf generated messages
48
+ 4b0a53a7 build(deps): Bump types-protobuf in /requirements
49
+ b1f6f0c1 build(deps): Bump pytest-xdist from 3.6.1 to 3.8.0 in /requirements
50
+ 80f4f330 build(deps): Bump pyfakefs from 5.8.0 to 5.9.1 in /requirements
51
+ 20af0ebc build(deps): Bump deepdiff from 8.4.2 to 8.5.0 in /requirements
52
+ 49f9c9e9 build(deps): Bump tinytag from 2.1.0 to 2.1.1 in /requirements
53
+ 620adf37 build(deps): Bump aiohttp from 3.11.16 to 3.12.13 in /requirements
54
+ b42625f3 build(deps): Bump pydantic from 2.11.3 to 2.11.7 in /requirements
55
+ ef5c1050 build(deps): Bump pylint from 3.3.6 to 3.3.7 in /requirements
56
+ 8fdb6f49 build(deps): Bump zeroconf from 0.146.3 to 0.147.0 in /requirements
57
+ 2bacfd29 build(deps): Bump pytest-httpserver from 1.1.2 to 1.1.3 in /requirements
58
+ 99c53cd8 build(deps): Bump pytest-timeout from 2.3.1 to 2.4.0 in /requirements
59
+ 1aa3e48a build(deps): Bump cryptography from 44.0.2 to 45.0.4 in /requirements
60
+ 7bfb6f8f build(deps): Bump requests from 2.32.3 to 2.32.4 in /requirements
61
+ bd95e619 build(deps): Bump python from 3.13.2-alpine to 3.13.5-alpine
62
+ 6d802da9 build(deps): Bump protobuf from 6.30.2 to 6.31.1 in /requirements
63
+ 2fbdbd44 build(deps): Bump types-requests in /requirements
64
+ b39f231b build(deps): Bump deepdiff from 8.2.0 to 8.4.2 in /requirements
65
+ d0d82782 build(deps): Bump pdoc3 from 0.11.5 to 0.11.6 in /requirements
66
+ 2b26c678 build(deps): Bump pyfakefs from 5.7.4 to 5.8.0 in /requirements
67
+ 41cae432 build(deps): Bump pylint from 3.3.4 to 3.3.6 in /requirements
68
+ e47a83d1 build(deps): Bump pytest-cov from 6.0.0 to 6.1.1 in /requirements
69
+ 505f326b build(deps): Bump aiohttp from 3.11.13 to 3.11.16 in /requirements
70
+ 817f4a06 build(deps): Bump pydantic from 2.10.6 to 2.11.3 in /requirements
71
+ a0e23125 build(deps): Bump pytest-asyncio from 0.25.3 to 0.26.0 in /requirements
72
+ d5db5541 build(deps): Bump types-protobuf in /requirements
73
+ 788302e4 build(deps): Bump flake8 from 7.1.2 to 7.2.0 in /requirements
74
+ cf96948b build(deps): Bump zeroconf from 0.145.1 to 0.146.3 in /requirements
75
+ f75e718b deps: Bump protobuf to 30.2
76
+ a6cb277e build(deps): Bump pytest-asyncio from 0.24.0 to 0.25.3 in /requirements
77
+ 8d0789be build(deps): Bump mypy from 1.13.0 to 1.15.0 in /requirements
78
+ ab395235 build(deps): Bump types-requests in /requirements
79
+ 3c3f03c8 build(deps): Bump pytest-httpserver from 1.1.0 to 1.1.2 in /requirements
80
+ fb13d6aa build(deps): Bump pytest from 8.3.4 to 8.3.5 in /requirements
81
+ 1ef9b792 build(deps): Bump cryptography from 44.0.1 to 44.0.2 in /requirements
82
+ e27164ba airplay: Add setting for MRP tunnel
83
+ d711126e deps: Set cryptography 44.0.1 as base version
84
+ 9c221d18 cq: Fix issues with new black
85
+ 1a23ed27 build(deps): Bump black from 24.10.0 to 25.1.0 in /requirements
86
+ 593da8a3 build(deps): Bump zeroconf from 0.144.1 to 0.145.1 in /requirements
87
+ 487904d5 build(deps): Bump aiohttp from 3.11.12 to 3.11.13 in /requirements
88
+ 2e20e41b cq: Fix some spelling issues
89
+ ecb66554 build(deps): Bump codespell from 2.3.0 to 2.4.1 in /requirements
90
+ 93707a9d favor companion protocol for power state
91
+ d65d9250 build(deps): Bump types-tabulate in /requirements
92
+ 0d4fdc9c build(deps): Bump tinytag from 2.0.0 to 2.1.0 in /requirements
93
+ 0bdcb33e build(deps): Bump deepdiff from 8.0.1 to 8.2.0 in /requirements
94
+ b6127538 build(deps): Bump types-protobuf in /requirements
95
+ 851fb466 build(deps): Bump isort from 5.13.2 to 6.0.1 in /requirements
96
+ b2d8519c build(deps): Bump flake8 from 7.1.1 to 7.1.2 in /requirements
97
+ 742c87b5 build(deps): Bump pyfakefs from 5.7.1 to 5.7.4 in /requirements
98
+ ec1f17e9 build(deps): Bump python from 3.13.0-alpine to 3.13.2-alpine
99
+ a16feaab build(deps): Bump cryptography from 43.0.3 to 44.0.1 in /requirements
100
+ cc615074 Fix typo, expand acronym at first use
101
+ 35abdb2c build(deps): Bump pdoc3 from 0.11.1 to 0.11.5 in /requirements
102
+ 3e9e15f1 build(deps): Bump pydantic from 2.9.2 to 2.10.6 in /requirements
103
+ 245bd900 build(deps): Bump pytest from 8.3.3 to 8.3.4 in /requirements
104
+ 74dda728 build(deps): Bump async-timeout from 4.0.3 to 5.0.1 in /requirements
105
+ 3edf6b15 build(deps): Bump protobuf from 5.28.3 to 5.29.3 in /requirements
106
+ b5e2fa84 build(deps): Bump pylint from 3.3.1 to 3.3.4 in /requirements
107
+ c1391200 build(deps): Bump aiohttp from 3.10.10 to 3.11.12 in /requirements
108
+ 2ebb4b0a build(deps): Bump zeroconf from 0.136.0 to 0.144.1 in /requirements
109
+ 49bd01d3 build(deps): Bump types-protobuf in /requirements
110
+ ```
111
+
112
+ ## 0.16.0 Troy (2024-11-03)
113
+
114
+ Okie-dokie, let's do this. Due to Python 3.13 removing some deprecated
115
+ modules, you might have encountered an import error related to
116
+ `imghdr`. This module is not used directly by pyatv, but rather
117
+ indirectly via the `mediafile` library. As `mediafile` is not
118
+ maintained much these days, I decided to replace it with `tinytag`
119
+ instead. I have also added python 3.13 as an offically supported
120
+ version.
121
+
122
+ Another somewhat related change is that Python 3.8 is no longer
123
+ supported. It is end-of-life and some of my dependencies are
124
+ dropping support for it, so it's hard to maintain. Good bye,
125
+ old friend!
126
+
127
+ There are some new stuff as well:
128
+
129
+ * It is possible specify filename with `artwork_save` in `atvremote` (@AVITPL)
130
+ * Input actions are now fully supported in Companion (@dmrgn1991)
131
+ * iTunes Store Identifier is now exposed when available (@JarekToro)
132
+
133
+ There are a few minor bug fixes and clean up of warnings as well.
134
+ Everything is stated below.
135
+
136
+ **Changes:**
137
+
138
+ *Other:*
139
+
140
+ ```
141
+ b310213b deps: Remove mediafile as dependency
142
+ f6bc9d9f gha: Update upload-artifact to v4
143
+ 4a193b67 core: Update device info
144
+ 658fd062 cq: Minor updates
145
+ 1be71809 deps: Support python 3.13
146
+ 41e58d53 deps: Bump base requests to 2.30.0
147
+ e73da542 deps: Deprecate python 3.8
148
+ cb2b050a Artwork_save file naming.
149
+ 8a79abaf Update test_companion_functional.py
150
+ 1569eae0 Update setup_dev_env.sh
151
+ 19be4cc4 Add Input.Action to Companion
152
+ b859a99d opack: fix byte encoding length
153
+ 5f0515ec feat: Add iTunes Store Identifier to metadata - Added `iTunesStoreIdentifier` to `FeatureName` in `pyatv/const.py`. - Updated `Playing` class in `pyatv/interface.py` to include `itunes_store_identifier`. - Enhanced the `metadata_field` function in `pyatv/protocols/mrp/__init__.py` to support `itunes_store_identifier`. - Adjusted fake device implementation in `tests/fake_device/mrp.py` to handle `itunes_store_identifier`. - Updated functional tests in `tests/protocols/mrp/test_mrp_functional.py` to verify `itunes_store_identifier`. - Modified documentation to include `itunes_store_identifier`.
154
+ 41cab90f Fix atvremote action enum
155
+ e0772353 support: Remove use of mediafile
156
+ 225ef6d7 cq: Fix lots of warnings in tests
157
+ e330162a cq: Re-generate protobuf messages
158
+ ce104f16 support: Migrate from mediafile to tinytag
159
+ 27aaabb9 support: Add tests for metadata decoding
160
+ a613c292 bump protobuf to 5.28.0 in base_versions.txt
161
+ 505a7820 regenerate protobuf bindings
162
+ ```
163
+
164
+ **All changes:**
165
+
166
+ ```
167
+ db2c5d3d build(deps): Bump pyfakefs from 5.6.0 to 5.7.1 in /requirements
168
+ ae648e86 build(deps): Bump protobuf from 5.28.1 to 5.28.3 in /requirements
169
+ b310213b deps: Remove mediafile as dependency
170
+ e7e3989a build(deps): Bump pytest-cov from 5.0.0 to 6.0.0 in /requirements
171
+ f6bc9d9f gha: Update upload-artifact to v4
172
+ 70617a01 build(deps): Bump tinytag from 1.10.1 to 2.0.0 in /requirements
173
+ 44fc3055 build(deps): Bump pydantic from 2.8.2 to 2.9.2 in /requirements
174
+ 6e62ceae build(deps): Bump black from 24.8.0 to 24.10.0 in /requirements
175
+ 4a193b67 core: Update device info
176
+ 658fd062 cq: Minor updates
177
+ 1be71809 deps: Support python 3.13
178
+ 41e58d53 deps: Bump base requests to 2.30.0
179
+ d9ff8524 build(deps): Bump types-requests in /requirements
180
+ d25ef2b7 build(deps): Bump pdoc3 from 0.11.0 to 0.11.1 in /requirements
181
+ e73da542 deps: Deprecate python 3.8
182
+ cb2b050a Artwork_save file naming.
183
+ 8a79abaf Update test_companion_functional.py
184
+ 1569eae0 Update setup_dev_env.sh
185
+ 19be4cc4 Add Input.Action to Companion
186
+ b859a99d opack: fix byte encoding length
187
+ d34718fc build(deps): Bump pytest from 8.3.2 to 8.3.3 in /requirements
188
+ 5f0515ec feat: Add iTunes Store Identifier to metadata - Added `iTunesStoreIdentifier` to `FeatureName` in `pyatv/const.py`. - Updated `Playing` class in `pyatv/interface.py` to include `itunes_store_identifier`. - Enhanced the `metadata_field` function in `pyatv/protocols/mrp/__init__.py` to support `itunes_store_identifier`. - Adjusted fake device implementation in `tests/fake_device/mrp.py` to handle `itunes_store_identifier`. - Updated functional tests in `tests/protocols/mrp/test_mrp_functional.py` to verify `itunes_store_identifier`. - Modified documentation to include `itunes_store_identifier`.
189
+ 0f354031 build(deps): Bump actions/download-artifact in /.github/workflows
190
+ 41cab90f Fix atvremote action enum
191
+ e0772353 support: Remove use of mediafile
192
+ 225ef6d7 cq: Fix lots of warnings in tests
193
+ e330162a cq: Re-generate protobuf messages
194
+ ce104f16 support: Migrate from mediafile to tinytag
195
+ 27aaabb9 support: Add tests for metadata decoding
196
+ d3ad45d5 build(deps): Bump cryptography from 43.0.0 to 43.0.3 in /requirements
197
+ c7b9750b build(deps): Bump python from 3.12.5-alpine to 3.13.0-alpine
198
+ e3c73f60 build(deps): Bump pytest-asyncio from 0.23.8 to 0.24.0 in /requirements
199
+ e3dd9dc6 build(deps): Bump deepdiff from 7.0.1 to 8.0.1 in /requirements
200
+ 2d41eb10 build(deps): Bump aiohttp from 3.10.3 to 3.10.10 in /requirements
201
+ cfca954a build(deps): Bump mypy from 1.11.1 to 1.13.0 in /requirements
202
+ 26d77125 build(deps): Bump zeroconf from 0.132.2 to 0.136.0 in /requirements
203
+ a613c292 bump protobuf to 5.28.0 in base_versions.txt
204
+ 505a7820 regenerate protobuf bindings
205
+ 7d7f26d0 build(deps): Bump aiohttp from 3.10.2 to 3.10.3 in /requirements
206
+ 5980d02a build(deps): Bump protobuf from 5.27.3 to 5.28.1 in /requirements
207
+ ```
208
+
209
+ ## 0.15.1 Seymour (2024-09-06)
210
+
211
+ Audio streaming stopped working in the previous version and is fixed in this
212
+ version. It also includes a fix to sequence number handling for outgoing
213
+ messages, potentially improving audio streaming to AirPlay receivers from
214
+ third party vendors (not tested however).
215
+
216
+ **Changes:**
217
+
218
+ *Protocol: RAOP:*
219
+
220
+ ```
221
+ 8a8d176f raop: Fix broken audio streaming
222
+ ```
223
+
224
+ **All changes:**
225
+
226
+ ```
227
+ 8a8d176f raop: Fix broken audio streaming
228
+ 2cbaf5f5 build(deps): Bump pytest-httpserver in /requirements
229
+ ```
230
+
231
+ ## 0.15.0 Ralph (2024-08-10)
232
+
233
+ It has been a long time since the last release (christmas!), so a it's really
234
+ due for a new one. I have mostly been busy with other (personal) stuff, so I
235
+ have not done much more than maintenance. There are a few changes from the
236
+ community though.
237
+
238
+ Some hightlights:
239
+
240
+ * Uplift of various dependencies, e.g, fix breaking change in cryptography
241
+ * It is possible to skip forward/backwards (Companion) with custom intervals,
242
+ thanks @thiccaxe!
243
+ * @bdraco fixed a bug related to changes in chacha20poly1305-reuseable
244
+ * Python 3.12 is now (finally) offically supported
245
+
246
+ This is a minor update indeed. I hope to see some updates in the near future,
247
+ especially related to tvOS 18 compatibility as well as new features. I am very
248
+ grateful for any help from the community. So if you want to help out
249
+ implementing anything, please send a PR and I'll try my best to find time to
250
+ review it!
251
+
252
+ **Changes:**
253
+
254
+ *Other:*
255
+
256
+ ```
257
+ 7716858a fix styling for 2462
258
+ 41b039f9 precise skip in companion, mrp, dmap
259
+ 618e93a4 companion skip implementation
260
+ 8331c783 deps: Bump protobuf base version to 4.25.3
261
+ 2a8afa68 deps: Sync some versions with base versions
262
+ 9f2f7cd3 Added touch gesture to companion protocol (#2402)
263
+ 55f3455e deps: Bump some lowest deps versions
264
+ 31b57b27 cq: Fix pylint issues
265
+ 42ff35ab docs: Fix codespell issues
266
+ ea9d3339 Fix Chacha20Cipher with companion
267
+ a84774c1 test: Improve MRP volume tests
268
+ 8080aaae test: Improve dispatch test
269
+ aad6bcd7 test: Improve aiothttp session closing
270
+ ed20bf72 Bump setup-python to v5
271
+ 1b780d46 gha: Bump setup-python tp v4
272
+ 541ba00d Update tests.yml
273
+ ec402a68 gha: Run tests with python 3.12
274
+ 1037d5ef dep: Bump chacha20poly1305-reuseable and cryptography
275
+ 1fc1cb0f cq: Run black to fix errors
276
+ 5c721409 gha: Remove automerge workflow
277
+ 90b23cc4 Update index.md
278
+ 7fdfa28a still need to pad for hap
279
+ 29ad6fc0 still need to pad for hap
280
+ e817af09 still need to pad for hap
281
+ 0c1f6674 lint
282
+ d5a29d7e Simplify ChaCha20 Poly1305 implementation
283
+ 8d78f516 Fix typo in README.
284
+ ```
285
+
286
+ **All changes:**
287
+
288
+ ```
289
+ e7487a8b build(deps): Bump python from 3.11.0-alpine to 3.12.5-alpine
290
+ 81cd5819 build(deps): Bump aiohttp from 3.10.1 to 3.10.2 in /requirements
291
+ 7716858a fix styling for 2462
292
+ 41b039f9 precise skip in companion, mrp, dmap
293
+ 618e93a4 companion skip implementation
294
+ 0d2d3fc9 build(deps): Bump flake8 from 7.1.0 to 7.1.1 in /requirements
295
+ 1e0d7991 build(deps): Bump black from 24.4.2 to 24.8.0 in /requirements
296
+ 5f801d4c build(deps): Bump aiohttp from 3.10.0 to 3.10.1 in /requirements
297
+ 95c43b1c build(deps): Bump mypy-protobuf from 3.5.0 to 3.6.0 in /requirements
298
+ 8331c783 deps: Bump protobuf base version to 4.25.3
299
+ 80fd95e6 build(deps): Bump pylint from 3.2.5 to 3.2.6 in /requirements
300
+ 0abc130b build(deps): Bump protobuf from 5.27.2 to 5.27.3 in /requirements
301
+ 1bda482d build(deps): Bump mypy from 1.10.1 to 1.11.1 in /requirements
302
+ 2a8afa68 deps: Sync some versions with base versions
303
+ 1b38c96f build(deps): Bump pytest-httpserver in /requirements
304
+ 961340f8 build(deps): Bump pytest from 8.2.2 to 8.3.2 in /requirements
305
+ 64cc5847 build(deps): Bump aiohttp from 3.9.5 to 3.10.0 in /requirements (#2463)
306
+ 18ceacd4 build(deps): Bump miniaudio from 1.60 to 1.61 in /requirements (#2459)
307
+ 9f2f7cd3 Added touch gesture to companion protocol (#2402)
308
+ 55f3455e deps: Bump some lowest deps versions
309
+ c263ff54 build(deps): Bump pydantic from 2.7.4 to 2.8.2 in /requirements
310
+ cba3eb9a build(deps): Bump chacha20poly1305-reuseable in /requirements
311
+ 6e9cc70d build(deps): Bump miniaudio from 1.59 to 1.60 in /requirements
312
+ 21becc1e build(deps): Bump pytest-asyncio from 0.23.6 to 0.23.8 in /requirements
313
+ 98dd3f2d build(deps): Bump protobuf from 5.27.1 to 5.27.2 in /requirements
314
+ 0e024712 build(deps): Bump requests from 2.32.2 to 2.32.3 in /requirements
315
+ 31b57b27 cq: Fix pylint issues
316
+ 8d942aa2 build(deps): Bump pylint from 3.0.3 to 3.2.5 in /requirements
317
+ 42ff35ab docs: Fix codespell issues
318
+ 1e256440 build(deps): Bump codespell from 2.2.6 to 2.3.0 in /requirements
319
+ bbfb6ec2 build(deps): Bump pytest-httpserver in /requirements
320
+ d70a9a47 build(deps): Bump zeroconf from 0.131.0 to 0.132.2 in /requirements
321
+ 9dbdcae1 build(deps): Bump mypy from 1.8.0 to 1.10.1 in /requirements
322
+ e84219bb build(deps): Bump pytest-cov from 4.1.0 to 5.0.0 in /requirements
323
+ 0eec178c build(deps): Bump types-protobuf in /requirements
324
+ b1bd82b5 build(deps): Bump pyfakefs from 5.4.1 to 5.6.0 in /requirements
325
+ d789cd08 build(deps): Bump pytest-timeout from 2.2.0 to 2.3.1 in /requirements
326
+ 80b9c91d build(deps): Bump pydantic from 2.5.3 to 2.7.4 in /requirements
327
+ ee725bd7 build(deps): Bump pytest-xdist from 3.5.0 to 3.6.1 in /requirements
328
+ 1c7f3719 build(deps): Bump black from 24.4.0 to 24.4.2 in /requirements
329
+ f2152da3 build(deps): Bump protobuf from 4.25.2 to 5.27.1 in /requirements
330
+ 30bcb66e build(deps): Bump cryptography from 42.0.5 to 42.0.8 in /requirements
331
+ ea9d3339 Fix Chacha20Cipher with companion
332
+ fb78faf6 build(deps): Bump flake8 from 7.0.0 to 7.1.0 in /requirements
333
+ 5e6f1b17 build(deps): Bump deepdiff from 6.7.1 to 7.0.1 in /requirements
334
+ c5f182af build(deps): Bump pdoc3 from 0.10.0 to 0.11.0 in /requirements
335
+ a84774c1 test: Improve MRP volume tests
336
+ 8080aaae test: Improve dispatch test
337
+ aad6bcd7 test: Improve aiothttp session closing
338
+ ed20bf72 Bump setup-python to v5
339
+ 1b780d46 gha: Bump setup-python tp v4
340
+ 541ba00d Update tests.yml
341
+ ec402a68 gha: Run tests with python 3.12
342
+ 39a868f9 build(deps): Bump pytest from 7.4.3 to 8.2.2 in /requirements
343
+ a0aa0d6e build(deps): Bump flake8 from 6.1.0 to 7.0.0 in /requirements
344
+ 1037d5ef dep: Bump chacha20poly1305-reuseable and cryptography
345
+ 1fc1cb0f cq: Run black to fix errors
346
+ 2b0cc6a0 build(deps): Bump black from 23.12.1 to 24.4.0 in /requirements
347
+ 62020c36 build(deps): Bump types-protobuf in /requirements
348
+ 5c721409 gha: Remove automerge workflow
349
+ 90b23cc4 Update index.md
350
+ 7589ec8b build(deps): Bump types-tabulate in /requirements
351
+ 7fdfa28a still need to pad for hap
352
+ 29ad6fc0 still need to pad for hap
353
+ e817af09 still need to pad for hap
354
+ 0c1f6674 lint
355
+ d5a29d7e Simplify ChaCha20 Poly1305 implementation
356
+ 601e553a build(deps): Bump requests from 2.31.0 to 2.32.2 in /requirements
357
+ 7bff8b32 build(deps): Bump pytest-asyncio from 0.23.2 to 0.23.6 in /requirements
358
+ a2da7611 build(deps): Bump pyfakefs from 5.3.2 to 5.4.1 in /requirements
359
+ eaf73bf9 build(deps): Bump aiohttp from 3.9.1 to 3.9.5 in /requirements
360
+ 8d78f516 Fix typo in README.
361
+ 4b00261b build(deps): Bump protobuf from 4.25.1 to 4.25.2 in /requirements
362
+ 2f7e2fd1 build(deps): Bump pytest-asyncio from 0.21.1 to 0.23.2 in /requirements
363
+ 4cd32600 build(deps): Bump isort from 5.12.0 to 5.13.2 in /requirements
364
+ 51458f95 build(deps): Bump pyfakefs from 5.3.0 to 5.3.2 in /requirements
365
+ 9d0e7f4c build(deps): Bump pydantic from 2.4.2 to 2.5.3 in /requirements
366
+ 6d2762df build(deps): Bump pytest-xdist from 3.3.1 to 3.5.0 in /requirements
367
+ ```
368
+
369
+ ## 0.14.5 Quimby (2023-12-24)
370
+
371
+ Merry christmas everyone, here comes a small present! In this
372
+ release @maxileith made some improvements to atvscript. App should be
373
+ reported correctly now. All identifiers as well as MAC address is
374
+ ouputted when scanning. Other than that it's merely house-keeping.
375
+
376
+ Been rather slow work on pyatv for a while, let's see what the new
377
+ year might bring!
378
+
379
+ **Changes:**
380
+
381
+ *Other:*
382
+
383
+ ```
384
+ 0da3258 scan: Fix python-zeroconf incompatibility
385
+ 454afc0 Fix a bug that causes atvscript push_updates to never report the app
386
+ 8d883fb update the list of contributors
387
+ 8be2b64 Changing the featured Homebridge plugin to a more recent and maintained one.
388
+ 2da50e9 add mac address to device info
389
+ 0937a7b Output all identifiers when scanning with atvscript
390
+ ```
391
+
392
+ **All changes:**
393
+
394
+ ```
395
+ ce61b49 build(deps): Bump black from 23.9.1 to 23.12.1 in /requirements
396
+ 10b0138 build(deps): Bump cryptography from 41.0.4 to 41.0.7 in /requirements
397
+ 04b75b7 build(deps): Bump mypy from 1.5.1 to 1.8.0 in /requirements
398
+ 1519ffc build(deps): Bump types-protobuf in /requirements
399
+ f4f94d9 build(deps): Bump deepdiff from 6.6.0 to 6.7.1 in /requirements
400
+ 0732ee4 build(deps): Bump aiohttp from 3.8.6 to 3.9.1 in /requirements
401
+ d7dfe9a build(deps): Bump protobuf from 4.24.2 to 4.25.1 in /requirements
402
+ b4bd7ce build(deps): Bump chacha20poly1305-reuseable in /requirements
403
+ 0da3258 scan: Fix python-zeroconf incompatibility
404
+ 1bb0227 build(deps): Bump zeroconf from 0.118.0 to 0.131.0 in /requirements
405
+ 1392a00 build(deps): Bump pylint from 3.0.1 to 3.0.3 in /requirements
406
+ 454afc0 Fix a bug that causes atvscript push_updates to never report the app
407
+ 8d883fb update the list of contributors
408
+ 8be2b64 Changing the featured Homebridge plugin to a more recent and maintained one.
409
+ 2da50e9 add mac address to device info
410
+ 0937a7b Output all identifiers when scanning with atvscript
411
+ 427c362 build(deps): Bump pytest from 7.4.2 to 7.4.3 in /requirements
412
+ ```
413
+
414
+ ## 0.14.4 Patty (2023-10-27)
415
+
416
+ This release contains a fix when running with python 3.11
417
+ or later, mainly when calling atvscript. Thanks @maxileith!
418
+
419
+ **Changes:**
420
+
421
+ *Other:*
422
+
423
+ ```
424
+ cc0e4a2 Wrap coroutines passed to asyncio.wait with create_tasks asyncio.wait does not support passing coroutines since python 3.11
425
+ d8c6b4d cq: New attempt with token
426
+ e611672 cq: New token for auto-merge
427
+ b47ddbf cq: Update auto-merge token
428
+ e7f880a cq: Try to fix auto-merge
429
+ ```
430
+
431
+ **All changes:**
432
+
433
+ ```
434
+ cc0e4a2 Wrap coroutines passed to asyncio.wait with create_tasks asyncio.wait does not support passing coroutines since python 3.11
435
+ d8c6b4d cq: New attempt with token
436
+ e611672 cq: New token for auto-merge
437
+ b47ddbf cq: Update auto-merge token
438
+ e7f880a cq: Try to fix auto-merge
439
+ ```
440
+
441
+ ## 0.14.3 Otto (2023-10-23)
442
+
443
+ Due to Home Assistant being stuck at pydantic v1 at the moment,
444
+ I have now changed to use pydantic v1 with the compatibility
445
+ version bundled in v2. This bascially means that pydantic v1 is
446
+ used internally, even when v2 is installed. This is temporary
447
+ until Home Assistant can bump up to pydantic v2. I have also
448
+ removed dependency on pydantic-extra-types (only MacAddress was
449
+ used) as it has no v1 compatible version. Same goes for
450
+ pydantic-settings, which provides no functionality currently.
451
+
452
+ **Changes:**
453
+
454
+ *Other:*
455
+
456
+ ```
457
+ 86a4a91 storage: Use pydantic v1 compatibility
458
+ 1a8c05a storage: Remove usage of pydantic-settings
459
+ d95ab81 storage: Remove need for pydantic-extra-types
460
+ b671e21 cq: Another attempt to fix update_type
461
+ e50fb7b cq: Specify depdency_type to auto-merge
462
+ bde83fa cq: Update auto-merge token
463
+ 0c4a873 cq: Auto merge dependabot
464
+ 3e503dc cq: Automatic code coverage
465
+ ```
466
+
467
+ **All changes:**
468
+
469
+ ```
470
+ 86a4a91 storage: Use pydantic v1 compatibility
471
+ 1a8c05a storage: Remove usage of pydantic-settings
472
+ d95ab81 storage: Remove need for pydantic-extra-types
473
+ b671e21 cq: Another attempt to fix update_type
474
+ e50fb7b cq: Specify depdency_type to auto-merge
475
+ bde83fa cq: Update auto-merge token
476
+ 0c4a873 cq: Auto merge dependabot
477
+ 3e503dc cq: Automatic code coverage
478
+ ```
479
+
480
+ ## 0.14.2 Ned (2023-10-17)
481
+
482
+ Hi-Diddily-Ho, time for some minor bug fixes:
483
+
484
+ * Do not re-raise TimeoutError as AuthenticationError when
485
+ connecting (Companion and MRP were affected by this). This makes
486
+ more sense and also fixes issues with the Apple TV integration
487
+ in Home Assistant requiring reconfiguration way too often.
488
+ * @bdraco made some zeroconf adjustments to deal with bad behavior
489
+ in some Zeroconf stacks (mainly seen with AirPort Express).
490
+
491
+ **Changes:**
492
+
493
+ *Other:*
494
+
495
+ ```
496
+ bde4850 deps: Update protobuf version in base_versions
497
+ d33a94e api: Use error_handler when connecting
498
+ c11c2a9 Filter out invalid addreses from zeroconf
499
+ 3c1fc13 Filter out invalid addreses from zeroconf
500
+ ef17195 add some missing return types on public interfaces
501
+ bed2426 add py.typed to mark pyatv as PEP-561 compliant
502
+ ```
503
+
504
+ **All changes:**
505
+
506
+ ```
507
+ bde4850 deps: Update protobuf version in base_versions
508
+ 10835e1 build(deps): Bump mypy-protobuf from 3.4.0 to 3.5.0 in /requirements
509
+ a29ceb5 build(deps): Bump pyfakefs from 5.2.4 to 5.3.0 in /requirements
510
+ d33a94e api: Use error_handler when connecting
511
+ e9896fa Fix spelling errors
512
+ 98348aa build(deps): Bump codespell from 2.2.5 to 2.2.6 in /requirements
513
+ b90deec naming
514
+ ec1191a naming
515
+ c11c2a9 Filter out invalid addreses from zeroconf
516
+ 3c1fc13 Filter out invalid addreses from zeroconf
517
+ 2412932 build(deps): Bump zeroconf from 0.112.0 to 0.118.0 in /requirements
518
+ ab54ef3 build(deps): Bump pytest-timeout from 2.1.0 to 2.2.0 in /requirements
519
+ 62fd75a build(deps): Bump pylint from 2.17.5 to 3.0.1 in /requirements
520
+ 486e110 build(deps): Bump aiohttp from 3.8.5 to 3.8.6 in /requirements
521
+ 835142e build(deps): Bump protobuf from 4.24.3 to 4.24.4 in /requirements
522
+ 344fac7 build(deps): Bump deepdiff from 6.5.0 to 6.6.0 in /requirements
523
+ 85b099a build(deps): Bump python from 3.11.5-alpine to 3.12.0-alpine
524
+ 57bfaf5 build(deps): Bump cryptography from 41.0.3 to 41.0.4 in /requirements
525
+ ef17195 add some missing return types on public interfaces
526
+ bed2426 add py.typed to mark pyatv as PEP-561 compliant
527
+ ```
528
+
529
+ ## 0.14.1 Marge (2023-09-27)
530
+
531
+ Minor release coming up today:
532
+
533
+ * Fix Companion credentials not being saved when pairing
534
+ * Actually use storage in the wizard (atvremote)
535
+ * Add FileStorage.default_storage() to get the same storage
536
+ as used by scripts shipped with pyatv (i.e. you can share
537
+ credentials with your applications)
538
+ * Add setting to force AirPlay version to use with RAOP
539
+ * Add settings for RAOP control and timing ports
540
+
541
+ **Changes:**
542
+
543
+ *Protocol: Companion:*
544
+
545
+ ```
546
+ e551954 companion: Fix credentials not saved
547
+ ```
548
+
549
+ *Protocol: RAOP:*
550
+
551
+ ```
552
+ c17f304 raop: Add protocol_version setting
553
+ 391be8b raop: Add settings for timing and control ports
554
+ ```
555
+
556
+ *Script: atvremote:*
557
+
558
+ ```
559
+ fa2f7b1 atvremote: Fix storage passing to pair
560
+ ```
561
+
562
+ *Other:*
563
+
564
+ ```
565
+ fd7135b tests: Add test for atvremote wizard
566
+ e8a812d tests: Migrate scripts tests to pytest
567
+ 6704359 docs: Add minor change template
568
+ 74d2de5 storage: Add FileStorage.default_storage
569
+ 621adff docs: Some updates to README.md
570
+ f13a353 docs: More link fixes
571
+ d394708 storage: Use pydantic-extra-types for MAC
572
+ ```
573
+
574
+ **All changes:**
575
+
576
+ ```
577
+ e551954 companion: Fix credentials not saved
578
+ 1c4b4d3 build(deps): Bump types-protobuf in /requirements
579
+ 91fdc71 build(deps): Bump zeroconf from 0.108.0 to 0.112.0 in /requirements
580
+ c17f304 raop: Add protocol_version setting
581
+ fd7135b tests: Add test for atvremote wizard
582
+ e8a812d tests: Migrate scripts tests to pytest
583
+ fa2f7b1 atvremote: Fix storage passing to pair
584
+ 95d7d54 build(deps): Bump deepdiff from 6.4.1 to 6.5.0 in /requirements
585
+ 6704359 docs: Add minor change template
586
+ 712f105 build(deps): Bump zeroconf from 0.97.0 to 0.108.0 in /requirements
587
+ 46d50f0 build(deps): Bump black from 23.7.0 to 23.9.1 in /requirements
588
+ 391be8b raop: Add settings for timing and control ports
589
+ 2808c5d build(deps): Bump pytest from 7.4.1 to 7.4.2 in /requirements
590
+ d426ae8 build(deps): Bump protobuf from 4.24.2 to 4.24.3 in /requirements
591
+ 01e4cc0 build(deps): Bump pytest-aiohttp from 1.0.4 to 1.0.5 in /requirements
592
+ 74d2de5 storage: Add FileStorage.default_storage
593
+ 621adff docs: Some updates to README.md
594
+ f13a353 docs: More link fixes
595
+ d394708 storage: Use pydantic-extra-types for MAC
596
+ ```
597
+
598
+ ## 0.14.0 Lisa (2023-09-04)
599
+
600
+ Finally time for a new release and this (despite the few number
601
+ of commits) is a big one: this release introduces the storage API!
602
+ in reality, the storage API comes with two distinct features:
603
+
604
+ * Storing and loading of credentials and passwords
605
+ * Support for generic settings
606
+
607
+ The first one is pretty obvious and also the biggest one here.
608
+ From now on, pyatv will automatically save credentials to a file
609
+ when pairing and automatically load them again without the need
610
+ of manually specifying them (the same applies to passwords as
611
+ well). This is true for built in scripts like `atvremote` and
612
+ `atvscript`. You need to add a few lines of code to support it
613
+ within your applications.
614
+
615
+ The API is generic in the sense that you can implement your own
616
+ storage if you like. Perhaps you want to store your credentials in
617
+ Dropbox or a Google Document? That is possible by writing a custom
618
+ storage module. This release ships with a `FileStorage` module
619
+ that stores settings in a local file using JSON as storage format.
620
+ There's also a `MemoryStorage` module that just keeps settings in
621
+ memory. The latter one is used by default if no storage is provided
622
+ as a means of backwards compatibility.
623
+
624
+ Moving on to generic settings then. Ways to alter the behavior of
625
+ pyatv has been requested in several ways throughout the years. Be
626
+ it specifying port nunbers or changing the way a protocol behaves.
627
+ There has not been any way of implementing such settings until now.
628
+ Biggest reason for it was because I wanted to implement storage
629
+ first to see how things would fit together. I guess the benefit is
630
+ that we now got both features at once.
631
+
632
+ As a start, only a few metadata fields like MAC address and
633
+ operating system version can be changed. I will add more settings
634
+ over time and you can request additional settings by opening
635
+ issues. As new settings adds extra maintenance burden (e.g. more
636
+ tests), I will be a bit picky though.
637
+
638
+ I have fixed a small detail in the documentation as well. The
639
+ value of members in enums are now shown. Only the name was shown
640
+ before. The same change also applies to the pydantic models used
641
+ for settings, so you can see default values for all settings
642
+ directly in the API reference.
643
+
644
+ Oh, and one more thing... A wizard moved in to `atvremote`. If
645
+ you run `atvremote wizard`, he will find all your devices, let you
646
+ pick one and help out with setting it up (guiding you through
647
+ pairing and passwords). Once you have completed the wizard, all
648
+ credentials are saved to storage and you don't have to think about
649
+ that anymore. Pretty neat, huh? This is still an early version,
650
+ so expect bugs and please report them so they can be fixed.
651
+
652
+ That is is. A pretty good release to be honest. Time for some
653
+ rest!
654
+
655
+ **Changes:**
656
+
657
+ *Other:*
658
+
659
+ ```
660
+ d13ede5 docs: Another attempt to fix docs
661
+ 7498250 docs: Try to fix API docs for some modules
662
+ 856fede storage: Switch to pyfakefs for testing
663
+ 7cc5a92 storage: Bump mockfs to 1.1.4
664
+ 3376835 storage: Fix tests on Windows
665
+ dfcce1f docs: Add documentation for storage
666
+ cd5ef88 storage: Adjust scripts to use storage
667
+ e370ee1 storage: Initial support for storage
668
+ 557681c ci: Enable Dependabot for Dockerfile
669
+ ```
670
+
671
+ **All changes:**
672
+
673
+ ```
674
+ d13ede5 docs: Another attempt to fix docs
675
+ f0978ff build(deps): Bump deepdiff from 6.3.1 to 6.4.1 in /requirements
676
+ bb60615 build(deps): Bump pytest from 7.4.0 to 7.4.1 in /requirements
677
+ 11392ae build(deps): Bump mutagen from 1.46.0 to 1.47.0 in /requirements
678
+ 4928c42 build(deps): Bump zeroconf from 0.88.0 to 0.97.0 in /requirements
679
+ 48a25bb build(deps): Bump pydantic-settings from 2.0.2 to 2.0.3 in /requirements
680
+ 7498250 docs: Try to fix API docs for some modules
681
+ 856fede storage: Switch to pyfakefs for testing
682
+ 7cc5a92 storage: Bump mockfs to 1.1.4
683
+ 3376835 storage: Fix tests on Windows
684
+ dfcce1f docs: Add documentation for storage
685
+ cd5ef88 storage: Adjust scripts to use storage
686
+ e370ee1 storage: Initial support for storage
687
+ 05ca46d build(deps): Bump zeroconf from 0.86.0 to 0.88.0 in /requirements
688
+ 573ac65 build(deps): Bump zeroconf from 0.82.1 to 0.86.0 in /requirements
689
+ dbd0fbf build(deps): Bump chacha20poly1305-reuseable in /requirements
690
+ 894c9c4 build(deps): Bump python from 3.11.4-alpine to 3.11.5-alpine
691
+ b892d20 build(deps): Bump protobuf from 4.24.1 to 4.24.2 in /requirements
692
+ e5458f9 build(deps): Bump protobuf from 4.24.0 to 4.24.1 in /requirements
693
+ aed3c2b build(deps): Bump zeroconf from 0.79.0 to 0.82.1 in /requirements
694
+ 2a03ff9 build(deps): Bump mypy from 1.5.0 to 1.5.1 in /requirements
695
+ 557681c ci: Enable Dependabot for Dockerfile
696
+ a717479 build(deps): Bump python from 3.9.7 to 3.11.4 in Dockerfile
697
+ 84d8222 build(deps): Bump zeroconf from 0.76.0 to 0.79.0 in /requirements
698
+ dffb71f build(deps): Bump zeroconf from 0.74.0 to 0.76.0 in /requirements
699
+ e3d7a90 build(deps): Bump types-protobuf in /requirements
700
+ 671064e build(deps): Bump types-protobuf in /requirements
701
+ d432705 build(deps): Bump mypy from 1.4.1 to 1.5.0 in /requirements
702
+ 6438d9f build(deps): Bump async-timeout from 4.0.2 to 4.0.3 in /requirements (#2136)
703
+ be22c57 build(deps): Bump protobuf from 4.23.4 to 4.24.0 in /requirements (#2131)
704
+ c3c5e33 build(deps): Bump types-protobuf in /requirements (#2130)
705
+ 285d4c0 build(deps): Bump zeroconf from 0.72.0 to 0.74.0 in /requirements (#2123)
706
+ ```
707
+
708
+ ## 0.13.4 Krusty (2023-08-06)
709
+
710
+ @bdraco cleaned up in aisle four and made scanning more
711
+ robust in shaky networks, thanks!
712
+
713
+ **Changes:**
714
+
715
+ *Other:*
716
+
717
+ ```
718
+ 17d130a Fallback to sending unicast PTR queries when multicast is broken or packets are being dropped (#2122)
719
+ b64bdf9 gha: Remove log workflow (#2120)
720
+ ```
721
+
722
+ **All changes:**
723
+
724
+ ```
725
+ 17d130a Fallback to sending unicast PTR queries when multicast is broken or packets are being dropped (#2122)
726
+ b64bdf9 gha: Remove log workflow (#2120)
727
+ ```
728
+
729
+ ## 0.13.3 Joe (2023-08-03)
730
+
731
+ Time for a somewhat minor fix release:
732
+
733
+ * The play_url functionality has been restored on tvOS
734
+ * Pairing requirement is correctly determined for macOS
735
+ * macOS has been added as an operating system
736
+ * @bdraco has made some performance improvements when
737
+ scanning for devices
738
+
739
+ **Changes:**
740
+
741
+ *Protocol: MRP:*
742
+
743
+ ```
744
+ dfcc82b mrp: Add some missing protobuf definitions
745
+ 5ad5103 mrp: Fix pairing requirement when disabled
746
+ ```
747
+
748
+ *Protocol: AirPlay:*
749
+
750
+ ```
751
+ 54ff39e airplay: Handle Access Control Type
752
+ c5772b3 airplay: Support stop with play_url
753
+ c554ab7 airplay: Fix play_url with newer tvOS versions
754
+ ```
755
+
756
+ *Protocol: RAOP:*
757
+
758
+ ```
759
+ fef1667 raop: Use correct auth type for RAOP pairing
760
+ ```
761
+
762
+ *Other:*
763
+
764
+ ```
765
+ 8022f68 Rework zeroconf for unicast scanning (#2083)
766
+ 42130e1 conf: Add macOS as operating system
767
+ 8b572fe http: Abort timeout if connection close
768
+ 7815a8f docs: Clarify atvremote app section
769
+ ```
770
+
771
+ **All changes:**
772
+
773
+ ```
774
+ 8022f68 Rework zeroconf for unicast scanning (#2083)
775
+ dfcc82b mrp: Add some missing protobuf definitions
776
+ b91dfae build(deps): Bump cryptography from 41.0.2 to 41.0.3 in /requirements
777
+ 06cb03e build(deps): Bump zeroconf from 0.71.4 to 0.71.5 in /requirements
778
+ 54ff39e airplay: Handle Access Control Type
779
+ 42130e1 conf: Add macOS as operating system
780
+ b8f793e build(deps): Bump flake8 from 6.0.0 to 6.1.0 in /requirements
781
+ c3e0a52 build(deps): Bump pylint from 2.17.4 to 2.17.5 in /requirements
782
+ 6e89d8c build(deps): Bump types-protobuf in /requirements
783
+ 18edbf4 build(deps): Bump chacha20poly1305-reuseable in /requirements
784
+ 9cd5a4a build(deps): Bump zeroconf from 0.71.0 to 0.71.4 in /requirements
785
+ c5772b3 airplay: Support stop with play_url
786
+ c554ab7 airplay: Fix play_url with newer tvOS versions
787
+ 8b572fe http: Abort timeout if connection close
788
+ 0c61914 build(deps): Bump types-requests in /requirements
789
+ 3d3f9e8 build(deps): Bump aiohttp from 3.8.4 to 3.8.5 in /requirements
790
+ 353faa9 build(deps): Bump pytest-asyncio from 0.21.0 to 0.21.1 in /requirements
791
+ 5ad5103 mrp: Fix pairing requirement when disabled
792
+ fef1667 raop: Use correct auth type for RAOP pairing
793
+ a01117d build(deps): Bump cryptography from 41.0.1 to 41.0.2 in /requirements
794
+ 5ede5a9 build(deps): Bump black from 23.3.0 to 23.7.0 in /requirements
795
+ e5bf455 build(deps): Bump zeroconf from 0.70.0 to 0.71.0 in /requirements
796
+ cef7b74 build(deps): Bump deepdiff from 6.3.0 to 6.3.1 in /requirements
797
+ 67ad564 build(deps): Bump protobuf from 4.23.3 to 4.23.4 in /requirements
798
+ 7815a8f docs: Clarify atvremote app section
799
+ 11ab076 build(deps): Bump typed-ast from 1.5.4 to 1.5.5 in /requirements
800
+ b6514e8 build(deps): Bump mediafile from 0.11.0 to 0.12.0 in /requirements
801
+ 2d70d8b build(deps): Bump zeroconf from 0.69.0 to 0.70.0 in /requirements
802
+ ```
803
+
804
+ ## 0.13.2 Itchy (2023-06-27)
805
+
806
+ Hitting it hard with new releases lately, here's another one:
807
+
808
+ * Artwork can now be set when streaming
809
+ * Metadata can be overridden only when missing
810
+ * New helper method: helpers.is_device_supported
811
+ * `bitarray` dependency has been dropped (no longer needed)
812
+ * Bug: AirPlay in macOS is ignored until I can support it
813
+ * Bug: Improved AirPlay 2 detection
814
+
815
+ So, this release makes it possible to provide artwork as part of metadata when
816
+ streaming files. It also adds a new flag, `override_missing_metadata`, that
817
+ (when set) will use metadata provided by what is streamed but use custom
818
+ metadata when some fields are missing. So if `title` is not in the stream, you
819
+ can now provide that but still keep things like `album` and `artist` from
820
+ the stream.
821
+
822
+ A new helper method, `helpers.is_device_support`, has been added that returns
823
+ boolean indicating if pyatv can interact with that device or not.
824
+
825
+ And some bug fixes. Namely: computers running macOS with AirPlay receiver
826
+ enabled (requires macOS 12 or later) are currently ignored as they aren't
827
+ supported. I will try to fix that when I can. Also, detection of AirPlay 2
828
+ devices has been improved. Some older devices (like Apple TV 3) was
829
+ discovered as AirPlay 2 devices, breaking `stream_file` support.
830
+
831
+ **Changes:**
832
+
833
+ *Protocol: AirPlay:*
834
+
835
+ ```
836
+ 20a7524 airplay: Fix AirPlay major version detection
837
+ 703dc74 airplay: Disable AirPlay for macOS
838
+ ```
839
+
840
+ *Protocol: RAOP:*
841
+
842
+ ```
843
+ 6beda0c raop: Allow setting artwork
844
+ 7b534d5 raop: Support override missing stream fields
845
+ ```
846
+
847
+ *Other:*
848
+
849
+ ```
850
+ 70ce630 support: Add missing metadata tests
851
+ 3f054a0 deps: Remove bitarray code
852
+ 8ee9b61 helpers: Add is_device_supported
853
+ ```
854
+
855
+ **All changes:**
856
+
857
+ ```
858
+ 20a7524 airplay: Fix AirPlay major version detection
859
+ 70ce630 support: Add missing metadata tests
860
+ 6beda0c raop: Allow setting artwork
861
+ 7b534d5 raop: Support override missing stream fields
862
+ 703dc74 airplay: Disable AirPlay for macOS
863
+ 3f054a0 deps: Remove bitarray code
864
+ 8ee9b61 helpers: Add is_device_supported
865
+ 9cbeeae build(deps): Bump bitarray from 2.7.5 to 2.7.6 in /requirements
866
+ 60b7052 build(deps): Bump pytest from 7.3.2 to 7.4.0 in /requirements
867
+ 1630694 build(deps): Bump mypy from 1.4.0 to 1.4.1 in /requirements
868
+ ```
869
+
870
+ ## 0.13.1 Homer (2023-06-22)
871
+
872
+ Small patch release coming up! Second generation HomePod has
873
+ been added as device type. A bug when streaming from a buffer
874
+ (something inheriting BufferedIOBase) has been fixed. The bug
875
+ would render metadata detection unusable and playback to cut
876
+ off early.
877
+
878
+ Previous releases would send raw PCM samples encapsulated in
879
+ Apple Lossless Audio Codec (ALAC) frames. This is now changed
880
+ to send pure raw audio frames instead (without ALAC). This
881
+ has a big benefit in regards to performance as the ALAC
882
+ header is not byte-aligned, so it required a lot of bit
883
+ shifting and memory copying. This was extremly noticable on
884
+ low-end systems like raspberry pi. Hopefully the performance
885
+ is a lot better now. Issue #2057 contains more details
886
+ regarding this for those interested.
887
+
888
+ **Changes:**
889
+
890
+ *Protocol: RAOP:*
891
+
892
+ ```
893
+ 51dffc9 raop: Send autio as raw PCM
894
+ 3d4c5ff raop: Fix bug when streaming from buffer
895
+ ```
896
+
897
+ *Other:*
898
+
899
+ ```
900
+ 02a8cab device: Add second generation HomePod
901
+ ```
902
+
903
+ **All changes:**
904
+
905
+ ```
906
+ dd773cc build(deps): Bump mypy from 1.3.0 to 1.4.0 in /requirements
907
+ fb18e3a build(deps): Bump zeroconf from 0.66.0 to 0.69.0 in /requirements
908
+ 02a8cab device: Add second generation HomePod
909
+ 51dffc9 raop: Send autio as raw PCM
910
+ 3d4c5ff raop: Fix bug when streaming from buffer
911
+ ```
912
+
913
+ ## 0.13.0 Grandpa (2023-06-15)
914
+
915
+ This release contains some big new stuff, really nice. In summary we have:
916
+
917
+ * Basic support for audio streaming using AirPlay 2
918
+ * Proper power state support in Companion
919
+ * Support for activating screensaver
920
+ * Improved buffering of audio when streaming
921
+ * Added support for changing output devices in tvOS (@michalmo)
922
+ * atvproxy now supports MRP-over-AirPlay (@michalmo)
923
+ * Bug: Absolute/relative volume management is greatly improved (@michalmo)
924
+ * Bug: Position calculation improved in MRP
925
+
926
+ One of the big new things in this release is support for streaming audio via
927
+ AirPlay 2. Streaming via AirPlay 1 has been possible for quite some time now
928
+ and that is "good enough" (based on what pyatv supports) with Apple devices,
929
+ but not most 3rd party receivers as lots of them only support AirPlay 2. From
930
+ now on however, pyatv can be used to stream audio to previously unsupported
931
+ receivers, like Sonos for instance. It is still not possible to use controls
932
+ like pause and skip next, but metadata should work fine. More features will
933
+ be added over time. Main driver for this feature is using any AirPlay 2
934
+ receiver for Text-To-Speech (TTS) in Home Assistant.
935
+
936
+ Another feature lots of people have been asking for is an API to change output
937
+ device(s) on their Apple TV. This allows for changing audio device to for
938
+ instance a HomePod instead of the built-in TV speakers. @michalmo took a
939
+ crack at and implemented that (fixing AirPlay support in atvproxy whilst doing
940
+ so). Active devices can be listed or removed and new devices added, nice!
941
+
942
+ Yet another feature/bug fix is buffering support for non-seekable streams when
943
+ streaming audio via RAOP. When streaming from an Internet source for instance,
944
+ pyatv would "consume" data in a linear fashion (get X bytes, stream that, throw
945
+ it away, get next X bytes, etc.). For some formats this works fine, but a few
946
+ requires seeking, i.e. looking into the future of the stream and then going
947
+ back to the start again. This is not possible if the buffer is not seekable,
948
+ which is the case for an Internet source. I have now added general buffering
949
+ support for the beginning of a anything being streamed, improving streaming
950
+ support a lot. It also allows for extracting metadata from more formats, even
951
+ Internet sources, so that's a big improvements as well. It's not bulletproof,
952
+ so milage may vary. Again, main driver for this is Home Assistant. Some
953
+ TTS integrations, like picoTTS, would not work because the generated file
954
+ required seeking (due to file format being wav I think). This release should
955
+ fix that.
956
+
957
+ One more thing... proper standby detection via Companion! Recently (not exactly
958
+ sure which version) Apple added "SystemStatus" support over Companion. The
959
+ system status reflects whether a device is in standby or awake mode (or even
960
+ has the screensaver active). Changes are pushed as an event, so pyatv will
961
+ get notified as soon as the state changes. I hope this will help a lot of
962
+ people having problem with device state, like we see a lot of in Home
963
+ Assistant.
964
+
965
+ **Changes:**
966
+
967
+ *Protocol: MRP:*
968
+
969
+ ```
970
+ 850547e mrp: Fix position if playbackRate is 0.0
971
+ ```
972
+
973
+ *Protocol: AirPlay:*
974
+
975
+ ```
976
+ 8badbf7 Support volume control for an Apple TV connected to HomePod(s) instead of TV speakers
977
+ 254694c Control AirPlay output devices (#2044)
978
+ ```
979
+
980
+ *Protocol: Companion:*
981
+
982
+ ```
983
+ 74b3fc4 companion: Implement SystemStatus support
984
+ 62f6654 companion: Add screensaver support
985
+ ```
986
+
987
+ *Protocol: RAOP:*
988
+
989
+ ```
990
+ 6d46726 raop: Basic AirPlay 2 streaming
991
+ bb20742 raop: Migrate remaining buffers to SemiSeekableBuffer
992
+ 4807f0f raop: Migrate PatchedIceCastClient to SemiSeekableBuffer
993
+ ```
994
+
995
+ *Script: atvremote:*
996
+
997
+ ```
998
+ 139bc4b atvremote: Allow custom service properties
999
+ ```
1000
+
1001
+ **All changes:**
1002
+
1003
+ ```
1004
+ 74b3fc4 companion: Implement SystemStatus support
1005
+ 850547e mrp: Fix position if playbackRate is 0.0
1006
+ 10e207f raop: Handle setting volume later
1007
+ ab8ee57 raop: Add feedback to AirPlay 2 streaming
1008
+ 6d46726 raop: Basic AirPlay 2 streaming
1009
+ 139bc4b atvremote: Allow custom service properties
1010
+ 12d9b5a airplay: Change RemoteControl to AP2Session
1011
+ 290a1e0 rtsp: Make handling of bplists more general
1012
+ 8badbf7 Support volume control for an Apple TV connected to HomePod(s) instead of TV speakers
1013
+ b99b4f8 Volume control improvements
1014
+ 8815d02 build(deps): Bump codespell from 2.2.4 to 2.2.5 in /requirements
1015
+ 979e61e build(deps): Bump protobuf from 4.23.2 to 4.23.3 in /requirements (#2051)
1016
+ a3e3d51 add FeatureName.TextFocusState to supported features for Companion (#2047)
1017
+ 254694c Control AirPlay output devices (#2044)
1018
+ bb20742 raop: Migrate remaining buffers to SemiSeekableBuffer
1019
+ 4807f0f raop: Migrate PatchedIceCastClient to SemiSeekableBuffer
1020
+ 44a4c7a support: Add a SemiSeekableBuffer
1021
+ ca8c928 build(deps): Bump zeroconf from 0.64.1 to 0.66.0 in /requirements
1022
+ eeba576 build(deps): Bump bitarray from 2.7.4 to 2.7.5 in /requirements
1023
+ 72f2f92 build(deps): Bump pytest from 7.3.1 to 7.3.2 in /requirements
1024
+ 62f6654 companion: Add screensaver support
1025
+ e66aa2e if: Update doc string for pause
1026
+ 4a66c5d tests: Fix some streaming instability in RAOP
1027
+ fbf02c3 cq: Disable deprecated warnings in pyatv tests
1028
+ ff89c26 update documentation
1029
+ d500480 unify identifiers and credentials
1030
+ 83be27e add tests for HAP and transient auth
1031
+ 0b75957 update tests to use airplay.server_auth
1032
+ a311b8b support segmented requests in BasicHttpServer
1033
+ 054b9e5 rewrite identifiers to improve connection
1034
+ 7a307c2 add protobuf ConfigureConnectionMessage
1035
+ fa006ff add field to UpdateOutputDeviceMessage
1036
+ 6ca50c1 regenerate protobuf code
1037
+ d192759 log decoded channel messages
1038
+ 5ebc663 replace CaseInsensitiveDict in pyatv.support.http with version from requests that preserves input case, which is better for proxying
1039
+ 443f7d1 add public methods to pyatv.http to format requests and reponses
1040
+ ee9523b initial airplay proxy working with pyatv client
1041
+ ```
1042
+
1043
+ ## 0.12.1 Frankie (2023-06-08)
1044
+
1045
+ Time for a new release. Here it goes:
1046
+
1047
+ * Support for custom metadata when streaming audio
1048
+ * StreamReader (asyncio) can be used as streaming audio source
1049
+ * @a1ex4 fixed compatibility with shairport-sync
1050
+ * @michalmo added listener interface for keyboard focus
1051
+ * @Shraymonks added a few new tvOs versions and ATV 4K gen3
1052
+ * @michalmo addded deep linking support to launch_app
1053
+
1054
+ A little of this and a little bit of that. It's so much fun
1055
+ to see new contributors to the project! I love it, keep up
1056
+ the good work!
1057
+
1058
+ **Changes:**
1059
+
1060
+ *Protocol: RAOP:*
1061
+
1062
+ ```
1063
+ e538496 raop: Support custom metadata when streaming (#2011)
1064
+ ec6a9fd raop: Support asyncio StreamReader when streaming (#2010)
1065
+ ```
1066
+
1067
+ *Other:*
1068
+
1069
+ ```
1070
+ 8b3c15e added listener interface to Keyboard for focus updates
1071
+ ed7ac4b Fix shairport-sync player support
1072
+ 9ef3ddc Add support for URL param to LaunchApp (#2024)
1073
+ 8bf62de Add Apple TV 4k (gen3) and new tvOS versions
1074
+ ```
1075
+
1076
+ **All changes:**
1077
+
1078
+ ```
1079
+ 0ce95c0 build(deps): Bump zeroconf from 0.64.0 to 0.64.1 in /requirements
1080
+ dcab463 change exception type based on code review
1081
+ 53a4739 added Keyboard interface documentation
1082
+ 8b3c15e added listener interface to Keyboard for focus updates
1083
+ 990a82f preserve integer sizes when decoding/re-encoding with opack, fixes companion proxy stability
1084
+ d508f35 build(deps): Bump zeroconf from 0.63.0 to 0.64.0 in /requirements
1085
+ 656ba7e build(deps): Bump miniaudio from 1.57 to 1.59 in /requirements
1086
+ ed7ac4b Fix shairport-sync player support
1087
+ 062fc73 gha: Fix python version in logs workflow
1088
+ 9966ce8 gha: Use python 3.10 for log parsing
1089
+ afe74a5 gha: Update log tests job
1090
+ 95f2b5c build(deps): Bump cryptography from 41.0.0 to 41.0.1 in /requirements
1091
+ 9ef3ddc Add support for URL param to LaunchApp (#2024)
1092
+ 5633765 build(deps): Bump cryptography from 40.0.2 to 41.0.0 in /requirements
1093
+ 20aa9a8 build(deps): Bump bitarray from 2.7.3 to 2.7.4 in /requirements
1094
+ 50be0f8 build(deps): Bump types-requests in /requirements
1095
+ 001ea0e build(deps): Bump protobuf from 4.23.1 to 4.23.2 in /requirements
1096
+ dcbf581 gha: Fix building docker images
1097
+ 4f9b1c8 build(deps): Bump pytest-cov from 4.0.0 to 4.1.0 in /requirements
1098
+ 6c05064 build(deps): Bump zeroconf from 0.62.0 to 0.63.0 in /requirements
1099
+ 8bf62de Add Apple TV 4k (gen3) and new tvOS versions
1100
+ e538496 raop: Support custom metadata when streaming (#2011)
1101
+ ec6a9fd raop: Support asyncio StreamReader when streaming (#2010)
1102
+ 747fd46 env: Install correct miniaudio on GHA (#2012)
1103
+ ```
1104
+
1105
+ ## 0.12.0 Edna (2023-05-24)
1106
+
1107
+ @michalmo has been working hard to bring you this release.
1108
+ It featuers the following:
1109
+
1110
+ * Text/keyboard input API (get and alter current text)
1111
+ * Listener interface for volume updates (+ bug fix for MRP)
1112
+ * Updates to make atvproxy work with Companion (for devs)
1113
+
1114
+ Thanks for your hard work @michalmo, it's really great to get
1115
+ some help since I don't have much time for pyatv right now. I
1116
+ know a lot of people are waiting for these features.
1117
+
1118
+ **Changes:**
1119
+
1120
+ *Other:*
1121
+
1122
+ ```
1123
+ 34c719c Add support for companion protocol text input (#1905)
1124
+ 39e4d08 Make sure were sending and receiving volume messages for our device, even if playing to other AirPlay devices in a group (#2006)
1125
+ ccf8a8c Fix companion proxy (#1912)
1126
+ 7c3707b added listener interface to Audio for volume updates
1127
+ ```
1128
+
1129
+ **All changes:**
1130
+
1131
+ ```
1132
+ 931b808 build(deps): Bump types-requests in /requirements (#2004)
1133
+ 34c719c Add support for companion protocol text input (#1905)
1134
+ 39e4d08 Make sure were sending and receiving volume messages for our device, even if playing to other AirPlay devices in a group (#2006)
1135
+ 0028ce2 build(deps): Bump protobuf from 4.23.0 to 4.23.1 in /requirements (#2000)
1136
+ ccf8a8c Fix companion proxy (#1912)
1137
+ e7ac293 build(deps): Bump pytest-xdist from 3.2.1 to 3.3.1 in /requirements
1138
+ 5749656 build(deps): Bump requests from 2.30.0 to 2.31.0 in /requirements
1139
+ 7c3707b added listener interface to Audio for volume updates
1140
+ ```
1141
+
1142
+ ## 0.11.0 Duffman (2023-05-15)
1143
+
1144
+ Wow, it has been a long time since the last release. Unfortunately
1145
+ i don't have much time to work on pyatv right now, but i will try
1146
+ my best to make some bug fixes at least. In short, this release
1147
+ fixes a timeout bug when streaming to HomePods (introduced around
1148
+ 16.4). It shall also fix missing artwork sometimes and account
1149
+ switching (using Companion protocol) is now also possible thanks
1150
+ to @michalmo.
1151
+
1152
+ From this release I will use code names from Simpsons. There's more
1153
+ to choose from there...
1154
+
1155
+ **Changes:**
1156
+
1157
+ *Script: atvscript:*
1158
+
1159
+ ```
1160
+ 1533a89 atvscript: Check app support before printing
1161
+ ```
1162
+
1163
+ *Other:*
1164
+
1165
+ ```
1166
+ 8b16f5a protobuf: Bump to 4.22.3
1167
+ a7a5c54 protobuf: Bump and fix protobuf to 21.0
1168
+ 7cf5d2f deps: Deprecate python 3.7
1169
+ 3c13841 deps: Bump aiohttp to at least 3.8.3
1170
+ 71b592e gha: Run tests with python 3.11
1171
+ 7dee1e4 reuse client session from Core
1172
+ d8bc55b fix missing artwork
1173
+ 9e73711 http: Increase timeout for http requests
1174
+ 5634fc0 deps: Remove codecov as test dependency
1175
+ 02b62ec test: Fix strict mode in pytest_asyncio
1176
+ aa23a11 readable paired device names for airplay and companion protocols
1177
+ bec4ed2 added support for companion protocol account switching
1178
+ ```
1179
+
1180
+ **All changes:**
1181
+
1182
+ ```
1183
+ e6d9299 build(deps): Bump pylint from 2.17.2 to 2.17.4 in /requirements
1184
+ 436a8bc build(deps): Bump types-requests in /requirements
1185
+ 10c5387 build(deps): Bump requests from 2.28.2 to 2.30.0 in /requirements
1186
+ a7aa051 build(deps): Bump mypy from 1.2.0 to 1.3.0 in /requirements
1187
+ 3a2bc39 build(deps): Bump types-protobuf in /requirements
1188
+ 5527d28 build(deps): Bump protobuf from 4.22.3 to 4.23.0 in /requirements
1189
+ 0b4cd97 build(deps): Bump miniaudio from 1.56 to 1.57 in /requirements
1190
+ 7faf30b build(deps): Bump zeroconf from 0.56.0 to 0.62.0 in /requirements
1191
+ f8fbbfe build(deps): Bump mediafile from 0.9.0 to 0.11.0 in /requirements
1192
+ f354a90 build(deps): Bump pytest-cov from 3.0.0 to 4.0.0 in /requirements
1193
+ 788d643 build(deps): Bump pytest-xdist from 2.5.0 to 3.2.1 in /requirements
1194
+ ca5dc87 build(deps): Bump pytest from 7.1.2 to 7.3.1 in /requirements
1195
+ 8f9d220 build(deps): Bump pydocstyle from 6.1.1 to 6.3.0 in /requirements
1196
+ 7acaf6e deps: Fix new black issues
1197
+ 17c8e13 build(deps): Bump black from 22.6.0 to 23.3.0 in /requirements
1198
+ 3703173 build(deps): Bump mypy-protobuf from 3.2.0 to 3.4.0 in /requirements
1199
+ 8b16f5a protobuf: Bump to 4.22.3
1200
+ a353870 protobuf: Hardcode protoc version again
1201
+ a7a5c54 protobuf: Bump and fix protobuf to 21.0
1202
+ 8d1c5d4 build(deps): bump protobuf from 3.20.1 to 4.21.2 in /requirements
1203
+ 14cf46c build(deps): Bump isort from 5.10.1 to 5.12.0 in /requirements
1204
+ c6feb23 deps: Fix flake8 issues
1205
+ 8d4c1b9 build(deps): Bump flake8 from 5.0.3 to 6.0.0 in /requirements
1206
+ 7cf5d2f deps: Deprecate python 3.7
1207
+ 0edde61 build(deps): Bump cryptography from 40.0.1 to 40.0.2 in /requirements
1208
+ 46c21e6 build(deps): Bump aiohttp from 3.8.1 to 3.8.4 in /requirements
1209
+ 3c13841 deps: Bump aiohttp to at least 3.8.3
1210
+ 71b592e gha: Run tests with python 3.11
1211
+ d9aa981 cq: Fix warnings and various issues
1212
+ 5686462 build(deps): Bump zeroconf from 0.47.3 to 0.56.0 in /requirements
1213
+ acdebfc build(deps): Bump bitarray from 2.6.0 to 2.7.3 in /requirements
1214
+ 2618e1d build(deps): Bump types-protobuf in /requirements
1215
+ 1533a89 atvscript: Check app support before printing
1216
+ dfbb15b deps: Fix pylint issues in new release
1217
+ 51c7316 build(deps): Bump pylint from 2.14.5 to 2.17.2 in /requirements
1218
+ 7d3024e build(deps): Bump types-requests in /requirements
1219
+ 15b6fda deps: Fix mypy issues from upgrade
1220
+ 08f561e build(deps): Bump mypy from 0.961 to 1.2.0 in /requirements
1221
+ 2f5f1ae add tests for hosted artwork
1222
+ 7dee1e4 reuse client session from Core
1223
+ d8bc55b fix missing artwork
1224
+ 8ede99e build(deps): Bump mutagen from 1.45.1 to 1.46.0 in /requirements
1225
+ 9e73711 http: Increase timeout for http requests
1226
+ 5634fc0 deps: Remove codecov as test dependency
1227
+ 02b62ec test: Fix strict mode in pytest_asyncio
1228
+ 34254b4 build(deps): Bump pytest-asyncio from 0.18.3 to 0.21.0 in /requirements
1229
+ b012b89 build(deps): Bump cryptography from 39.0.2 to 40.0.1 in /requirements
1230
+ 93585e3 build(deps): Bump requests from 2.28.1 to 2.28.2 in /requirements
1231
+ fe4b654 move opack.py into pyatv/support
1232
+ aa23a11 readable paired device names for airplay and companion protocols
1233
+ 88f1fbe build(deps): Bump codespell from 2.1.0 to 2.2.4 in /requirements
1234
+ bec4ed2 added support for companion protocol account switching
1235
+ 8925745 build(deps): Bump deepdiff from 5.8.1 to 6.3.0 in /requirements
1236
+ f68e0b0 build(deps): Bump miniaudio from 1.51 to 1.56 in /requirements
1237
+ 3787e7a build(deps): Bump zeroconf from 0.38.7 to 0.47.3 in /requirements
1238
+ 5a7453d build(deps): Bump cryptography from 37.0.4 to 39.0.2 in /requirements
1239
+ fe704a3 Redirecting to correct page
1240
+ 000c7ab build(deps): Bump flake8 from 4.0.1 to 5.0.3 in /requirements
1241
+ ```
1242
+
1243
+ ## 0.10.3 Chica (2022-08-02)
1244
+
1245
+ This is another minor release:
1246
+
1247
+ * Adds device info and operating system to atvscript
1248
+ * Fixes a bug in set_volume on some devices, e.g. HomePod
1249
+ * Use async_timeout instead of asyncio.wait_for
1250
+
1251
+ **Changes:**
1252
+
1253
+ *Protocol: MRP:*
1254
+
1255
+ ```
1256
+ 88547ac mrp: Fix set_volume bug
1257
+ ```
1258
+
1259
+ *Script: atvscript:*
1260
+
1261
+ ```
1262
+ 5edeeb8 atvscript: Add operating_system and version
1263
+ fdae0b7 atvscript: Add device_info section
1264
+ 7704faa atvscript: Add model and model_str to scan
1265
+ ```
1266
+
1267
+ *Other:*
1268
+
1269
+ ```
1270
+ d9e1cc5 Switch out asyncio.wait_for with async_timeout
1271
+ 5a20486 conf: Add model_str property
1272
+ 0e03ad5 cq: Remove cruft files
1273
+ ```
1274
+
1275
+ **All changes:**
1276
+
1277
+ ```
1278
+ 88547ac mrp: Fix set_volume bug
1279
+ d9e1cc5 Switch out asyncio.wait_for with async_timeout
1280
+ ddba0fb build(deps): Bump types-requests from 2.28.1 to 2.28.3 in /requirements
1281
+ 951ea53 build(deps): Bump bitarray from 2.5.1 to 2.6.0 in /requirements
1282
+ 4e4b695 build(deps): Bump types-requests from 2.28.0 to 2.28.1 in /requirements
1283
+ 522ebe7 build(deps): Bump pylint from 2.14.4 to 2.14.5 in /requirements
1284
+ 5edeeb8 atvscript: Add operating_system and version
1285
+ fdae0b7 atvscript: Add device_info section
1286
+ 7704faa atvscript: Add model and model_str to scan
1287
+ 5a20486 conf: Add model_str property
1288
+ 0e03ad5 cq: Remove cruft files
1289
+ 6492aa9 build(deps): Bump pytest-aiohttp from 1.0.2 to 1.0.4 in /requirements (#1782)
1290
+ fe2515c build(deps): Bump pylint from 2.14.3 to 2.14.4 in /requirements (#1783)
1291
+ c1b03df build(deps): Bump cryptography from 37.0.2 to 37.0.4 in /requirements (#1788)
1292
+ cf49456 build(deps): Bump requests from 2.28.0 to 2.28.1 in /requirements (#1784)
1293
+ 46922dd build(deps): Bump chacha20poly1305-reuseable in /requirements (#1787)
1294
+ ```
1295
+
1296
+ ## 0.10.2 Bonnet (2022-06-28)
1297
+
1298
+ This release just lowers the required version of cryptography
1299
+ to 36.0.2 or higher.
1300
+
1301
+ **Changes:**
1302
+
1303
+ *Other:*
1304
+
1305
+ ```
1306
+ ecada17 deps: Require cryptography >= 36.0.2 (#1780)
1307
+ ```
1308
+
1309
+ **All changes:**
1310
+
1311
+ ```
1312
+ ecada17 deps: Require cryptography >= 36.0.2 (#1780)
1313
+ ```
1314
+
1315
+ ## 0.10.1 Yenndo (2022-06-28)
1316
+
1317
+ This is a minor bug fix release, taking care of some nasty stuff:
1318
+
1319
+ * Do not block event loop when streaming audio from a network source
1320
+ * Support RAOP devices with invalid names
1321
+ * Add support for `channel_up` and `channel_down` (only Companion so far)
1322
+ * Increase encryption performance with `ChaCha20Poly1305Reusable`
1323
+ * Discovery should work better on Windows now
1324
+
1325
+ Have a splendid summer!
1326
+
1327
+ **Changes:**
1328
+
1329
+ *Protocol: RAOP:*
1330
+
1331
+ ```
1332
+ 4c3ef81 raop: Fallback to pk as unique id (#1777)
1333
+ 5805f2c raop: Not do blocking I/O while streaming (#1776)
1334
+ da184b9 raop: Increase late warning to five frames (#1775)
1335
+ 6195324 raop: Harmonize protocol string in requests
1336
+ ```
1337
+
1338
+ *Other:*
1339
+
1340
+ ```
1341
+ 31de26a Implement channel_up and channel_down (#1769)
1342
+ d69554e protobuf: Add more fields to DeviceInfoMessage (#1778)
1343
+ 36261f1 mdns: Suppress exceptions properly (#1774)
1344
+ 5ba0e24 Switch to using ChaCha20Poly1305Reusable for encryption (#1756)
1345
+ 3c69600 Fix sed command in setup_dev_env.sh for macOS
1346
+ 9c15fd7 Fix path to setup_dev_env.sh in CONTRIBUTING.md
1347
+ ccc5a94 Adding a project to the list
1348
+ e694a21 docs: Update list with projects using pyatv
1349
+ ```
1350
+
1351
+ **All changes:**
1352
+
1353
+ ```
1354
+ 31de26a Implement channel_up and channel_down (#1769)
1355
+ 89b8988 build(deps): bump pytest-aiohttp from 0.3.0 to 1.0.2 in /requirements (#1623)
1356
+ e272858 build(deps): bump pylint from 2.13.9 to 2.14.3 in /requirements (#1757)
1357
+ d69554e protobuf: Add more fields to DeviceInfoMessage (#1778)
1358
+ 2179c12 build(deps): bump types-protobuf in /requirements (#1767)
1359
+ 4c3ef81 raop: Fallback to pk as unique id (#1777)
1360
+ 5805f2c raop: Not do blocking I/O while streaming (#1776)
1361
+ 36261f1 mdns: Suppress exceptions properly (#1774)
1362
+ da184b9 raop: Increase late warning to five frames (#1775)
1363
+ f424d7c build(deps): bump black from 22.3.0 to 22.6.0 in /requirements (#1770)
1364
+ 8d69f68 build(deps): bump types-protobuf in /requirements (#1738)
1365
+ c885a43 build(deps): bump requests from 2.27.1 to 2.28.0 in /requirements (#1750)
1366
+ 9859fdb build(deps): bump ifaddr from 0.1.7 to 0.2.0 in /requirements (#1766)
1367
+ cbd1305 build(deps): bump zeroconf from 0.38.6 to 0.38.7 in /requirements (#1751)
1368
+ 5ba0e24 Switch to using ChaCha20Poly1305Reusable for encryption (#1756)
1369
+ 2f8af90 build(deps): bump types-requests from 2.27.31 to 2.28.0 in /requirements
1370
+ 4d321b4 build(deps): bump ifaddr from 0.1.7 to 0.2.0 in /requirements
1371
+ e4279be build(deps): bump miniaudio from 1.46 to 1.51 in /requirements
1372
+ 043ca4c build(deps): bump types-requests in /requirements
1373
+ 68d02f2 build(deps): bump mypy from 0.960 to 0.961 in /requirements
1374
+ be1b68e build(deps): bump types-requests in /requirements
1375
+ 93f7904 build(deps): bump mypy from 0.950 to 0.960 in /requirements
1376
+ d43e4a3 build(deps): bump typed-ast from 1.5.3 to 1.5.4 in /requirements
1377
+ 5e362be build(deps): bump types-requests in /requirements
1378
+ ec086ad build(deps): bump pylint from 2.13.8 to 2.13.9 in /requirements
1379
+ c5dd9c1 build(deps): bump deepdiff from 5.8.0 to 5.8.1 in /requirements
1380
+ c9ae1e3 build(deps): bump mypy-protobuf from 3.1.0 to 3.2.0 in /requirements
1381
+ 3c69600 Fix sed command in setup_dev_env.sh for macOS
1382
+ 9c15fd7 Fix path to setup_dev_env.sh in CONTRIBUTING.md
1383
+ 72ea8ea build(deps): bump types-requests in /requirements
1384
+ 3422693 build(deps): bump protobuf from 3.19.4 to 3.20.1 in /requirements
1385
+ 97cacda build(deps): bump pylint from 2.12.2 to 2.13.8 in /requirements
1386
+ 6c4c1c2 build(deps): bump zeroconf from 0.38.3 to 0.38.6 in /requirements
1387
+ 40f170e build(deps): bump bitarray from 2.3.7 to 2.5.1 in /requirements
1388
+ 6195324 raop: Harmonize protocol string in requests
1389
+ 43aa905 build(deps): bump deepdiff from 5.7.0 to 5.8.0 in /requirements
1390
+ 62a037a build(deps): bump typed-ast from 1.5.2 to 1.5.3 in /requirements
1391
+ 6975543 build(deps): bump pytest from 7.0.1 to 7.1.2 in /requirements
1392
+ 6690c59 build(deps): bump types-protobuf in /requirements
1393
+ b62d488 build(deps): bump pytest-asyncio from 0.18.1 to 0.18.3 in /requirements
1394
+ 4fb2bb8 build(deps): bump mypy from 0.931 to 0.950 in /requirements
1395
+ f52df10 build(deps): bump cryptography from 36.0.1 to 37.0.2 in /requirements
1396
+ a741e48 build(deps): bump black from 21.12b0 to 22.3.0 in /requirements
1397
+ b63b449 build(deps): bump types-requests in /requirements
1398
+ 8ac3844 build(deps): bump bitarray from 2.3.6 to 2.3.7 in /requirements
1399
+ 8741f19 build(deps): bump pytest-asyncio from 0.17.2 to 0.18.1 in /requirements
1400
+ 4092f6e build(deps): bump types-protobuf from 3.19.8 to 3.19.12 in /requirements
1401
+ d365cda build(deps): bump pytest from 6.2.5 to 7.0.1 in /requirements
1402
+ d821548 build(deps): bump types-requests from 2.27.8 to 2.27.10 in /requirements
1403
+ 8a53693 build(deps): bump bitarray from 2.3.5 to 2.3.6 in /requirements
1404
+ ccc5a94 Adding a project to the list
1405
+ e694a21 docs: Update list with projects using pyatv
1406
+ 4a0f940 build(deps): bump types-protobuf from 3.19.5 to 3.19.8 in /requirements
1407
+ a790bd4 build(deps): bump types-requests from 2.27.7 to 2.27.8 in /requirements
1408
+ bb36796 build(deps): bump protobuf from 3.19.3 to 3.19.4 in /requirements
1409
+ 995ee6b build(deps): bump zeroconf from 0.38.1 to 0.38.3 in /requirements
1410
+ 735faa0 build(deps): bump typed-ast from 1.5.1 to 1.5.2 in /requirements
1411
+ ```
1412
+
1413
+ ## 0.10.0 XOR (2022-01-23)
1414
+
1415
+ It's a new year and time for a new release with a few bug fixes:
1416
+
1417
+ * Play state was reported inconsistently with iOS (MRP) and is now fixed
1418
+ * Pairing requirement was incorrectly reported as mandatory for Companion
1419
+ and AirPlay in some cases
1420
+ * All internal resources are now de-allocated when a connection is closed or
1421
+ lost, so no need to call for instance push_updater.stop
1422
+ * Initial support to scan with python-zeroconf. Internal multicast and unicast
1423
+ methods will be ported to this over time.
1424
+
1425
+ This release drops support for python 3.6, mainly due to python-zeroconf not
1426
+ supporting that version. My intention is to not support EOL versions of python
1427
+ in the future.
1428
+
1429
+ **Changes:**
1430
+
1431
+ *Protocol: MRP:*
1432
+
1433
+ ```
1434
+ 02202ff mrp: Fix play state bug
1435
+ ```
1436
+
1437
+ *Protocol: AirPlay:*
1438
+
1439
+ ```
1440
+ da51ff4 airplay: Fix pairing requirement bug
1441
+ ```
1442
+
1443
+ *Protocol: Companion:*
1444
+
1445
+ ```
1446
+ baf4a9f companion: Fix pairing requirement flag
1447
+ ```
1448
+
1449
+ *Protocol: RAOP:*
1450
+
1451
+ ```
1452
+ c74e710 raop: Fix stream from buffer bug
1453
+ e7afb7e raop: Use requests instead of urllib in web stream
1454
+ 0db2447 raop: Override volume from other protocols
1455
+ ```
1456
+
1457
+ *Other:*
1458
+
1459
+ ```
1460
+ 52a0f03 scan: Add support for scanning with AsyncZeroconf
1461
+ 55ef75c deps: Deprecate python 3.6
1462
+ 204049b Ensure knock exceptions are retrieved
1463
+ df6047a deps: Add requests as dependency
1464
+ b099169 gha: Don't build for armv7
1465
+ d6ffbd2 facade: Stop push updaters on close
1466
+ 37f6a1a core: Dispatch volume changes in protocols
1467
+ ```
1468
+
1469
+ **All changes:**
1470
+
1471
+ ```
1472
+ 02202ff mrp: Fix play state bug
1473
+ 52a0f03 scan: Add support for scanning with AsyncZeroconf
1474
+ 4d3687e build(deps): bump types-protobuf from 3.19.4 to 3.19.5 in /requirements
1475
+ 3e90c65 build(deps): bump mypy-protobuf from 3.0.0 to 3.1.0 in /requirements
1476
+ 6c58037 build(deps): bump pytest-asyncio from 0.16.0 to 0.17.2 in /requirements
1477
+ 55ef75c deps: Deprecate python 3.6
1478
+ baf4a9f companion: Fix pairing requirement flag
1479
+ 261cbb6 build(deps): bump types-requests from 2.27.5 to 2.27.7 in /requirements
1480
+ c7c40c8 Fixes and amendments to protocols doc.
1481
+ 1b3e09e build(deps): bump pytest-timeout from 2.0.2 to 2.1.0 in /requirements
1482
+ ef88032 build(deps): bump types-protobuf from 3.19.0 to 3.19.4 in /requirements
1483
+ b386ae0 build(deps): bump protobuf from 3.19.1 to 3.19.3 in /requirements
1484
+ 6b50822 build(deps): bump types-protobuf from 3.18.4 to 3.19.0 in /requirements
1485
+ 4ed1f55 build(deps): bump types-protobuf from 3.18.3 to 3.18.4 in /requirements
1486
+ e40be8d build(deps): bump bitarray from 2.3.4 to 2.3.5 in /requirements
1487
+ bb79792 build(deps): bump mypy from 0.930 to 0.931 in /requirements
1488
+ 182ffdd build(deps): bump types-requests from 2.26.3 to 2.27.5 in /requirements
1489
+ 8a7ec5d build(deps): bump requests from 2.27.0 to 2.27.1 in /requirements
1490
+ 0217895 build(deps): bump miniaudio from 1.45 to 1.46 in /requirements
1491
+ d9cdad9 build(deps): bump types-protobuf from 3.18.2 to 3.18.3 in /requirements
1492
+ cb05378 build(deps): bump requests from 2.26.0 to 2.27.0 in /requirements
1493
+ 01cbdf6 skip test on legacy 3.7
1494
+ b2960bf skip test on legacy 3.7
1495
+ fed3288 skip test on legacy 3.7
1496
+ a9373e4 Ensure knock exceptions are retrieved
1497
+ 18d523d Ensure knock exceptions are retrieved
1498
+ 1b01ab4 Ensure knock exceptions are retrieved
1499
+ 204049b Ensure knock exceptions are retrieved
1500
+ c2c5436 build(deps): bump types-requests from 2.26.2 to 2.26.3 in /requirements
1501
+ f4cd28f build(deps): bump mypy from 0.921 to 0.930 in /requirements
1502
+ b18b0f0 build(deps): bump zeroconf from 0.37.0 to 0.38.1 in /requirements
1503
+ 5a67911 build(deps): bump mypy from 0.920 to 0.921 in /requirements
1504
+ df6047a deps: Add requests as dependency
1505
+ c74e710 raop: Fix stream from buffer bug
1506
+ b099169 gha: Don't build for armv7
1507
+ e7afb7e raop: Use requests instead of urllib in web stream
1508
+ 09e7076 core: Introduce Core in protocols
1509
+ 28ec1f7 build(deps): bump deepdiff from 5.6.0 to 5.7.0 in /requirements
1510
+ da51ff4 airplay: Fix pairing requirement bug
1511
+ d6ffbd2 facade: Stop push updaters on close
1512
+ 0db2447 raop: Override volume from other protocols
1513
+ 37f6a1a core: Dispatch volume changes in protocols
1514
+ 18decdf mrp: Fix protocol bug in state dispatcher
1515
+ 6918c11 build(deps): bump typed-ast from 1.4.3 to 1.5.1 in /requirements
1516
+ f514e43 build(deps): bump mypy from 0.910 to 0.920 in /requirements
1517
+ ```
1518
+
1519
+ ## 0.9.8 Vanny (2021-12-15)
1520
+
1521
+ Here is yet another release with a bunch of bug fixes and improvements:
1522
+
1523
+ * Calling public interface methods after disconnecting now results
1524
+ in `BlockedStateError` being raised
1525
+ * `power_state` now depends on `device_state`. Because of the unreliable
1526
+ method used to derive `power_state`, a device could be reported as
1527
+ powered off while playing some media, which doesn't make sense. As
1528
+ long as `device_state` is not `idle`, the power state will be reported
1529
+ as on.
1530
+ * Button presses in MRP should be more reliable and not skipped or
1531
+ repeated now.
1532
+ * `netifaces` has been replaced by `ifaddr` due to lack of a maintainer.
1533
+ * A few fixes have been made for MRP on devices running tvOS <= 14.
1534
+ * The pause `pause` in RAOP will now stops playback. This is merely
1535
+ because it's not implemented yet and aligns better with Home
1536
+ Assistant for now.
1537
+
1538
+ **Changes:**
1539
+
1540
+ *Protocol: MRP:*
1541
+
1542
+ ```
1543
+ 18d7a6e mrp: Do not disable MRP service for older tvOS
1544
+ 9541d21 mrp: Fix erroneous button press behavior (#1521)
1545
+ 74d38b2 mrp: Add enable_encryption to connection
1546
+ ```
1547
+
1548
+ *Protocol: AirPlay:*
1549
+
1550
+ ```
1551
+ 3065d6c airplay: Be stricter when setting up remotecontrol
1552
+ ```
1553
+
1554
+ *Protocol: RAOP:*
1555
+
1556
+ ```
1557
+ f0c4c33 raop: Let pause button stop playback
1558
+ ```
1559
+
1560
+ *Other:*
1561
+
1562
+ ```
1563
+ 6540c49 facade: Block calls to public methods after close
1564
+ c6e9466 facade: Make Power interface respect play status
1565
+ 4b0136b dep: Migrate from netifaces to ifaddr
1566
+ ```
1567
+
1568
+ **All changes:**
1569
+
1570
+ ```
1571
+ 732339f protobuf: Fix support on Windows
1572
+ ba5e6bb protobuf: Use version from base_versions.txt
1573
+ 4d565d8 gh: Update question issue
1574
+ 23be7cb build(deps): bump cryptography from 36.0.0 to 36.0.1 in /requirements
1575
+ ff13e68 mdns: Quiet error log if address cannot be added
1576
+ 3065d6c airplay: Be stricter when setting up remotecontrol
1577
+ 18d7a6e mrp: Do not disable MRP service for older tvOS
1578
+ 9541d21 mrp: Fix erroneous button press behavior (#1521)
1579
+ 6713225 build(deps): bump pytest-timeout from 2.0.1 to 2.0.2 in /requirements (#1529)
1580
+ 2009c18 knock Ensure knock yields to the event loop often enough to avoid blocking (#1515)
1581
+ 6540c49 facade: Block calls to public methods after close
1582
+ 2d4d526 support: Add shield module
1583
+ b00dbf4 build(deps): bump pytest-xdist from 2.4.0 to 2.5.0 in /requirements
1584
+ f555e46 core: Clean up dispatchers
1585
+ 67fcb09 core: Specialize StateDispatcher in protcols
1586
+ a72947d core: Prevent duplicates from state producer
1587
+ f27c5a4 if: Remove loop argument to PushUpdater
1588
+ c6e9466 facade: Make Power interface respect play status
1589
+ c67819b core: Add main_protocol to Relayer
1590
+ c84bf4a core: Add base support for internal state updates
1591
+ 605b1a6 core: Add filtering to MessageDispatcher
1592
+ 2d0a1ca core: Support plain functions in MessageDispatcher
1593
+ 4b0136b dep: Migrate from netifaces to ifaddr
1594
+ f0c4c33 raop: Let pause button stop playback
1595
+ 74d38b2 mrp: Add enable_encryption to connection
1596
+ ```
1597
+
1598
+ ## 0.9.7 Springtrap (2021-12-05)
1599
+
1600
+ It's already Decemeber, how did that happen? Not sure... Anyways, I've
1601
+ prepared a small update with few neat things:
1602
+
1603
+ * Implemented a missing type in OPACK that raised an exception when
1604
+ connecting to Companion for some people (`TypeError: 0xc0`)
1605
+ * More buttons are supported by Companion as we as proper feature reporting
1606
+ for some of them
1607
+ * A persistent connection is now set up to Companion. The active device listener
1608
+ is called if connection is lost.
1609
+ * A copy is now made of the configuration passed to `pyatv.connect` which
1610
+ means a config cannot be modified after connecting anymore
1611
+ * Experimental support for streaming via HTTP(S) has been added to `stream_file`
1612
+
1613
+
1614
+ **Changes:**
1615
+
1616
+ *Protocol: MRP:*
1617
+
1618
+ ```
1619
+ f6a8973 mrp: Migrate protocol to MessageDispatcher
1620
+ ```
1621
+
1622
+ *Protocol: Companion:*
1623
+
1624
+ ```
1625
+ dd44437 companion: Use XID for message dispatch
1626
+ 825912d companion: Move CompanionAPI to separate module
1627
+ a02b3b9 companion: Do not wait for initial event update
1628
+ 5a765bc companion: Fix button presses for HID buttons
1629
+ ceddc9f companion: Add support for additional commands
1630
+ 8c7ed2f companion: Improve tests for sessions and events
1631
+ 5f0cb39 companion: Support playback control availability
1632
+ b3d69a7 companion: Events and persistent connection
1633
+ 4b7e832 opack: Handle pointers properly
1634
+ ```
1635
+
1636
+ *Protocol: RAOP:*
1637
+
1638
+ ```
1639
+ cf11b42 raop: Support streaming from HTTP(s)
1640
+ ```
1641
+
1642
+ *Other:*
1643
+
1644
+ ```
1645
+ a1a357a core: Add enabled state to services
1646
+
1647
+ 8b0c82e env: Fix broken GitPod integration
1648
+ 5eb4152 core: Create copy of config in connect
1649
+ 0227529 docs: Add example connect_with_credentials.py
1650
+ ```
1651
+
1652
+ **All changes:**
1653
+
1654
+ ```
1655
+ cf11b42 raop: Support streaming from HTTP(s)
1656
+ a1a357a core: Add enabled state to services
1657
+ 4b7e832 opack: Handle pointers properly
1658
+ 8b0c82e env: Fix broken GitPod integration
1659
+ f1a2b79 build(deps): bump types-protobuf from 3.18.1 to 3.18.2 in /requirements
1660
+ 1b18cd3 build(deps): bump mediafile from 0.8.1 to 0.9.0 in /requirements
1661
+ 0c4ced5 build(deps): bump aiohttp from 3.8.0 to 3.8.1 in /requirements
1662
+ e328417 build(deps): bump black from 21.10b0 to 21.11b1 in /requirements
1663
+ c4fc994 build(deps): bump zeroconf from 0.36.11 to 0.37.0 in /requirements
1664
+ 9ec3559 build(deps): bump cryptography from 35.0.0 to 36.0.0 in /requirements
1665
+ e8ae699 build(deps): bump types-protobuf from 3.18.0 to 3.18.1 in /requirements
1666
+ a70609d build(deps): bump pylint from 2.11.1 to 2.12.1 in /requirements
1667
+ 6d50e0c docs: Clarifications for data channel payload
1668
+ d1bc5ee cq: Remove unwanted files
1669
+ c623b39 net: Log instead of raise in tcp_keepalive
1670
+ 721872d build(deps): bump isort from 5.10.0 to 5.10.1 in /requirements
1671
+ 486dbcf build(deps): bump isort from 5.9.3 to 5.10.0 in /requirements
1672
+ 5eb4152 core: Create copy of config in connect
1673
+ 34e9c67 conf: Implement __deepcopy__ in BaseConfig
1674
+ 98abc57 conf: Implement __deepcopy__ in BaseConfig
1675
+ b71a415 build(deps): bump aiohttp from 3.7.4.post0 to 3.8.0 in /requirements
1676
+ b478c9d env: Rebuild miniaudio in tests workflow
1677
+ 70a6f94 conf: Ignore services with missing identifier
1678
+ 9393873 build(deps): bump black from 21.9b0 to 21.10b0 in /requirements
1679
+ e73f256 build(deps): bump zeroconf from 0.36.9 to 0.36.11 in /requirements
1680
+ dd44437 companion: Use XID for message dispatch
1681
+ 825912d companion: Move CompanionAPI to separate module
1682
+ a02b3b9 companion: Do not wait for initial event update
1683
+ 5a765bc companion: Fix button presses for HID buttons
1684
+ ceddc9f companion: Add support for additional commands
1685
+ f6a8973 mrp: Migrate protocol to MessageDispatcher
1686
+ d1332e8 core: Add generic MessageDispatcher
1687
+ 8c7ed2f companion: Improve tests for sessions and events
1688
+ 5f0cb39 companion: Support playback control availability
1689
+ b3d69a7 companion: Events and persistent connection
1690
+ e956d79 collection: Add SharedData type
1691
+ ef2ffe8 gha: Fix caching issue for finished job
1692
+ 0227529 docs: Add example connect_with_credentials.py
1693
+ 931acf6 build(deps): update protobuf requirement in /requirements
1694
+ ```
1695
+
1696
+ ## 0.9.6 Plushtrap (2021-10-27)
1697
+
1698
+ It's time for another minor release (nothing fancy, I promise):
1699
+
1700
+ * Addresses that are broadcasted when pairing DMAP can be manually set
1701
+ * A `content_identifier` (app specific) is available in the Playing interface.
1702
+ Only some apps provides this.
1703
+ * Removed unnecessary exception log in the `heartbeater` module which polluted
1704
+ the log in some cases.
1705
+
1706
+ **Notes:**
1707
+
1708
+ `protobuf` version 3.18.0 or later is now required.
1709
+
1710
+ **Changes:**
1711
+
1712
+ *Protocol: DMAP:*
1713
+
1714
+ ```
1715
+ 4094699 dmap: Support custom addresses during pairing
1716
+ ```
1717
+
1718
+ *Protocol: MRP:*
1719
+
1720
+ ```
1721
+ 260b006 mrp: Add support for content_identifier
1722
+ ```
1723
+
1724
+ *Other:*
1725
+
1726
+ ```
1727
+ ee8c23d if: Add content_identifier to Playing
1728
+ 8885662 env: Re-work test environment
1729
+ 6d47d0b scripts: Log current version of pyatv
1730
+ 70b235e core: Do not log exception in heartbeater
1731
+ ```
1732
+
1733
+ **All changes:**
1734
+
1735
+ ```
1736
+ 260b006 mrp: Add support for content_identifier
1737
+ ee8c23d if: Add content_identifier to Playing
1738
+ 4177295 build(deps): update aiohttp requirement in /requirements
1739
+ 6e04896 build(deps): bump zeroconf from 0.36.8 to 0.36.9 in /requirements
1740
+ 8885662 env: Re-work test environment
1741
+ 6d47d0b scripts: Log current version of pyatv
1742
+ 70b235e core: Do not log exception in heartbeater
1743
+ 4094699 dmap: Support custom addresses during pairing
1744
+ a5f1515 dep: Require protobuf 3.18.0
1745
+ 973b884 build(deps): bump mypy-protobuf from 2.10 to 3.0.0
1746
+ 4e0a0f6 build(deps): bump pytest-asyncio from 0.15.1 to 0.16.0
1747
+ 656f1d9 build(deps): bump miniaudio from 1.44 to 1.45
1748
+ ```
1749
+
1750
+ ## 0.9.5 Oscar (2021-10-15)
1751
+
1752
+ The releases are pouring down right now! Two more bug fixes to smoothen the experience:
1753
+
1754
+ * Fix relay bug which could result in methods being reported as unsupported
1755
+ * Add some missing DMAP tags (removes warnings)
1756
+
1757
+ **Changes:**
1758
+
1759
+ *Protocol: DMAP:*
1760
+
1761
+ ```
1762
+ 436ba7b dmap: Add missing tags aelb and casa
1763
+ ```
1764
+
1765
+ *Other:*
1766
+
1767
+ ```
1768
+ 5170edd core: Fix relayer fallback bug
1769
+ ```
1770
+
1771
+ **All changes:**
1772
+
1773
+ ```
1774
+ 436ba7b dmap: Add missing tags aelb and casa
1775
+ 5170edd core: Fix relayer fallback bug
1776
+ ```
1777
+
1778
+ ## 0.9.4 Nightmare (2021-10-15)
1779
+
1780
+ This release just contains two minor bug fixes:
1781
+
1782
+ * Removal of need for `mypy_extensions` which was never added as an explicit dependency
1783
+ but was required in the previous release
1784
+ * Support for the UID type in OPACK used by Companion, which caused an exception when
1785
+ pairing (Companion) for some people
1786
+
1787
+ **Changes:**
1788
+
1789
+ *Protocol: Companion:*
1790
+
1791
+ ```
1792
+ f99bad0 companion: Add support for UID in OPACK
1793
+ ```
1794
+
1795
+ *Other:*
1796
+
1797
+ ```
1798
+ 954f3dd core: Remove need for mypy_extensions
1799
+ ```
1800
+
1801
+ **All changes:**
1802
+
1803
+ ```
1804
+ f99bad0 companion: Add support for UID in OPACK
1805
+ 0cf4055 docs: Hide internal DeviceInfo.RAW_MODEL
1806
+ 954f3dd core: Remove need for mypy_extensions
1807
+ 41ff2c8 build(deps): bump types-protobuf from 3.17.4 to 3.18.0
1808
+ 8c9f2d9 build(deps): bump deepdiff from 5.5.0 to 5.6.0
1809
+ ```
1810
+
1811
+ ## 0.9.3 Moondrop (2021-10-12)
1812
+
1813
+ Time for another drop with a few fixes and enhancements:
1814
+
1815
+ * Official support for python 3.10
1816
+ * The MRP service is now ignored for tvOS 15 devices
1817
+ * osvers is handled properly in AirPlay which previously caused an
1818
+ exception when connecting to Apple TV 3 (or older) devices
1819
+ * Stop is now supported in RAOP
1820
+
1821
+ No biggies this time, but should make for a smoooother experience!
1822
+
1823
+ **Changes:**
1824
+
1825
+ *Protocol: MRP:*
1826
+
1827
+ ```
1828
+ 89c9f2f mrp: Ignore service during scan for tvOS >= 15
1829
+ ```
1830
+
1831
+ *Protocol: AirPlay:*
1832
+
1833
+ ```
1834
+ 5a1f482 airplay: Quiet log of remote control setup failure
1835
+ a069208 airplay: Handle semver version in osvers
1836
+ ```
1837
+
1838
+ *Protocol: RAOP:*
1839
+
1840
+ ```
1841
+ 5781665 raop: Add support for stop
1842
+ 0ef3232 raop: Report correct progress values
1843
+ ```
1844
+
1845
+ *Other:*
1846
+
1847
+ ```
1848
+ 2d16f1d gha: Run tests on python 3.10
1849
+ 62c29a1 docs: Add docs for app_list and launch_app
1850
+ ```
1851
+
1852
+
1853
+ **All changes:**
1854
+
1855
+ ```
1856
+ 5781665 raop: Add support for stop
1857
+ 107a692 facade: Support takeover for PushUpdater
1858
+ 536f241 cq: Remove stream.py
1859
+ 2afdad8 relayer: Fix main_instance and add instances
1860
+ b6165b0 core: Pass takeover method to protocols
1861
+ 99ed67d facade: Support for protocol takeover
1862
+ 9f93f0e core: Add takeover support to relayer
1863
+ 836aa62 docs: Add tvOS 15 to README description
1864
+ 16c22f0 build(deps): bump flake8 from 4.0.0 to 4.0.1
1865
+ 255c96b build(deps): bump pytest-timeout from 2.0.0 to 2.0.1
1866
+ b881c32 build(deps): bump pytest-timeout from 1.4.2 to 2.0.0
1867
+ dd38f63 build(deps): bump flake8 from 3.9.2 to 4.0.0
1868
+ 2d16f1d gha: Run tests on python 3.10
1869
+ 0ef3232 raop: Report correct progress values
1870
+ 5a1f482 airplay: Quiet log of remote control setup failure
1871
+ 4f7fe97 core: Don't connect to dummy services
1872
+ 67ae1b8 build(deps): bump pytest-cov from 2.12.1 to 3.0.0
1873
+ 62c29a1 docs: Add docs for app_list and launch_app
1874
+ 89c9f2f mrp: Ignore service during scan for tvOS >= 15
1875
+ a069208 airplay: Handle semver version in osvers
1876
+ 65b40bd build(deps): bump mediafile from 0.8.0 to 0.8.1
1877
+ ```
1878
+
1879
+ ## 0.9.2 Lefty (2021-09-27)
1880
+
1881
+ What? Another release? Already? Suure... So, I am integrating pyatv 0.9.x with
1882
+ Home Assistant and I find these small annoyances or missing pieces along the way,
1883
+ fixing them one by one as I go. This release is thus a micro-update, but it
1884
+ contains a few nuggets.
1885
+
1886
+ A `Music` device model has been added that represents the Music app/iTunes. In
1887
+ the same department I've added a property called `raw_model` to `DeviceInfo`,
1888
+ returning a raw model string in case it's not a model known by pyatv. This is
1889
+ very useful for AirPlay receivers as `raw_model` will usually contain the device
1890
+ manufacturer and hardware model.
1891
+
1892
+ It is now possible to pass a set of identifiers to `pyatv.scan`. The intended
1893
+ use case is to pass all identifiers belonging to a device to handle cases where a
1894
+ service is missing or getting deprecated (like MRP).
1895
+
1896
+ Making this release from my phone. In bed. So I will stop there and go to sleep...
1897
+
1898
+ **Changes:**
1899
+
1900
+ *Protocol: DMAP:*
1901
+
1902
+ ```
1903
+ 180acab dmap: Avoid unnecessary creation of Zeroconf
1904
+ 2e32274 dmap: Add device model Music for Music/iTunes
1905
+ ```
1906
+
1907
+ *Protocol: MRP:*
1908
+
1909
+ ```
1910
+ 7a8b86a mrp: Updates to volume management
1911
+ ```
1912
+
1913
+ *Protocol: Companion:*
1914
+
1915
+ ```
1916
+ b28a01e companion: Improve pairing requirement detection
1917
+ ```
1918
+
1919
+ *Other:*
1920
+
1921
+ ```
1922
+ ce90dd6 core: Add raw_model to DeviceInfo
1923
+ e063ffb scan: Support scanning for multiple identifiers
1924
+ ```
1925
+
1926
+ **All changes:**
1927
+
1928
+ ```
1929
+ 22bf5f2 companion: Enable test that should be enabled
1930
+ 180acab dmap: Avoid unnecessary creation of Zeroconf
1931
+ ce90dd6 core: Add raw_model to DeviceInfo
1932
+ 2e32274 dmap: Add device model Music for Music/iTunes
1933
+ 3623287 fix wrong param
1934
+ b28a01e companion: Improve pairing requirement detection
1935
+ e063ffb scan: Support scanning for multiple identifiers
1936
+ 7a8b86a mrp: Updates to volume management
1937
+ ```
1938
+
1939
+ ## 0.9.1 Lolbit (2021-09-23)
1940
+
1941
+ Minor bug fix release coming up! Should fix connection issues when a stale
1942
+ MRP service is present after upgrading to tvOS 15. Also improves pairing requirement
1943
+ handling for AirPlay and RAOP in case access control is set to "Only devices in
1944
+ my home" (will now report as Disabled). Companion is also reported as Unsupported
1945
+ for HomePods as pyatv cannot pair with them.
1946
+
1947
+ A new convert method to convert a `DeviceModel` to string has been added.
1948
+
1949
+ **Changes:**
1950
+
1951
+ *Protocol: AirPlay:*
1952
+
1953
+ ```
1954
+ 2558a89 airplay: Support Disabled pairing requirement
1955
+ ```
1956
+
1957
+ *Protocol: Companion:*
1958
+
1959
+ ```
1960
+ 6cb7269 companion: Better support for pairing requirement
1961
+ ```
1962
+
1963
+ *Protocol: RAOP:*
1964
+
1965
+ ```
1966
+ d257378 raop: Support Disabled pairing requirement
1967
+ ```
1968
+
1969
+ *Other:*
1970
+
1971
+ ```
1972
+ 70b4992 convert: Add model_str method
1973
+ 535b56b core: Use connect order based on protocol
1974
+ ```
1975
+
1976
+ **All changes:**
1977
+
1978
+ ```
1979
+ 6cb7269 companion: Better support for pairing requirement
1980
+ d257378 raop: Support Disabled pairing requirement
1981
+ 2558a89 airplay: Support Disabled pairing requirement
1982
+ 70b4992 convert: Add model_str method
1983
+ 535b56b core: Use connect order based on protocol
1984
+ ```
1985
+
1986
+ ## 0.9.0 JayJay (2021-09-22)
1987
+
1988
+ So, what's new? Yeah, right, tvOS 15 was released the day before yesterday
1989
+ which broke everything. My intention was to release 0.9.0 before tvOS 15
1990
+ dropped, but things kept popping up and I had no choice but to delay. So here
1991
+ we are.
1992
+
1993
+ The biggest feature in this release is obviously support for tvOS 15. Perhaps
1994
+ not the most exciting feature per se, but important as most of the
1995
+ functionality in pyatv is lost without it. The gist is that Apple decided to
1996
+ drop support for the MRP protocol introduced in tvOS. In practice they didn't
1997
+ get rid or it, they just allocated a special stream type in AirPlay (2) and
1998
+ decided to tunnel MRP over it. So MRP is still there, it's just carried over
1999
+ AirPlay now. As far as I know, this is how they have done it the last couple of
2000
+ iOS/tvOS releases. So it's not really new, just something no one looked into.
2001
+ The deprecation of the "regular" MRP protocol is reasonable (who uses the
2002
+ Remote app nowadays?), so I don't blame Apple for it. Would have been nice to
2003
+ have figured this out earlier though, as it required a lot of intense reverse
2004
+ engineering to unravel everything. Now it does work though, so totally worth
2005
+ it! I have tried to document how it works on the protocols page:
2006
+
2007
+ https://pyatv.dev/documentation/protocols/
2008
+
2009
+ All needed to get things working again is to provide AirPlay credentials. One
2010
+ important thing to note though is that you need to re-pair with this release
2011
+ (or later) to get new credentials. The old ones will only work with `play_url`,
2012
+ not for tunneling MRP over AirPlay. A small bonus here is that the HomePod
2013
+ works in the same way as the Apple TV in this regards, so pyatv can now be used
2014
+ to control HomdPods as well. No pairing is needed for that, it's just
2015
+ plug-and-play!
2016
+
2017
+ Let's leave MRP now... My vision for pyatv is to create a "core", where
2018
+ protocols work as plugins to provide functionality. The API used by developers
2019
+ is supposed be towards core and not the protocols themselves. This basically
2020
+ means that all functions in the API should behave in the same way, no matter
2021
+ what protocols are used in regards to arguments, return values, listener
2022
+ interfaces, error handling and so on. This release contains a lof of work
2023
+ towards realizing that vision. I'm not quite there yet, but it's closer than
2024
+ ever. Hopefully, this will only manifest itself through more consistent
2025
+ behavior and not much you as a developer need to pay any attention to. But if
2026
+ you notice any changes in behavior, this might be the reason. Be sure to report
2027
+ anything that you find peculiar, it might need fixing or an explanation.
2028
+
2029
+ Another minor new feature is that the Audio interface has been extended to
2030
+ include volume_up and volume_down, which also means those methods are
2031
+ deprecated in `RemoteControl`. Please update your code for this. Also, all the
2032
+ protocol specic service types, e.g. `conf.MrpService` and `conf.AirPlayService`
2033
+ have been deprecated in favor of `conf.ManualService`. Update your code for
2034
+ this as well, in case you rely on any of them. They will stick around for a few
2035
+ releases, so your code won't break because of this. The last minor feature is a
2036
+ helper method called `helpers.is_streamable`, which can check if file is
2037
+ supported by `Stream.stream_file`.
2038
+
2039
+ One last thing... This release fills a big gap that has been present for a long
2040
+ time: when do you need to pair? Each service now contains a "pairing" property
2041
+ that will tell you of pairing is needed or not. This makes it possible to
2042
+ programmatically determine if the pairing procedure needs to to performed,
2043
+ something that wasn't clear before. After scanning, just iterate all services
2044
+ and pair the ones requiring it. A similar property has been added for passwords
2045
+ as well, called `requires_password`. If True, then a password is required to
2046
+ connect. Only applicable to RAOP so far (it works for AirPlay as well, but
2047
+ there's no support for passwords in AirPlay yet).
2048
+
2049
+ To round things up, I just wanted to say that docker images are automatically
2050
+ built for new releases as well as the latest commit on master, making it easy
2051
+ to test pyatv without having to install any additional software other than
2052
+ docker. I still have some areas to improve, but it's a good start. This release
2053
+ will be the first release having docker images pre-built as it's tricky to
2054
+ backport.
2055
+
2056
+ That is it for now. Make sure to check out the migration guide to get some
2057
+ hints on what you need to do when upgrading.
2058
+
2059
+ Be sure to check out the migration notes before upgrading:
2060
+
2061
+ https://pyatv.dev/support/migration/
2062
+
2063
+ **Notes:**
2064
+
2065
+ * mediafile replaced audio-metadata as a dependency in this release
2066
+ * At least version 3.17.3 of protobuf is required
2067
+
2068
+ **Changes:**
2069
+
2070
+ *Protocol: DMAP:*
2071
+
2072
+ ```
2073
+ 099c975 dmap: Add support for pairing requirement
2074
+ ```
2075
+
2076
+ *Protocol: MRP:*
2077
+
2078
+ ```
2079
+ 6177e86 mrp: Add support for pairing requirement
2080
+ 0bdd614 mrp: Add support for Audio interface
2081
+ 2495e56 mrp: Extract build number from DEVICE_INFO
2082
+ ```
2083
+
2084
+ *Protocol: AirPlay:*
2085
+
2086
+ ```
2087
+ 31bf148 airplay: Add support for pairing requirement
2088
+ af5c441 airplay: Add support for requires_password
2089
+ 8c35d1f airplay: Add support for transient pairing
2090
+ a407efa airplay: Support MRP tunneling over AirPlay 2
2091
+ ```
2092
+
2093
+ *Protocol: Companion:*
2094
+
2095
+ ```
2096
+ e49b9ef companion: Add support for pairing requirement
2097
+ ```
2098
+
2099
+ *Protocol: RAOP:*
2100
+
2101
+ ```
2102
+ d47924d raop: Send empty audio during latency period
2103
+ f075d4d raop: Add support for pairing requirement
2104
+ f66563a raop: Add support for requires_password
2105
+ ```
2106
+
2107
+ *Other:*
2108
+
2109
+ ```
2110
+ 9339954 if: Add volume_up and volume_down to Audio
2111
+ 1c11600 gh: Convert issue templates to forms
2112
+ 8f7f9bd gha: Build and publish Docker containers
2113
+ 4f76bf3 core: Switch from audio-metadata to mediafile
2114
+ 33a0d5d deps: Bump protobuf to 3.17.3
2115
+ 14a35fe helpers: Add is_streamable method
2116
+ 21dec3e facade: Close connections only once
2117
+ 09bd203 facade: Close protocols on device update
2118
+ f5f84b1 facade: Return remaining tasks in close
2119
+ ```
2120
+
2121
+ **All changes:**
2122
+
2123
+ ```
2124
+ c04e1a5 build(deps): bump pytest-xdist from 2.3.0 to 2.4.0
2125
+ d47924d raop: Send empty audio during latency period
2126
+ 8ecf4b5 http: Handle responses when no receiver exists
2127
+ 45a4385 build(deps): bump pylint from 2.10.2 to 2.11.1
2128
+ 07804a0 build(deps): bump mypy-protobuf from 2.9 to 2.10
2129
+ 52cbe4c build(deps-dev): bump tox from 3.24.3 to 3.24.4
2130
+ 884edb1 build(deps): bump black from 21.8b0 to 21.9b0
2131
+ 5b0984c docs: Update scan, pair and connect docs
2132
+ f075d4d raop: Add support for pairing requirement
2133
+ 6318fee airplay: Refactor pairing requirement extraction
2134
+ 31bf148 airplay: Add support for pairing requirement
2135
+ 099c975 dmap: Add support for pairing requirement
2136
+ b57b2bb dmap: Add support for pairing requirement
2137
+ e49b9ef companion: Add support for pairing requirement
2138
+ 6177e86 mrp: Add support for pairing requirement
2139
+ af5c441 airplay: Add support for requires_password
2140
+ f66563a raop: Add support for requires_password
2141
+ 8049c82 if: Add protocol specific methods for service info
2142
+ c07cb1c if: Restructure service handling
2143
+ 3cdb1fb core: Move state_producer to support
2144
+ 9aeec0a core: Move state_producer to support
2145
+ 2f84917 core: Move back device_info to support
2146
+ da765a3 if: Rely solely on BaseService internally
2147
+ b3221a5 conf: Extract BaseConfig interface
2148
+ 88c66bc docs: Minor updates
2149
+ d4163a7 facade: Verify support in play_url
2150
+ 0ed417e airplay: Base play_url availability on properties
2151
+ 9339954 if: Add volume_up and volume_down to Audio
2152
+ f563eea env: Add work to .gitgnore
2153
+ 0bdd614 mrp: Add support for Audio interface
2154
+ dc247bd mrp: Update some MRP protobuf messages
2155
+ 7dc7c99 gha: Add workflow_dispatch: to tests workflow
2156
+ c7cf760 docs: Various minor updates
2157
+ 52210b5 if: Keep position within limits
2158
+ 671c24a core: Move scan to core
2159
+ 78386f6 core: Move facade to core
2160
+ 3cba1c4 core: Move net to core
2161
+ 0227e06 core: Move mdns to core
2162
+ 743988a core: Move facade to core
2163
+ 9812b0e core: Move device_info to core
2164
+ e53a6c1 core: Move protocol details to protocols module
2165
+ 63b1d09 core: Move raop to protocols
2166
+ b0a780e mrp: Move mrp to protocols
2167
+ 6f8c90b core: Move dmap to protocols
2168
+ 9196a88 core: Move companion to protocols
2169
+ b0758a9 core: Move airplay to protocols
2170
+ 8ee902b gh: Fix bad labels for investigation and bugs
2171
+ 3e01c2e gha: Change tags and labels a bit for containers
2172
+ 1c11600 gh: Convert issue templates to forms
2173
+ c126d77 gha: Fix remaining issues with release workflow
2174
+ 826bb58 gha: Fix building containers and make releases
2175
+ 8f7f9bd gha: Build and publish Docker containers
2176
+ 2495e56 mrp: Extract build number from DEVICE_INFO
2177
+ a548587 conf: Move device_info implementations to protocol
2178
+ c6bb384 support: Add collection method dict_merge
2179
+ 8fcca30 devinfo: Add new tvOS build numbers
2180
+ bac81ef if: Base DeviceInfo on dict
2181
+ f66aa84 raop: Add support for legacy pairing
2182
+ 7e1ca68 core: Refactor pair to take service
2183
+ d974f08 core: Set up protocols independently
2184
+ a46c068 docs: Add instructions for close
2185
+ 4a24ac9 airplay: Various connection robustness changes
2186
+ 5a6c267 mrp: Add VolumeDidChangeMessage
2187
+ 8c35d1f airplay: Add support for transient pairing
2188
+ 61ef4e2 core: Return protocol when setting up protocol
2189
+ a407efa airplay: Support MRP tunneling over AirPlay 2
2190
+ e060b9e mrp: Generalize set up of MRP
2191
+ 8a88129 docs: Remove internal things from API docs
2192
+ 5f1a55e core: Allow setup to yield multiple instances
2193
+ 384a7a6 mrp: Add new protobuf messages
2194
+ 0b0648e support: Add length field to packet
2195
+ ae5785b raop: Move packets to support
2196
+ 6bc3cf1 raop: Move metadata to support
2197
+ 402ae73 raop: Move RTSP implementation to support
2198
+ eb71a3d auth: Add abstract class for HAP channels
2199
+ d7f6394 raop: Generalize the RTSP implementation
2200
+ 1da0414 auth: Refactor HAP for generic key derivation
2201
+ e04736c airplay: Pick most suitable pairing type
2202
+ 7c667b9 airplay: Add module to parse features
2203
+ e582644 auth: Add HAPSession used for encryption
2204
+ b328826 airplay: Add helper verify_connection to auth
2205
+ 9f81aa9 http: Add pre/post processors to HttpConnection
2206
+ a2d0218 airplay: Add HAP auth support
2207
+ 044aa1d airplay: Add auth type to pair_setup
2208
+ 7b9dda8 airplay: Generate new credentials for Pair-Setup
2209
+ bcdf21b airplay: Refactor auth for multiple types
2210
+ 9783fea airplay: Add legacy to auth procedure name
2211
+ ee6437a auth: Move tlv8 and srp to auth modules
2212
+ 68ea864 auth: Refactor to general HAP pairing scheme
2213
+ eac1428 airplay: Rename auth to auth_legacy
2214
+ 4f76bf3 core: Switch from audio-metadata to mediafile
2215
+ 33a0d5d deps: Bump protobuf to 3.17.3
2216
+ bca490e build(deps): bump mypy-protobuf from 2.5 to 2.9
2217
+ c8e22b6 build(deps): bump pytest from 6.2.4 to 6.2.5
2218
+ ae05921 build(deps): bump black from 21.7b0 to 21.8b0
2219
+ 001d920 scripts: Add support for year, track and genre
2220
+ 14a35fe helpers: Add is_streamable method
2221
+ 81739c8 conf: Add password to RAOP output
2222
+ c5513b3 docs: Use absolute address to logo in README
2223
+ 415c8a5 build(deps): bump pdoc3 from 0.9.2 to 0.10.0
2224
+ 5900c29 build(deps): bump pylint from 2.9.6 to 2.10.2
2225
+ 46507f3 facade: Return pending tasks from previous close
2226
+ 21dec3e facade: Close connections only once
2227
+ 09bd203 facade: Close protocols on device update
2228
+ 83dfe6b core: Add state_was_updated to StateProducer
2229
+ dd15ef9 facade: Only propagate one device update
2230
+ 9602344 if: Move StateProducer to core and add max_calls
2231
+ 6a498d7 build(deps): bump pylint from 2.9.6 to 2.10.2
2232
+ f5f84b1 facade: Return remaining tasks in close
2233
+ b2333d2 docs: Make some clarifications for AirPlay remote
2234
+ b2d2b1b build(deps-dev): bump tox from 3.24.0 to 3.24.1
2235
+ 94f3b88 docs: Fix broken diagram in AP 2
2236
+ 5c036e9 docs: Add remote control docs for AirPlay 2
2237
+ 1877f65 build(deps): bump codecov from 2.1.11 to 2.1.12
2238
+ e1b5687 build(deps): bump isort from 5.9.2 to 5.9.3
2239
+ a9675fd Fix spelling error
2240
+ 454dcff docs: Add issue regarding cellcomtvappleos
2241
+ e36602e docs: Add entry for Illegal instruction
2242
+ 415ee61 Disable pylint instead of mypy
2243
+ 075ac89 mrp: Disable some type checking
2244
+ 1630419 docs: Fix broken links in supported_features
2245
+ bbdd88b build(deps): bump pylint from 2.9.5 to 2.9.6
2246
+ ```
2247
+
2248
+ ## 0.8.2 Helpy (2021-07-28)
2249
+
2250
+ Time for another minor release! Highlights this time is
2251
+ improved scanning, password protected RAOP services, support
2252
+ for HSCP and some remote buttons in Companion.
2253
+
2254
+ An issue hwere some devices were not discovered by Home Assistant
2255
+ anymore suddenly appeared (pun intended). Some digging concluded
2256
+ that asking for too many Zeroconf services in one request might
2257
+ yield a response too big to fit in one IP packet. This makes the
2258
+ sender silently drop records, rendering the response incomplete
2259
+ without pyatv knowing that. Since Companion and RAOP was added in
2260
+ 0.8.0 (which require three new services in total), that was the
2261
+ tipping point. From now on, pyatv will spread services over a few
2262
+ requests to work around this issue.
2263
+
2264
+ It is now possible to stream audio to password protected AirPlay
2265
+ receivers thanks to @Schlaubischlump! A password can be passed
2266
+ to atvremote via `--raop-password` and it's explained how to do
2267
+ it programmatically in the documentation.
2268
+
2269
+ HSCP (unsure what it stands for, maybe something like
2270
+ *Home Sharing Control Protocol*?) is used to control instances of
2271
+ iTunes or Music running on a Mac. Unfortunately, Apple decided
2272
+ to require FairPlay authentication in macOS 11.4, so this will
2273
+ only work if you are running an OS with lower version number than
2274
+ that.
2275
+
2276
+ Some buttons in the remote control interface is now supported by
2277
+ the Companion protocol. The API reference on
2278
+ [pyatv.dev](https://pyatv.dev) actually lists which which protocols
2279
+ implement a certain feature now, so it's recommended to look there
2280
+ for current status.
2281
+
2282
+ There are a few house-keeping fixes in this release as well,
2283
+ mostly related to tests, documentation and environment. A complete
2284
+ list is below. See you all next time!
2285
+
2286
+ **Changes:**
2287
+
2288
+ *Protocol: DMAP:*
2289
+
2290
+ ```
2291
+ 271c319 dmap: Add support for HSCP service
2292
+ ```
2293
+
2294
+ *Protocol: Companion:*
2295
+
2296
+ ```
2297
+ af77f3e companion: Add support for several buttons
2298
+ bdaf12a companion: Generalize OPACK error handling
2299
+ ```
2300
+
2301
+ *Protocol: RAOP:*
2302
+
2303
+ ```
2304
+ 42a0e58 Add support for password protected RAOP devices
2305
+ ```
2306
+
2307
+ *Other:*
2308
+ ```
2309
+
2310
+ 8faa4eb core: Fix potential aiohttp client session leak
2311
+ 9be93f1 scan: Support scanning for specific protocols
2312
+ 4d7f5bf debug: Include zeroconf properties in debug log
2313
+ 2cf35e3 gha: Another attempt to re-run tox on failure
2314
+ 3b55c6a env: Update metadata in setup.py
2315
+ ```
2316
+
2317
+ **All changes:**
2318
+
2319
+ ```
2320
+ 4c25021 mdns: Verify end condition with all services
2321
+ 8fd7e09 mdns: Cache parsed services
2322
+ 534006d mdns: Split multicast request in multiple messages
2323
+ bd6cc7c mdns: Ask for sleep-proxy in unicast requests
2324
+ 44506a5 mdns: Split unicast requests over several messages
2325
+ 5ed0491 mdns: Ignore duplicate records in ServiceParser
2326
+ 84ae2c5 mdns: Refactor service parser to a class
2327
+ 4eaadc5 build(deps): bump types-protobuf from 3.17.3 to 3.17.4
2328
+ af77f3e companion: Add support for several buttons
2329
+ 7579a49 companion: Convert functional tests to pytest
2330
+ e1dab57 build(deps): bump pylint from 2.9.4 to 2.9.5
2331
+ 1618e13 build(deps): bump pylint from 2.9.3 to 2.9.4
2332
+ 271c319 dmap: Add support for HSCP service
2333
+ 42a0e58 Add support for password protected RAOP devices
2334
+ bdaf12a companion: Generalize OPACK error handling
2335
+ 536e271 cq: Refactor pairing handlers
2336
+ 242023a build(deps): bump black from 21.6b0 to 21.7b0
2337
+ 0c8b59b build(deps): bump types-protobuf from 3.17.1 to 3.17.3
2338
+ 8faa4eb core: Fix potential aiohttp client session leak
2339
+ 9be93f1 scan: Support scanning for specific protocols
2340
+ 687f3bf mdns: Fix unstable multicast test
2341
+ e1bc26f env: Only verify docs with py3.8
2342
+ 10a408d build(deps-dev): bump tox from 3.23.1 to 3.24.0
2343
+ 00d3946 build(deps): bump types-protobuf from 3.17.0 to 3.17.1
2344
+ 809c5a3 Update README.md
2345
+ 9afd181 scan: Move scan code to protocols
2346
+ 438e70e build(deps): bump types-protobuf from 0.1.13 to 3.17.0
2347
+ 3b5e7d8 build(deps): bump isort from 5.9.1 to 5.9.2
2348
+ d1dbc5d build(deps): bump pylint from 2.8.3 to 2.9.3
2349
+ 4d7f5bf debug: Include zeroconf properties in debug log
2350
+ a147a27 gha: Fix running tox on Windows
2351
+ 0b0908d docs: Add feature name and supported protocols
2352
+ 2cf35e3 gha: Another attempt to re-run tox on failure
2353
+ f9f00b6 build(deps): bump mypy-protobuf from 2.4 to 2.5
2354
+ 3b55c6a env: Update metadata in setup.py
2355
+ a8b4d88 gha: Re-run tox without cache if failure
2356
+ ```
2357
+
2358
+ ## 0.8.1 Glitchtrap (2021-06-24)
2359
+
2360
+ This minor release contains a few improvements to the RAOP protocol.
2361
+ First and foremost, `time.perf_counter` is now used in favor of
2362
+ `time.monotonic` for audio scheduling. Scheduling has also been changed to work
2363
+ with "global time" (from stream start) instead of per frame. These changes
2364
+ improve streaming stability, with less chance of getting out of sync. They were
2365
+ also necessary to get streaming working on Windows.
2366
+
2367
+ Another important addition in the streaming department is the ability to read
2368
+ input from a FILE-like object, instead of just from a filename. One usecase for
2369
+ this is to take input via stdin from another process and send it to a receiver.
2370
+ `atvremote` has been adjusted to read from stdin if `-` is specified as
2371
+ filename. Here's an example streaming output from ffmpeg (RTSP as input!):
2372
+
2373
+ ```shell
2374
+ ffmpeg -i rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov -f mp3 - | atvremote -s 10.0.10.184 --debug stream_file=-
2375
+ ```
2376
+
2377
+ Documentation for this:
2378
+
2379
+ https://pyatv.dev/documentation/atvremote/#streaming
2380
+ https://pyatv.dev/development/stream/#stream-a-file
2381
+
2382
+ **Changes:**
2383
+
2384
+ *Protocol: RAOP:*
2385
+
2386
+ ```
2387
+ f41d552 raop: Sync sending based on absolute time
2388
+ bd15ff2 raop: Use perf_counter instead of monotonic
2389
+ 4abfc94 raop: Add small buffer to BufferedReaderSource
2390
+ ee1ee94 raop: Fix timing when starting to stream
2391
+ 8096928 raop: Support streaming files from a buffer
2392
+ ```
2393
+
2394
+ **All changes:**
2395
+
2396
+ ```
2397
+ f41d552 raop: Sync sending based on absolute time
2398
+ bd15ff2 raop: Use perf_counter instead of monotonic
2399
+ 03f9a6b build(deps): bump mypy from 0.902 to 0.910
2400
+ 244d9ee build(deps): bump isort from 5.8.0 to 5.9.1
2401
+ a23c144 docs: Add missing tutorial example
2402
+ 4abfc94 raop: Add small buffer to BufferedReaderSource
2403
+ ee1ee94 raop: Fix timing when starting to stream
2404
+ 8096928 raop: Support streaming files from a buffer
2405
+ a2df952 docs: Add tutorial as an example
2406
+ 6cf2f4c build(deps): bump types-protobuf from 0.1.12 to 0.1.13
2407
+ ```
2408
+
2409
+ ## 0.8.0 Freddy (2021-06-17)
2410
+
2411
+ Here comes a new release, filled to the brim with new stuff! First and foremost, it
2412
+ introduces support for not one but *two* new protocols: Companion and RAOP. The
2413
+ Companion protocol is used to list and launch apps installed on an Apple TV as well
2414
+ improving power management support. RAOP adds support for proper audio streaming
2415
+ to AirPlay receivers. Both protocols are still early in development and may contains a
2416
+ few bugs (yeah...). You will likely see new features added to these over time.
2417
+
2418
+ A big new change in this release, that isn't really noticeable at first, is a new layer
2419
+ that relays calls between public interface methods and underlying protocols. What does
2420
+ this mean then? Well, we have the public interfaces (Metadata, RemoteControl. etc.)
2421
+ and the protocols implementing them (DMAP, MRP, RAOP, etc). Prior to this release,
2422
+ DMAP and MRP would fully implement all of the interfaces (with a minor exception of
2423
+ Stream) and there was a requirement to configure one of them. From now on however,
2424
+ there's no such restriction as it's possible to connect to any number of protocols.
2425
+ The Feature interface tells us what is actually supported. The new layer (internally
2426
+ called *facade*) will automatically figure out which of the available protocol has the
2427
+ most appropriate implementation and call that. If two protocols implement the same
2428
+ interface method, there's mechanisms internally to pick the best one. An example is
2429
+ the Power interface, where MRP and Companion both provide implementations for `turn_on`
2430
+ and `turn_off`. If both these protocols are configured, then the implementations
2431
+ provided by the Companion protocol will be used (as they are better), otherwise
2432
+ fallback will happen to MRP.
2433
+
2434
+ From now on, the change log format changes a bit to list changes per protocol and
2435
+ scripts. The goal is to make it easier to see what has changed or been fixed. This
2436
+ release also introduces release names and all releases from now on will get a release
2437
+ name based on characters from Five Nights Freddy's. First letter of the next release
2438
+ name follows the letter of the previous one (the next release will be called
2439
+ Glitchtrap for instance). Oh, and this release text is also new...
2440
+
2441
+ Other changes include a *big* overhaul of the documentation. A lot of things have
2442
+ been improved and added, for instance a new tutorial and a few new examples. There's
2443
+ a configuration for GitPod, so you can get going with pyatv development with a single
2444
+ click!
2445
+
2446
+ Be sure to check out the migration notes before upgrading:
2447
+
2448
+ https://pyatv.dev/support/migration/
2449
+
2450
+ There's also a new page with a better summary of supported features:
2451
+
2452
+ https://pyatv.dev/documentation/supported_features/
2453
+
2454
+ I guess that is it!
2455
+
2456
+ **Changes:**
2457
+
2458
+ *Protocol: DMAP:*
2459
+
2460
+ ```
2461
+ * Reset revision if push update fails (#1004) fixes #1000
2462
+ ```
2463
+
2464
+ *Protocol: MRP:*
2465
+
2466
+ ```
2467
+ * bug: Do not deep copy protobuf messages (#1105) fixes #1038
2468
+ * bug: Handle missing artwork gracefully (#1033) fixes #937
2469
+ * bug: Implement and enforce internal protocol state (#1009) fixes #1007
2470
+ ```
2471
+
2472
+ *Protocol: AirPlay:*
2473
+
2474
+ ```
2475
+ * General clean up of module but no new features
2476
+ ```
2477
+
2478
+ *Protocol: Companion:*
2479
+
2480
+ ```
2481
+ * Initial release
2482
+ * Adds the Apps interface (list and launch apps)
2483
+ * Implements turn_on and turn_off in the Power interface
2484
+ ```
2485
+
2486
+ *Protocol: RAOP:*
2487
+
2488
+ ```
2489
+ * Initial release
2490
+ * Supports streaming WAV, MP3, OGG and Vorbis files
2491
+ * Reads metadata from supported formats (artist, album and title)
2492
+ * Supports volume controls
2493
+ ```
2494
+
2495
+ *Script: atvlog:*
2496
+
2497
+ ```
2498
+ * Exit if no output was generated (#1001)
2499
+ * Support serving output via web server (#997)
2500
+ ```
2501
+
2502
+ *Script: atvremote:*
2503
+
2504
+ ```
2505
+ * Fix bugs in manual mode (parameters not respected properly)
2506
+ ```
2507
+
2508
+ **Notes:**
2509
+
2510
+ * audio-metadata, bitarray and miniaudio are new dependencies in this release
2511
+ * At least version 3.12.0 of protobuf is required
2512
+
2513
+ **All changes:**
2514
+
2515
+ ```
2516
+ 6ffef9f build(deps): bump pytest-xdist from 2.2.1 to 2.3.0
2517
+ 8e5691c build(deps): bump mypy-protobuf from 1.24 to 2.4
2518
+ 70ef974 docs: Add examples
2519
+ b91b099 deps: Don't bump bitarray past 2.1.2
2520
+ 1914a04 docs: Clarification regarding device listener
2521
+ 0bc6eae docs: Add a tutorial
2522
+ 5bbb81a docs: Update migration guide for 0.8.0
2523
+ 4d9dbd4 scan: Migrate to use get_unique_id internally
2524
+ 0049db1 scan: Be more forgiving if service parsing fails
2525
+ ecacad7 tests: Make RAOP work in fake device
2526
+ c36e6b5 raop: Teardown session after streaming
2527
+ 116d29d build(deps): bump zeroconf from 0.28.0 to 0.28.2
2528
+ b8c3819 scripts: Unset PIP_USER in setup_dev_env.sh
2529
+ cd849b7 Upgrade to GitHub-native Dependabot
2530
+ 5f590f5 build(deps): Bump bitarray from 2.1.2 to 2.1.3
2531
+ aa4b53d raop: Fallback to AirPlay credentials
2532
+ a5bd14c raop: Only perform auth-setup for AirPort Express
2533
+ 795081b docs: Various documentation updates
2534
+ 6cfa66c helpers: Add get_unique_id
2535
+ 1c3adcf mypy: Fix typing issues
2536
+ 73bb7fa build(deps): Bump mypy from 0.812 to 0.902
2537
+ 85d03f0 build(deps): Update bitarray requirement from <2.1.1,==2.1.0 to ==2.1.2
2538
+ cc5bc8c raop: Support devices not implementing /info
2539
+ dae7518 raop: Minor updates to documentation
2540
+ 1b3c183 raop: Handle muted volume level
2541
+ cf2696e raop: Only allow one stream at the time
2542
+ eaec0a5 raop: Support set_volume, volume_up, volume_down
2543
+ 462512e raop: Make sure authentication is performed early
2544
+ 3b37ec8 raop: Initial volume support
2545
+ 15e4501 support: Add map_range function
2546
+ 4ed1b2c facade: Enforce percentage level for audio
2547
+ 0dea45f deps: Temporarily lock bitarray <2.1.1
2548
+ c1acb3b build(deps): Bump black from 21.5b2 to 21.6b0
2549
+ 8e13c3c build(deps): Bump codespell from 2.0.0 to 2.1.0
2550
+ b844966 raop: Correctly implement position in metadata
2551
+ 1d665d5 raop: Support progress (position and total_time)
2552
+ fae7b41 cq: Clean up usage of ensure_future
2553
+ 6c0cd54 raop: Fix instability in retransmission test
2554
+ c2f7287 raop: Send feedback if supported by receiver
2555
+ 58220e5 raop: Avoid blocking I/O when loading metadata
2556
+ 7eb961d raop: Avoid blocking I/O in MiniaudioWrapper
2557
+ 292fbb5 raop: Add initial functional tests
2558
+ 68abbdc audiogen: Add new script to generate audio files
2559
+ 5f3d1a8 raop: Add basic fake device
2560
+ 32f8ed7 http: Add a simple web server implementation
2561
+ f1bfce3 build(deps): Bump pytest-cov from 2.12.0 to 2.12.1
2562
+ 044f55e build(deps): Bump pylint from 2.8.2 to 2.8.3
2563
+ eb2d36d build(deps): Bump black from 21.5b1 to 21.5b2
2564
+ 1d2b3a1 env: Don't post comment with GitPod link
2565
+ 2b5b280 http: Ignore type mypy cannot find
2566
+ 18d1597 http: Ignore case in when parsing headers
2567
+ 0bd54d8 airplay: Fix encoding name typo
2568
+ e65eb59 airplay: Fix patching in tests
2569
+ 74401a0 raop: Use feedback endpoint for keep-alive
2570
+ 428b9b1 raop: Verify using AirPlay if credentials provided
2571
+ 99f3037 airplay: Unify credentials with other protocols AirPlay was the first protocol to introduce SRP and credentials and suffers some internal design flaws that were improved when implementing the other protocols. This change tries to make the AirPlay implementation look more like how it's done in the other protocols using SRP, e.g. MRP. It's a good start, but some additional work needs to be done regarding credentials parsing (but leaving that for the future).
2572
+ 894f0fd hap_srp: Rename Credentials to HapCredentials
2573
+ 2211a00 atvremote: Fix bugs in manual mode
2574
+ be37e9f net: Move HttpSession to http
2575
+ 46ae307 net: Move aiohttp session management to http
2576
+ 7b62f96 airplay: Move StaticFileWebServer to http
2577
+ 722967e airplay: Simulate streaming from fake device
2578
+ 7aa1e35 airplay: Refactor to use new http module
2579
+ 1ef8684 rtsp: Use composition instead of inheritance
2580
+ 2d2bd57 raop: Convert RTSP to use the new HTTP module
2581
+ 57b3b5b http: Generalize RTSP parsing to HTTP
2582
+ ded7458 companion: Fix case when app_list fails (#1106)
2583
+ 980454e mrp: Do not deep copy protobuf messages (#1105)
2584
+ cc3de66 companion: Add support for turn_on and turn_off (#1104)
2585
+ d08c73a build(deps): Bump miniaudio from 1.43 to 1.44
2586
+ f57f122 raop: Set correct progress in metadata (#1100)
2587
+ 2dd1539 raop: Support retransmission of lost packets (#1099)
2588
+ 5f5ad5b raop: Add support for AirPort Express (#1098)
2589
+ 311ca61 raop: Raise exception on RTSP error code (#1097)
2590
+ a24ee74 conf: Add device info for AirPort Express (#1096)
2591
+ 75d31f4 mdns: Ignore link-local addresses when scanning (#1095)
2592
+ 9393b51 build(deps): bump black from 21.5b0 to 21.5b1 (#1065)
2593
+ 3d541bf build(deps): bump pydocstyle from 6.1.0 to 6.1.1
2594
+ 0fd1393 build(deps): bump pylint from 2.7.4 to 2.8.2 (#1044)
2595
+ da37e28 docs: Update README.md (#1092)
2596
+ a64ca4d docs: General uplift of documentation (#1091)
2597
+ 8822d66 build(deps): bump pydocstyle from 6.0.0 to 6.1.0
2598
+ be08cfa raop: Implement Metadata and PushUpdater interface (#1084)
2599
+ 5051a17 build(deps): bump pytest-cov from 2.11.1 to 2.12.0
2600
+ c1d4d74 raop: Use metadata from input file as metadata (#1080)
2601
+ dc6c042 if: Add audio interface (#1074)
2602
+ 41b5705 raop: Respect receiver audio properties (#1073)
2603
+ f2c625f raop: Add initial support for RAOP (#1060)
2604
+ a93601f facade: Add PushUpdates to the feature interface (#1072)
2605
+ 6f53e7b env: Enable CodeQL (#1070)
2606
+ 54d876a some small additions to the OPACK definitions (#1064)
2607
+ bb5ac0e build(deps): bump flake8 from 3.9.1 to 3.9.2
2608
+ 0cde7a0 scripts: Protocol clean up (#1057)
2609
+ 35c49b8 build(deps-dev): bump tox from 3.23.0 to 3.23.1
2610
+ f129725 build(deps): bump black from 21.4b2 to 21.5b0
2611
+ a01ff9c build(deps): bump pytest from 6.2.3 to 6.2.4
2612
+ cbfeba6 build(deps): bump deepdiff from 5.3.0 to 5.5.0
2613
+ c85f211 build(deps): bump black from 21.4b1 to 21.4b2 (#1050)
2614
+ f15fa67 mrp: Tidy upp keyboard related messages (#1048)
2615
+ 22a0b29 Add series name, season and episode number (#1049)
2616
+ 51a1da3 build(deps): bump black from 21.4b0 to 21.4b1 (#1046)
2617
+ f344a12 docs: Add section about commands in Companion (#1047)
2618
+ b5d015f docs: Change "Apps" section to "Known Issues" (#1045)
2619
+ 58f8925 Implement facade pattern for public interface (#1042)
2620
+ 3225c98 companion: Add pairing function tests (#1041)
2621
+ e230f1d gha: Run tests workflow on master (#1039)
2622
+ 7979b1b build(deps): bump black from 20.8b1 to 21.4b0
2623
+ f6976e4 script: Install docs dependencies in dev env (#1032)
2624
+ c68ed51 mrp: Handle missing artwork gracefully (#1033)
2625
+ 5df2295 gha: Minor changes to codecov (#1031)
2626
+ 021cc7a docs: Clarify AAD for encryption in Companion (#1030)
2627
+ 33d504d env: Various updats to environment and GitPod (#1029)
2628
+ f173531 env: Remove documentation tab from GitPod for now (#1028)
2629
+ 1e8ffdc env: Add GitPod configuration
2630
+ d2dbc9e cq: Sort imports with isort (#1026)
2631
+ caeb039 build(deps): bump pytest-asyncio from 0.14.0 to 0.15.1 (#1027)
2632
+ bb7ff8f Fake device and tests for Companion (#1025)
2633
+ ddbe170 if: Add Apps interface to Companion (#1022)
2634
+ 8ebc67d knock: Suppress CancelledError exception (#1023)
2635
+ ea5d3ea Support for the Companion link protocol (#657)
2636
+ e033942 scripts: Add module to log output (#1017)
2637
+ 235484e build(deps): bump deepdiff from 5.2.3 to 5.3.0
2638
+ 646c6d6 doc: Add mermaid to support diagrams (#1014)
2639
+ b0c9355 chore: update types in CryptoPairingMessage to be optional (#1013)
2640
+ 9cb96ff mrp: Implement and enforce internal protocol state (fixes #1007) (#1009)
2641
+ df43f78 build(deps): bump flake8 from 3.9.0 to 3.9.1
2642
+ 6d42bf5 build(deps): bump typed-ast from 1.4.2 to 1.4.3
2643
+ d6ae8e9 dmap: Reset revision if push update fails (#1004)
2644
+ ea1f816 build(deps): bump pytest from 6.2.2 to 6.2.3
2645
+ 33acac2 atvlog: Exit if no output was generated (#1001)
2646
+ c59a3d3 build(deps): bump pylint from 2.7.2 to 2.7.4
2647
+ f3f7a1a atvlog: Support serving output via web server (#997)
2648
+ 377e0eb build(deps): bump pydocstyle from 5.1.1 to 6.0.0
2649
+ 00fa0cd protobuf: Bump lower version to 3.12.0 (#991)
2650
+ d291104 build(deps): bump flake8 from 3.8.4 to 3.9.0
2651
+ ```
2652
+
2653
+ ## 0.7.7 (2021-03-12)
2654
+
2655
+ **Changes:**
2656
+
2657
+ * Fix bug where apps would appear to crash on tvOS 14.5 (beta)
2658
+ * Add a retry to heartbeat loop
2659
+ * Add new script that parses logs: atvlog
2660
+
2661
+ **All changes:**
2662
+
2663
+ ```
2664
+ 60df163 mrp: Use GenericMessage for heartbeats (#975)
2665
+ 8df084f support: Convert knock to use asyncio (#988)
2666
+ 14196da gh: Add example to attach log to a bug report (#984)
2667
+ dbe734c build(deps-dev): bump tox from 3.22.0 to 3.23.0
2668
+ 1e1922e cq: Run pylint from tox (#979)
2669
+ 7464cb7 atvlog: Rename log2html and bundle it (#982)
2670
+ 34d2f53 log2html: Add separate include and exclude filters (#981)
2671
+ 0a6fa5e log2html: Add generation date and command (#980)
2672
+ 7184717 mrp: Add retry to heartbeats (#978)
2673
+ b0eaaef log2html: Allow toggling of showing date (#974)
2674
+ adda918 build(deps): bump mypy from 0.800 to 0.812
2675
+ fa8b05d gha: Save log for log2html using pygithub (#972)
2676
+ 7584a2c log2html: Fix broken log entry loading (#971)
2677
+ 090ba35 build(deps): bump deepdiff from 5.2.2 to 5.2.3 (#969)
2678
+ ce3fecd gha: Store issue/comment body as file for log2html (#970)
2679
+ 1ee2691 log2html: Support Home Assistant log format (#967)
2680
+ b9dcadc log2html: Add text and log level filtering (#966)
2681
+ 49b17f9 log2html: Render log entries with javascript (#965)
2682
+ 5935d50 build(deps-dev): bump tox from 3.21.4 to 3.22.0
2683
+ aa9b2cf gha: Generate html logs for logs in issues (#962)
2684
+ aa2aa18 log2html: Support environment variable as input (#961)
2685
+ dd91239 log2html: New script converting logs to HTML pages (#960)
2686
+ 659031e build(deps): bump pytest-xdist from 2.2.0 to 2.2.1
2687
+ 46aae2f build(deps-dev): bump tox from 3.21.3 to 3.21.4
2688
+ 49aab09 build(deps): bump mypy-protobuf from 1.23 to 1.24
2689
+ ```
2690
+
2691
+ ## 0.7.6 (2021-01-29)
2692
+
2693
+ **Changes:**
2694
+
2695
+ * DNS parsing has been re-written which should be more stable
2696
+ and handle more use cases
2697
+ * TCP keep-alive has been added to more platforms, FreeBSD being one of them
2698
+ * Player management has been totally re-written for MRP, so hopefully
2699
+ play state should be more accurate now
2700
+ * A delay has been added to turn\_off (MRP), so it should work again
2701
+ * A heartbeat loop has been added that sends a "heartbeat" to the device
2702
+ every 30s to detect connection problems
2703
+ * Protobuf definitions have been further lifted to match later tvOS versions
2704
+
2705
+ **Notes:**
2706
+
2707
+ * Fixed a bug where Playing instancess were not immutable
2708
+ * Push updates are only issued when something in the Playing instance changed.
2709
+ Previously, unrelated changes to the device could trigger push updates with
2710
+ the same content in Playing.
2711
+
2712
+ **All changes:**
2713
+
2714
+ ```
2715
+ 0994733 build(deps-dev): bump tox from 3.21.2 to 3.21.3 (#946)
2716
+ 8e0fc01 mrp: Add some protobuf messages for volume (#947)
2717
+ 5752ae3 mrp: Fix handling of active client (#944)
2718
+ 7e3bcf5 if: Convert Playing to data class (#943)
2719
+ 2b8fb74 build(deps): bump pytest from 6.2.1 to 6.2.2
2720
+ 607d78c build(deps): bump mypy from 0.790 to 0.800
2721
+ a77c453 build(deps-dev): bump tox from 3.21.1 to 3.21.2
2722
+ 393efbd build(deps): bump pytest-cov from 2.11.0 to 2.11.1
2723
+ 6bb284f build(deps): bump pytest-cov from 2.10.1 to 2.11.0
2724
+ 3c488b2 build(deps): bump deepdiff from 5.2.1 to 5.2.2
2725
+ cc41f33 mrp: Add support for heartbeats (#925)
2726
+ aec7362 mrp: Add support for heartbeats (#926)
2727
+ 9af7609 dns: Use UTF-8 for names, and (attempt) to handle dots in names (#927)
2728
+ b527506 build(deps-dev): bump tox from 3.21.0 to 3.21.1
2729
+ fdf843f mrp: Support default supported commands (#924)
2730
+ f0f7eaf mrp: Add delay in turn_off between commands (#923)
2731
+ df56149 mrp: Add fields to UpdateOutputDevice (#921)
2732
+ 280de0f Do not post duplicate push updates (#920)
2733
+ f9f7238 build(deps-dev): bump tox from 3.20.1 to 3.21.0
2734
+ aed9028 mrp: Fix a few playback state edge cases (#916)
2735
+ e176ce7 mrp: Improve client and player handling (#915)
2736
+ 3ca2b0f support: Add new tvOS versions to list (#913)
2737
+ ccfa5eb mrp: Major updates to protobuf messages (#912)
2738
+ 3eb9d3a Improve DNS message parsing for mDNS (#899)
2739
+ c524244 build(deps): bump deepdiff from 5.0.2 to 5.2.1
2740
+ 87a159e build(deps): bump typed-ast from 1.4.1 to 1.4.2
2741
+ e61fb47 Slightly refine protobuf and srptools base requirements (#902)
2742
+ b2e80b3 net: Use TCP keepalive on more platforms (#897)
2743
+ 03e4438 build(deps): bump codecov from 2.1.10 to 2.1.11
2744
+ f3dd0af build(deps): bump pytest from 6.2.0 to 6.2.1
2745
+ 5f3383b build(deps): bump pytest-xdist from 2.1.0 to 2.2.0
2746
+ 5ccb23f build(deps): bump pytest from 6.1.2 to 6.2.0
2747
+ ```
2748
+
2749
+ ## 0.7.5 (2020-12-08)
2750
+
2751
+ **Changes:**
2752
+
2753
+ * Revert to use random source port for MDNS
2754
+ * Fix "Received UpdateClientMessage for unknown player xxx""
2755
+
2756
+ **All changes:**
2757
+
2758
+ ```
2759
+ cd6d53f mdns: Revert binding to port 5353
2760
+ a394b52 mrp: Handle UpdateClient before SetState
2761
+ a3d46d3 build(deps): bump mypy from 0.782 to 0.790
2762
+ c648eaa update MANIFEST.in, add missing file
2763
+ 162f319 build(deps): bump pytest from 6.1.1 to 6.1.2
2764
+ f1a7223 build(deps): bump pdoc3 from 0.9.1 to 0.9.2
2765
+ 0b97aab build(deps): bump codespell from 1.17.1 to 2.0.0
2766
+ 795aaa7 Update setup.py, extend exclude mask
2767
+ 5e27bc7 gha: Fix python 3.9 and use env files
2768
+ ```
2769
+
2770
+ ## 0.7.4 (2020-10-12)
2771
+
2772
+ **Changes:**
2773
+
2774
+ * PIN code screen for MRP will now disappear after pairing
2775
+ * Less and more compact debug logs in mdns and knock
2776
+
2777
+ **All changes:**
2778
+
2779
+ ```
2780
+ 9f1d1d0 mrp: Verify credentials after pairing
2781
+ 1d799f2 cq: Minor clean ups and fixes
2782
+ 061add1 build(deps): bump codecov from 2.1.9 to 2.1.10
2783
+ dc31ac9 build(deps-dev): bump tox from 3.20.0 to 3.20.1
2784
+ ```
2785
+
2786
+ ## 0.7.3 (2020-10-08)
2787
+
2788
+ **Changes:**
2789
+
2790
+ * Minor hug fixes and clean ups, see all changes
2791
+
2792
+ **All changes:**
2793
+
2794
+ ```
2795
+ d2e5a33 mdns: Supress decoding errors
2796
+ fb8c621 mrp: Don't use deprecated home_hold internally
2797
+ dc52b5a mrp: Ack client updates messages
2798
+ 925f2b4 mdns: Bind to port 5353 instead of random port
2799
+ 8e54c64 build(deps): bump flake8 from 3.8.3 to 3.8.4
2800
+ f97ad68 build(deps): bump pytest from 6.1.0 to 6.1.1
2801
+ 08b7229 build(deps): bump pytest from 6.0.2 to 6.1.0
2802
+ e4172fa build(deps): bump pytest from 6.0.1 to 6.0.2
2803
+ de13ca1 build(deps-dev): bump tox from 3.19.0 to 3.20.0
2804
+ 319cd5c build(deps): bump pydocstyle from 5.1.0 to 5.1.1
2805
+ 0108425 build(deps): bump black from 19.10b0 to 20.8b1
2806
+ 1be9aaa gha: Bump codecov to 1.0.13
2807
+ 7af56cb build(deps): bump pdoc3 from 0.8.5 to 0.9.1
2808
+ 3654385 deps: Lower zeroconf requirement to 0.28.0
2809
+ 954171c net: Change accidental info to debug log
2810
+ 97e2579 build(deps): bump pdoc3 from 0.8.4 to 0.8.5
2811
+ ba7c581 build(deps): bump zeroconf from 0.28.1 to 0.28.2
2812
+ 8400103 build(deps): bump pytest-xdist from 2.0.0 to 2.1.0
2813
+ ```
2814
+
2815
+ ## 0.7.2 (2020-08-24)
2816
+
2817
+ **Changes:**
2818
+
2819
+ * Handle authority records in MDNS which fixes:
2820
+ `NotImplementedError: nscount > 0`
2821
+ * Do not require ACK for some remote control commands
2822
+ to be compatible with tvOS 14 (beta)
2823
+ * Abort scanning early when expected device (by identifier)
2824
+ is found
2825
+
2826
+ **All changes:**
2827
+
2828
+ ```
2829
+ 6a692e0 build(deps): bump pydocstyle from 5.0.2 to 5.1.0
2830
+ 5627304 build(deps): bump codecov from 2.1.8 to 2.1.9
2831
+ 7c40bce scan: Abort when device with identifier found
2832
+ 92ccf6c mrp: Require no ACK for HID messages
2833
+ fe4ea4d build(deps): bump zeroconf from 0.28.0 to 0.28.1
2834
+ b020b67 mdns: Add support for authority records
2835
+ ```
2836
+
2837
+ ## 0.7.1 (2020-08-16)
2838
+
2839
+ **Changes:**
2840
+
2841
+ * Fixed lots of issues with scanning
2842
+ * Improved performance for MRP playing information
2843
+ * Fixed wrong identifier for DMAP when MDNS name collision exists
2844
+ * Support for python 3.9 (beta)
2845
+
2846
+ **All changes:**
2847
+
2848
+ ```
2849
+ 8cec795 gha: Retry tox if first run fails
2850
+ d77c56f build(deps): bump pytest-xdist from 1.34.0 to 2.0.0
2851
+ a424f08 build(deps): bump pytest-cov from 2.10.0 to 2.10.1
2852
+ bb703ca scan: Fix DMAP identifier when name collides
2853
+ 2bcafb4 conf: Convert tests to pytest
2854
+ 91de62f build(deps): bump pytest from 5.4.3 to 6.0.1
2855
+ 68992d4 mdns: Fixes to make tests more stable
2856
+ f64b357 mdns: Extract functional tests
2857
+ 8d4edf3 mdns: Fix multicast issues
2858
+ d30350e support: Add level to log_binary
2859
+ 3ffa1ff build(deps-dev): bump tox from 3.18.0 to 3.19.0
2860
+ ff0ba00 build(deps): bump pytest-xdist from 1.33.0 to 1.34.0
2861
+ dfbd428 build(deps): bump deepdiff from 5.0.1 to 5.0.2
2862
+ d2d17b3 build(deps-dev): bump tox from 3.17.1 to 3.18.0
2863
+ a82d7e1 scan: Remove check if host is on any local subnet
2864
+ 23accc6 gha: Run tests with python 3.9
2865
+ 45d08c8 api: Convert Union[x, NoneType] to Optional[x]
2866
+ 104620c api: Print diff when API docs mismatch
2867
+ c173afb Resolve performance slowdown with copying playing data
2868
+ 14192d9 build(deps): bump codecov from 2.1.7 to 2.1.8
2869
+ c05c351 build(deps-dev): bump tox from 3.17.0 to 3.17.1
2870
+ 63ce14f build(deps): bump pytest-timeout from 1.4.1 to 1.4.2
2871
+ 71d1f80 build(deps-dev): bump tox from 3.16.1 to 3.17.0
2872
+ 61289c6 build(deps): bump pdoc3 from 0.8.3 to 0.8.4
2873
+ ```
2874
+
2875
+ ## 0.7.0 (2020-07-14)
2876
+
2877
+ **Changes:**
2878
+
2879
+ * Input actions (single/double tap and hold) are now supported
2880
+ * Support for aiohttp 4 (only tested with pre-release)
2881
+ * Possibility to wait for power state change in turn_on and turn_off
2882
+ * TCP keep-alive configured to detect stale connections
2883
+ * Implement custom scanning (not using 3rd party zeroconf library)
2884
+ * Switch back to zeroconf from aiozeroconf for service publishing
2885
+ * Deep sleep detection when scanning
2886
+ * Tunnel mode has been added to atvproxy
2887
+ * A delay command has been added to atvremote
2888
+ * Fix (potentially) for hanging connection after receiving artwork (MRP)
2889
+ * Fix bug in device state when app reports invalid playback rate (MRP)
2890
+ * Fix broken repeat handling (MRP)
2891
+ * Fix broken pairing (DMAP)
2892
+ * Fix missing application name (MRP)
2893
+
2894
+ **Notes:**
2895
+
2896
+ * This release contains re-written scanning logic which hopefully
2897
+ makes scanning more reliable (not 100% foolproof though). This
2898
+ re-write gives support for deep-sleep detection and better device
2899
+ model detection. It is however less tested, so bugs probably still
2900
+ exist. Please write bug reports.
2901
+ * TCP keep-alive and timeout timers are now configured. Keep alive
2902
+ messages are sent regularly and the connection will time out (and
2903
+ disconnect) after 20 seconds of no replies.
2904
+
2905
+
2906
+ **All changes:**
2907
+
2908
+ ```
2909
+ c7f8166 cq: Minor clean ups
2910
+ 9758d3d mrp: Potential fix for protocol hangs
2911
+ 2f2393e dmap: Fix pairing endpoint bug
2912
+ 8419376 scan: Migrate back to zeroconf from aiozeroconf
2913
+ 558213a build(deps): bump pytest-xdist from 1.32.0 to 1.33.0
2914
+ d1bb536 scan: Get device model from mdns
2915
+ cb010bf devinfo: Add lookup for internal names
2916
+ e2b95fe gha: Enable codecov again
2917
+ 11b297b atvremote: Add delay command
2918
+ 087fc50 device_info: Add some tvOS build numbers
2919
+ ef2849b scan: Extract scanners to a support module
2920
+ 9bcfafd mdns: Rename udns module to mdns
2921
+ 405ce01 scan: Add support for deep sleep detection
2922
+ c1ac7ce udns: Add Response type to unicast and multicast
2923
+ 100aeee mrp: Update protobuf for language options.
2924
+ 25d1f4b if: Add support for input actions in protocols
2925
+ da4c769 if: Add InputAction for relevant buttons
2926
+ 16f8e92 build(deps): bump deepdiff from 5.0.0 to 5.0.1
2927
+ c81d180 build(deps-dev): bump tox from 3.16.0 to 3.16.1
2928
+ ac842cd scan: Handle sleep proxy responses
2929
+ 8dea1f6 udns: Return service objects
2930
+ 0128a7e udns: Fix some unicode issues
2931
+ c48e979 scan: Add and use parser for MDNS services
2932
+ 73d3a1b udns: Add support for A records
2933
+ 83f0a42 udns: Extract test helpers to module
2934
+ 0f362a0 build(deps): bump pdoc3 from 0.8.1 to 0.8.3
2935
+ eb4bcf6 build(deps-dev): bump tox from 3.15.2 to 3.16.0
2936
+ 575dab6 build(deps): bump pytest-asyncio from 0.12.0 to 0.14.0
2937
+ 2c6f526 build(deps): bump deepdiff from 4.3.2 to 5.0.0
2938
+ 0154375 build(deps): bump mypy from 0.781 to 0.782
2939
+ 0ca534c build(deps): bump mypy from 0.780 to 0.781
2940
+ d5b24f2 udns: Cancel re-send loops properly
2941
+ 1104e7a cq: Fix broken sleep stub
2942
+ 51bd450 scan: Add more typing
2943
+ 7c3e1a0 scan: Add explicit bind to multicast scan
2944
+ 93f1281 scan: Custom scanning implementation
2945
+ 1ccbc57 net: Add method to get all private addresses
2946
+ 06c54a1 build(deps): bump mypy-protobuf from 1.22 to 1.23
2947
+ 7e33682 build(deps): bump pytest-timeout from 1.4.0 to 1.4.1
2948
+ 127ed5a mrp: Fix repeat state bug
2949
+ 9e10b1f build(deps): bump pytest-timeout from 1.3.4 to 1.4.0
2950
+ 885ebfb build(deps): bump codecov from 2.1.5 to 2.1.7
2951
+ 55efb9f build(deps): bump mypy-protobuf from 1.21 to 1.22
2952
+ 85d81a5 mrp: Use stringify for TLV8 errors
2953
+ 4a30354 hap_tlv8: Add stringify method
2954
+ 72ed37a hap_tlv8: Use enums instead of constants
2955
+ 8c145bf hap_tlv8: Use integer as key instead of string
2956
+ 7ddf8c4 hap_tlv8: Convert to pytest
2957
+ a26e12c mrp: Move tlv8 to support and rename
2958
+ 52d6237 build(deps): bump codecov from 2.1.4 to 2.1.5
2959
+ 5cf2d4f build(deps): bump pytest-cov from 2.9.0 to 2.10.0
2960
+ c726511 mrp: Configure TCP keep-alive
2961
+ 7d848eb mrp: Fix state when playback rate is wrong
2962
+ 6f0cb81 build(deps): bump flake8 from 3.8.2 to 3.8.3
2963
+ cae478a atvproxy: Simplify MRP usage
2964
+ 64c80b2 docs: Various updates to documentation
2965
+ af1322d build(deps-dev): bump tox from 3.15.1 to 3.15.2
2966
+ 3490e2b build(deps): bump mypy from 0.770 to 0.780
2967
+ 850e8d0 mrp: Clean up player path handling
2968
+ 557f418 cq: Exclude __pycache__ from black
2969
+ 41542a0 gha: Disable codecov as it's broken
2970
+ 688ec71 docs: Add a logo image and favicon
2971
+ 2619360 gha: Remove invalid codecov option
2972
+ 0cb12bd build(deps): bump codecov from 2.1.3 to 2.1.4
2973
+ e8da6fc power: Add await_new_state argument
2974
+ 2134f88 build(deps): bump pytest from 5.4.2 to 5.4.3
2975
+ a5cddd1 cq: Support for aiohttp 4
2976
+ 5458a30 mrp: Maintain last known app name
2977
+ eefbe29 Added information regarding playbackRate issue
2978
+ f2b5df8 atvproxy: Add tunnel support
2979
+ be6270d build(deps): bump mypy-protobuf from 1.20 to 1.21
2980
+ a5e01c6 doc: Add black badge to README
2981
+ 1b86065 build(deps): bump flake8 from 3.8.1 to 3.8.2
2982
+ cb6166c cq: Add dependabot config
2983
+ 7f443bf build(deps): bump pytest-cov from 2.8.1 to 2.9.0
2984
+ 8316679 build(deps): bump codespell from 1.16.0 to 1.17.1
2985
+ ef18612 build(deps): bump codecov from 2.1.1 to 2.1.3
2986
+ d9f9767 build(deps): bump flake8 from 3.7.9 to 3.8.1
2987
+ 3b6e5da build(deps-dev): bump tox from 3.15.0 to 3.15.1
2988
+ 153e798 build(deps): bump codecov from 2.0.22 to 2.1.1
2989
+ fa32dab build(deps): bump pytest from 5.4.1 to 5.4.2
2990
+ be953a6 build(deps): bump pytest-asyncio from 0.10.0 to 0.12.0
2991
+ 6883973 tests: Fix minor pytest incompatibilities
2992
+ 194e439 build(deps): bump pytest-xdist from 1.31.0 to 1.32.0
2993
+ 257d152 build(deps-dev): bump tox from 3.14.6 to 3.15.0
2994
+ 96adea5 cq: Run tests with base versions
2995
+ ```
2996
+
2997
+ ## 0.6.1 (2020-04-28)
2998
+
2999
+ **Changes:**
3000
+
3001
+ * Fixes compatibility issues with older protobuf versions
3002
+
3003
+ **All changes:**
3004
+
3005
+ ```
3006
+ 230cf9c mrp: Fixes to support older protobuf versions
3007
+ ```
3008
+
3009
+ ## 0.6.0 (2020-04-28)
3010
+
3011
+ **Changes:**
3012
+
3013
+ * Stream local files via AirPlay
3014
+ * Unicast scanning will now wake up sleeping devices automatically
3015
+ * Support for skip_forward and skip_backward
3016
+ * Support volume_up and volume_down (DMAP)
3017
+ * Artwork can be retrieved with custom width and height
3018
+ * top_menu now goes to main menu on tvOS
3019
+ * play_pause will be emulated by play/pause on tvOS if not natively supported
3020
+ * Fix retrieval of artwork with missing identifier
3021
+ * Many improvements to atvscript (timestamp, exception handling, etc.)
3022
+
3023
+ **Notes:**
3024
+
3025
+ * Default timeout for HTTP requests (DMAP and AirPlay) has been increased to
3026
+ 25 seconds to deal with waking up devices
3027
+ * Weak references are now used for all listeners, see
3028
+ https://pyatv.dev/support/troubleshooting if you have any problems
3029
+ * Unicast scanning for hosts outside of any local subnet will
3030
+ result in exceptions.NonLocalSubnetError
3031
+ * Resources are now properly cleaned up when closing a device, e.g.
3032
+ anything playing with AirPlay will be disconnected
3033
+ * Additional log points have been added and existing log points have been
3034
+ changed to be more consistent within pyatv
3035
+
3036
+ **All changes:**
3037
+
3038
+ ```
3039
+ e81e031 docs: Rename variable in credentials example
3040
+ 206b5de atvremote: Support width/height in artwork_save
3041
+ f023d88 mrp: Add support for artwork width/height
3042
+ 4f4b85a dmap: Add limited support for artwork width/height
3043
+ 42b38e3 if: Add width and height to artwork method
3044
+ d9986bc cq: Fix a bunch of TODOs in the code
3045
+ a4bd413 airplay: Use default timeout for HTTP requests
3046
+ bd580be docs: Inherit from listener interfaces
3047
+ c122c00 mrp: Add fallback for play_pause
3048
+ 3ec1fb6 cq: Clean up resources when closing a device
3049
+ e22b2a8 dmap: Minor log improvements to DAAP
3050
+ 6c41457 mrp: Fix TransationMessage definition
3051
+ ff7dbad mrp: Add more missing protobuf definitions
3052
+ 2cd723a cq: Fix warnings from tests
3053
+ 15aed64 atvscript: Add start log entry
3054
+ d0ca073 docs: Add apps section to FAQ
3055
+ 5f7d141 knock: Support for continuously knocking ports
3056
+ 95884fb udns: Send UDNS request every second
3057
+ 751e691 udns: Port knock to wake sleeping devices
3058
+ b533935 net: Change timeout to 25 seconds
3059
+ 32ce9ea mrp: Make connection listener into weakref
3060
+ 5544cd8 cq: Various debug log improvements
3061
+ d451bfd scan: Fix type bug in scan_hosts
3062
+ 8f56efb dmap: Add support for volume_up and volume_down
3063
+ 4c7140b docs: Clarify when no PIN is displayed
3064
+ 261b0b2 gha: Test on windows-latest
3065
+ 991ea6f udns: Verify address in any local subnet
3066
+ 2887a05 build(deps): bump pdoc3 from 0.8.0 to 0.8.1
3067
+ d79ba1a docs: Add stacktrace key to atvscript
3068
+ 7fb6ed0 mrp: Change topmenu to go to main menu
3069
+ 62b3e4e if: Use weak references for listeners
3070
+ 8fc8d90 docs: Add type annotations for properties
3071
+ cb3b08c build(deps): bump pdoc3 from 0.7.5 to 0.8.0
3072
+ 2be2a24 atvscript: Add debug flag
3073
+ 91c1b98 atvscript: Make more robust to errors
3074
+ 1b2262d mrp: Fix broken protobuf messages
3075
+ 9faed04 if: Change close to not be a coroutine
3076
+ a821a2c airplay: Add support for streaming local file
3077
+ 13cc9d3 mrp: Make Playing objects immutable
3078
+ e874ad2 docs: Minor updates for skip_forward/backward
3079
+ d16076a dmap: Implement skip_forward and skip_backward
3080
+ 6786d89 mrp: Implement skip_forward and skip_backward
3081
+ 9fe9f83 if: Add skip_forward and skip_backward
3082
+ b9fb540 cq: Add codespell for code and docs
3083
+ 40d54ec cq: Improvements to tox
3084
+ 89892bd atvscript: Add timestamp to output
3085
+ 755c507 atvscript: Add device listener
3086
+ 30c4f1f mrp: Add error codes
3087
+ 32b6c55 mrp: Fix naming bug I introduced
3088
+ 64f98fd mrp: Add error code to SendCommandResultMessage
3089
+ b82379c release: Adapt script to recent changes
3090
+ ca29655 release: Use current commit instead of master
3091
+ 5ca58a7 atvscript: Flush output of each line
3092
+ feca6ea mrp: Handle artwork without identifier
3093
+ 1486f62 atvscript: Treat empty strings as None
3094
+ b7f5d01 scan: Clean up pending service browsers
3095
+ ee5b828 Update issue templates
3096
+ 37c26ee build(deps): bump mypy-protobuf from 1.19 to 1.20
3097
+ a32aaa4 docs: Exclude internal function
3098
+ 768a449 bug: Make pairing interface consistent
3099
+ 33775cd mrp: Add tvOS 13.4 build number
3100
+ 44297ac docs: Update FAQ regarding AirPlay
3101
+ 861fc9b fake_device: Add initial support for AirPlay
3102
+ 5aeeed6 fake_device: Initial support for DMAP
3103
+ 3953301 fake_device: Add protocol flag for MRP
3104
+ 3ad6450 fake_device: Add demo mode in fake_device
3105
+ 4212173 tests: Multi-client support for fake MRP service
3106
+ fe24dc4 tests: Use one fake device with multiple services
3107
+ 72a79ba tests: Refactor fake devices
3108
+ 8a0f057 tests: Move all fake devices to common directory
3109
+ e6b80dd tests: Begin extraction of fake AirPlay state
3110
+ 67963d1 tests: Begin extraction of fake DMAP state
3111
+ 33e4c2c tests: Begin extraction of fake MRP state
3112
+ 84dec4a scripts: Add features to atvscript
3113
+ 20a2027 scan: Remove non-breaking space
3114
+ af2c4a2 docs: Fix typo in link
3115
+ 24087d8 gha: Remove push from trigger
3116
+ 0dcc36f docs: Add edit link at bottom
3117
+ 7abc2e3 docs: Various minor updates
3118
+ 04c86fe tests: Break out state in MRP fake device
3119
+ f088bcd scripts: Add start of fake device script
3120
+ 1f8480d tests: Clean up asserts in fake devices
3121
+ ```
3122
+
3123
+ ## 0.5.0 (2020-03-19)
3124
+
3125
+ **Changes:**
3126
+
3127
+ * Add power interface
3128
+ * Add device information interface
3129
+ * Add playing app interface
3130
+ * New scripts: atvscript and atvproxy
3131
+ * External interface now has type hints
3132
+ * Pure AirPlay devices are no longer returned by scan
3133
+ * Files have been moved around and the public interface
3134
+ is now well-defined
3135
+ * Documentation has moved to pyatv.dev
3136
+
3137
+ *Breaking Changes:*
3138
+
3139
+ * suspend and wakeup in the remote control interface are now
3140
+ deprecated. They did not work very well. Use the power interface
3141
+ instead.
3142
+ * Black is now used for linting and black does not support
3143
+ python 3.5, so support for python 3.5 has been dropped.
3144
+ * helpers.auto_connect is now a coroutine
3145
+
3146
+ **Notes:**
3147
+
3148
+ * Lots of updates to documentation and tests have been made
3149
+ * An API reference is now available at pyatv.dev
3150
+
3151
+ **All changes:**
3152
+
3153
+ ```
3154
+ 0cf6689 mrp: Support volume control features
3155
+ 11b59f1 protobuf: Workaround for older versions
3156
+ 9398768 docs: Minor fixes
3157
+ 947bb04 tests: Make push updates test more robust
3158
+ 40a45ea tests: Add initial tests for atvscript
3159
+ e3af8fc tests: Break out script test environment
3160
+ fae8525 tests: Fix broken sleep stub
3161
+ 865483a scan: Wait for pending tasks
3162
+ 365ae6d scripts: Add atvscript
3163
+ 10af6e9 scripts: Add atvproxy
3164
+ b96098e scripts: Move atvremote
3165
+ 0f8e5cd build(deps): bump codecov from 2.0.16 to 2.0.21
3166
+ a2143d5 build(deps): bump pytest from 5.3.5 to 5.4.1
3167
+ f45f879 test: Migrate from asynctest to pytest-asyncio
3168
+ b3fa547 docs: Add links to API reference
3169
+ f41cc11 docs: Add documentation for app support
3170
+ b91f5d5 mrp: Add app support
3171
+ 0dbe373 if: Add interface for app
3172
+ bdc01f3 docs: Fix relative links
3173
+ 5661c36 docs: Fix baseurl
3174
+ e3bcb7a docs: Change domain to pyatv.dev
3175
+ e8e364c Create CNAME
3176
+ 3917092 build(deps): bump mypy from 0.761 to 0.770
3177
+ 766b438 docs: Clean up and improve documentation
3178
+ 3c99ae6 features: Add tests for features
3179
+ 364ac39 atvremote: Add support for features
3180
+ 6a97526 docs: Add documentation for features
3181
+ a63ed69 mrp: Add basic support for features
3182
+ 1cee19c dmap: Add basic support for features
3183
+ a025cdd if: Add interface for supported features
3184
+ dbc75fa protobuf: Update messages
3185
+ 86cecad docs: Add API documentation
3186
+ 1912891 mrp: Subscribe to volume updates
3187
+ 778257f cq: Add typing hints to public interface
3188
+ 6bf74e7 cq: Handle invalid credentials
3189
+ 5a6c8de cq: Remove need for ed25519
3190
+ b2b8e58 cq: Remove need for curve25519-donna
3191
+ 18d3894 cq: Remove need for tlslite-ng
3192
+ cf3048d if: Add support for play_pause
3193
+ 181adc9 cq: Move internal modules to support directory
3194
+ eaf5176 cq: Move from pylint to black for linting
3195
+ 5e056f1 if: Deprecate suspend and wakeup
3196
+ 08b0b37 scan: Do not include pure AirPlay devices
3197
+ ```
3198
+
3199
+ ## 0.4.1a1 (2020-03-02)
3200
+
3201
+ **Changes:**
3202
+
3203
+ * Add power interface
3204
+ * Add device information interface
3205
+ * Convert module (convert.py) is now public API
3206
+
3207
+ **Notes:**
3208
+
3209
+ * General improvements to protobuf handling (for developers)
3210
+
3211
+ **All changes:**
3212
+
3213
+ ```
3214
+ e4f6590 devinfo: Minor clean ups
3215
+ d645d5a devinfo: Add device_info to atvremote
3216
+ 33622b8 devinfo: Get version from osvers
3217
+ e3ad40b devinfo: Add documentation
3218
+ df8f6a1 devinfo: Clean up zeroconf properties
3219
+ 908d2ea devinfo: Add support for device info
3220
+ 8da7fd2 devinfo: Add helpers for extracting device info
3221
+ cb8d73a if: Add interface for device information
3222
+ d8624fd MRP Power State support (#458)
3223
+ 1f97630 if: Tidy up convert module and make it public
3224
+ ce926b0 protobuf: Move pyatv imports in protobuf.py
3225
+ 554d965 gha: Trigger on both push and pull_request
3226
+ a8ab245 gh: Run actions on pull requests
3227
+ 024284b mrp: Add some protobuf definitions for voice
3228
+ ac3ae13 mrp: Wait for command responses
3229
+ c765dbe mrp: Download protoc and verify generated code
3230
+ 070946f Bump codecov from 2.0.15 to 2.0.16
3231
+ ```
3232
+
3233
+ ## 0.4.0 (2020-02-20)
3234
+
3235
+ **Changes:**
3236
+
3237
+ The 0.4.0 release is here! It contains too many changes to list.
3238
+ Have a glance a pre-releases to get an idea of what it contains.
3239
+
3240
+ **All changes:**
3241
+
3242
+ ```
3243
+ 46a5399 docs: Add basic migration instructions
3244
+ f0789c1 Bump mypy-protobuf from 1.18 to 1.19
3245
+ ```
3246
+
3247
+ ## 0.4.0a16 (2020-02-18)
3248
+
3249
+ **Changes:**
3250
+
3251
+ * Fixes position in MRP
3252
+
3253
+ **All changes:**
3254
+
3255
+ ```
3256
+ 511e83e mrp: Fix calcuation of position
3257
+ 1ba1030 scan: Remove non-breaking space in names
3258
+ ```
3259
+
3260
+ ## 0.4.0a15 (2020-02-15)
3261
+
3262
+ **Changes:**
3263
+
3264
+ * Fix minor state bug and implement seeking in MRP
3265
+
3266
+ **All changes:**
3267
+
3268
+ ```
3269
+ 9ab37c6 Change zeroconf warning to debug
3270
+ 3155e84 mrp: Fix device state handling
3271
+ 7b6aacb Bump mypy-protobuf from 1.17 to 1.18
3272
+ ```
3273
+
3274
+ ## 0.4.0a14 (2020-02-11)
3275
+
3276
+ **Changes:**
3277
+
3278
+ * Added some missing DMAP tags
3279
+ * Limit log print outs to not flood logs
3280
+ * Minor updates to protobuf definitions
3281
+
3282
+ **All changes:**
3283
+
3284
+ ```
3285
+ 5f46dac Consolidate protobuf scripts into one script
3286
+ 0cfb9fc Ignore some unknown DMAP tags
3287
+ ad95943 Supress unknown DMAP media kind
3288
+ 413eb32 Add some missing DMAP tags
3289
+ bfa5a45 New protobuf message and minor updates
3290
+ 8ee3183 Limit log printouts for binary data att protobuf
3291
+ ```
3292
+
3293
+ ## 0.4.0a13 (2020-01-31)
3294
+
3295
+ **Changes:**
3296
+
3297
+ * Fixed bug where device state would be reported as "paused"
3298
+ when playing (yielding incorrect position as side-effect). This
3299
+ also fixes delta updates, where metadata would sometimes be
3300
+ lost.
3301
+ * Fixed bug where a crash would occur if a device had a = (0x3D)
3302
+ in its MAC-address
3303
+ * Added artwork_id to metadata that gives a unique id for artwork
3304
+ * Use cache for artwork that saves the latest four artworks
3305
+ * Identifiers in config is now prioritized in order
3306
+ MRP, DMAP and AirPlay
3307
+ * AirPlay is not handled specially in config now. If no AirPlay
3308
+ service is added, no service will be implicitly created.
3309
+ * Error handling (raised exceptions) are now more consistent
3310
+ when pairing
3311
+
3312
+ *Breaking changes*
3313
+
3314
+ * AirPlay interface has been renamed to "stream", e.g. use
3315
+ atv.stream.play_url instead of atv.airplay.play_url.
3316
+
3317
+ **Notes:**
3318
+
3319
+ * Running tests on Windows works again
3320
+ * This release contains a lot new test coverage and all "common"
3321
+ functional tests have been ported to MRP
3322
+ * Last documentation have been migrated to markdown
3323
+ * Moved from travis to GitHub actions
3324
+
3325
+ **All changes:**
3326
+
3327
+ ```
3328
+ 635ec68 Change last files from rst to markdown
3329
+ cff609d Remove AirPlay as special case
3330
+ 63f230a Change AirPlay interface to Stream interface
3331
+ d11fba1 Add priority to identifiers in config
3332
+ 17c685d Improve device state and delta updates in MRP
3333
+ bcb69de Use content id as hash in MRP
3334
+ 7443118 Bump mypy-protobuf from 1.16 to 1.17
3335
+ c1c9dac Bump pytest from 5.3.4 to 5.3.5
3336
+ 9aff539 Fixes to push updates, error handling and more
3337
+ dec3cb3 Minor clean ups and additional coverage
3338
+ a383b66 Add timestamp to debug log in atvremote
3339
+ be01d8a Add codecov upload to test workflow
3340
+ 713694a Remove travis configuration
3341
+ 0d06c5a Fix tests on Windows
3342
+ a95a3dc Run tests with GitHub actions
3343
+ 11b8155 Add simple LRU cache for artwork
3344
+ bdf76e0 Fix bug i TXT handling in UDNS
3345
+ 61cd843 Add tests for MRP authentication
3346
+ 830448f Extract SRP server code in proxy
3347
+ cb0018a Unicast scanning does not work between networks
3348
+ bdfcac0 Use pytest-xdist in tox
3349
+ 6b50f2a Migrate last common functional tests
3350
+ 1e67b95 Move more functional tests to common
3351
+ b3b9225 Bump pytest from 5.3.3 to 5.3.4
3352
+ d49837d Re-raise OSError during AirPlay pairing on errors
3353
+ 6ed3dee Bump pytest from 5.3.2 to 5.3.3
3354
+ ```
3355
+
3356
+ ## 0.4.0a12 (2020-01-19)
3357
+
3358
+ **Changes:**
3359
+
3360
+ * Minor bug fixes and improvements, see log below
3361
+
3362
+ **All changes:**
3363
+
3364
+ ```
3365
+ 0c68936 Some updates to the MRP proxy
3366
+ c25fe5d Add temporary test for credentials in atvremote
3367
+ 1b9f395 Initial clean-up of pairing and auth exceptions
3368
+ 72fc6f0 Release resources when closing in DMAP pairing
3369
+ f2d91b0 Avoid closing external aiohttp session in MRP
3370
+ 05abc25 Bump typed-ast from 1.4.0 to 1.4.1
3371
+ e00c6a4 Set unicast bit in qtype field
3372
+ 6a55c73 Bump pydocstyle from 5.0.1 to 5.0.2
3373
+ 34cb7ff Handle NaN durations in MRP
3374
+ ```
3375
+
3376
+ ## 0.4.0a11 (2020-01-09)
3377
+
3378
+ **Changes:**
3379
+
3380
+ * Support for unicast scanning
3381
+ * Added wakeup command in remote control interface
3382
+ * Mostly quality release with minor bug fixes and more tests
3383
+
3384
+ **Notes:**
3385
+
3386
+ * Breaking changes in this release due to change to enums (6018ba2)
3387
+
3388
+ **All changes:**
3389
+
3390
+ ```
3391
+ 998e77c Minor bug fixes
3392
+ d0eacb0 Bump flake8 from 3.7.8 to 3.7.9
3393
+ a5c8d68 Bump mypy from 0.730 to 0.761
3394
+ a9aa1c4 Bump pydocstyle from 4.0.1 to 5.0.1
3395
+ 98a72bb Support for scanning specific hosts
3396
+ a3560e5 Bump pytest-timeout from 1.3.3 to 1.3.4
3397
+ 64fcd2e Bump mypy-protobuf from 1.15 to 1.16
3398
+ 87f07ee Clean up tox and move from coveralls to codecov
3399
+ 6496548 Refactor scanning code
3400
+ 6018ba2 Change from constants to enums in const.py
3401
+ ca8ae64 Fix position in MRP when elapsed time is missing
3402
+ deb7374 Additional atvremote tests
3403
+ 4a2b27e Add first "playing" functional test to MRP
3404
+ 5001d18 Rename play_state to device_state
3405
+ 1c5f3b3 Fix flaky home button test in MRP
3406
+ 918e2be Add some additional tests for MRP
3407
+ 2f1b32a Add wakeup command to RemoteControl
3408
+ 72e31a9 Update artwork documentation
3409
+ 8d0b4a6 Update feature table in documentation
3410
+ ```
3411
+
3412
+ ## 0.4.0a10 (2019-12-11)
3413
+
3414
+ **Changes:**
3415
+
3416
+ * Support for artwork in MRP
3417
+ * Retry attempts in AirPlay
3418
+ * Better test coverage
3419
+
3420
+ **All changes:**
3421
+
3422
+ ```
3423
+ f5f775b Add retry attempts when AirPlay streaming fails
3424
+ 680bdcf Initial support for artwork in MRP
3425
+ a9f0ca9 Add documentation for manual mode in atvremote
3426
+ 5d89ec9 Add Investigation to issue templates
3427
+ 107c691 Add initial smoke tests for atvremote
3428
+ e45deba Prepare for adding MRP tests
3429
+ 4644158 Add AirPlay test for new credentials
3430
+ ```
3431
+
3432
+ ## 0.4.0a9 (2019-12-07)
3433
+
3434
+ **All changes:**
3435
+
3436
+ ```
3437
+ c25da51 Fix MRP idle state
3438
+ ```
3439
+
3440
+ ## 0.4.0a8 (2019-12-06)
3441
+
3442
+ **Changes:**
3443
+
3444
+ * Leading zeros when pairing AirPlay works now
3445
+
3446
+ **All changes:**
3447
+
3448
+ ```
3449
+ bf71b8f Include all changes from git in CHANGES.rst
3450
+ 3086be5 Create release branch automatically
3451
+ 4e8854a Support leading zeros for PINs in AirPlay
3452
+ ```
3453
+
3454
+ ## 0.4.0a7 (2019-12-05)
3455
+
3456
+ *Noteworthy:*
3457
+
3458
+ * Better handling of PINs with leading zeros in MRP
3459
+ * No re-use of ClientSession in AirPlay hopefully fixes dangling
3460
+ connections (i.e. spinng wheel after playback)
3461
+ * Documentation finalized
3462
+
3463
+ **All changes:**
3464
+
3465
+ ```
3466
+ ed026dc Add initial script to make releases
3467
+ 514272f Add interface to report device disconnects
3468
+ 6607187 [fix] typo in getting_started.md
3469
+ 703ccc7 Support PINs with leading zeros in MRP
3470
+ 98a4d53 General clean-up of various parts
3471
+ 69a22e0 [fix] Other typo in getting_started.md
3472
+ b538644 Do not re-use ClientSession for AirPlay
3473
+ aa8f629 Throw exception if MRP pairing fails
3474
+ 652b039 Finalize documentation for 0.4.0
3475
+ 1cd5508 Add initial text about concepts to documentation
3476
+ 5b51db5 Add badge to LGTM
3477
+ ```
3478
+
3479
+ ## 0.4.0a6 (2019-11-26)
3480
+
3481
+ **All changes:**
3482
+
3483
+ ```
3484
+ ffc4b40 Fix connection handling in MRP pairing
3485
+ ```
3486
+
3487
+ ## 0.4.0a5 (2019-11-26)
3488
+
3489
+ **All changes:**
3490
+
3491
+ ```
3492
+ 96f3b81 Update dmap implementation
3493
+ f81aeab Update __init__.py
3494
+ f133fb8 Implement asyncio.sleep
3495
+ 9e9dfdc Add MRP functionality
3496
+ 4765565 Make corrections to MRP flow
3497
+ 2906e34 Return MRP credentials as string after pairing
3498
+ 88bf241 Specify device with -n in atvremote
3499
+ ```
3500
+
3501
+ ## 0.4.0a4 (2019-11-20)
3502
+
3503
+ **Changes:**
3504
+
3505
+ ```
3506
+ cfa0514 Fix push updater in MRP
3507
+ 945a2d6 Add set_credentials to conf.AppleTV
3508
+ 0373c5d Add "back off" exception to MRP
3509
+ 32d4e58 Add service property to PairingHandler
3510
+ 81d74cd fixed credentials reference to .service.credentials
3511
+ 1c2029c Use pyatv as title on main page in documentation
3512
+ ```
3513
+
3514
+ ## 0.4.0a3 (2019-11-15)
3515
+
3516
+ Same as a2 (I never learn...).
3517
+
3518
+ ## 0.4.0a2 (2019-11-15)
3519
+
3520
+ Third pre-release. Most stuff is in place now except for tests and documentation.
3521
+
3522
+ ## 0.4.0a1 (2019-10-08)
3523
+
3524
+ Second pre-release which is basically the same as first, but I messed up and missed
3525
+ a few commits...
3526
+
3527
+ ## 0.4.0a0 (2019-10-08)
3528
+
3529
+ First pre-release of 0.4, too many changes to list. But initial MRP support
3530
+ is the biggest addition.
3531
+
3532
+ ## 0.3.9 (2017-12-12)
3533
+
3534
+ *Changes*
3535
+
3536
+ * Handle re-login properly in case of connection problems or if a device is
3537
+ restarted
3538
+
3539
+ ## 0.3.8 (2017-11-17)
3540
+
3541
+ **Changes:**
3542
+
3543
+ * Revert some of the earlier AirPlay clean ups from 0.3.5 as that made playback
3544
+ less reliable
3545
+ * Use binary plist instead of text format in play_url to make AirPlay work with
3546
+ later versions of tvOS
3547
+
3548
+ ## 0.3.6 (2017-10-01)
3549
+
3550
+ **Changes:**
3551
+
3552
+ * Fix string conversion for idle state (#120)
3553
+
3554
+ ## 0.3.5 (2017-09-26)
3555
+
3556
+ **Changes:**
3557
+
3558
+ * Fix support for genre (#106)
3559
+ * Handle playstate idle/0 (#115)
3560
+ * Improve session handling in AirPlay (#118)
3561
+
3562
+ ## 0.3.4 (2017-07-18)
3563
+
3564
+ **Changes:**
3565
+
3566
+ * Add long_description to get description on pypi
3567
+
3568
+ ## 0.3.3 (2017-07-18)
3569
+
3570
+ **Changes:**
3571
+
3572
+ * Fixed broken device_id function (always generated same id)
3573
+
3574
+ *atvremote:*
3575
+
3576
+ * Fixed argument handling, e.g. when using play_url
3577
+
3578
+ ## 0.3.2 (2017-06-20)
3579
+
3580
+ **Notes:**
3581
+
3582
+ * Same as 0.3.1 but fixed with pypi
3583
+
3584
+ ## 0.3.1 (2017-06-20)
3585
+
3586
+ **Changes:**
3587
+
3588
+ * Add device_id
3589
+ * Remove developer commands
3590
+
3591
+ ## 0.3.0 (2017-06-19)
3592
+
3593
+ **Changes:**
3594
+
3595
+ * Support AirPlay device authentication
3596
+ * Support arrow keys (left, right, up, down)
3597
+ * Support scanning for Apple TVs with home sharing disabled
3598
+ * Support for shuffle and repeat modes
3599
+ * Support for "stop" button
3600
+ * Handle additional media kinds
3601
+ * New "hash" function in Playing API
3602
+ * Support python 3.6
3603
+ * Bump aiohttp to 1.3.5 and support 2.0.0+
3604
+
3605
+ *atvremote:*
3606
+
3607
+ * Multiple commands can be given to atvremote
3608
+ * Doing "atvremote commands" requires no device and is a lot faster
3609
+ * All commands now listed with "atvremote commands"
3610
+ * New "help" command in atvremote
3611
+ * Fix atvremote exit codes
3612
+
3613
+ **Notes:**
3614
+
3615
+ * play_url has moved to the new airplay module and no longer
3616
+ accepts start position as required argument. This is a
3617
+ breaking change!
3618
+
3619
+ *Other:*
3620
+
3621
+ * Upgrade test tools (pylint, flake, etc.)
3622
+ * Added documentation to readthedocs
3623
+
3624
+ ## 0.2.2 (2017-03-04)
3625
+
3626
+ **Changes:**
3627
+
3628
+ * Allow custom pairing guid when pairing
3629
+
3630
+ **Notes:**
3631
+
3632
+ * By default, a random pairing guid is now generated when calling
3633
+ pyatv.pair_with_apple_tv.
3634
+
3635
+ ## 0.2.1 (2017-02-28)
3636
+
3637
+ **Changes:**
3638
+
3639
+ * Always trigger one push update when starting
3640
+
3641
+ ## 0.2.0 (2017-02-23)
3642
+
3643
+ **Changes:**
3644
+
3645
+ * Support for push updates
3646
+ * Fast auto discovery for single device
3647
+ * Nicer output in "atvremote playing"
3648
+ * Pairing improvements
3649
+ * Unpin external dependencies
3650
+
3651
+ *Other:*
3652
+
3653
+ * Easier version management (internal)
3654
+ * Code quality improvements (quantifiedcode)
3655
+
3656
+ ## 0.1.4 (2017-02-11)
3657
+
3658
+ **Changes:**
3659
+
3660
+ * Added new function: artwork_url
3661
+ * aiohttp bumped to 1.3.1
3662
+
3663
+ ## 0.1.3 (2017-02-09)
3664
+
3665
+ **Changes:**
3666
+
3667
+ * Made it possible to pass a custom ClientSession
3668
+
3669
+ **Notes:**
3670
+
3671
+ * Renamed topmenu to top_menu which is a breaking change
3672
+
3673
+ ## 0.1.2 (2017-02-09)
3674
+
3675
+ **Changes:**
3676
+
3677
+ * aiohttp bumped to 1.3.0
3678
+ * Fix a potential request leak on error
3679
+
3680
+ ## 0.1.1 (2017-02-07)
3681
+
3682
+ This is the same as 0.1.0 but actually contains everything stated
3683
+ in the changes.
3684
+
3685
+ ## 0.1.0 (2017-02-07)
3686
+
3687
+ **Changes:**
3688
+
3689
+ * Pairing
3690
+ * Support both HSGID and pairing-guid
3691
+ * Play media by specifying a URL (via AirPlay)
3692
+ * atvremote artwork will now save to file (artwork.png)
3693
+ * Zeroconf bumped to 0.18.0
3694
+
3695
+ **Notes:**
3696
+
3697
+ * asyncio loop is now passed to pyatv.scan_for_apple_tvs which breaks
3698
+ previous API
3699
+
3700
+ *Other:*
3701
+
3702
+ * Automatic builds with travis
3703
+ * Code coverage reports with coveralls
3704
+
3705
+ ## 0.0.1 (2017-02-01)
3706
+
3707
+ * Initial version
3708
+