Releases: postlund/pyatv
XOR
0.10.0 XOR (2022-01-23)
It's a new year and time for a new release with a few bug fixes:
- Play state was reported inconsistently with iOS (MRP) and is now fixed
- Pairing requirement was incorrectly reported as mandatory for Companion
and AirPlay in some cases - All internal resources are now de-allocated when a connection is closed or
lost, so no need to call for instance push_updater.stop - Initial support to scan with python-zeroconf. Internal multicast and unicast
methods will be ported to this over time.
This release drops support for python 3.6, mainly due to python-zeroconf not
supporting that version. My intention is to not support EOL versions of python
in the future.
Changes:
Protocol: MRP:
02202ff mrp: Fix play state bug
Protocol: AirPlay:
da51ff4 airplay: Fix pairing requirement bug
Protocol: Companion:
baf4a9f companion: Fix pairing requirement flag
Protocol: RAOP:
c74e710 raop: Fix stream from buffer bug
e7afb7e raop: Use requests instead of urllib in web stream
0db2447 raop: Override volume from other protocols
Other:
52a0f03 scan: Add support for scanning with AsyncZeroconf
55ef75c deps: Deprecate python 3.6
204049b Ensure knock exceptions are retrieved
df6047a deps: Add requests as dependency
b099169 gha: Don't build for armv7
d6ffbd2 facade: Stop push updaters on close
37f6a1a core: Dispatch volume changes in protocols
All changes:
02202ff mrp: Fix play state bug
52a0f03 scan: Add support for scanning with AsyncZeroconf
4d3687e build(deps): bump types-protobuf from 3.19.4 to 3.19.5 in /requirements
3e90c65 build(deps): bump mypy-protobuf from 3.0.0 to 3.1.0 in /requirements
6c58037 build(deps): bump pytest-asyncio from 0.16.0 to 0.17.2 in /requirements
55ef75c deps: Deprecate python 3.6
baf4a9f companion: Fix pairing requirement flag
261cbb6 build(deps): bump types-requests from 2.27.5 to 2.27.7 in /requirements
c7c40c8 Fixes and amendments to protocols doc.
1b3e09e build(deps): bump pytest-timeout from 2.0.2 to 2.1.0 in /requirements
ef88032 build(deps): bump types-protobuf from 3.19.0 to 3.19.4 in /requirements
b386ae0 build(deps): bump protobuf from 3.19.1 to 3.19.3 in /requirements
6b50822 build(deps): bump types-protobuf from 3.18.4 to 3.19.0 in /requirements
4ed1f55 build(deps): bump types-protobuf from 3.18.3 to 3.18.4 in /requirements
e40be8d build(deps): bump bitarray from 2.3.4 to 2.3.5 in /requirements
bb79792 build(deps): bump mypy from 0.930 to 0.931 in /requirements
182ffdd build(deps): bump types-requests from 2.26.3 to 2.27.5 in /requirements
8a7ec5d build(deps): bump requests from 2.27.0 to 2.27.1 in /requirements
0217895 build(deps): bump miniaudio from 1.45 to 1.46 in /requirements
d9cdad9 build(deps): bump types-protobuf from 3.18.2 to 3.18.3 in /requirements
cb05378 build(deps): bump requests from 2.26.0 to 2.27.0 in /requirements
01cbdf6 skip test on legacy 3.7
b2960bf skip test on legacy 3.7
fed3288 skip test on legacy 3.7
a9373e4 Ensure knock exceptions are retrieved
18d523d Ensure knock exceptions are retrieved
1b01ab4 Ensure knock exceptions are retrieved
204049b Ensure knock exceptions are retrieved
c2c5436 build(deps): bump types-requests from 2.26.2 to 2.26.3 in /requirements
f4cd28f build(deps): bump mypy from 0.921 to 0.930 in /requirements
b18b0f0 build(deps): bump zeroconf from 0.37.0 to 0.38.1 in /requirements
5a67911 build(deps): bump mypy from 0.920 to 0.921 in /requirements
df6047a deps: Add requests as dependency
c74e710 raop: Fix stream from buffer bug
b099169 gha: Don't build for armv7
e7afb7e raop: Use requests instead of urllib in web stream
09e7076 core: Introduce Core in protocols
28ec1f7 build(deps): bump deepdiff from 5.6.0 to 5.7.0 in /requirements
da51ff4 airplay: Fix pairing requirement bug
d6ffbd2 facade: Stop push updaters on close
0db2447 raop: Override volume from other protocols
37f6a1a core: Dispatch volume changes in protocols
18decdf mrp: Fix protocol bug in state dispatcher
6918c11 build(deps): bump typed-ast from 1.4.3 to 1.5.1 in /requirements
f514e43 build(deps): bump mypy from 0.910 to 0.920 in /requirements
Vanny
0.9.8 Vanny (2021-12-15)
Here is yet another release with a bunch of bug fixes and improvements:
- Calling public interface methods after disconnecting now results
inBlockedStateError
being raised power_state
now depends ondevice_state
. Because of the unreliable
method used to derivepower_state
, a device could be reported as
powered off while playing some media, which doesn't make sense. As
long asdevice_state
is notidle
, the power state will be reported
as on.- Button presses in MRP should be more reliable and not skipped or
repeated now. netifaces
has been replaced byifaddr
due to lack of a maintainer.- A few fixes have been made for MRP on devices running tvOS <= 14.
- The pause
pause
in RAOP will now stops playback. This is merely
because it's not implemented yet and aligns better with Home
Assistant for now.
Changes:
Protocol: MRP:
18d7a6e mrp: Do not disable MRP service for older tvOS
9541d21 mrp: Fix erroneous button press behavior (#1521)
74d38b2 mrp: Add enable_encryption to connection
Protocol: AirPlay:
3065d6c airplay: Be stricter when setting up remotecontrol
Protocol: RAOP:
f0c4c33 raop: Let pause button stop playback
Other:
6540c49 facade: Block calls to public methods after close
c6e9466 facade: Make Power interface respect play status
4b0136b dep: Migrate from netifaces to ifaddr
All changes:
732339f protobuf: Fix support on Windows
ba5e6bb protobuf: Use version from base_versions.txt
4d565d8 gh: Update question issue
23be7cb build(deps): bump cryptography from 36.0.0 to 36.0.1 in /requirements
ff13e68 mdns: Quiet error log if address cannot be added
3065d6c airplay: Be stricter when setting up remotecontrol
18d7a6e mrp: Do not disable MRP service for older tvOS
9541d21 mrp: Fix erroneous button press behavior (#1521)
6713225 build(deps): bump pytest-timeout from 2.0.1 to 2.0.2 in /requirements (#1529)
2009c18 knock Ensure knock yields to the event loop often enough to avoid blocking (#1515)
6540c49 facade: Block calls to public methods after close
2d4d526 support: Add shield module
b00dbf4 build(deps): bump pytest-xdist from 2.4.0 to 2.5.0 in /requirements
f555e46 core: Clean up dispatchers
67fcb09 core: Specialize StateDispatcher in protcols
a72947d core: Prevent duplicates from state producer
f27c5a4 if: Remove loop argument to PushUpdater
c6e9466 facade: Make Power interface respect play status
c67819b core: Add main_protocol to Relayer
c84bf4a core: Add base support for internal state updates
605b1a6 core: Add filtering to MessageDispatcher
2d0a1ca core: Support plain functions in MessageDispatcher
4b0136b dep: Migrate from netifaces to ifaddr
f0c4c33 raop: Let pause button stop playback
74d38b2 mrp: Add enable_encryption to connection
Springtrap
0.9.7 Springtrap (2021-12-05)
It's already Decemeber, how did that happen? Not sure... Anyways, I've
prepared a small update with few neat things:
- Implemented a missing type in OPACK that raised an exception when
connecting to Companion for some people (TypeError: 0xc0
) - More buttons are supported by Companion as we as proper feature reporting
for some of them - A persistent connection is now set up to Companion. The active device listener
is called if connection is lost. - A copy is now made of the configuration passed to
pyatv.connect
which
means a config cannot be modified after connecting anymore - Experimental support for streaming via HTTP(S) has been added to
stream_file
Changes:
Protocol: MRP:
f6a8973 mrp: Migrate protocol to MessageDispatcher
Protocol: Companion:
dd44437 companion: Use XID for message dispatch
825912d companion: Move CompanionAPI to separate module
a02b3b9 companion: Do not wait for initial event update
5a765bc companion: Fix button presses for HID buttons
ceddc9f companion: Add support for additional commands
8c7ed2f companion: Improve tests for sessions and events
5f0cb39 companion: Support playback control availability
b3d69a7 companion: Events and persistent connection
4b7e832 opack: Handle pointers properly
Protocol: RAOP:
cf11b42 raop: Support streaming from HTTP(s)
Other:
a1a357a core: Add enabled state to services
8b0c82e env: Fix broken GitPod integration
5eb4152 core: Create copy of config in connect
0227529 docs: Add example connect_with_credentials.py
All changes:
cf11b42 raop: Support streaming from HTTP(s)
a1a357a core: Add enabled state to services
4b7e832 opack: Handle pointers properly
8b0c82e env: Fix broken GitPod integration
f1a2b79 build(deps): bump types-protobuf from 3.18.1 to 3.18.2 in /requirements
1b18cd3 build(deps): bump mediafile from 0.8.1 to 0.9.0 in /requirements
0c4ced5 build(deps): bump aiohttp from 3.8.0 to 3.8.1 in /requirements
e328417 build(deps): bump black from 21.10b0 to 21.11b1 in /requirements
c4fc994 build(deps): bump zeroconf from 0.36.11 to 0.37.0 in /requirements
9ec3559 build(deps): bump cryptography from 35.0.0 to 36.0.0 in /requirements
e8ae699 build(deps): bump types-protobuf from 3.18.0 to 3.18.1 in /requirements
a70609d build(deps): bump pylint from 2.11.1 to 2.12.1 in /requirements
6d50e0c docs: Clarifications for data channel payload
d1bc5ee cq: Remove unwanted files
c623b39 net: Log instead of raise in tcp_keepalive
721872d build(deps): bump isort from 5.10.0 to 5.10.1 in /requirements
486dbcf build(deps): bump isort from 5.9.3 to 5.10.0 in /requirements
5eb4152 core: Create copy of config in connect
34e9c67 conf: Implement __deepcopy__ in BaseConfig
98abc57 conf: Implement __deepcopy__ in BaseConfig
b71a415 build(deps): bump aiohttp from 3.7.4.post0 to 3.8.0 in /requirements
b478c9d env: Rebuild miniaudio in tests workflow
70a6f94 conf: Ignore services with missing identifier
9393873 build(deps): bump black from 21.9b0 to 21.10b0 in /requirements
e73f256 build(deps): bump zeroconf from 0.36.9 to 0.36.11 in /requirements
dd44437 companion: Use XID for message dispatch
825912d companion: Move CompanionAPI to separate module
a02b3b9 companion: Do not wait for initial event update
5a765bc companion: Fix button presses for HID buttons
ceddc9f companion: Add support for additional commands
f6a8973 mrp: Migrate protocol to MessageDispatcher
d1332e8 core: Add generic MessageDispatcher
8c7ed2f companion: Improve tests for sessions and events
5f0cb39 companion: Support playback control availability
b3d69a7 companion: Events and persistent connection
e956d79 collection: Add SharedData type
ef2ffe8 gha: Fix caching issue for finished job
0227529 docs: Add example connect_with_credentials.py
931acf6 build(deps): update protobuf requirement in /requirements
Plushtrap
0.9.6 Plushtrap (2021-10-27)
It's time for another minor release (nothing fancy, I promise):
- Addresses that are broadcasted when pairing DMAP can be manually set
- A
content_identifier
(app specific) is available in the Playing interface.
Only some apps provides this. - Removed unnecessary exception log in the
heartbeater
module which polluted
the log in some cases.
Notes:
protobuf
version 3.18.0 or later is now required.
Changes:
Protocol: DMAP:
4094699 dmap: Support custom addresses during pairing
Protocol: MRP:
260b006 mrp: Add support for content_identifier
Other:
ee8c23d if: Add content_identifier to Playing
8885662 env: Re-work test environment
6d47d0b scripts: Log current version of pyatv
70b235e core: Do not log exception in heartbeater
All changes:
260b006 mrp: Add support for content_identifier
ee8c23d if: Add content_identifier to Playing
4177295 build(deps): update aiohttp requirement in /requirements
6e04896 build(deps): bump zeroconf from 0.36.8 to 0.36.9 in /requirements
8885662 env: Re-work test environment
6d47d0b scripts: Log current version of pyatv
70b235e core: Do not log exception in heartbeater
4094699 dmap: Support custom addresses during pairing
a5f1515 dep: Require protobuf 3.18.0
973b884 build(deps): bump mypy-protobuf from 2.10 to 3.0.0
4e0a0f6 build(deps): bump pytest-asyncio from 0.15.1 to 0.16.0
656f1d9 build(deps): bump miniaudio from 1.44 to 1.45
Oscar
0.9.5 Oscar (2021-10-15)
The releases are pouring down right now! Two more bug fixes to smoothen the experience:
- Fix relay bug which could result in methods being reported as unsupported
- Add some missing DMAP tags (removes warnings)
Changes:
Protocol: DMAP:
436ba7b dmap: Add missing tags aelb and casa
Other:
5170edd core: Fix relayer fallback bug
All changes:
436ba7b dmap: Add missing tags aelb and casa
5170edd core: Fix relayer fallback bug
Nightmare
0.9.4 Nightmare (2021-10-15)
This release just contains two minor bug fixes:
- Removal of need for
mypy_extensions
which was never added as an explicit dependency
but was required in the previous release - Support for the UID type in OPACK used by Companion, which caused an exception when
pairing (Companion) for some people
Changes:
Protocol: Companion:
f99bad0 companion: Add support for UID in OPACK
Other:
954f3dd core: Remove need for mypy_extensions
All changes:
f99bad0 companion: Add support for UID in OPACK
0cf4055 docs: Hide internal DeviceInfo.RAW_MODEL
954f3dd core: Remove need for mypy_extensions
41ff2c8 build(deps): bump types-protobuf from 3.17.4 to 3.18.0
8c9f2d9 build(deps): bump deepdiff from 5.5.0 to 5.6.0
Moondrop
0.9.3 Moondrop (2021-10-12)
Time for another drop with a few fixes and enhancements:
- Official support for python 3.10
- The MRP service is now ignored for tvOS 15 devices
- osvers is handled properly in AirPlay which previously caused an
exception when connecting to Apple TV 3 (or older) devices - Stop is now supported in RAOP
No biggies this time, but should make for a smoooother experience!
Changes:
Protocol: MRP:
89c9f2f mrp: Ignore service during scan for tvOS >= 15
Protocol: AirPlay:
5a1f482 airplay: Quiet log of remote control setup failure
a069208 airplay: Handle semver version in osvers
Protocol: RAOP:
5781665 raop: Add support for stop
0ef3232 raop: Report correct progress values
Other:
2d16f1d gha: Run tests on python 3.10
62c29a1 docs: Add docs for app_list and launch_app
All changes:
5781665 raop: Add support for stop
107a692 facade: Support takeover for PushUpdater
536f241 cq: Remove stream.py
2afdad8 relayer: Fix main_instance and add instances
b6165b0 core: Pass takeover method to protocols
99ed67d facade: Support for protocol takeover
9f93f0e core: Add takeover support to relayer
836aa62 docs: Add tvOS 15 to README description
16c22f0 build(deps): bump flake8 from 4.0.0 to 4.0.1
255c96b build(deps): bump pytest-timeout from 2.0.0 to 2.0.1
b881c32 build(deps): bump pytest-timeout from 1.4.2 to 2.0.0
dd38f63 build(deps): bump flake8 from 3.9.2 to 4.0.0
2d16f1d gha: Run tests on python 3.10
0ef3232 raop: Report correct progress values
5a1f482 airplay: Quiet log of remote control setup failure
4f7fe97 core: Don't connect to dummy services
67ae1b8 build(deps): bump pytest-cov from 2.12.1 to 3.0.0
62c29a1 docs: Add docs for app_list and launch_app
89c9f2f mrp: Ignore service during scan for tvOS >= 15
a069208 airplay: Handle semver version in osvers
65b40bd build(deps): bump mediafile from 0.8.0 to 0.8.1
Lefty
0.9.2 Lefty (2021-09-27)
What? Another release? Already? Suure... So, I am integrating pyatv 0.9.x with
Home Assistant and I find these small annoyances or missing pieces along the way,
fixing them one by one as I go. This release is thus a micro-update, but it
contains a few nuggets.
A Music
device model has been added that represents the Music app/iTunes. In
the same department I've added a property called raw_model
to DeviceInfo
,
returning a raw model string in case it's not a model known by pyatv. This is
very useful for AirPlay receivers as raw_model
will usually contain the device
manufacturer and hardware model.
It is now possible to pass a set of identifiers to pyatv.scan
. The intended
use case is to pass all identifiers belonging to a device to handle cases where a
service is missing or getting deprecated (like MRP).
Making this release from my phone. In bed. So I will stop there and go to sleep...
Changes:
Protocol: DMAP:
180acab dmap: Avoid unnecessary creation of Zeroconf
2e32274 dmap: Add device model Music for Music/iTunes
Protocol: MRP:
7a8b86a mrp: Updates to volume management
Protocol: Companion:
b28a01e companion: Improve pairing requirement detection
Other:
ce90dd6 core: Add raw_model to DeviceInfo
e063ffb scan: Support scanning for multiple identifiers
All changes:
22bf5f2 companion: Enable test that should be enabled
180acab dmap: Avoid unnecessary creation of Zeroconf
ce90dd6 core: Add raw_model to DeviceInfo
2e32274 dmap: Add device model Music for Music/iTunes
3623287 fix wrong param
b28a01e companion: Improve pairing requirement detection
e063ffb scan: Support scanning for multiple identifiers
7a8b86a mrp: Updates to volume management
Lolbit
0.9.1 Lolbit (2021-09-23)
Minor bug fix release coming up! Should fix connection issues when a stale
MRP service is present after upgrading to tvOS 15. Also improves pairing requirement
handling for AirPlay and RAOP in case access control is set to "Only devices in
my home" (will now report as Disabled). Companion is also reported as Unsupported
for HomePods as pyatv cannot pair with them.
A new convert method to convert a DeviceModel
to string has been added.
Changes:
Protocol: AirPlay:
2558a89 airplay: Support Disabled pairing requirement
Protocol: Companion:
6cb7269 companion: Better support for pairing requirement
Protocol: RAOP:
d257378 raop: Support Disabled pairing requirement
Other:
70b4992 convert: Add model_str method
535b56b core: Use connect order based on protocol
All changes:
6cb7269 companion: Better support for pairing requirement
d257378 raop: Support Disabled pairing requirement
2558a89 airplay: Support Disabled pairing requirement
70b4992 convert: Add model_str method
535b56b core: Use connect order based on protocol
JayJay
0.9.0 JayJay (2021-09-22)
So, what's new? Yeah, right, tvOS 15 was released the day before yesterday
which broke everything. My intention was to release 0.9.0 before tvOS 15
dropped, but things kept popping up and I had no choice but to delay. So here
we are.
The biggest feature in this release is obviously support for tvOS 15. Perhaps
not the most exciting feature per se, but important as most of the
functionality in pyatv is lost without it. The gist is that Apple decided to
drop support for the MRP protocol introduced in tvOS. In practice they didn't
get rid or it, they just allocated a special stream type in AirPlay (2) and
decided to tunnel MRP over it. So MRP is still there, it's just carried over
AirPlay now. As far as I know, this is how they have done it the last couple of
iOS/tvOS releases. So it's not really new, just something no one looked into.
The deprecation of the "regular" MRP protocol is reasonable (who uses the
Remote app nowadays?), so I don't blame Apple for it. Would have been nice to
have figured this out earlier though, as it required a lot of intense reverse
engineering to unravel everything. Now it does work though, so totally worth
it! I have tried to document how it works on the protocols page:
https://pyatv.dev/documentation/protocols/
All needed to get things working again is to provide AirPlay credentials. One
important thing to note though is that you need to re-pair with this release
(or later) to get new credentials. The old ones will only work with play_url
,
not for tunneling MRP over AirPlay. A small bonus here is that the HomePod
works in the same way as the Apple TV in this regards, so pyatv can now be used
to control HomdPods as well. No pairing is needed for that, it's just
plug-and-play!
Let's leave MRP now... My vision for pyatv is to create a "core", where
protocols work as plugins to provide functionality. The API used by developers
is supposed be towards core and not the protocols themselves. This basically
means that all functions in the API should behave in the same way, no matter
what protocols are used in regards to arguments, return values, listener
interfaces, error handling and so on. This release contains a lof of work
towards realizing that vision. I'm not quite there yet, but it's closer than
ever. Hopefully, this will only manifest itself through more consistent
behavior and not much you as a developer need to pay any attention to. But if
you notice any changes in behavior, this might be the reason. Be sure to report
anything that you find peculiar, it might need fixing or an explanation.
Another minor new feature is that the Audio interface has been extended to
include volume_up and volume_down, which also means those methods are
deprecated in RemoteControl
. Please update your code for this. Also, all the
protocol specic service types, e.g. conf.MrpService
and conf.AirPlayService
have been deprecated in favor of conf.ManualService
. Update your code for
this as well, in case you rely on any of them. They will stick around for a few
releases, so your code won't break because of this. The last minor feature is a
helper method called helpers.is_streamable
, which can check if file is
supported by Stream.stream_file
.
One last thing... This release fills a big gap that has been present for a long
time: when do you need to pair? Each service now contains a "pairing" property
that will tell you of pairing is needed or not. This makes it possible to
programmatically determine if the pairing procedure needs to to performed,
something that wasn't clear before. After scanning, just iterate all services
and pair the ones requiring it. A similar property has been added for passwords
as well, called requires_password
. If True, then a password is required to
connect. Only applicable to RAOP so far (it works for AirPlay as well, but
there's no support for passwords in AirPlay yet).
To round things up, I just wanted to say that docker images are automatically
built for new releases as well as the latest commit on master, making it easy
to test pyatv without having to install any additional software other than
docker. I still have some areas to improve, but it's a good start. This release
will be the first release having docker images pre-built as it's tricky to
backport.
That is it for now. Make sure to check out the migration guide to get some
hints on what you need to do when upgrading.
Be sure to check out the migration notes before upgrading:
https://pyatv.dev/support/migration/
Notes:
- mediafile replaced audio-metadata as a dependency in this release
- At least version 3.17.3 of protobuf is required
Changes:
Protocol: DMAP:
099c975 dmap: Add support for pairing requirement
Protocol: MRP:
6177e86 mrp: Add support for pairing requirement
0bdd614 mrp: Add support for Audio interface
2495e56 mrp: Extract build number from DEVICE_INFO
Protocol: AirPlay:
31bf148 airplay: Add support for pairing requirement
af5c441 airplay: Add support for requires_password
8c35d1f airplay: Add support for transient pairing
a407efa airplay: Support MRP tunneling over AirPlay 2
Protocol: Companion:
e49b9ef companion: Add support for pairing requirement
Protocol: RAOP:
d47924d raop: Send empty audio during latency period
f075d4d raop: Add support for pairing requirement
f66563a raop: Add support for requires_password
Other:
9339954 if: Add volume_up and volume_down to Audio
1c11600 gh: Convert issue templates to forms
8f7f9bd gha: Build and publish Docker containers
4f76bf3 core: Switch from audio-metadata to mediafile
33a0d5d deps: Bump protobuf to 3.17.3
14a35fe helpers: Add is_streamable method
21dec3e facade: Close connections only once
09bd203 facade: Close protocols on device update
f5f84b1 facade: Return remaining tasks in close
All changes:
c04e1a5 build(deps): bump pytest-xdist from 2.3.0 to 2.4.0
d47924d raop: Send empty audio during latency period
8ecf4b5 http: Handle responses when no receiver exists
45a4385 build(deps): bump pylint from 2.10.2 to 2.11.1
07804a0 build(deps): bump mypy-protobuf from 2.9 to 2.10
52cbe4c build(deps-dev): bump tox from 3.24.3 to 3.24.4
884edb1 build(deps): bump black from 21.8b0 to 21.9b0
5b0984c docs: Update scan, pair and connect docs
f075d4d raop: Add support for pairing requirement
6318fee airplay: Refactor pairing requirement extraction
31bf148 airplay: Add support for pairing requirement
099c975 dmap: Add support for pairing requirement
b57b2bb dmap: Add support for pairing requirement
e49b9ef companion: Add support for pairing requirement
6177e86 mrp: Add support for pairing requirement
af5c441 airplay: Add support for requires_password
f66563a raop: Add support for requires_password
8049c82 if: Add protocol specific methods for service info
c07cb1c if: Restructure service handling
3cdb1fb core: Move state_producer to support
9aeec0a core: Move state_producer to support
2f84917 core: Move back device_info to support
da765a3 if: Rely solely on BaseService internally
b3221a5 conf: Extract BaseConfig interface
88c66bc docs: Minor updates
d4163a7 facade: Verify support in play_url
0ed417e airplay: Base play_url availability on properties
9339954 if: Add volume_up and volume_down to Audio
f563eea env: Add work to .gitgnore
0bdd614 mrp: Add support for Audio interface
dc247bd mrp: Update some MRP protobuf messages
7dc7c99 gha: Add workflow_dispatch: to tests workflow
c7cf760 docs: Various minor updates
52210b5 if: Keep position within limits
671c24a core: Move scan to core
78386f6 core: Move facade to core
3cba1c4 core: Move net to core
0227e06 core: Move mdns to core
743988a core: Move facade to core
9812b0e core: Move device_info to core
e53a6c1 core: Move protocol details to protocols module
63b1d09 core: Move raop to protocols
b0a780e mrp: Move mrp to protocols
6f8c90b core: Move dmap to protocols
9196a88 core: Move companion to protocols
b0758a9 core: Move airplay to protocols
8ee902b gh: Fix bad labels for investigation and bugs
3e01c2e gha: Change tags and labels a bit for containers
1c11600 gh: Convert issue templates to forms
c126d77 gha: Fix remaining issues with release workflow
826bb58 gha: Fix building containers and make releases
8f7f9bd gha: Build and publish Docker containers
2495e56 mrp: Extract build number from DEVICE_INFO
a548587 conf: Move device_info implementations to protocol
c6bb384 support: Add collection method dict_merge
8fcca30 devinfo: Add new tvOS build numbers
bac81ef if: Base DeviceInfo on dict
f66aa84 raop: Add support for legacy pairing
7e1ca68 core: Refactor pair to take service
d974f08 core: Set up protocols independently
a46c068 docs: Add instructions for close
4a24ac9 airplay: Various connection robustness changes
5a6c267 mrp: Add VolumeDidChangeMessage
8c35d1f airplay: Add support for transient pairing
61ef4e2 core: Return protocol when setting up protocol
a407efa airplay: Support MRP tunneling over AirPlay 2
e060b9e mrp: Generalize set up of MRP
8a88129 docs: Remove internal things from API docs
5f1a55e core: Allow setup to yield multiple instances
384a7a6 mrp: Add new protobuf messages
0b0648e support: Add length field to packet
ae5785b raop: Move packets to support
6bc3cf1 raop: Move metadata to support
402ae73 raop: Move RTSP implementation to support
eb71a3d auth: Add abstract class for HAP channels
d7f6394 raop: Generalize the RTSP implementation
1da0414 auth: Refactor HAP for generic key derivation
e04736c airplay: Pick most suitable pairing type
7c667b9 airplay: Add module to parse features
e582644 auth: Add HAPSession used for encryption
b328826 airplay: Add helper verify_connection to auth
9f81aa9 http: Add pre/post processors to HttpConnection
a2d0218 airplay...