/
/
/
1#!/usr/bin/env python
2# type: ignore
3"""Events module for Spotify Connect."""
4
5import json
6import os
7import urllib.request
8from datetime import datetime
9
10player_event = os.getenv("PLAYER_EVENT")
11
12json_dict = {
13 "event_time": str(datetime.now()),
14 "event": player_event,
15}
16
17if player_event in ("session_connected", "session_disconnected"):
18 json_dict["user_name"] = os.environ["USER_NAME"]
19 json_dict["connection_id"] = os.environ["CONNECTION_ID"]
20
21elif player_event == "session_client_changed":
22 json_dict["client_id"] = os.environ["CLIENT_ID"]
23 json_dict["client_name"] = os.environ["CLIENT_NAME"]
24 json_dict["client_brand_name"] = os.environ["CLIENT_BRAND_NAME"]
25 json_dict["client_model_name"] = os.environ["CLIENT_MODEL_NAME"]
26
27elif player_event == "shuffle_changed":
28 json_dict["shuffle"] = os.environ["SHUFFLE"]
29
30elif player_event == "repeat_changed":
31 json_dict["repeat"] = os.environ["REPEAT"]
32
33elif player_event == "auto_play_changed":
34 json_dict["auto_play"] = os.environ["AUTO_PLAY"]
35
36elif player_event == "filter_explicit_content_changed":
37 json_dict["filter"] = os.environ["FILTER"]
38
39elif player_event == "volume_changed":
40 json_dict["volume"] = os.environ["VOLUME"]
41
42elif player_event in ("seeked", "position_correction", "playing", "paused"):
43 json_dict["track_id"] = os.environ["TRACK_ID"]
44 json_dict["position_ms"] = os.environ["POSITION_MS"]
45
46elif player_event in (
47 "unavailable",
48 "end_of_track",
49 "preload_next",
50 "preloading",
51 "loading",
52 "stopped",
53):
54 json_dict["track_id"] = os.environ["TRACK_ID"]
55
56elif player_event == "track_changed":
57 common_metadata_fields = {}
58 item_type = os.environ["ITEM_TYPE"]
59 common_metadata_fields["item_type"] = item_type
60 common_metadata_fields["track_id"] = os.environ["TRACK_ID"]
61 common_metadata_fields["uri"] = os.environ["URI"]
62 common_metadata_fields["name"] = os.environ["NAME"]
63 common_metadata_fields["duration_ms"] = os.environ["DURATION_MS"]
64 common_metadata_fields["is_explicit"] = os.environ["IS_EXPLICIT"]
65 common_metadata_fields["language"] = os.environ["LANGUAGE"].split("\n")
66 common_metadata_fields["covers"] = os.environ["COVERS"].split("\n")
67 json_dict["common_metadata_fields"] = common_metadata_fields
68
69 if item_type == "Track":
70 track_metadata_fields = {}
71 track_metadata_fields["number"] = os.environ["NUMBER"]
72 track_metadata_fields["disc_number"] = os.environ["DISC_NUMBER"]
73 track_metadata_fields["popularity"] = os.environ["POPULARITY"]
74 track_metadata_fields["album"] = os.environ["ALBUM"]
75 track_metadata_fields["artists"] = os.environ["ARTISTS"].split("\n")
76 track_metadata_fields["album_artists"] = os.environ["ALBUM_ARTISTS"].split("\n")
77 json_dict["track_metadata_fields"] = track_metadata_fields
78
79 elif item_type == "Episode":
80 episode_metadata_fields = {}
81 episode_metadata_fields["show_name"] = os.environ["SHOW_NAME"]
82 episode_metadata_fields["description"] = os.environ["DESCRIPTION"]
83 json_dict["episode_metadata_fields"] = episode_metadata_fields
84
85URL = os.environ["MASS_CALLBACK"]
86req = urllib.request.Request(URL) # noqa: S310
87req.add_header("Content-Type", "application/json; charset=utf-8")
88jsondata = json.dumps(json_dict)
89jsondataasbytes = jsondata.encode("utf-8")
90req.add_header("Content-Length", len(jsondataasbytes))
91response = urllib.request.urlopen(req, jsondataasbytes) # noqa: S310
92