Open wolverine30008 opened 3 years ago
Could you provide any details, please?
It says "ready" but nothing is scrobbling. IOS 14.5 ATV 4K. Itunes TV Movies Amazon Netflix. Nothing is syncing with trakt. There dosnt appear to be any errors in the terminal log. Also I have paired it with apple tv and it shows as connected trakt scrobbler under remote app and devices. See log below.
cd /Users//Desktop/trakt-for-appletv-master MBP trakt-for-appletv-master % pip3 install -r requirements.txt Requirement already satisfied: zeroconf in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 1)) (0.25.0) Requirement already satisfied: PyYAML in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 2)) (5.3.1) Requirement already satisfied: protobuf in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 3)) (3.11.3) Requirement already satisfied: trakt.py in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 4)) (3.2.0) Requirement already satisfied: varint in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 5)) (1.0.2) Requirement already satisfied: srptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 6)) (1.0.0) Requirement already satisfied: ed25519 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 7)) (1.5) Requirement already satisfied: cryptography in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 8)) (2.9) Requirement already satisfied: lxml in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from -r requirements.txt (line 9)) (4.5.0) Requirement already satisfied: ifaddr in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from zeroconf->-r requirements.txt (line 1)) (0.1.6) Requirement already satisfied: six>=1.9 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from protobuf->-r requirements.txt (line 3)) (1.14.0) Requirement already satisfied: setuptools in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from protobuf->-r requirements.txt (line 3)) (47.1.0) Requirement already satisfied: arrow<1.0.0,>=0.10.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from trakt.py->-r requirements.txt (line 4)) (0.15.5) Requirement already satisfied: requests<3.0.0,>=2.4.0 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from trakt.py->-r requirements.txt (line 4)) (2.23.0) Requirement already satisfied: cffi!=1.11.3,>=1.8 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from cryptography->-r requirements.txt (line 8)) (1.14.0) Requirement already satisfied: python-dateutil in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from arrow<1.0.0,>=0.10.0->trakt.py->-r requirements.txt (line 4)) (2.8.1) Requirement already satisfied: chardet<4,>=3.0.2 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from requests<3.0.0,>=2.4.0->trakt.py->-r requirements.txt (line 4)) (3.0.4) Requirement already satisfied: certifi>=2017.4.17 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from requests<3.0.0,>=2.4.0->trakt.py->-r requirements.txt (line 4)) (2020.6.20) Requirement already satisfied: urllib3!=1.25.0,!=1.25.1,<1.26,>=1.21.1 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from requests<3.0.0,>=2.4.0->trakt.py->-r requirements.txt (line 4)) (1.25.8) Requirement already satisfied: idna<3,>=2.5 in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from requests<3.0.0,>=2.4.0->trakt.py->-r requirements.txt (line 4)) (2.9) Requirement already satisfied: pycparser in /Library/Frameworks/Python.framework/Versions/3.7/lib/python3.7/site-packages (from cffi!=1.11.3,>=1.8->cryptography->-r requirements.txt (line 8)) (2.20) WARNING: You are using pip version 20.2.3; however, version 21.1.1 is available. You should consider upgrading via the '/usr/local/bin/python3.7 -m pip install --upgrade pip' command. MBP trakt-for-appletv-master % python3 ./tvscrobbler.py ready!
Try enabling debug logging by adding the following to scrobbling.py
:
import logging
logging.basicConfig(level=logging.DEBUG)
Does it matter where I add this? If so, where do I need to add this script? Thanks
To the beginning of the file
MBP trakt-for-appletv-master % python3 ./tvscrobbler.py DEBUG:urllib3.util.retry:Converted retries value: 3 -> Retry(total=3, connect=None, read=None, redirect=None, status=None) DEBUG:urllib3.util.retry:Converted retries value: 3 -> Retry(total=3, connect=None, read=None, redirect=None, status=None) DEBUG:trakt.core.emitter:[trakt.client.TraktClient ]:on(events: ['oauth.token_refreshed'], func: <function ScrobblingRemoteProtocol.on_trakt_token_refreshed at 0x7fd31127a290>) DEBUG:asyncio:Using selector: KqueueSelector ready!
I'm sorry, but I cannot help here. It's impossible to determine what's wrong without actually debugging the code in your environment.
I got the same issue. Starting the script regularly it just displays ready!
. When I start something on Netflix nothing happens. When I add debug logging to scrobbling.py
I see a lot of output like this but nothing is scrobbled our sending regular output (without debug logging):
Using pyatv==0.9.1
as advised in #21
DEBUG:pyatv.auth.hap_channel:Received data (Data=2000f9fe9b2e28f14f2aada643c60f1db5432b993a471a28d88e5676aae30d695863a5bd7e059b774c2dde618d67c4b5b6e3f000820b47f16b4e10f67e7e7801c3cd9b2d54b5ab8e7f9131045d18779e8cf641be81fb3cf9b1ba2e129b124764d826ae62bdb47e4884cf9344e8276b37dd17d57170e455b7caee5ab69ee154dcfbdbef9abc9be8c29762f16da495efad6d8e5f49d15ae694fa3d118173712aab213ea8736894e68b08bbee97fac6dc3f7f02a39149b4bf2a6aab8396a7e4e7b41280cea62dc480a1561642c0aca5470f8698f15058cd1ae222c3e8b6557a179a84062c5504cc9e8a46b89fb588656ad63c62a41cb33b58067f4e7657ff0f1...)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_STATE_MESSAGE
[setStateMessage] {
playbackState: Paused
playbackQueueCapabilities {
}
playerPath {
origin {
displayName: "Apple TV Wohnzimmer"
identifier: 1280262988
}
client {
processIdentifier: 6807
bundleIdentifier: "com.netflix.Netflix"
}
player {
identifier: "avkit-21BC0C88-DDF4-4BE4-857D-F19D1E662CA1"
displayName: "player-8"
6: 0
}
}
playbackStateTimestamp: 666707692.212455
}
uniqueIdentifier: "4CD22798-E5E3-46EA-9BCB-36C2430A4E42"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 4 (SetStateMessage) to Listener(func=<bound method PlayerStateManager._handle_set_state of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 4 (SetStateMessage) to Listener(func=<bound method ScrobblingRemoteProtocol.message_received of <scrobbling.ScrobblingRemoteProtocol object at 0xb62beb08>>, data=None)
DEBUG:pyatv.auth.hap_channel:Sending data (Encrypted=20002961ef4bc7aaca112d82f11b6b786f413f11ea0be65626ffa6a1a0b26a609994b13fc54dc6253d75c00d3c0d19a95bfa)
DEBUG:pyatv.auth.hap_channel:Received data (Data=20009736f6f324dbf2ee02dd28554f3d8343264cf315365be5b1954221f22418d0fb823b6d07b67974f81b92ad13e147f16c7503ac695825ba3960901fdaca60536b9724f8aeb958120ba09739736c5151ff218eaa85b98df0240e105870d86b4495712c165609f3dd4967d4cedc05f48f37283241f5a80d327721793b6573cea474c9761cda72ee0f47d08813c7a6d7394b29ef11d07569eb18d47712e57c8f186935b131a9cabb5cd0e7ad8bbf11533210dcab497b5386f8880510d1a97c1f5ebd431a7b83ea645c633a35998153b2bd5790702d5b09ab07af1c7d8ae9fed3f50271764dcdb78d9277badd4e11893978824415ff9033fa3d2d1a43b720f...)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_NOW_PLAYING_CLIENT_MESSAGE
[setNowPlayingClientMessage] {
}
uniqueIdentifier: "8562E0AB-5784-4414-A94E-5C05AC71A9F4"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 46 (SetNowPlayingClientMessage) to Listener(func=<bound method PlayerStateManager._handle_set_now_playing_client of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_DEFAULT_SUPPORTED_COMMANDS_MESSAGE
[setDefaultSupportedCommandsMessage] {
supportedCommands {
supportedCommands {
command: Play
enabled: true
}
supportedCommands {
command: PrepareForSetQueue
enabled: true
}
supportedCommands {
command: SetPlaybackQueue
enabled: true
supportedPlaybackQueueTypes: 7
supportedPlaybackQueueTypes: 3
supportedPlaybackQueueTypes: 6
supportedPlaybackQueueTypes: 2
supportedPlaybackQueueTypes: 5
supportedPlaybackQueueTypes: 1
supportedPlaybackQueueTypes: 8
supportedCustomQueueIdentifiers: "com.apple.music.playbackqueue.radio"
supportedCustomQueueIdentifiers: "com.apple.music.playbackqueue.tracklist"
supportedCustomQueueIdentifiers: "com.apple.MediaPlaybackCore.playbackContextArchive-v1.opack"
supportedCustomQueueIdentifiers: "com.apple.mediaplayer.playbackcontext"
}
supportedCommands {
command: SetPlaybackSession
}
supportedCommands {
command: PreloadedPlaybackSession
}
}
displayID: "com.apple.TVMusic"
playbackQueueCapabilities {
}
playerPath {
client {
bundleIdentifier: "com.apple.TVMusic"
}
}
}
uniqueIdentifier: "310EA03A-30FC-4037-8512-55F08535B4F6"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 72 (SetDefaultSupportedCommandsMessage) to Listener(func=<bound method PlayerStateManager._handle_set_default_supported_commands of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_DEFAULT_SUPPORTED_COMMANDS_MESSAGE
[setDefaultSupportedCommandsMessage] {
supportedCommands {
supportedCommands {
command: Play
enabled: true
}
supportedCommands {
command: SetPlaybackQueue
enabled: true
supportedPlaybackQueueTypes: 3
supportedPlaybackQueueTypes: 6
supportedPlaybackQueueTypes: 2
supportedPlaybackQueueTypes: 5
supportedPlaybackQueueTypes: 1
}
supportedCommands {
command: SetPlaybackSession
enabled: true
supportedPlaybackSessionTypes: "com.apple.podcasts.MTPlaybackQueueController.GenericQueue"
currentPlaybackSessionTypes: "com.apple.podcasts.MTPlaybackQueueController.GenericQueue"
}
}
displayID: "com.apple.podcasts"
playbackQueueCapabilities {
}
playerPath {
client {
bundleIdentifier: "com.apple.podcasts"
}
}
}
uniqueIdentifier: "56D384D8-2B9A-48DA-B71D-06E863BFCD17"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 72 (SetDefaultSupportedCommandsMessage) to Listener(func=<bound method PlayerStateManager._handle_set_default_supported_commands of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: ORIGIN_CLIENT_PROPERTIES_MESSAGE
uniqueIdentifier: "C03690AF-FFFE-4AF7-811D-EAE354B526F5"
[originClientPropertiesMessage] {
lastPlayingTimestamp: 666707692.232753
}
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_NOW_PLAYING_PLAYER_MESSAGE
[setNowPlayingPlayerMessage] {
}
uniqueIdentifier: "50DEB26E-2C47-4734-BD16-61A0D999666E"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 47 (SetNowPlayingPlayerMessage) to Listener(func=<bound method PlayerStateManager._handle_set_now_playing_player of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_STATE_MESSAGE
uniqueIdentifier: "556445B8-5178-4739-8801-87B6B563AEAD"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 4 (SetStateMessage) to Listener(func=<bound method PlayerStateManager._handle_set_state of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 4 (SetStateMessage) to Listener(func=<bound method ScrobblingRemoteProtocol.message_received of <scrobbling.ScrobblingRemoteProtocol object at 0xb62beb08>>, data=None)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: PLAYER_CLIENT_PROPERTIES_MESSAGE
uniqueIdentifier: "C5EFBB87-CF6B-43B0-BF84-F3B4E505759E"
[playerClientPropertiesMessage] {
lastPlayingTimestamp: 0.0
}
DEBUG:pyatv.auth.hap_channel:Sending data (Encrypted=20002a00564242c240baf0cd9ad46042c96e38da3c17636abbfa8882ee0e2c3026a13784d5e5f55fdda31710dec2e7692b72)
DEBUG:pyatv.protocols.mrp.player_state:Active client is now
DEBUG:pyatv.protocols.mrp.player_state:Active player no longer set
DEBUG:pyatv.auth.hap_channel:Received data (Data=200015dc4d98b8d309ca6296d79b80263678d8cdc8a179f89c1afa523160b676b163f70b828abf13d156ef36db9e44ef9a1fe4002a6a63f36160691941e63a21ede369c6543b811c24af4b659c082c660787ec9d4fa43ba61764875ff368ffc60d26ed9e8ff885be96eabc94c26b3bbc7f44dad828b8b6dec7eb08a8ee5f0637d245c683808f22e9229a8bb6bca640602d0e17f6de4f47eec90646c5383335b441e4a1d74a797f695034bf86bbed6c7c840d979469c89760eb4a746f12afa0eb0b9a1272dbb89d72a0acbb5d9815b72e8a9bf5ef8e77c5e5c8352cd2fdab7973f39469bf602bbb4ddc1cb43fa1b3c943965e2a5bf0a3ee14e032a51bb2355...)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_STATE_MESSAGE
[setStateMessage] {
playbackQueueCapabilities {
}
playerPath {
origin {
displayName: "Apple TV Wohnzimmer"
identifier: 1280262988
}
client {
processIdentifier: 6807
bundleIdentifier: "com.netflix.Netflix"
}
player {
identifier: "avkit-21BC0C88-DDF4-4BE4-857D-F19D1E662CA1"
displayName: "player-8"
6: 0
}
}
}
uniqueIdentifier: "7EE804DA-8109-4AEF-A11D-53C9BA4FFA68"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 4 (SetStateMessage) to Listener(func=<bound method PlayerStateManager._handle_set_state of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 4 (SetStateMessage) to Listener(func=<bound method ScrobblingRemoteProtocol.message_received of <scrobbling.ScrobblingRemoteProtocol object at 0xb62beb08>>, data=None)
DEBUG:pyatv.auth.hap_channel:Sending data (Encrypted=2000f5d84e25ef4f89977bf1a3f671fcd8f428dcbad078e62eaaca3928379019fa540e8f54ab29ff75b108f76665d396c31a)
DEBUG:pyatv.auth.hap_channel:Received data (Data=2000a9aada388bae785d58b25985b95a426ce5029a0d8618f2d22428f5f8d1a6d2edbbc252679ecb5ddabf29151446bfa096f00068f4c3d8a89d99984fc78b29fbe2b3bb2970ff3a850f6e3e13006477d7d99288c78027efa5b19fa6a58d13b775939e13b4dc968311a56408b1c32121ba74c223f074fed426f36b19ef1753b87f3330eb16b86dfc6fc948275afcb86e0d9787e01da72838948b418090459cbcf9243558e4080c9f7b2dedc63bf3b19f3fabc13570cd05b0fed317e3bd5aae214ae618b867ae3623577c3bfc8c5f7ee89093a344917811d3ad8cfb5d1447f17c277f00bc8e53e65851c8899457b65d8c38289ef657cfd5d8d59f3ac560173...)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_STATE_MESSAGE
[setStateMessage] {
playbackState: Paused
playbackQueueCapabilities {
}
playerPath {
origin {
displayName: "Apple TV Wohnzimmer"
identifier: 1280262988
}
client {
processIdentifier: 6807
bundleIdentifier: "com.netflix.Netflix"
}
player {
identifier: "avkit-21BC0C88-DDF4-4BE4-857D-F19D1E662CA1"
displayName: "player-8"
6: 0
}
}
playbackStateTimestamp: 666707692.212455
}
uniqueIdentifier: "2F7C8780-4B2A-467F-8154-9C8D188063DF"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 4 (SetStateMessage) to Listener(func=<bound method PlayerStateManager._handle_set_state of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 4 (SetStateMessage) to Listener(func=<bound method ScrobblingRemoteProtocol.message_received of <scrobbling.ScrobblingRemoteProtocol object at 0xb62beb08>>, data=None)
DEBUG:pyatv.auth.hap_channel:Sending data (Encrypted=2000ba27029ed984ef2111ba6b1b35663407b33293a49588067cf6464dae2757a2f02a044618db26413c08004f75801b8bd6)
DEBUG:urllib3.connectionpool:https://api.trakt.tv:443 "POST /scrobble/pause HTTP/1.1" 404 None
WARNING:trakt.interfaces.base:Request failed: "POST /scrobble/pause" - 404: "Method exists, but no record found" (Not Found)
DEBUG:pyatv.auth.hap_channel:Received data (Data=2000f88913ffdea90f342c37dd383734059f04c52641b787e0a6f80d263115c9afaac9ca967418bcd8d50fa091309dce8bb3d8006667076e02bb408fc963e07be50169c4673ef593a57f89cf2c9e21316dae15c75a4f46c554e4e4e129c5da7cdbd139ae6b3c1bb6d3c6cddcce87396dbc4c1b684a25f107b1bad40c598466d9544ea433e31acf5d779f2ed08b6fbdf2198f20be0524d743bc8a23f24b6e7627031717a14674498d1b43ef566d51dd61f12766708c755d2be9a0c9b7eb3ac549e826332166f8bd20286444a964ce2cd8c459a4820c0fe4e09de65a797e2b2c67178a0a012b2eb6d00fa7d1a847ab8cc5deeb27804522405c4719ac9005b33...)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: SET_NOW_PLAYING_PLAYER_MESSAGE
[setNowPlayingPlayerMessage] {
playerPath {
origin {
displayName: "Apple TV Wohnzimmer"
identifier: 1280262988
}
client {
processIdentifier: 6807
bundleIdentifier: "com.netflix.Netflix"
}
player {
identifier: "MediaRemote-DefaultPlayer"
displayName: "Default Player"
6: 0
}
}
}
uniqueIdentifier: "92CD3841-D10E-4713-9F5A-C713BFC32A0D"
DEBUG:pyatv.protocols.mrp.protocol:Dispatching message with type 47 (SetNowPlayingPlayerMessage) to Listener(func=<bound method PlayerStateManager._handle_set_now_playing_player of <pyatv.protocols.mrp.player_state.PlayerStateManager object at 0xb2c930d0>>, data=None)
DEBUG:pyatv.auth.hap_channel:Sending data (Encrypted=20009ca01513173893d41cb7da85e243c06dbed5fd1365ce49fec41d713eff9a98702b605ee710105738003731c00b064292)
DEBUG:pyatv.protocols.mrp.player_state:Active player is now MediaRemote-DefaultPlayer (Default Player)
DEBUG:pyatv.auth.hap_channel:Received data (Data=2000d9a92fa8b1bbf9f9f037f66b36941e2b7a46fa6babac68a99ca0056b0984a7f35d6a13eb8829624a39f41de762bb1cb9e30073ade8cd508f4433cb92df9882b8ce70ba4acc63d5cf6c6a5576ae2515545f21453dd57fa5215c6b7469dc324f41d293d95b90ac33e50cb8898fc0f2e8b995303f6d2cf6a69c45374a90c4b13e99de9711fa864555bcce45e4c00ab5397aec8357511121cd7cac20dc67af1f5b9bb03a5b68267cee83a70f6293de2f4e6adca9ee1dc794d016f91b72183b6d16145d346825f7336dcf58643aab0e91383c11fe01ebc58bcf2a517a5c40323729113a8d4de518553f1084941a684e90862bdaef71230c40b7087b3df3b9d...)
DEBUG:pyatv.protocols.airplay.mrp_connection:<< Receive: Protobuf: type: REMOVE_PLAYER_MESSAGE
[removePlayerMessage] {
playerPath {
origin {
displayName: "Apple TV Wohnzimmer"
identifier: 1280262988
}
client {
processIdentifier: 6807
bundleIdentifier: "com.netflix.Netflix"
}
player {
identifier: "avkit-21BC0C88-DDF4-4BE4-857D-F19D1E662CA1"
displayName: "player-8"
6: 0
}
}
}
@vicegold This is definitely a different problem, so please open a new issue.
It looks like generally everything works, but trakt.tv couldn't find the exact show. Please try watching something else and see if it works better. If it doesn't, then I'll need to know the exact episode you have problems with, so I could try to reproduce the next time I have a Netflix subscription.
Thanks for the fix intrepidsilence but I am still unable to scrobble with apple tv. Is there anything else I would need to do to activate this service.
Originally posted by @wolverine30008 in https://github.com/stigger/trakt-for-appletv/issues/15#issuecomment-830691174