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