lib/spotify.rb in spotify-10.1.0 vs lib/spotify.rb in spotify-10.1.1
- old
+ new
@@ -10,10 +10,22 @@
# @see http://developer.spotify.com/en/libspotify/docs/
module Spotify
extend FFI::Library
ffi_lib ['libspotify', '/Library/Frameworks/libspotify.framework/libspotify']
+ # Override FFI::Library#attach_function to always add the `:blocking` option.
+ #
+ # The reason for this is that which libspotify functions may call callbacks
+ # is unspecified. And really… I don’t know of any drawbacks with this method.
+ def self.attach_function(*arguments, &block)
+ options = arguments.pop if arguments.last.is_a?(Hash)
+ options ||= {}
+ options = { blocking: true }.merge(options)
+ arguments << options
+ super(*arguments, &block)
+ end
+
# libspotify API version
# @return [Fixnum]
API_VERSION = VERSION.split('.').first.to_i
# Aliases to Spotify types
@@ -208,25 +220,25 @@
enum :connection_rules, [:network , 0x1,
:network_if_roaming , 0x2,
:allow_sync_over_mobile, 0x4,
:allow_sync_over_wifi , 0x8]
- attach_function :session_create, :sp_session_create, [ SessionConfig, :buffer_out ], :error, :blocking => true
+ attach_function :session_create, :sp_session_create, [ SessionConfig, :buffer_out ], :error
attach_function :session_release, :sp_session_release, [ :session ], :void
- attach_function :session_process_events, :sp_session_process_events, [ :session, :buffer_out ], :void, :blocking => true
- attach_function :session_login, :sp_session_login, [ :session, :string, :string, :bool ], :void, :blocking => true
+ attach_function :session_process_events, :sp_session_process_events, [ :session, :buffer_out ], :void
+ attach_function :session_login, :sp_session_login, [ :session, :string, :string, :bool ], :void
attach_function :session_relogin, :sp_session_relogin, [ :session ], :error
attach_function :session_forget_me, :sp_session_forget_me, [ :session ], :void
attach_function :session_remembered_user, :sp_session_remembered_user, [ :session, :buffer_out, :size_t ], :int
attach_function :session_user, :sp_session_user, [ :session ], :user
attach_function :session_logout, :sp_session_logout, [ :session ], :void
attach_function :session_connectionstate, :sp_session_connectionstate, [ :session ], :connectionstate
attach_function :session_userdata, :sp_session_userdata, [ :session ], :userdata
attach_function :session_set_cache_size, :sp_session_set_cache_size, [ :session, :size_t ], :void
- attach_function :session_player_load, :sp_session_player_load, [ :session, :track ], :error, :blocking => true
+ attach_function :session_player_load, :sp_session_player_load, [ :session, :track ], :error
attach_function :session_player_seek, :sp_session_player_seek, [ :session, :int ], :void
attach_function :session_player_play, :sp_session_player_play, [ :session, :bool ], :void
attach_function :session_player_unload, :sp_session_player_unload, [ :session ], :void
attach_function :session_player_prefetch, :sp_session_player_prefetch, [ :session, :track ], :error
attach_function :session_playlistcontainer, :sp_session_playlistcontainer, [ :session ], :playlistcontainer
@@ -257,10 +269,10 @@
#
enum :linktype, [:invalid, :track, :album, :artist, :search,
:playlist, :profile, :starred, :localtrack, :image]
- attach_function :link_create_from_string, :sp_link_create_from_string, [ :string ], :link, :blocking => true
+ attach_function :link_create_from_string, :sp_link_create_from_string, [ :string ], :link
attach_function :link_create_from_track, :sp_link_create_from_track, [ :track, :int ], :link
attach_function :link_create_from_album, :sp_link_create_from_album, [ :album ], :link
attach_function :link_create_from_artist, :sp_link_create_from_artist, [ :artist ], :link
attach_function :link_create_from_search, :sp_link_create_from_search, [ :search ], :link
attach_function :link_create_from_playlist, :sp_link_create_from_playlist, [ :playlist ], :link