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) ) )
[docs] 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])
[docs] 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])
[docs] 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 ) )
[docs] 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