spotifywebapiPython 1.0.294__py3-none-any.whl → 1.0.295__py3-none-any.whl
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.
- spotifywebapipython/const.py +1 -1
- spotifywebapipython/docs/__init__.html +8 -2
- spotifywebapipython/docs/index.html +2 -2
- spotifywebapipython/docs/search.js +1 -1
- spotifywebapipython/docs/spotifywebapipython/const.html +3 -3
- spotifywebapipython/docs/spotifywebapipython/saappmessages.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/sautils.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifyapierror.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifyapimessage.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifyauthtoken.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifyclient.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifydiscovery.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifymediatypes.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifytypeprefixes.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifywebapiauthenticationerror.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifywebapierror.html +2 -2
- spotifywebapipython/docs/spotifywebapipython/spotifywebplayertoken.html +2 -2
- spotifywebapipython/spotifyclient.py +1 -1
- spotifywebapipython/spotifyconnect/spotifyconnectdirectorytask.py +116 -103
- {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/METADATA +1 -1
- {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/RECORD +24 -24
- {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/LICENSE +0 -0
- {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/WHEEL +0 -0
- {spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/top_level.txt +0 -0
|
@@ -692,6 +692,7 @@ class SpotifyConnectDirectoryTask(threading.Thread):
|
|
|
692
692
|
transferPlayback:bool=False,
|
|
693
693
|
timeoutActivation:float=15.0,
|
|
694
694
|
timeoutTransfer:float=10.0,
|
|
695
|
+
activateAppMediaReceiverOnGroupMembers:bool=False,
|
|
695
696
|
) -> str:
|
|
696
697
|
"""
|
|
697
698
|
Activates the Spotify Cast Application on the specified Chromecast device.
|
|
@@ -712,18 +713,22 @@ class SpotifyConnectDirectoryTask(threading.Thread):
|
|
|
712
713
|
|
|
713
714
|
Args:
|
|
714
715
|
deviceName (str):
|
|
715
|
-
Chromecast device friendly name (or device id) to activate.
|
|
716
|
+
Chromecast device friendly name (or device id) to activate.
|
|
716
717
|
transferPlayback (bool):
|
|
717
718
|
True to transfer playback to the device; otherwise, False to just activate
|
|
718
|
-
the Spotify Cast App on the device.
|
|
719
|
+
the Spotify Cast App on the device.
|
|
719
720
|
timeoutActivation (float):
|
|
720
721
|
Amount of time to wait (in seconds) for the Spotify Cast App to be fully activated,
|
|
721
722
|
the user logged in, and ready for transfer of playback.
|
|
722
|
-
Default is 15 seconds.
|
|
723
|
+
Default is 15 seconds.
|
|
723
724
|
timeoutTransfer (float):
|
|
724
725
|
If `transferPlayback` argument is True, the amount of time to wait (in seconds)
|
|
725
726
|
for the transfer to complete; otherwise, argument is ignored.
|
|
726
|
-
Default is 10 seconds.
|
|
727
|
+
Default is 10 seconds.
|
|
728
|
+
activateAppMediaReceiverOnGroupMembers (bool):
|
|
729
|
+
True to force start the APP_MEDIA_RECEIVER on each group member cast device prior
|
|
730
|
+
to activating the Spotify Cast App; otherwise, False (default) to not start the
|
|
731
|
+
APP_MEDIA_RECEIVER on any group devices.
|
|
727
732
|
|
|
728
733
|
Returns:
|
|
729
734
|
The deviceId that was activated.
|
|
@@ -739,6 +744,7 @@ class SpotifyConnectDirectoryTask(threading.Thread):
|
|
|
739
744
|
apiMethodParms.AppendKeyValue("transferPlayback", transferPlayback)
|
|
740
745
|
apiMethodParms.AppendKeyValue("timeoutActivation", timeoutActivation)
|
|
741
746
|
apiMethodParms.AppendKeyValue("timeoutTransfer", timeoutTransfer)
|
|
747
|
+
apiMethodParms.AppendKeyValue("activateAppMediaReceiverOnGroupMembers", activateAppMediaReceiverOnGroupMembers)
|
|
742
748
|
_logsi.LogMethodParmList(SILevel.Verbose, "Activating Spotify App on Chromecast device: \"%s\"" % (deviceName), apiMethodParms)
|
|
743
749
|
|
|
744
750
|
# validations.
|
|
@@ -829,13 +835,13 @@ class SpotifyConnectDirectoryTask(threading.Thread):
|
|
|
829
835
|
|
|
830
836
|
# for groups, the SpotifyAppTask must be activated on the group leader (e.g. coordinator).
|
|
831
837
|
# the cast zeroconf info may not contain the group leader host info, as it is constantly
|
|
832
|
-
# being updated as devices are added / removed from the group.
|
|
833
|
-
#
|
|
834
|
-
#
|
|
835
|
-
#
|
|
836
|
-
#
|
|
837
|
-
#
|
|
838
|
-
#
|
|
838
|
+
# being updated as devices are added / removed from the group. the resolution of the group
|
|
839
|
+
# leader should have been handled by the `_VerifyMultizoneGroupLeader` call above.
|
|
840
|
+
#
|
|
841
|
+
# if this the the second attempt at activating the Spotify Cast App, then we will try
|
|
842
|
+
# starting the APP_MEDIA_RECEIVER on each group member device, as well as calling the
|
|
843
|
+
# `get_multizone_status` function again to verify the status of the zone before trying to
|
|
844
|
+
# start the Spotify Cast App.
|
|
839
845
|
|
|
840
846
|
# trace.
|
|
841
847
|
if (_logsi.IsOn(SILevel.Verbose)):
|
|
@@ -845,102 +851,109 @@ class SpotifyConnectDirectoryTask(threading.Thread):
|
|
|
845
851
|
groupHost:str = scDevice.DiscoveryResult.HostIpAddress
|
|
846
852
|
groupPort:int = scDevice.DiscoveryResult.HostIpPort
|
|
847
853
|
|
|
848
|
-
|
|
854
|
+
# are we starting the APP_MEDIA_RECEIVER on each group member?
|
|
855
|
+
if (activateAppMediaReceiverOnGroupMembers != True):
|
|
849
856
|
|
|
850
|
-
|
|
851
|
-
# note that this will just send a request to the cast group device for its
|
|
852
|
-
# status, which will then update the members list via event listener callbacks.
|
|
853
|
-
castMultizoneController:MultizoneController = self._CastMultiZoneControllers.get(str(castInfo.uuid), None)
|
|
854
|
-
if (castMultizoneController) and (castMultizoneController._socket_client):
|
|
855
|
-
castMultizoneController.update_members()
|
|
856
|
-
time.sleep(2.0) # give controller some time to update member list.
|
|
857
|
-
|
|
858
|
-
# activate media receiver app for each member in the group.
|
|
859
|
-
# process all device members in the group / zone.
|
|
860
|
-
for zone_member_uuid in castMultizoneController.members:
|
|
861
|
-
|
|
862
|
-
# get castInfo instance so we can connect to the device.
|
|
863
|
-
zone_member_castInfo = self._CastBrowser.devices.get(UUID(zone_member_uuid))
|
|
864
|
-
if zone_member_castInfo is not None:
|
|
865
|
-
|
|
866
|
-
# get cast device instance.
|
|
867
|
-
zone_member_castDevice = get_chromecast_from_cast_info(
|
|
868
|
-
cast_info=zone_member_castInfo,
|
|
869
|
-
zconf=self._ZeroconfInstance,
|
|
870
|
-
tries=2,
|
|
871
|
-
retry_wait=0.5,
|
|
872
|
-
timeout=5)
|
|
873
|
-
|
|
874
|
-
# wait for the cast device to provide an initial status.
|
|
875
|
-
zone_member_castDevice.wait(10)
|
|
876
|
-
|
|
877
|
-
# formulate title for trace messages.
|
|
878
|
-
trc_zone_member_title:str = "\"%s\" [ip=%s:%s]" % (zone_member_castDevice.cast_info.friendly_name, zone_member_castDevice.socket_client.host, zone_member_castDevice.socket_client.port)
|
|
879
|
-
|
|
880
|
-
# trace.
|
|
881
|
-
_logsi.LogObject(SILevel.Verbose, "%s - Cast group \"%s\" member Chromecast device status: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), zone_member_castDevice.status, colorValue=SIColors.Coral)
|
|
882
|
-
|
|
883
|
-
# if current app is APP_SPOTIFY, then stop the app before starting the media receiver.
|
|
884
|
-
if (zone_member_castDevice.status) and (zone_member_castDevice.status.app_id == APP_SPOTIFY):
|
|
885
|
-
_logsi.LogVerbose("%s - Issuing quit_app (APP_SPOTIFY) for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
|
|
886
|
-
zone_member_castDevice.quit_app(timeout=5.0)
|
|
887
|
-
elif (zone_member_castDevice.status) and (zone_member_castDevice.status.app_id == APP_SPOTIFY_CONNECT):
|
|
888
|
-
_logsi.LogVerbose("%s - Issuing quit_app (APP_SPOTIFY_CONNECT) for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
|
|
889
|
-
zone_member_castDevice.quit_app(timeout=5.0)
|
|
890
|
-
|
|
891
|
-
# start the media receiver app.
|
|
892
|
-
# this will stabilize routing for the group using the Default Media Receiver.
|
|
893
|
-
_logsi.LogVerbose("%s - Starting Chromecast default APP_MEDIA_RECEIVER for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
|
|
894
|
-
zone_member_castDevice.start_app(APP_MEDIA_RECEIVER, force_launch=True, timeout=10.0)
|
|
895
|
-
|
|
896
|
-
# start the connection worker thread, if needed.
|
|
897
|
-
# failure to do this will result in the following exception being thrown when
|
|
898
|
-
# the `launch_app()` method is called:
|
|
899
|
-
# - `pychromecast.error.NotConnected: Chromecast unknown:8009 is connecting...`
|
|
900
|
-
if (zone_member_castDevice.is_idle):
|
|
901
|
-
if (zone_member_castDevice.socket_client is not None) and (zone_member_castDevice.socket_client.first_connection):
|
|
902
|
-
_logsi.LogVerbose("%s - Starting Chromecast default APP_MEDIA_RECEIVER connection worker thread for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
|
|
903
|
-
zone_member_castDevice.start()
|
|
904
|
-
zone_member_castDevice.wait(timeout=5.0)
|
|
905
|
-
|
|
906
|
-
# media receiver app needs time to start.
|
|
907
|
-
time.sleep(2.0)
|
|
857
|
+
_logsi.LogVerbose("Bypassing start of APP_MEDIA_RECEIVER for group: %s" % (scDevice.Title), colorValue=SIColors.Coral)
|
|
908
858
|
|
|
909
|
-
|
|
859
|
+
else:
|
|
860
|
+
|
|
861
|
+
try:
|
|
862
|
+
|
|
863
|
+
# request a multizone group member update.
|
|
864
|
+
# note that this will just send a request to the cast group device for its
|
|
865
|
+
# status, which will then update the members list via event listener callbacks.
|
|
866
|
+
castMultizoneController:MultizoneController = self._CastMultiZoneControllers.get(str(castInfo.uuid), None)
|
|
867
|
+
if (castMultizoneController) and (castMultizoneController._socket_client):
|
|
868
|
+
castMultizoneController.update_members()
|
|
869
|
+
time.sleep(2.0) # give controller some time to update member list.
|
|
870
|
+
|
|
871
|
+
# activate media receiver app for each member in the group.
|
|
872
|
+
# process all device members in the group / zone.
|
|
873
|
+
for zone_member_uuid in castMultizoneController.members:
|
|
874
|
+
|
|
875
|
+
# get castInfo instance so we can connect to the device.
|
|
876
|
+
zone_member_castInfo = self._CastBrowser.devices.get(UUID(zone_member_uuid))
|
|
877
|
+
if zone_member_castInfo is not None:
|
|
878
|
+
|
|
879
|
+
# get cast device instance.
|
|
880
|
+
zone_member_castDevice = get_chromecast_from_cast_info(
|
|
881
|
+
cast_info=zone_member_castInfo,
|
|
882
|
+
zconf=self._ZeroconfInstance,
|
|
883
|
+
tries=2,
|
|
884
|
+
retry_wait=0.5,
|
|
885
|
+
timeout=5)
|
|
886
|
+
|
|
887
|
+
# wait for the cast device to provide an initial status.
|
|
888
|
+
zone_member_castDevice.wait(10)
|
|
889
|
+
|
|
890
|
+
# formulate title for trace messages.
|
|
891
|
+
trc_zone_member_title:str = "\"%s\" [ip=%s:%s]" % (zone_member_castDevice.cast_info.friendly_name, zone_member_castDevice.socket_client.host, zone_member_castDevice.socket_client.port)
|
|
892
|
+
|
|
893
|
+
# trace.
|
|
894
|
+
_logsi.LogObject(SILevel.Verbose, "%s - Cast group \"%s\" member Chromecast device status: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), zone_member_castDevice.status, colorValue=SIColors.Coral)
|
|
895
|
+
|
|
896
|
+
# if current app is APP_SPOTIFY, then stop the app before starting the media receiver.
|
|
897
|
+
if (zone_member_castDevice.status) and (zone_member_castDevice.status.app_id == APP_SPOTIFY):
|
|
898
|
+
_logsi.LogVerbose("%s - Issuing quit_app (APP_SPOTIFY) for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
|
|
899
|
+
zone_member_castDevice.quit_app(timeout=5.0)
|
|
900
|
+
elif (zone_member_castDevice.status) and (zone_member_castDevice.status.app_id == APP_SPOTIFY_CONNECT):
|
|
901
|
+
_logsi.LogVerbose("%s - Issuing quit_app (APP_SPOTIFY_CONNECT) for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
|
|
902
|
+
zone_member_castDevice.quit_app(timeout=5.0)
|
|
903
|
+
|
|
904
|
+
# start the media receiver app.
|
|
905
|
+
# this will stabilize routing for the group using the Default Media Receiver.
|
|
906
|
+
_logsi.LogVerbose("%s - Starting Chromecast default APP_MEDIA_RECEIVER for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
|
|
907
|
+
zone_member_castDevice.start_app(APP_MEDIA_RECEIVER, force_launch=True, timeout=10.0)
|
|
908
|
+
|
|
909
|
+
# start the connection worker thread, if needed.
|
|
910
|
+
# failure to do this will result in the following exception being thrown when
|
|
911
|
+
# the `launch_app()` method is called:
|
|
912
|
+
# - `pychromecast.error.NotConnected: Chromecast unknown:8009 is connecting...`
|
|
913
|
+
if (zone_member_castDevice.is_idle):
|
|
914
|
+
if (zone_member_castDevice.socket_client is not None) and (zone_member_castDevice.socket_client.first_connection):
|
|
915
|
+
_logsi.LogVerbose("%s - Starting Chromecast default APP_MEDIA_RECEIVER connection worker thread for group \"%s\" member device: %s" % (self.name, castInfo.friendly_name, trc_zone_member_title), colorValue=SIColors.Coral)
|
|
916
|
+
zone_member_castDevice.start()
|
|
917
|
+
zone_member_castDevice.wait(timeout=5.0)
|
|
918
|
+
|
|
919
|
+
# media receiver app needs time to start.
|
|
920
|
+
time.sleep(2.0)
|
|
921
|
+
|
|
922
|
+
except Exception as ex:
|
|
910
923
|
|
|
911
|
-
|
|
912
|
-
|
|
913
|
-
|
|
914
|
-
|
|
915
|
-
|
|
916
|
-
|
|
917
|
-
|
|
918
|
-
|
|
919
|
-
|
|
920
|
-
|
|
921
|
-
|
|
922
|
-
|
|
923
|
-
|
|
924
|
-
|
|
925
|
-
|
|
926
|
-
|
|
927
|
-
|
|
928
|
-
|
|
929
|
-
|
|
930
|
-
|
|
931
|
-
|
|
932
|
-
|
|
933
|
-
|
|
934
|
-
|
|
935
|
-
|
|
936
|
-
|
|
924
|
+
# trace.
|
|
925
|
+
_logsi.LogException("Chromecast Multizone group update_members exception: %s" % (str(ex)), ex, logToSystemLogger=False)
|
|
926
|
+
# ignore exception, as nothing can be done about it.
|
|
927
|
+
|
|
928
|
+
# get current multizone status for all groups.
|
|
929
|
+
castMultiZoneStatus:MultizoneStatus = get_multizone_status(castInfo.host, castInfo.services, self.ZeroconfInstance, 5)
|
|
930
|
+
_logsi.LogObject(SILevel.Verbose, "%s - Chromecast group multizone status for device: %s [ip=%s:%s]" % (self.name, scDevice.Title, castInfo.host, castInfo.port), castMultiZoneStatus, colorValue=SIColors.Coral)
|
|
931
|
+
|
|
932
|
+
# ensure group device is still on the network;
|
|
933
|
+
# if group device dropped off the network, then we can't query it!
|
|
934
|
+
if (castMultiZoneStatus is not None):
|
|
935
|
+
|
|
936
|
+
# find the group coordinator for the selected device.
|
|
937
|
+
zoneInfo:MultizoneInfo = None
|
|
938
|
+
for zoneInfo in castMultiZoneStatus.groups:
|
|
939
|
+
|
|
940
|
+
# is this our group?
|
|
941
|
+
if (str(zoneInfo.uuid) == scDevice.DiscoveryResult.Key):
|
|
942
|
+
|
|
943
|
+
# yes - get host info to use for the device.
|
|
944
|
+
# we will use the device discovery result HostIpAddress instead of the zoneInfo.host
|
|
945
|
+
# value here, as the zoneInfo MAY contain an IPV6 formatted address, which was causing
|
|
946
|
+
# issues if the device was originally activated using an IPV4 address!
|
|
947
|
+
groupHost = scDevice.DiscoveryResult.HostIpAddress
|
|
948
|
+
groupPort = scDevice.DiscoveryResult.HostIpPort
|
|
949
|
+
break
|
|
937
950
|
|
|
938
|
-
|
|
939
|
-
|
|
940
|
-
|
|
941
|
-
|
|
942
|
-
|
|
943
|
-
|
|
951
|
+
# connect to the device and build a Chromecast instance from group coordinator host info.
|
|
952
|
+
castDevice = get_chromecast_from_host(
|
|
953
|
+
host=(groupHost, groupPort, castInfo.uuid, castInfo.model_name, castInfo.friendly_name),
|
|
954
|
+
tries=2,
|
|
955
|
+
retry_wait=0.5,
|
|
956
|
+
timeout=10)
|
|
944
957
|
|
|
945
958
|
# trace.
|
|
946
959
|
_logsi.LogVerbose("%s - Waiting %d seconds max for Chromecast group multizone device to activate: %s [ip=%s:%s]" % (self.name, deviceWaitTimeoutSecs, scDevice.Title, groupHost, groupPort), colorValue=SIColors.Coral)
|
|
@@ -1,36 +1,36 @@
|
|
|
1
1
|
spotifywebapipython/__init__.py,sha256=ka7F2AsT-UU7KSYKBnfgl5Trojcep5aQspLutg8D-2k,1306
|
|
2
|
-
spotifywebapipython/const.py,sha256=
|
|
2
|
+
spotifywebapipython/const.py,sha256=awwGnBPDFSGllzyJBb4laq5lTNlvhYMR-RLzqNUgkJs,4100
|
|
3
3
|
spotifywebapipython/saappmessages.py,sha256=mVprjpd5CdD8kYeAkLzRvMvIQPmaYtH4UCP5my3QhSk,5065
|
|
4
4
|
spotifywebapipython/sautils.py,sha256=LZF3UvxaBK35WIg1hO37nbW8j1y-M-oOxRbi1dPR39w,8746
|
|
5
5
|
spotifywebapipython/spotifyapierror.py,sha256=23_CYlxWN0BceYYCLpBpunl55vEwPr_wFf34l74xzeA,1855
|
|
6
6
|
spotifywebapipython/spotifyapimessage.py,sha256=wCnW8jYMLS3x9kjyXPgXXZqaf1HeMTTXzU8u_Dm5pfA,8447
|
|
7
7
|
spotifywebapipython/spotifyauthtoken.py,sha256=iVg2Pa5mfMqYe4qgc5H8td6JzJlaDqk4vMEhH5LmtfI,9289
|
|
8
|
-
spotifywebapipython/spotifyclient.py,sha256=
|
|
8
|
+
spotifywebapipython/spotifyclient.py,sha256=hya2_fpOpP9Qyg6_wuWlUmlPwquTT_8-KcDF3Eiwx08,928655
|
|
9
9
|
spotifywebapipython/spotifydiscovery.py,sha256=cyysxl8PQj9yGHVbaqhSF3SStlrp-NvfGAudM-dDmg0,20290
|
|
10
10
|
spotifywebapipython/spotifymediatypes.py,sha256=hMjkxhbfTtks0_P8BKmY7qg3EmB2zhH3RT0DbEpb_2s,1628
|
|
11
11
|
spotifywebapipython/spotifytypeprefixes.py,sha256=3yfpxKF7jF694qBuo-PbKYvm70YwwdBoGj9enOpWsAg,1375
|
|
12
12
|
spotifywebapipython/spotifywebapiauthenticationerror.py,sha256=5A0MKvYo3Ypv0ZeSSfLHuFLwzoUUu044bBoUgMfNXNw,3940
|
|
13
13
|
spotifywebapipython/spotifywebapierror.py,sha256=ctYFvkBPlFFEoM_geP6hzwTyC2mPcrYR_zCCNvsmpwc,3870
|
|
14
14
|
spotifywebapipython/spotifywebplayertoken.py,sha256=axj1j1lM7COiiZfpElkJRdnk4AmE6bAQcjKshUIz1Nk,35813
|
|
15
|
-
spotifywebapipython/docs/__init__.html,sha256=
|
|
15
|
+
spotifywebapipython/docs/__init__.html,sha256=JtSr-guXMle9X_Yv7kIPic3UObDEZ0reL41CFY-uGFY,200309
|
|
16
16
|
spotifywebapipython/docs/codecopy.js,sha256=ryuoZwLIL03YitjjFzn49UO5ta7-OBos6LNA3qHhFzs,3120
|
|
17
|
-
spotifywebapipython/docs/index.html,sha256=
|
|
18
|
-
spotifywebapipython/docs/search.js,sha256=
|
|
17
|
+
spotifywebapipython/docs/index.html,sha256=xJf0VHpztJSkA6VsSVGzNaw-iv6GnrSBqxmM3uBchIQ,48779
|
|
18
|
+
spotifywebapipython/docs/search.js,sha256=RSwQD5rqeW2euLnQBBqZOvma_XUuDLr7rDlfpOyojak,9282696
|
|
19
19
|
spotifywebapipython/docs/spotifywebapipython.ico,sha256=YImj39fqqSPSuB2-sMDlUYDd6YwRfQeJRtq4FjwWglg,16410
|
|
20
20
|
spotifywebapipython/docs/spotifywebapipython_OLD.ico,sha256=YIv5LjcD4bTIJQSOr8jjwbWaeB3QkElRwkTOePiGbZo,14904
|
|
21
|
-
spotifywebapipython/docs/spotifywebapipython/const.html,sha256=
|
|
22
|
-
spotifywebapipython/docs/spotifywebapipython/saappmessages.html,sha256=
|
|
23
|
-
spotifywebapipython/docs/spotifywebapipython/sautils.html,sha256
|
|
24
|
-
spotifywebapipython/docs/spotifywebapipython/spotifyapierror.html,sha256=
|
|
25
|
-
spotifywebapipython/docs/spotifywebapipython/spotifyapimessage.html,sha256=
|
|
26
|
-
spotifywebapipython/docs/spotifywebapipython/spotifyauthtoken.html,sha256=
|
|
27
|
-
spotifywebapipython/docs/spotifywebapipython/spotifyclient.html,sha256=
|
|
28
|
-
spotifywebapipython/docs/spotifywebapipython/spotifydiscovery.html,sha256=
|
|
29
|
-
spotifywebapipython/docs/spotifywebapipython/spotifymediatypes.html,sha256=
|
|
30
|
-
spotifywebapipython/docs/spotifywebapipython/spotifytypeprefixes.html,sha256=
|
|
31
|
-
spotifywebapipython/docs/spotifywebapipython/spotifywebapiauthenticationerror.html,sha256=
|
|
32
|
-
spotifywebapipython/docs/spotifywebapipython/spotifywebapierror.html,sha256=
|
|
33
|
-
spotifywebapipython/docs/spotifywebapipython/spotifywebplayertoken.html,sha256=
|
|
21
|
+
spotifywebapipython/docs/spotifywebapipython/const.html,sha256=Tcjsi9LYXEZFbmWBtiJk4Egtc_lVqH5jiZAR1Zfa1h0,60537
|
|
22
|
+
spotifywebapipython/docs/spotifywebapipython/saappmessages.html,sha256=eUZomQzvDBFfzQu6BHHVU4SCFNqQCawM4l3JKMgvKSA,62358
|
|
23
|
+
spotifywebapipython/docs/spotifywebapipython/sautils.html,sha256=Vj48R6km9ByQBr1qDt7xMEksJd5q1yq9YBn7LGEsxOM,62031
|
|
24
|
+
spotifywebapipython/docs/spotifywebapipython/spotifyapierror.html,sha256=CdmqoIrUTTrEmn2xMQ6C4Oh8Tm-80yttRQGtiF8AgT8,48054
|
|
25
|
+
spotifywebapipython/docs/spotifywebapipython/spotifyapimessage.html,sha256=wIbRXwpQdYU2oIBRrXaoxUyxLz8sDAjd2knsLZ7b6MM,59210
|
|
26
|
+
spotifywebapipython/docs/spotifywebapipython/spotifyauthtoken.html,sha256=zW9L_cJxE39QeZZwJJIRWuCveFcySx7Hl_Eglc85mow,59256
|
|
27
|
+
spotifywebapipython/docs/spotifywebapipython/spotifyclient.html,sha256=Tx848XwTYWY9K2voFP9D1KOYZRU0j0jYQ2_pAzhvbm0,1677607
|
|
28
|
+
spotifywebapipython/docs/spotifywebapipython/spotifydiscovery.html,sha256=Ea2qpQXcoCxtM_NmB2c8msBEuVFCSXubSwgquIgDvSQ,57662
|
|
29
|
+
spotifywebapipython/docs/spotifywebapipython/spotifymediatypes.html,sha256=z3s07Z6db-lyaLNvFAcD6mOu-CGV5yPgF-Ed9JOZn9o,51532
|
|
30
|
+
spotifywebapipython/docs/spotifywebapipython/spotifytypeprefixes.html,sha256=Kvr6wXoKKlsGOy3ohIoGwFNzeKBfQrZTzjHzWTKyqhc,52401
|
|
31
|
+
spotifywebapipython/docs/spotifywebapipython/spotifywebapiauthenticationerror.html,sha256=ywrmX7lWwDOAavLQoszQX55VEr3qrZrlvXQ5JsTYMRA,52174
|
|
32
|
+
spotifywebapipython/docs/spotifywebapipython/spotifywebapierror.html,sha256=2T6uabOieMRSKs9Bws3cDj2mgK4VncUWgQO_rCR-69o,51484
|
|
33
|
+
spotifywebapipython/docs/spotifywebapipython/spotifywebplayertoken.html,sha256=Ww5M-8vude2OKReShl-_qdnFbxZWIxeSRcgoZBzPsaI,62204
|
|
34
34
|
spotifywebapipython/models/__init__.py,sha256=RwRQhUX-6EUs8XvStVFpR8EPwoqIAz9K6ref-28qHKI,4423
|
|
35
35
|
spotifywebapipython/models/album.py,sha256=U3Pdw0-EL33LdkeiN31fjZ23rlLk6DNGV8jRmZU7EyQ,5170
|
|
36
36
|
spotifywebapipython/models/albumpagesaved.py,sha256=SBYMhkh5ZsMrRAXl-cm9zsxMDh8gO190ENq6Py2TyGY,2417
|
|
@@ -110,7 +110,7 @@ spotifywebapipython/oauthcli/__init__.py,sha256=K37XTxYAKT0n8otCNzWbjgJ10fAPN4WL
|
|
|
110
110
|
spotifywebapipython/oauthcli/authclient.py,sha256=qGKa4FLBHHZQyP5ho1sIM_mNmyshQd720YwKcUFQJAw,56207
|
|
111
111
|
spotifywebapipython/spotifyconnect/__init__.py,sha256=9Xl5KiJFvWLbsdb4YQ0xmF67i36ybpXCCXrWeNsKEvc,1108
|
|
112
112
|
spotifywebapipython/spotifyconnect/spotifyconnectdeviceeventargs.py,sha256=35hKa0FAaPgy7W8D6MFXmga667pjwXITo8jSj1TDfE8,1988
|
|
113
|
-
spotifywebapipython/spotifyconnect/spotifyconnectdirectorytask.py,sha256=
|
|
113
|
+
spotifywebapipython/spotifyconnect/spotifyconnectdirectorytask.py,sha256=P_nm-1qRcbu_VMtLatS21WzQEZ4muq3BIo-623mYlE4,169114
|
|
114
114
|
spotifywebapipython/spotifyconnect/spotifyconnectzeroconfcastapptask.py,sha256=jArxsjAGntTcQD9L9yVuey1L8pw0KvshlNXIBA7PqiI,23367
|
|
115
115
|
spotifywebapipython/spotifyconnect/spotifyconnectzeroconfcastcontroller.py,sha256=e2wLmFq4393IdVa51w8X5UQl4KfnHRh34DMlxZfl9-g,34218
|
|
116
116
|
spotifywebapipython/spotifyconnect/spotifyconnectzeroconfcastlistener.py,sha256=e7vKob2xim8H3BkxbgPj-eymftKvWgT71tzpskd0sn0,16720
|
|
@@ -137,8 +137,8 @@ spotifywebapipython/zeroconfapi/zeroconfgetinfo.py,sha256=gTr3J3iVDR_ueP1tg-WHuC
|
|
|
137
137
|
spotifywebapipython/zeroconfapi/zeroconfgetinfoalias.py,sha256=FZJM23HIPJSfhXIC3-EuS1XhawheoG5maSp7__k4yBo,2932
|
|
138
138
|
spotifywebapipython/zeroconfapi/zeroconfgetinfodrmmediaformat.py,sha256=c5uk8ljsIuBK3w2jahHKQuoWvm245LOjUBitetXx5Mo,2347
|
|
139
139
|
spotifywebapipython/zeroconfapi/zeroconfresponse.py,sha256=mAPIDj5MG53x8peiScrp7OJblwy_o_Sto4wqE0rGujU,6445
|
|
140
|
-
spotifywebapipython-1.0.
|
|
141
|
-
spotifywebapipython-1.0.
|
|
142
|
-
spotifywebapipython-1.0.
|
|
143
|
-
spotifywebapipython-1.0.
|
|
144
|
-
spotifywebapipython-1.0.
|
|
140
|
+
spotifywebapipython-1.0.295.dist-info/LICENSE,sha256=KGcc9g0zwqNLcWnSn_ezv1UtKyhMENFhvtixpxUPNsE,1177
|
|
141
|
+
spotifywebapipython-1.0.295.dist-info/METADATA,sha256=QOA7tWLDzhM7r2og8dqoGT9aAPj8ll9gPKj1wD9TAxc,11644
|
|
142
|
+
spotifywebapipython-1.0.295.dist-info/WHEEL,sha256=yQN5g4mg4AybRjkgi-9yy4iQEFibGQmlz78Pik5Or-A,92
|
|
143
|
+
spotifywebapipython-1.0.295.dist-info/top_level.txt,sha256=jTBLFlijKTesYh2dteAz4vb17qjaqWKeDjpnnwTcrjs,20
|
|
144
|
+
spotifywebapipython-1.0.295.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
{spotifywebapipython-1.0.294.dist-info → spotifywebapipython-1.0.295.dist-info}/top_level.txt
RENAMED
|
File without changes
|