Source code for spotify.social

from __future__ import unicode_literals

import spotify
from spotify import ffi, lib, utils

__all__ = ["ScrobblingState", "SocialProvider"]


[docs]class Social(object): """Social sharing controller. You'll never need to create an instance of this class yourself. You'll find it ready to use as the :attr:`~Session.social` attribute on the :class:`Session` instance. """ def __init__(self, session): self._session = session @property def private_session(self): """Whether the session is private. Set to :class:`True` or :class:`False` to change. """ return bool(lib.sp_session_is_private_session(self._session._sp_session)) @private_session.setter def private_session(self, value): # XXX sp_session_set_private_session() segfaults unless we login and # call process_events() at least once before calling it. If we log out # again, calling the function still works without segfaults. This bug # has been reported to Spotify on IRC. if self._session.connection.state != spotify.ConnectionState.LOGGED_IN: raise RuntimeError( "private_session can only be set when the session is logged " "in. This is temporary workaround of a libspotify bug, " "causing the application to segfault otherwise." ) spotify.Error.maybe_raise( lib.sp_session_set_private_session(self._session._sp_session, bool(value)) ) def is_scrobbling(self, social_provider): """Get the :class:`ScrobblingState` for the given ``social_provider``.""" scrobbling_state = ffi.new("sp_scrobbling_state *") spotify.Error.maybe_raise( lib.sp_session_is_scrobbling( self._session._sp_session, social_provider, scrobbling_state ) ) return spotify.ScrobblingState(scrobbling_state[0]) def is_scrobbling_possible(self, social_provider): """Check if the scrobbling settings should be shown to the user.""" out = ffi.new("bool *") spotify.Error.maybe_raise( lib.sp_session_is_scrobbling_possible( self._session._sp_session, social_provider, out ) ) return bool(out[0]) def set_scrobbling(self, social_provider, scrobbling_state): """Set the ``scrobbling_state`` for the given ``social_provider``.""" spotify.Error.maybe_raise( lib.sp_session_set_scrobbling( self._session._sp_session, social_provider, scrobbling_state ) ) def set_social_credentials(self, social_provider, username, password): """Set the user's credentials with a social provider. Currently this is only relevant for Last.fm. Call :meth:`set_scrobbling` to force an authentication attempt with the provider. If authentication fails a :attr:`~SessionEvent.SCROBBLE_ERROR` event will be emitted on the :class:`Session` object. """ spotify.Error.maybe_raise( lib.sp_session_set_social_credentials( self._session._sp_session, social_provider, utils.to_char(username), utils.to_char(password), ) )
[docs]@utils.make_enum("SP_SCROBBLING_STATE_") class ScrobblingState(utils.IntEnum): pass
[docs]@utils.make_enum("SP_SOCIAL_PROVIDER_") class SocialProvider(utils.IntEnum): pass