@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.
- package/dist/index.d.ts +15 -0
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +89 -9
- package/dist/index.js.map +1 -1
- package/dist/mdns.d.ts.map +1 -1
- package/dist/mdns.js +96 -11
- package/dist/mdns.js.map +1 -1
- package/examples/print-device-json.js +22 -0
- package/package.json +2 -3
- package/pyatv/.codecov.yml +38 -0
- package/pyatv/.github/FUNDING.yml +3 -0
- package/pyatv/.github/ISSUE_TEMPLATE/bug_report.yml +80 -0
- package/pyatv/.github/ISSUE_TEMPLATE/config.yml +1 -0
- package/pyatv/.github/ISSUE_TEMPLATE/feature_request.yml +22 -0
- package/pyatv/.github/ISSUE_TEMPLATE/implementation-proposal.yml +29 -0
- package/pyatv/.github/ISSUE_TEMPLATE/investigation.yml +16 -0
- package/pyatv/.github/ISSUE_TEMPLATE/minor-change.yml +10 -0
- package/pyatv/.github/ISSUE_TEMPLATE/question-or-idea.yml +11 -0
- package/pyatv/.github/dependabot.yml +26 -0
- package/pyatv/.github/workflows/codeql-analysis.yml +71 -0
- package/pyatv/.github/workflows/release.yml +160 -0
- package/pyatv/.github/workflows/tests.yml +104 -0
- package/pyatv/.gitpod.yml +23 -0
- package/pyatv/CHANGES.md +3708 -0
- package/pyatv/CODE_OF_CONDUCT.md +76 -0
- package/pyatv/CONTRIBUTING.md +72 -0
- package/pyatv/CONTRIBUTORS.md +3 -0
- package/pyatv/Dockerfile +15 -0
- package/pyatv/LICENSE.md +9 -0
- package/pyatv/MANIFEST.in +14 -0
- package/pyatv/README.md +111 -0
- package/pyatv/base_versions.txt +13 -0
- package/pyatv/chickn.yaml +75 -0
- package/pyatv/docs/404.html +24 -0
- package/pyatv/docs/CNAME +1 -0
- package/pyatv/docs/Gemfile +31 -0
- package/pyatv/docs/_config.yml +121 -0
- package/pyatv/docs/_includes/api +10 -0
- package/pyatv/docs/_includes/atvremote_scan +32 -0
- package/pyatv/docs/_includes/code +6 -0
- package/pyatv/docs/_includes/issue +14 -0
- package/pyatv/docs/_includes/pypi +5 -0
- package/pyatv/docs/_layouts/template.html +109 -0
- package/pyatv/docs/api/pyatv.conf.html +312 -0
- package/pyatv/docs/api/pyatv.const.html +974 -0
- package/pyatv/docs/api/pyatv.convert.html +106 -0
- package/pyatv/docs/api/pyatv.exceptions.html +489 -0
- package/pyatv/docs/api/pyatv.helpers.html +102 -0
- package/pyatv/docs/api/pyatv.html +120 -0
- package/pyatv/docs/api/pyatv.interface.html +2369 -0
- package/pyatv/docs/api/pyatv.settings.html +484 -0
- package/pyatv/docs/api/pyatv.storage.file_storage.html +102 -0
- package/pyatv/docs/api/pyatv.storage.html +186 -0
- package/pyatv/docs/api/pyatv.storage.memory_storage.html +83 -0
- package/pyatv/docs/assets/css/custom.css +19 -0
- package/pyatv/docs/assets/css/hljs.css +1 -0
- package/pyatv/docs/assets/css/normalize.css +349 -0
- package/pyatv/docs/assets/css/pdoc.css +287 -0
- package/pyatv/docs/assets/css/sanitize.css +566 -0
- package/pyatv/docs/assets/css/style.scss +9 -0
- package/pyatv/docs/assets/img/logo.svg +63 -0
- package/pyatv/docs/assets/js/highlight.9.12.0.min.js +3 -0
- package/pyatv/docs/assets/js/mermaid.8.9.2.min.js +32 -0
- package/pyatv/docs/assets/js/mermaid.min.js.map +1 -0
- package/pyatv/docs/development/apps.md +81 -0
- package/pyatv/docs/development/audio.md +42 -0
- package/pyatv/docs/development/control.md +56 -0
- package/pyatv/docs/development/development.md +15 -0
- package/pyatv/docs/development/device_info.md +36 -0
- package/pyatv/docs/development/examples.md +44 -0
- package/pyatv/docs/development/features.md +70 -0
- package/pyatv/docs/development/keyboard.md +51 -0
- package/pyatv/docs/development/listeners.md +144 -0
- package/pyatv/docs/development/logging.md +55 -0
- package/pyatv/docs/development/metadata.md +115 -0
- package/pyatv/docs/development/power_management.md +53 -0
- package/pyatv/docs/development/scan_pair_and_connect.md +331 -0
- package/pyatv/docs/development/services.md +9 -0
- package/pyatv/docs/development/storage.md +259 -0
- package/pyatv/docs/development/stream.md +241 -0
- package/pyatv/docs/development/testing.md +9 -0
- package/pyatv/docs/documentation/atvlog.md +64 -0
- package/pyatv/docs/documentation/atvproxy.md +244 -0
- package/pyatv/docs/documentation/atvremote.md +639 -0
- package/pyatv/docs/documentation/atvscript.md +275 -0
- package/pyatv/docs/documentation/concepts.md +168 -0
- package/pyatv/docs/documentation/documentation.md +130 -0
- package/pyatv/docs/documentation/getting_started.md +248 -0
- package/pyatv/docs/documentation/protocols.md +1959 -0
- package/pyatv/docs/documentation/supported_features.md +246 -0
- package/pyatv/docs/documentation/tutorial.md +1062 -0
- package/pyatv/docs/documentation/workspace.code-workspace +7 -0
- package/pyatv/docs/favicon.ico +0 -0
- package/pyatv/docs/index.md +109 -0
- package/pyatv/docs/internals/design.md +354 -0
- package/pyatv/docs/internals/documentation.md +84 -0
- package/pyatv/docs/internals/interfaces.md +95 -0
- package/pyatv/docs/internals/internals.md +157 -0
- package/pyatv/docs/internals/submit_pr.md +56 -0
- package/pyatv/docs/internals/testing.md +176 -0
- package/pyatv/docs/internals/tools.md +574 -0
- package/pyatv/docs/pdoc_templates/config.mako +46 -0
- package/pyatv/docs/pdoc_templates/html.mako +454 -0
- package/pyatv/docs/support/acknowledgements.md +87 -0
- package/pyatv/docs/support/faq.md +214 -0
- package/pyatv/docs/support/migration.md +138 -0
- package/pyatv/docs/support/scanning_issues.md +110 -0
- package/pyatv/docs/support/support.md +18 -0
- package/pyatv/docs/support/troubleshooting.md +83 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/AudioFadeMessage.proto +13 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/AudioFadeMessage_pb2.pyi +37 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/AudioFadeResponseMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/AudioFadeResponseMessage_pb2.pyi +32 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/AudioFormatSettingsMessage.proto +5 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/AudioFormatSettingsMessage_pb2.pyi +27 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ClientUpdatesConfigMessage.proto +16 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ClientUpdatesConfigMessage_pb2.pyi +44 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/CommandInfo.proto +117 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/CommandInfo_pb2.pyi +325 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/CommandOptions.proto +36 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/CommandOptions_pb2.pyi +115 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/Common.proto +79 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/Common_pb2.pyi +228 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ConfigureConnectionMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ConfigureConnectionMessage_pb2.pyi +32 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ContentItem.proto +27 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ContentItemMetadata.proto +213 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ContentItemMetadata_pb2.pyi +630 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ContentItem_pb2.pyi +94 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/CryptoPairingMessage.proto +15 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/CryptoPairingMessage_pb2.pyi +46 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/DeviceInfoMessage.proto +69 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/DeviceInfoMessage_pb2.pyi +226 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GenericMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GenericMessage_pb2.pyi +35 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GetKeyboardSessionMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GetKeyboardSessionMessage_pb2.pyi +26 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GetRemoteTextInputSessionMessage.proto +10 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GetRemoteTextInputSessionMessage_pb2.pyi +26 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GetVolumeMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GetVolumeMessage_pb2.pyi +32 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GetVolumeResultMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/GetVolumeResultMessage_pb2.pyi +32 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/KeyboardMessage.proto +88 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/KeyboardMessage_pb2.pyi +261 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/LanguageOption.proto +9 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/LanguageOption_pb2.pyi +42 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ModifyOutputContextRequestMessage.proto +23 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ModifyOutputContextRequestMessage_pb2.pyi +86 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/NotificationMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/NotificationMessage_pb2.pyi +38 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingClient.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingClient_pb2.pyi +49 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingInfo.proto +24 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingInfo_pb2.pyi +79 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingPlayer.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/NowPlayingPlayer_pb2.pyi +45 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/Origin.proto +17 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/OriginClientPropertiesMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/OriginClientPropertiesMessage_pb2.pyi +32 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/Origin_pb2.pyi +63 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueue.proto +15 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueCapabilities.proto +7 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueCapabilities_pb2.pyi +33 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueContext.proto +5 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueContext_pb2.pyi +27 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueRequestMessage.proto +29 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueueRequestMessage_pb2.pyi +87 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlaybackQueue_pb2.pyi +53 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlayerClientPropertiesMessage.proto +13 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlayerClientPropertiesMessage_pb2.pyi +37 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlayerPath.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/PlayerPath_pb2.pyi +39 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ProtocolMessage.proto +171 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/ProtocolMessage_pb2.pyi +377 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterForGameControllerEventsMessage.proto +18 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterForGameControllerEventsMessage_pb2.pyi +54 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterHIDDeviceMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterHIDDeviceMessage_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterHIDDeviceResultMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterHIDDeviceResultMessage_pb2.pyi +35 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterVoiceInputDeviceMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterVoiceInputDeviceMessage_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterVoiceInputDeviceResponseMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RegisterVoiceInputDeviceResponseMessage_pb2.pyi +35 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemoteTextInputMessage.proto +13 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemoteTextInputMessage_pb2.pyi +38 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemoveClientMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemoveClientMessage_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemoveEndpointsMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemoveEndpointsMessage_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemoveOutputDevicesMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemoveOutputDevicesMessage_pb2.pyi +38 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemovePlayerMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/RemovePlayerMessage_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendButtonEventMessage.proto +13 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendButtonEventMessage_pb2.pyi +38 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendCommandMessage.proto +16 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendCommandMessage_pb2.pyi +43 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendCommandResultMessage.proto +100 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendCommandResultMessage_pb2.pyi +286 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendHIDEventMessage.proto +41 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendHIDEventMessage_pb2.pyi +63 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendPackedVirtualTouchEventMessage.proto +24 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendPackedVirtualTouchEventMessage_pb2.pyi +64 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendVoiceInputMessage.proto +38 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SendVoiceInputMessage_pb2.pyi +134 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetArtworkMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetArtworkMessage_pb2.pyi +32 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetConnectionStateMessage.proto +18 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetConnectionStateMessage_pb2.pyi +54 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetDefaultSupportedCommandsMessage.proto +28 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetDefaultSupportedCommandsMessage_pb2.pyi +74 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetDiscoveryModeMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetDiscoveryModeMessage_pb2.pyi +35 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetHiliteModeMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetHiliteModeMessage_pb2.pyi +32 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetNowPlayingClientMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetNowPlayingClientMessage_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetNowPlayingPlayerMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetNowPlayingPlayerMessage_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetRecordingStateMessage.proto +17 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetRecordingStateMessage_pb2.pyi +54 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetStateMessage.proto +27 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetStateMessage_pb2.pyi +72 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetVolumeMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SetVolumeMessage_pb2.pyi +35 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SupportedCommands.proto +7 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/SupportedCommands_pb2.pyi +30 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TextInputMessage.proto +23 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TextInputMessage_pb2.pyi +76 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TransactionKey.proto +6 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TransactionKey_pb2.pyi +30 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TransactionMessage.proto +15 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TransactionMessage_pb2.pyi +42 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TransactionPacket.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TransactionPacket_pb2.pyi +41 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TransactionPackets.proto +7 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/TransactionPackets_pb2.pyi +30 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateClientMessage.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateClientMessage_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateContentItemArtworkMessage.proto +14 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateContentItemArtworkMessage_pb2.pyi +41 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateContentItemMessage.proto +14 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateContentItemMessage_pb2.pyi +41 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateEndPointsMessage.proto +25 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateEndPointsMessage_pb2.pyi +74 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateOutputDeviceMessage.proto +88 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdateOutputDeviceMessage_pb2.pyi +277 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdatePlayerPath.proto +12 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/UpdatePlayerPath_pb2.pyi +34 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VirtualTouchDeviceDescriptorMessage.proto +8 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VirtualTouchDeviceDescriptorMessage_pb2.pyi +36 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VoiceInputDeviceDescriptorMessage.proto +8 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VoiceInputDeviceDescriptorMessage_pb2.pyi +35 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VolumeControlAvailabilityMessage.proto +23 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VolumeControlAvailabilityMessage_pb2.pyi +71 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VolumeControlCapabilitiesDidChangeMessage.proto +14 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VolumeControlCapabilitiesDidChangeMessage_pb2.pyi +40 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VolumeDidChangeMessage.proto +13 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/VolumeDidChangeMessage_pb2.pyi +38 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/WakeDeviceMessage.proto +11 -0
- package/pyatv/pyatv/protocols/mrp/protobuf/WakeDeviceMessage_pb2.pyi +26 -0
- package/pyatv/pyatv/py.typed +0 -0
- package/pyatv/pylintrc +49 -0
- package/pyatv/pyproject.toml +74 -0
- package/pyatv/requirements/requirements.txt +14 -0
- package/pyatv/requirements/requirements_docs.txt +2 -0
- package/pyatv/requirements/requirements_test.txt +20 -0
- package/pyatv/scripts/build_docs.sh +17 -0
- package/pyatv/scripts/setup_dev_env.sh +83 -0
- package/pyatv/setup.cfg +14 -0
- package/pyatv/tests/data/README +23 -0
- package/pyatv/tests/data/audio_10_frames.wav +0 -0
- package/pyatv/tests/data/audio_1_packet_metadata.wav +0 -0
- package/pyatv/tests/data/audio_3_packets.wav +0 -0
- package/pyatv/tests/data/only_metadata.wav +0 -0
- package/pyatv/tests/data/only_title.wav +0 -0
- package/pyatv/tests/data/static_3sec.ogg +0 -0
- package/pyatv/tests/data/testfile.txt +1 -0
- package/pyatv/tests/support/pyatv.code-workspace +14 -0
- package/src/index.ts +122 -8
- package/src/mdns.ts +64 -11
|
@@ -0,0 +1,76 @@
|
|
|
1
|
+
# Contributor Covenant Code of Conduct
|
|
2
|
+
|
|
3
|
+
## Our Pledge
|
|
4
|
+
|
|
5
|
+
In the interest of fostering an open and welcoming environment, we as
|
|
6
|
+
contributors and maintainers pledge to making participation in our project and
|
|
7
|
+
our community a harassment-free experience for everyone, regardless of age, body
|
|
8
|
+
size, disability, ethnicity, sex characteristics, gender identity and expression,
|
|
9
|
+
level of experience, education, socio-economic status, nationality, personal
|
|
10
|
+
appearance, race, religion, or sexual identity and orientation.
|
|
11
|
+
|
|
12
|
+
## Our Standards
|
|
13
|
+
|
|
14
|
+
Examples of behavior that contributes to creating a positive environment
|
|
15
|
+
include:
|
|
16
|
+
|
|
17
|
+
* Using welcoming and inclusive language
|
|
18
|
+
* Being respectful of differing viewpoints and experiences
|
|
19
|
+
* Gracefully accepting constructive criticism
|
|
20
|
+
* Focusing on what is best for the community
|
|
21
|
+
* Showing empathy towards other community members
|
|
22
|
+
|
|
23
|
+
Examples of unacceptable behavior by participants include:
|
|
24
|
+
|
|
25
|
+
* The use of sexualized language or imagery and unwelcome sexual attention or
|
|
26
|
+
advances
|
|
27
|
+
* Trolling, insulting/derogatory comments, and personal or political attacks
|
|
28
|
+
* Public or private harassment
|
|
29
|
+
* Publishing others' private information, such as a physical or electronic
|
|
30
|
+
address, without explicit permission
|
|
31
|
+
* Other conduct which could reasonably be considered inappropriate in a
|
|
32
|
+
professional setting
|
|
33
|
+
|
|
34
|
+
## Our Responsibilities
|
|
35
|
+
|
|
36
|
+
Project maintainers are responsible for clarifying the standards of acceptable
|
|
37
|
+
behavior and are expected to take appropriate and fair corrective action in
|
|
38
|
+
response to any instances of unacceptable behavior.
|
|
39
|
+
|
|
40
|
+
Project maintainers have the right and responsibility to remove, edit, or
|
|
41
|
+
reject comments, commits, code, wiki edits, issues, and other contributions
|
|
42
|
+
that are not aligned to this Code of Conduct, or to ban temporarily or
|
|
43
|
+
permanently any contributor for other behaviors that they deem inappropriate,
|
|
44
|
+
threatening, offensive, or harmful.
|
|
45
|
+
|
|
46
|
+
## Scope
|
|
47
|
+
|
|
48
|
+
This Code of Conduct applies both within project spaces and in public spaces
|
|
49
|
+
when an individual is representing the project or its community. Examples of
|
|
50
|
+
representing a project or community include using an official project e-mail
|
|
51
|
+
address, posting via an official social media account, or acting as an appointed
|
|
52
|
+
representative at an online or offline event. Representation of a project may be
|
|
53
|
+
further defined and clarified by project maintainers.
|
|
54
|
+
|
|
55
|
+
## Enforcement
|
|
56
|
+
|
|
57
|
+
Instances of abusive, harassing, or otherwise unacceptable behavior may be
|
|
58
|
+
reported by contacting the project team at pierre.staahl@gmail.com. All
|
|
59
|
+
complaints will be reviewed and investigated and will result in a response that
|
|
60
|
+
is deemed necessary and appropriate to the circumstances. The project team is
|
|
61
|
+
obligated to maintain confidentiality with regard to the reporter of an incident.
|
|
62
|
+
Further details of specific enforcement policies may be posted separately.
|
|
63
|
+
|
|
64
|
+
Project maintainers who do not follow or enforce the Code of Conduct in good
|
|
65
|
+
faith may face temporary or permanent repercussions as determined by other
|
|
66
|
+
members of the project's leadership.
|
|
67
|
+
|
|
68
|
+
## Attribution
|
|
69
|
+
|
|
70
|
+
This Code of Conduct is adapted from the [Contributor Covenant][homepage], version 1.4,
|
|
71
|
+
available at https://www.contributor-covenant.org/version/1/4/code-of-conduct.html
|
|
72
|
+
|
|
73
|
+
[homepage]: https://www.contributor-covenant.org
|
|
74
|
+
|
|
75
|
+
For answers to common questions about this code of conduct, see
|
|
76
|
+
https://www.contributor-covenant.org/faq
|
|
@@ -0,0 +1,72 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
First off, thank you for showing an interest in pyatv and perhaps also contributing!
|
|
4
|
+
Every contribution matters and it's people like you that make pyatv great! :heart:
|
|
5
|
+
|
|
6
|
+
## Getting Started
|
|
7
|
+
|
|
8
|
+
### Resources to read
|
|
9
|
+
|
|
10
|
+
Make sure to read these awesome documents:
|
|
11
|
+
|
|
12
|
+
[Code of Conduct](CODE_OF_CONDUCT.md)
|
|
13
|
+
|
|
14
|
+
[FAQ](https://pyatv.readthedocs.io/en/master/faq.html)
|
|
15
|
+
|
|
16
|
+
### Reporting a bug
|
|
17
|
+
|
|
18
|
+
If you think you have found a bug, please consider writing an issue about it. Use the "Bug" template
|
|
19
|
+
and be as precise as you can.
|
|
20
|
+
|
|
21
|
+
[Click here to open a new bug report](https://github.com/postlund/pyatv/issues/new?assignees=&labels=bug&template=bug_report.md&title=)
|
|
22
|
+
|
|
23
|
+
### Requesting a new feature
|
|
24
|
+
|
|
25
|
+
New features are always cool, maybe you have some ideas or wishes? There is a template for feature
|
|
26
|
+
requests as well. Just create an issue and fill it out.
|
|
27
|
+
|
|
28
|
+
[Click here to request a new feature](https://github.com/postlund/pyatv/issues/new?assignees=&labels=feature&template=feature_request.md&title=)
|
|
29
|
+
|
|
30
|
+
### Questions or ideas
|
|
31
|
+
|
|
32
|
+
If you have any questions (e.g. "how do I do this with pyatv"), you can write an issue as well. You can also
|
|
33
|
+
leave ideas for other kinds of improvements, like gaps in the documentation or better development tools.
|
|
34
|
+
|
|
35
|
+
[Click here to ask a general question](https://github.com/postlund/pyatv/issues/new?assignees=&labels=question&template=question-or-idea.md&title=)
|
|
36
|
+
|
|
37
|
+
## Development
|
|
38
|
+
|
|
39
|
+
### Getting code and setting up development environment
|
|
40
|
+
|
|
41
|
+
Getting started with development is quite simple:
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
1. Fork this project on GitHub
|
|
45
|
+
2. git clone https://github.com/<username>/pyatv.git
|
|
46
|
+
3. cd pyatv
|
|
47
|
+
4. ./scripts/setup_dev_env.sh
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
This will set everything up. To run tests, linting, etc. just run activate the virtual environment and run chickn:
|
|
51
|
+
|
|
52
|
+
```shell
|
|
53
|
+
$ source bin/activate
|
|
54
|
+
(pyatv)$ ./scripts/chickn.py
|
|
55
|
+
```
|
|
56
|
+
|
|
57
|
+
### Pull Requests (PR)
|
|
58
|
+
|
|
59
|
+
When submitting changes, create a PR and make sure:
|
|
60
|
+
|
|
61
|
+
* You add tests for new functionality and/or bug fixes
|
|
62
|
+
* All tests must pass
|
|
63
|
+
* Do not decrease code coverage
|
|
64
|
+
* Add pydoc documentation and update `docs/`
|
|
65
|
+
* Linting passes (just run chickn)
|
|
66
|
+
|
|
67
|
+
PRs will not be merged unless all criterias are met. If you are unsure about anything, just push a PR and ask
|
|
68
|
+
for help in the PR itself :smile:
|
|
69
|
+
|
|
70
|
+
### License
|
|
71
|
+
|
|
72
|
+
The MIT license is used by pyatv and by contributing, you agree that your content will be covered by that license.
|
package/pyatv/Dockerfile
ADDED
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
FROM python:3.15.0a5-alpine
|
|
2
|
+
ARG VERSION
|
|
3
|
+
|
|
4
|
+
WORKDIR .
|
|
5
|
+
COPY dist/pyatv-${VERSION}-py3-none-any.whl .
|
|
6
|
+
COPY requirements/requirements.txt .
|
|
7
|
+
|
|
8
|
+
RUN apk add gcc musl-dev build-base linux-headers libffi-dev rust cargo openssl-dev git && \
|
|
9
|
+
pip install setuptools-rust && \
|
|
10
|
+
pip install -r requirements.txt && \
|
|
11
|
+
pip install pyatv-${VERSION}-py3-none-any.whl && \
|
|
12
|
+
apk del gcc musl-dev build-base linux-headers libffi-dev rust cargo openssl-dev git && \
|
|
13
|
+
rm pyatv-${VERSION}-py3-none-any.whl && \
|
|
14
|
+
rm requirements.txt && \
|
|
15
|
+
rm -rf /root/.cache /root/.cargo
|
package/pyatv/LICENSE.md
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
# The MIT License (MIT)
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2020 Pierre Ståhl
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:
|
|
6
|
+
|
|
7
|
+
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
8
|
+
|
|
9
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
include CHANGES.md
|
|
2
|
+
include README.md
|
|
3
|
+
include LICENSE.md
|
|
4
|
+
include CONTRIBUTORS.md
|
|
5
|
+
include base_versions.txt
|
|
6
|
+
graft pyatv
|
|
7
|
+
graft tests
|
|
8
|
+
graft docs
|
|
9
|
+
graft examples
|
|
10
|
+
global-exclude *~ __pycache__
|
|
11
|
+
recursive-exclude * *.py[co] .*
|
|
12
|
+
prune docs/vendor
|
|
13
|
+
prune docs/_site
|
|
14
|
+
prune docs/.sass-cache
|
package/pyatv/README.md
ADDED
|
@@ -0,0 +1,111 @@
|
|
|
1
|
+
A client library for Apple TV and AirPlay devices
|
|
2
|
+
=================================================
|
|
3
|
+
|
|
4
|
+
<img src="https://raw.githubusercontent.com/postlund/pyatv/master/docs/assets/img/logo.svg?raw=true" width="150">
|
|
5
|
+
|
|
6
|
+

|
|
7
|
+

|
|
8
|
+
[](https://codecov.io/gh/postlund/pyatv)
|
|
9
|
+
[](https://github.com/psf/black)
|
|
10
|
+
[](https://badge.fury.io/py/pyatv)
|
|
11
|
+
[](https://gitpod.io/#https://github.com/postlund/pyatv)
|
|
12
|
+
[](https://pepy.tech/project/pyatv)
|
|
13
|
+
[](https://pypi.python.org/pypi/pyatv/)
|
|
14
|
+
[](https://opensource.org/licenses/MIT)
|
|
15
|
+
|
|
16
|
+
This is an asyncio python library for interacting with Apple TV and AirPlay devices. It mainly
|
|
17
|
+
targets Apple TVs (all generations, **including tvOS 15 and later**), but also supports audio streaming via AirPlay
|
|
18
|
+
to receivers like the HomePod, AirPort Express and third-party speakers. It can act as remote control to the Music
|
|
19
|
+
app/iTunes in macOS.
|
|
20
|
+
|
|
21
|
+
All the documentation you need is available at **[pyatv.dev](https://pyatv.dev)**.
|
|
22
|
+
|
|
23
|
+
# What can it do?
|
|
24
|
+
|
|
25
|
+
Some examples include:
|
|
26
|
+
|
|
27
|
+
* Remote control commands
|
|
28
|
+
* Metadata retrieval with push updates
|
|
29
|
+
* Stream files via AirPlay
|
|
30
|
+
* List and launch installed apps
|
|
31
|
+
* List and switch user accounts
|
|
32
|
+
* Add, remove or set audio output devices (e.g. HomePods)
|
|
33
|
+
* Keyboard support
|
|
34
|
+
* Persistent storage of credentials and settings
|
|
35
|
+
|
|
36
|
+
...and lots more! A complete list is available [here](https://pyatv.dev/documentation/supported_features/).
|
|
37
|
+
|
|
38
|
+
# Great, but how do I use it?
|
|
39
|
+
|
|
40
|
+
All documentation (especially for developers) are available at [pyatv.dev](https://pyatv.dev).
|
|
41
|
+
It is however possible to install with `pip` and set up a new device `atvremote`:
|
|
42
|
+
|
|
43
|
+
```raw
|
|
44
|
+
$ pip install pyatv
|
|
45
|
+
$ atvremote wizard
|
|
46
|
+
Looking for devices...
|
|
47
|
+
Found the following devices:
|
|
48
|
+
Name Model Address
|
|
49
|
+
-- ------------------------ ----------------------- -----------
|
|
50
|
+
1 Receiver+ airupnp 10.0.10.200
|
|
51
|
+
2 Receiver RX-V773 10.0.10.82
|
|
52
|
+
3 Pierre's AirPort Express AirPort Express (gen 2) 10.0.10.168
|
|
53
|
+
4 FakeATV Unknown 10.0.10.254
|
|
54
|
+
5 Vardagsrum Apple TV 4K 10.0.10.81
|
|
55
|
+
6 Apple TV Apple TV 3 10.0.10.83
|
|
56
|
+
Enter index of device to set up (q to quit): 4
|
|
57
|
+
Starting to set up FakeATV
|
|
58
|
+
Starting to pair Protocol.MRP
|
|
59
|
+
Enter PIN on screen: 1111
|
|
60
|
+
Successfully paired Protocol.MRP, moving on...
|
|
61
|
+
Pairing finished, trying to connect and get some metadata...
|
|
62
|
+
Currently playing:
|
|
63
|
+
Media type: Music
|
|
64
|
+
Device state: Playing
|
|
65
|
+
Title: Never Gonna Give You Up
|
|
66
|
+
Artist: Rick Astley
|
|
67
|
+
Position: 1/213s (0.0%)
|
|
68
|
+
Repeat: Off
|
|
69
|
+
Shuffle: Off
|
|
70
|
+
Device is now set up!
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
After setting up a new device, other commands can be run directly:
|
|
74
|
+
|
|
75
|
+
```raw
|
|
76
|
+
$ atvremote -s 10.0.10.254 playing
|
|
77
|
+
Media type: Music
|
|
78
|
+
Device state: Playing
|
|
79
|
+
Title: Never Gonna Give You Up
|
|
80
|
+
Artist: Rick Astley
|
|
81
|
+
Position: 1/213s (0.0%)
|
|
82
|
+
Repeat: Off
|
|
83
|
+
Shuffle: Off
|
|
84
|
+
$ atvremote -s 10.0.10.254 pause
|
|
85
|
+
$ atvremote -n FakeATV play
|
|
86
|
+
```
|
|
87
|
+
|
|
88
|
+
You can also run it inside a container (x86_64, aarch64, armv7):
|
|
89
|
+
|
|
90
|
+
```raw
|
|
91
|
+
docker run -it --rm --network=host ghcr.io/postlund/pyatv:0.14.0 atvremote scan
|
|
92
|
+
```
|
|
93
|
+
|
|
94
|
+
The `master` tag points to latest commit on the `master` branch and `latest`
|
|
95
|
+
points to the latest release.
|
|
96
|
+
|
|
97
|
+
# I need to change something?
|
|
98
|
+
|
|
99
|
+
Want to help out with `pyatv`? Press the button below to get a fully prepared development environment and get started right away!
|
|
100
|
+
|
|
101
|
+
[](https://gitpod.io/#https://github.com/postlund/pyatv)
|
|
102
|
+
|
|
103
|
+
# Shortcuts to the good stuff
|
|
104
|
+
|
|
105
|
+
To save you some time, here are some shortcuts:
|
|
106
|
+
|
|
107
|
+
* [Getting started](https://pyatv.dev/documentation/getting-started/)
|
|
108
|
+
* [Documentation](https://pyatv.dev/documentation)
|
|
109
|
+
* [Development](https://pyatv.dev/development)
|
|
110
|
+
* [API Reference](https://pyatv.dev/api)
|
|
111
|
+
* [Support](https://pyatv.dev/support)
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
aiohttp==3.8.3,<5
|
|
2
|
+
async-timeout==4.0.2;python_version<'3.11'
|
|
3
|
+
cryptography==44.0.1
|
|
4
|
+
chacha20poly1305-reuseable==0.13.2
|
|
5
|
+
ifaddr==0.1.7
|
|
6
|
+
miniaudio==1.45
|
|
7
|
+
protobuf==6.31.1
|
|
8
|
+
pydantic==2.0.0
|
|
9
|
+
requests==2.30.0
|
|
10
|
+
srptools==0.2.0
|
|
11
|
+
tabulate==0.9.0
|
|
12
|
+
tinytag==1.10.0
|
|
13
|
+
zeroconf==0.129.0
|
|
@@ -0,0 +1,75 @@
|
|
|
1
|
+
variables:
|
|
2
|
+
code_dirs:
|
|
3
|
+
- pyatv
|
|
4
|
+
- tests
|
|
5
|
+
- examples
|
|
6
|
+
- scripts
|
|
7
|
+
pydirs:
|
|
8
|
+
- pyatv
|
|
9
|
+
- scripts
|
|
10
|
+
- examples
|
|
11
|
+
cs_exclude_words: infoms,cann,cant,asai,cafs,assertIn
|
|
12
|
+
requirements_file: requirements/requirements.txt
|
|
13
|
+
miniaudio_package: $(grep miniaudio= requirements/requirements.txt)
|
|
14
|
+
|
|
15
|
+
dependencies:
|
|
16
|
+
files:
|
|
17
|
+
- "{requirements_file}"
|
|
18
|
+
- requirements/requirements_docs.txt
|
|
19
|
+
- requirements/requirements_test.txt
|
|
20
|
+
|
|
21
|
+
pipeline:
|
|
22
|
+
pre:
|
|
23
|
+
- name: clean
|
|
24
|
+
run: coverage erase
|
|
25
|
+
- name: fixup
|
|
26
|
+
tags: [all, fixup]
|
|
27
|
+
run:
|
|
28
|
+
- black .
|
|
29
|
+
- isort {code_dirs}
|
|
30
|
+
- python scripts/api.py generate
|
|
31
|
+
- python scripts/protobuf.py --download generate
|
|
32
|
+
rebuild_miniaudio:
|
|
33
|
+
# A lot of builds on GitHub Actions result in "Illegal Instruction"
|
|
34
|
+
# when calling functions in miniaudio. Seemingly random and not
|
|
35
|
+
# always. Likely has to do with some instruction set mismatch, but
|
|
36
|
+
# not sure. Rebuilding miniaudio seems to improve the situation,
|
|
37
|
+
# so this optional step is used by the tests workflow to do that.
|
|
38
|
+
- name: miniaudio
|
|
39
|
+
tags: [all, miniaudio]
|
|
40
|
+
run:
|
|
41
|
+
- "pip uninstall -y miniaudio"
|
|
42
|
+
- "pip install --no-binary :all: {miniaudio_package}"
|
|
43
|
+
validate:
|
|
44
|
+
- name: pylint
|
|
45
|
+
run: pylint -j 0 {pydirs}
|
|
46
|
+
- name: api
|
|
47
|
+
run: python scripts/api.py verify
|
|
48
|
+
tags: [all, py3.8, api]
|
|
49
|
+
- name: protobuf
|
|
50
|
+
run: python scripts/protobuf.py --download verify
|
|
51
|
+
- name: flake8
|
|
52
|
+
run: flake8 --exclude=pyatv/protocols/mrp/protobuf {pydirs}
|
|
53
|
+
- name: black
|
|
54
|
+
run: black --fast --check .
|
|
55
|
+
- name: pydocstyle
|
|
56
|
+
run: pydocstyle -v --match='(?!test_).*[^pb2]\.py' {pydirs}
|
|
57
|
+
- name: isort
|
|
58
|
+
run: isort -c --diff {code_dirs}
|
|
59
|
+
- name: cs_docs
|
|
60
|
+
run: codespell -q 6 -L {cs_exclude_words} -S "lib,vendor,_site,api,assets,*~,.sass-cache,*.lock" docs
|
|
61
|
+
- name: cs_code
|
|
62
|
+
run: codespell -q 4 -L {cs_exclude_words} --skip="*.pyc,*.pyi,*~,tests/data" {pydirs} tests
|
|
63
|
+
- name: typing
|
|
64
|
+
run: mypy --python-executable "{python_executable}" --ignore-missing-imports --follow-imports=skip pyatv
|
|
65
|
+
- name: pytest
|
|
66
|
+
run: pytest -n auto --log-level=debug -q -d --timeout=30 --durations=10 --cov --cov-report=term-missing --cov-report=xml tests
|
|
67
|
+
post:
|
|
68
|
+
- name: report
|
|
69
|
+
run:
|
|
70
|
+
- coverage report
|
|
71
|
+
- coverage html
|
|
72
|
+
package:
|
|
73
|
+
- name: dist
|
|
74
|
+
run: python setup.py sdist bdist_wheel
|
|
75
|
+
tags: [all, package]
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
---
|
|
2
|
+
layout: template
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
<style type="text/css" media="screen">
|
|
6
|
+
.container {
|
|
7
|
+
margin: 10px auto;
|
|
8
|
+
max-width: 600px;
|
|
9
|
+
text-align: center;
|
|
10
|
+
}
|
|
11
|
+
h1 {
|
|
12
|
+
margin: 30px 0;
|
|
13
|
+
font-size: 4em;
|
|
14
|
+
line-height: 1;
|
|
15
|
+
letter-spacing: -1px;
|
|
16
|
+
}
|
|
17
|
+
</style>
|
|
18
|
+
|
|
19
|
+
<div class="container">
|
|
20
|
+
<h1>404</h1>
|
|
21
|
+
|
|
22
|
+
<p><strong>Page not found :(</strong></p>
|
|
23
|
+
<p>The requested page could not be found.</p>
|
|
24
|
+
</div>
|
package/pyatv/docs/CNAME
ADDED
|
@@ -0,0 +1 @@
|
|
|
1
|
+
pyatv.dev
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
source "https://rubygems.org"
|
|
2
|
+
|
|
3
|
+
# Hello! This is where you manage which Jekyll version is used to run.
|
|
4
|
+
# When you want to use a different version, change it below, save the
|
|
5
|
+
# file and run `bundle install`. Run Jekyll with `bundle exec`, like so:
|
|
6
|
+
#
|
|
7
|
+
# bundle exec jekyll serve
|
|
8
|
+
#
|
|
9
|
+
# This will help ensure the proper Jekyll version is running.
|
|
10
|
+
# Happy Jekylling!
|
|
11
|
+
|
|
12
|
+
# If you want to use GitHub Pages, remove the "gem "jekyll"" above and
|
|
13
|
+
# uncomment the line below. To upgrade, run `bundle update github-pages`.
|
|
14
|
+
gem "github-pages", group: :jekyll_plugins
|
|
15
|
+
|
|
16
|
+
# If you have any plugins, put them here!
|
|
17
|
+
group :jekyll_plugins do
|
|
18
|
+
gem "jekyll-feed", "~> 0.6"
|
|
19
|
+
gem "jemoji"
|
|
20
|
+
end
|
|
21
|
+
|
|
22
|
+
# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
|
|
23
|
+
# and associated library.
|
|
24
|
+
install_if -> { RUBY_PLATFORM =~ %r!mingw|mswin|java! } do
|
|
25
|
+
gem "tzinfo", "~> 1.2"
|
|
26
|
+
gem "tzinfo-data"
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
# Performance-booster for watching directories on Windows
|
|
30
|
+
gem "wdm", "~> 0.1.0", :install_if => Gem.win_platform?
|
|
31
|
+
|
|
@@ -0,0 +1,121 @@
|
|
|
1
|
+
title: pyatv
|
|
2
|
+
email: pierre.staahl@gmail.com
|
|
3
|
+
description: >- # this means to ignore newlines until "baseurl:"
|
|
4
|
+
a client library for Apple TV and AirPlay devices
|
|
5
|
+
url: "https://pyatv.dev"
|
|
6
|
+
baseurl: /
|
|
7
|
+
twitter_username: postlund
|
|
8
|
+
github_username: postlund
|
|
9
|
+
|
|
10
|
+
markdown: kramdown
|
|
11
|
+
kramdown:
|
|
12
|
+
parse_block_html: true
|
|
13
|
+
parse_span_html: true
|
|
14
|
+
html_to_native: true
|
|
15
|
+
theme: jekyll-theme-cayman
|
|
16
|
+
plugins:
|
|
17
|
+
- jekyll-feed
|
|
18
|
+
- jemoji
|
|
19
|
+
|
|
20
|
+
pyatv_version: "pyatv"
|
|
21
|
+
|
|
22
|
+
top_pages:
|
|
23
|
+
- link: /
|
|
24
|
+
title: Main Page
|
|
25
|
+
- link: /documentation/
|
|
26
|
+
title: Documentation
|
|
27
|
+
- link: /development/
|
|
28
|
+
title: Development
|
|
29
|
+
- link: /api/
|
|
30
|
+
title: API Reference
|
|
31
|
+
- link: /internals/
|
|
32
|
+
title: Internals
|
|
33
|
+
- link: /support/
|
|
34
|
+
title: Support
|
|
35
|
+
|
|
36
|
+
page_links:
|
|
37
|
+
documentation:
|
|
38
|
+
- link: /documentation/
|
|
39
|
+
title: Start
|
|
40
|
+
- link: /documentation/getting-started/
|
|
41
|
+
title: Getting Started
|
|
42
|
+
- link: /documentation/tutorial/
|
|
43
|
+
title: Tutorial
|
|
44
|
+
- link: /documentation/supported_features/
|
|
45
|
+
title: Supported Features
|
|
46
|
+
- link: /documentation/concepts/
|
|
47
|
+
title: Concepts
|
|
48
|
+
- link: /documentation/protocols/
|
|
49
|
+
title: Protocols
|
|
50
|
+
- link: /documentation/atvremote/
|
|
51
|
+
title: atvremote
|
|
52
|
+
- link: /documentation/atvproxy/
|
|
53
|
+
title: atvproxy
|
|
54
|
+
- link: /documentation/atvscript/
|
|
55
|
+
title: atvscript
|
|
56
|
+
- link: /documentation/atvlog/
|
|
57
|
+
title: atvlog
|
|
58
|
+
development:
|
|
59
|
+
- link: /development/
|
|
60
|
+
title: Start
|
|
61
|
+
- link: /development/scan_pair_and_connect/
|
|
62
|
+
title: Scan, Pair and Connect
|
|
63
|
+
- link: /development/device_info/
|
|
64
|
+
title: Device Information
|
|
65
|
+
- link: /development/control/
|
|
66
|
+
title: Control
|
|
67
|
+
- link: /development/power_management/
|
|
68
|
+
title: Power Management
|
|
69
|
+
- link: /development/features/
|
|
70
|
+
title: Features
|
|
71
|
+
- link: /development/metadata/
|
|
72
|
+
title: Metadata
|
|
73
|
+
- link: /development/listeners/
|
|
74
|
+
title: Listeners
|
|
75
|
+
- link: /development/stream/
|
|
76
|
+
title: Stream
|
|
77
|
+
- link: /development/storage/
|
|
78
|
+
title: Storage
|
|
79
|
+
- link: /development/apps/
|
|
80
|
+
title: Apps
|
|
81
|
+
- link: /development/audio/
|
|
82
|
+
title: Audio
|
|
83
|
+
- link: /development/keyboard/
|
|
84
|
+
title: Keyboard
|
|
85
|
+
- link: /development/logging/
|
|
86
|
+
title: Logging
|
|
87
|
+
- link: /development/examples/
|
|
88
|
+
title: Examples
|
|
89
|
+
internals:
|
|
90
|
+
- link: /internals/
|
|
91
|
+
title: Start
|
|
92
|
+
- link: /internals/design
|
|
93
|
+
title: Design
|
|
94
|
+
- link: /internals/interfaces
|
|
95
|
+
title: Interfaces
|
|
96
|
+
- link: /internals/testing
|
|
97
|
+
title: Testing
|
|
98
|
+
- link: /internals/documentation
|
|
99
|
+
title: Documentation
|
|
100
|
+
- link: /internals/submit-pr
|
|
101
|
+
title: Submit a PR
|
|
102
|
+
- link: /internals/tools
|
|
103
|
+
title: Tools
|
|
104
|
+
support:
|
|
105
|
+
- link: /support/
|
|
106
|
+
title: Start
|
|
107
|
+
- link: /support/migration/
|
|
108
|
+
title: Migration
|
|
109
|
+
- link: /support/scanning_issues/
|
|
110
|
+
title: Scanning Issues
|
|
111
|
+
- link: /support/troubleshooting/
|
|
112
|
+
title: Troubleshooting
|
|
113
|
+
- link: /support/faq/
|
|
114
|
+
title: FAQ
|
|
115
|
+
- link: /support/acknowledgements/
|
|
116
|
+
title: Acknowledgements
|
|
117
|
+
|
|
118
|
+
exclude:
|
|
119
|
+
- Gemfile
|
|
120
|
+
- Gemfile.lock
|
|
121
|
+
- vendor/
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
{%- assign module = include.i | split: "." | first -%}
|
|
2
|
+
{%- if module == "pyatv" -%}
|
|
3
|
+
{%- assign module = "" -%}
|
|
4
|
+
{%- assign path = "#" | append: include.i | replace: "/", "." -%}
|
|
5
|
+
{%- else -%}
|
|
6
|
+
{%- assign path = "#pyatv." | append: include.i | replace: "/", "." -%}
|
|
7
|
+
{%- endif -%}
|
|
8
|
+
{%- assign url = '/api/' | append: module | append: path | relative_url -%}
|
|
9
|
+
{%- assign path = include.i | replace: "/", "." -%}
|
|
10
|
+
{{ '<a href="URL">PATH</a>' | replace: "URL", url | replace: "PATH", path }}
|
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
```raw
|
|
2
|
+
$ atvremote acan
|
|
3
|
+
Scan Results
|
|
4
|
+
========================================
|
|
5
|
+
Name: Living Room
|
|
6
|
+
Model/SW: Apple TV 4K, tvOS 16.6 build 20M73
|
|
7
|
+
Address: 10.0.0.5
|
|
8
|
+
MAC: AA:BB:CC:DD:EE:FF
|
|
9
|
+
Deep Sleep: True
|
|
10
|
+
Identifiers:
|
|
11
|
+
- 01234567-89AB-CDEF-0123-4567890ABCDE
|
|
12
|
+
- AA:BB:CC:DD:EE:FF
|
|
13
|
+
- 01234567-89AB-CDEF-0123-AAAAAAAAAAAA
|
|
14
|
+
- AABBCCDDEEFF
|
|
15
|
+
Services:
|
|
16
|
+
- Protocol: Companion, Port: 49153, Credentials:None, Requires Password: False, Password: None, Pairing: Mandatory
|
|
17
|
+
- Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
|
|
18
|
+
- Protocol: MRP, Port: 49154, Credentials: None, Requires Password: False, Password: None, Pairing: NotNeeded (Disabled)
|
|
19
|
+
- Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: Mandatory
|
|
20
|
+
|
|
21
|
+
Name: Pierre's AirPort Express
|
|
22
|
+
Model/SW: AirPort Express (gen 2), AirPortOS 7.8.1
|
|
23
|
+
Address: 10.0.0.6
|
|
24
|
+
MAC: BB:BB:BB:BB:BB:BB
|
|
25
|
+
Deep Sleep: False
|
|
26
|
+
Identifiers:
|
|
27
|
+
- BB:BB:BB:BB:BB:BB
|
|
28
|
+
- BBBBBBBBBBBB
|
|
29
|
+
Services:
|
|
30
|
+
- Protocol: AirPlay, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: NotNeeded
|
|
31
|
+
- Protocol: RAOP, Port: 7000, Credentials: None, Requires Password: False, Password: None, Pairing: NotNeeded
|
|
32
|
+
```
|
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
{%- assign numbers = include.no | split: "," -%}
|
|
2
|
+
{%- assign output = Nil -%}
|
|
3
|
+
{%- for number in numbers -%}
|
|
4
|
+
{%- capture link -%}
|
|
5
|
+
<a href="https://github.com/postlund/pyatv/issues/{{ number }}">#{{ number }}</a>
|
|
6
|
+
{%- endcapture -%}
|
|
7
|
+
|
|
8
|
+
{%- if output == Nil -%}
|
|
9
|
+
{%- assign output = link -%}
|
|
10
|
+
{%- else -%}
|
|
11
|
+
{%- assign output = output | append: ", " | append: link -%}
|
|
12
|
+
{%- endif -%}
|
|
13
|
+
{%- endfor -%}
|
|
14
|
+
[{{ output }}]
|